FFmpeg
faxcompr.c
Go to the documentation of this file.
1 /*
2  * CCITT Fax Group 3 and 4 decompression
3  * Copyright (c) 2008 Konstantin Shishkov
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 /**
23  * @file
24  * CCITT Fax Group 3 and 4 decompression
25  * @author Konstantin Shishkov
26  */
27 #include "libavutil/mem.h"
28 #include "libavutil/thread.h"
29 #include "avcodec.h"
30 #include "get_bits.h"
31 #include "put_bits.h"
32 #include "faxcompr.h"
33 
34 #define CCITT_SYMS 104
35 
36 static const uint16_t ccitt_syms[CCITT_SYMS] = {
37  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
38  13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
39  26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
40  39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
41  52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
42  128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896,
43  960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728,
44  1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560
45 };
46 
47 static const uint8_t ccitt_codes_bits[2][CCITT_SYMS] =
48 {
49  {
50  0x35, 0x07, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, 0x13, 0x14, 0x07, 0x08, 0x08,
51  0x03, 0x34, 0x35, 0x2A, 0x2B, 0x27, 0x0C, 0x08, 0x17, 0x03, 0x04, 0x28, 0x2B,
52  0x13, 0x24, 0x18, 0x02, 0x03, 0x1A, 0x1B, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
53  0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x04, 0x05, 0x0A, 0x0B, 0x52, 0x53, 0x54,
54  0x55, 0x24, 0x25, 0x58, 0x59, 0x5A, 0x5B, 0x4A, 0x4B, 0x32, 0x33, 0x34, 0x1B,
55  0x12, 0x17, 0x37, 0x36, 0x37, 0x64, 0x65, 0x68, 0x67, 0xCC, 0xCD, 0xD2, 0xD3,
56  0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0x98, 0x99, 0x9A, 0x18, 0x9B,
57  0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
58  },
59  {
60  0x37, 0x02, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x05, 0x04, 0x04, 0x05, 0x07,
61  0x04, 0x07, 0x18, 0x17, 0x18, 0x08, 0x67, 0x68, 0x6C, 0x37, 0x28, 0x17, 0x18,
62  0xCA, 0xCB, 0xCC, 0xCD, 0x68, 0x69, 0x6A, 0x6B, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
63  0xD7, 0x6C, 0x6D, 0xDA, 0xDB, 0x54, 0x55, 0x56, 0x57, 0x64, 0x65, 0x52, 0x53,
64  0x24, 0x37, 0x38, 0x27, 0x28, 0x58, 0x59, 0x2B, 0x2C, 0x5A, 0x66, 0x67, 0x0F,
65  0xC8, 0xC9, 0x5B, 0x33, 0x34, 0x35, 0x6C, 0x6D, 0x4A, 0x4B, 0x4C, 0x4D, 0x72,
66  0x73, 0x74, 0x75, 0x76, 0x77, 0x52, 0x53, 0x54, 0x55, 0x5A, 0x5B, 0x64, 0x65,
67  0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
68  }
69 };
70 
71 static const uint8_t ccitt_codes_lens[2][CCITT_SYMS] =
72 {
73  {
74  8, 6, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7,
75  7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
76  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
77  8, 8, 8, 8, 5, 5, 6, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
78  9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 11, 11, 11, 12, 12, 12, 12, 12, 12,
79  12, 12, 12, 12
80  },
81  {
82  10, 3, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 10, 10, 11,
83  11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
84  12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
85  12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
86  13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 12, 12, 12, 12, 12, 12,
87  12, 12, 12, 12
88  }
89 };
90 
91 static const uint8_t ccitt_group3_2d_bits[11] = {
92  1, 1, 2, 2, 2, 1, 3, 3, 3, 1, 1
93 };
94 
95 static const uint8_t ccitt_group3_2d_lens[11] = {
96  4, 3, 7, 6, 3, 1, 3, 6, 7, 7, 9
97 };
98 
99 // Also contains the other VLC tables pointed to by ccitt_vlc
100 static VLCElem ccitt_group3_2d_vlc[512 + 528 + 648];
101 static const VLCElem *ccitt_vlc[2];
102 
103 static av_cold void ccitt_unpack_init(void)
104 {
106  int i;
107 
108  ff_vlc_init_tables(&state, 9, 11,
109  ccitt_group3_2d_lens, 1, 1,
110  ccitt_group3_2d_bits, 1, 1, 0);
111  for (i = 0; i < 2; i++) {
113  ccitt_codes_lens[i], 1, 1,
114  ccitt_codes_bits[i], 1, 1,
115  ccitt_syms, 2, 2, 0);
116  }
117 }
118 
120 {
121  static AVOnce init_static_once = AV_ONCE_INIT;
122  ff_thread_once(&init_static_once, ccitt_unpack_init);
123 }
124 
126  unsigned int *pix_left, int **runs,
127  const int *runend, int *mode)
128 {
129  int eob = 0;
130  int newmode;
131  int saved_run = 0;
132 
133  do {
134  int cwi, k;
135  int cw = 0;
136  int codes[2];
137  do {
138  cwi = show_bits(gb, 11);
139  if (!cwi) {
140  av_log(avctx, AV_LOG_ERROR, "Invalid uncompressed codeword\n");
141  return AVERROR_INVALIDDATA;
142  }
143  cwi = 10 - av_log2(cwi);
144  if (get_bits_left(gb) < cwi + 1)
145  return AVERROR_INVALIDDATA;
146  skip_bits(gb, cwi + 1);
147  if (cwi > 5) {
148  newmode = get_bits1(gb);
149  eob = 1;
150  cwi -= 6;
151  }
152  cw += cwi;
153  } while(cwi == 5);
154 
155  codes[0] = cw;
156  codes[1] = !eob;
157 
158  for (k = 0; k < 2; k++) {
159  if (codes[k]) {
160  if (*mode == !k) {
161  *(*runs)++ = saved_run;
162  if (*runs >= runend) {
163  av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
164  return AVERROR_INVALIDDATA;
165  }
166  if (*pix_left <= saved_run) {
167  av_log(avctx, AV_LOG_ERROR, "uncompressed run went out of bounds\n");
168  return AVERROR_INVALIDDATA;
169  }
170  *pix_left -= saved_run;
171  saved_run = 0;
172  *mode = !*mode;
173  }
174  saved_run += codes[k];
175  }
176  }
177  } while (!eob);
178  *(*runs)++ = saved_run;
179  if (*runs >= runend) {
180  av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
181  return AVERROR_INVALIDDATA;
182  }
183  if (*pix_left <= saved_run) {
184  if (*pix_left == saved_run)
185  return 1;
186  av_log(avctx, AV_LOG_ERROR, "uncompressed run went out of boundsE\n");
187  return AVERROR_INVALIDDATA;
188  }
189  *pix_left -= saved_run;
190  saved_run = 0;
191  *mode = !*mode;
192  if (newmode != *mode) { //FIXME CHECK
193  *(*runs)++ = 0;
194  if (*runs >= runend) {
195  av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
196  return AVERROR_INVALIDDATA;
197  }
198  *mode = newmode;
199  }
200  return 0;
201 }
202 
204  unsigned int pix_left, int *runs,
205  const int *runend)
206 {
207  int mode = 0;
208  unsigned int run = 0;
209  unsigned int t;
210  for (;;) {
211  if (get_bits_left(gb) <= 0)
212  return AVERROR_INVALIDDATA;
213  t = get_vlc2(gb, ccitt_vlc[mode], 9, 2);
214  run += t;
215  if (t < 64) {
216  *runs++ = run;
217  if (runs >= runend) {
218  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
219  return AVERROR_INVALIDDATA;
220  }
221  if (pix_left <= run) {
222  if (pix_left == run)
223  break;
224  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
225  return AVERROR_INVALIDDATA;
226  }
227  pix_left -= run;
228  run = 0;
229  mode = !mode;
230  } else if ((int)t == -1) {
231  if (get_bits_left(gb) > 12 && show_bits(gb, 12) == 15) {
232  int ret;
233  skip_bits(gb, 12);
234  ret = decode_uncompressed(avctx, gb, &pix_left, &runs, runend, &mode);
235  if (ret < 0) {
236  return ret;
237  } else if (ret)
238  break;
239  } else {
240  av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
241  return AVERROR_INVALIDDATA;
242  }
243  }
244  }
245  *runs++ = 0;
246  return 0;
247 }
248 
250  unsigned int width, int *runs,
251  const int *runend, const int *ref)
252 {
253  int mode = 0, saved_run = 0, t;
254  int run_off = *ref++;
255  unsigned int offs = 0, run = 0;
256 
257  while (offs < width) {
258  int cmode;
259  if (get_bits_left(gb) <= 0)
260  return AVERROR_INVALIDDATA;
261  cmode = get_vlc2(gb, ccitt_group3_2d_vlc, 9, 1);
262  if (cmode == -1) {
263  av_log(avctx, AV_LOG_ERROR, "Incorrect mode VLC\n");
264  return AVERROR_INVALIDDATA;
265  }
266  if (!cmode) { //pass mode
267  if (run_off < width)
268  run_off += *ref++;
269  run = run_off - offs;
270  offs = run_off;
271  if (run_off < width)
272  run_off += *ref++;
273  if (offs > width) {
274  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
275  return AVERROR_INVALIDDATA;
276  }
277  saved_run += run;
278  } else if (cmode == 1) { //horizontal mode
279  int k;
280  for (k = 0; k < 2; k++) {
281  run = 0;
282  for (;;) {
283  if (get_bits_left(gb) <= 0)
284  return AVERROR_INVALIDDATA;
285  t = get_vlc2(gb, ccitt_vlc[mode], 9, 2);
286  if (t == -1) {
287  av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
288  return AVERROR_INVALIDDATA;
289  }
290  run += t;
291  if (t < 64)
292  break;
293  }
294  *runs++ = run + saved_run;
295  if (runs >= runend) {
296  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
297  return AVERROR_INVALIDDATA;
298  }
299  saved_run = 0;
300  offs += run;
301  if (offs > width || run > width) {
302  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
303  return AVERROR_INVALIDDATA;
304  }
305  mode = !mode;
306  }
307  } else if (cmode == 9 || cmode == 10) {
308  int xxx;
309  if (get_bits_left(gb) < 3)
310  return AVERROR_INVALIDDATA;
311  xxx = get_bits(gb, 3);
312  if (cmode == 9 && xxx == 7) {
313  int ret;
314  int pix_left = width - offs;
315 
316  if (saved_run) {
317  av_log(avctx, AV_LOG_ERROR, "saved run %d on entering uncompressed mode\n", saved_run);
318  return AVERROR_INVALIDDATA;
319  }
320  ret = decode_uncompressed(avctx, gb, &pix_left, &runs, runend, &mode);
321  offs = width - pix_left;
322  if (ret < 0) {
323  return ret;
324  } else if (ret)
325  break;
326  } else {
327  avpriv_report_missing_feature(avctx, "Special mode %d xxx=%d support", cmode, xxx);
328  return AVERROR_PATCHWELCOME;
329  }
330  } else { //vertical mode
331  run = run_off - offs + (cmode - 5);
332  run_off -= *--ref;
333  offs += run;
334  if (offs > width || run > width) {
335  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
336  return AVERROR_INVALIDDATA;
337  }
338  *runs++ = run + saved_run;
339  if (runs >= runend) {
340  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
341  return AVERROR_INVALIDDATA;
342  }
343  saved_run = 0;
344  mode = !mode;
345  }
346  //sync line pointers
347  while (offs < width && run_off <= offs) {
348  run_off += *ref++;
349  run_off += *ref++;
350  }
351  }
352  *runs++ = saved_run;
353  if (saved_run) {
354  if (runs >= runend) {
355  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
356  return -1;
357  }
358  *runs++ = 0;
359  }
360  return 0;
361 }
362 
363 static void put_line(uint8_t *dst, int size, int width, const int *runs)
364 {
365  PutBitContext pb;
366  int run, mode = ~0, pix_left = width, run_idx = 0;
367 
368  init_put_bits(&pb, dst, size);
369  while (pix_left > 0) {
370  run = runs[run_idx++];
371  mode = ~mode;
372  pix_left -= run;
373  for (; run > 16; run -= 16)
374  put_sbits(&pb, 16, mode);
375  if (run)
376  put_sbits(&pb, run, mode);
377  }
378  flush_put_bits(&pb);
379 }
380 
381 static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
382 {
383  unsigned int state = -1;
384  srcsize -= get_bits_count(gb);
385  while (srcsize-- > 0) {
386  state += state + get_bits1(gb);
387  if ((state & 0xFFF) == 1)
388  return 0;
389  }
390  return -1;
391 }
392 
393 int ff_ccitt_unpack(AVCodecContext *avctx, const uint8_t *src, int srcsize,
394  uint8_t *dst, int height, int stride,
395  enum TiffCompr compr, int opts)
396 {
397  int j;
398  GetBitContext gb;
399  int *runs, *ref = NULL, *runend;
400  int ret;
401  int runsize = avctx->width + 2;
402  int has_eol;
403 
404  runs = av_malloc_array(runsize, sizeof(runs[0]));
405  ref = av_malloc_array(runsize, sizeof(ref[0]));
406  if (!runs || !ref) {
407  ret = AVERROR(ENOMEM);
408  goto fail;
409  }
410  ref[0] = avctx->width;
411  ref[1] = 0;
412  ref[2] = 0;
413  if ((ret = init_get_bits8(&gb, src, srcsize)) < 0)
414  goto fail;
415  has_eol = show_bits(&gb, 12) == 1 || show_bits(&gb, 16) == 1;
416 
417  for (j = 0; j < height; j++) {
418  runend = runs + runsize;
419  if (compr == TIFF_G4) {
420  ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend,
421  ref);
422  if (ret < 0)
423  goto fail;
424  } else {
425  int g3d1 = (compr == TIFF_G3) && !(opts & 1);
426  if (compr != TIFF_CCITT_RLE &&
427  has_eol &&
428  find_group3_syncmarker(&gb, srcsize * 8) < 0)
429  break;
430  if (compr == TIFF_CCITT_RLE || g3d1 || get_bits1(&gb))
431  ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs,
432  runend);
433  else
434  ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs,
435  runend, ref);
436  if (compr == TIFF_CCITT_RLE)
437  align_get_bits(&gb);
438  }
439  if (avctx->err_recognition & AV_EF_EXPLODE && ret < 0)
440  goto fail;
441 
442  if (ret < 0) {
443  put_line(dst, stride, avctx->width, ref);
444  } else {
445  put_line(dst, stride, avctx->width, runs);
446  FFSWAP(int *, runs, ref);
447  }
448  dst += stride;
449  }
450  ret = 0;
451 fail:
452  av_free(runs);
453  av_free(ref);
454  return ret;
455 }
ccitt_group3_2d_bits
static const uint8_t ccitt_group3_2d_bits[11]
Definition: faxcompr.c:91
ccitt_codes_lens
static const uint8_t ccitt_codes_lens[2][CCITT_SYMS]
Definition: faxcompr.c:71
AV_EF_EXPLODE
#define AV_EF_EXPLODE
abort decoding on minor error detection
Definition: defs.h:51
get_bits_left
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:695
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
thread.h
AVCodecContext::err_recognition
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
Definition: avcodec.h:1420
put_sbits
static void put_sbits(PutBitContext *pb, int n, int32_t value)
Definition: put_bits.h:281
init_put_bits
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:62
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:266
TIFF_CCITT_RLE
@ TIFF_CCITT_RLE
Definition: tiff.h:127
find_group3_syncmarker
static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
Definition: faxcompr.c:381
ccitt_codes_bits
static const uint8_t ccitt_codes_bits[2][CCITT_SYMS]
Definition: faxcompr.c:47
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:381
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:335
ff_ccitt_unpack
int ff_ccitt_unpack(AVCodecContext *avctx, const uint8_t *src, int srcsize, uint8_t *dst, int height, int stride, enum TiffCompr compr, int opts)
unpack data compressed with CCITT Group 3 1/2-D or Group 4 method
Definition: faxcompr.c:393
fail
#define fail()
Definition: checkasm.h:179
GetBitContext
Definition: get_bits.h:108
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:205
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
av_cold
#define av_cold
Definition: attributes.h:90
init_get_bits8
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition: get_bits.h:545
VLCInitState
For static VLCs, the number of bits can often be hardcoded at each get_vlc2() callsite.
Definition: vlc.h:212
width
#define width
TIFF_G4
@ TIFF_G4
Definition: tiff.h:129
get_bits.h
PutBitContext
Definition: put_bits.h:50
ff_ccitt_unpack_init
av_cold void ff_ccitt_unpack_init(void)
initialize unpacker code
Definition: faxcompr.c:119
opts
AVDictionary * opts
Definition: movenc.c:51
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:203
NULL
#define NULL
Definition: coverity.c:32
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
run
uint8_t run
Definition: svq3.c:204
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:388
get_vlc2
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:652
TIFF_G3
@ TIFF_G3
Definition: tiff.h:128
AVOnce
#define AVOnce
Definition: thread.h:202
ccitt_syms
static const uint16_t ccitt_syms[CCITT_SYMS]
Definition: faxcompr.c:36
ccitt_group3_2d_lens
static const uint8_t ccitt_group3_2d_lens[11]
Definition: faxcompr.c:95
size
int size
Definition: twinvq_data.h:10344
VLCElem
Definition: vlc.h:32
avpriv_report_missing_feature
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
height
#define height
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
show_bits
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
Definition: get_bits.h:371
ccitt_vlc
static const VLCElem * ccitt_vlc[2]
Definition: faxcompr.c:101
av_malloc_array
#define av_malloc_array(a, b)
Definition: tableprint_vlc.h:31
ccitt_unpack_init
static av_cold void ccitt_unpack_init(void)
Definition: faxcompr.c:103
decode_uncompressed
static int decode_uncompressed(AVCodecContext *avctx, GetBitContext *gb, unsigned int *pix_left, int **runs, const int *runend, int *mode)
Definition: faxcompr.c:125
avcodec.h
stride
#define stride
Definition: h264pred_template.c:537
ret
ret
Definition: filter_design.txt:187
FFSWAP
#define FFSWAP(type, a, b)
Definition: macros.h:52
align_get_bits
static const uint8_t * align_get_bits(GetBitContext *s)
Definition: get_bits.h:561
state
static struct @399 state
AVCodecContext
main external API structure.
Definition: avcodec.h:445
CCITT_SYMS
#define CCITT_SYMS
Definition: faxcompr.c:34
mode
mode
Definition: ebur128.h:83
ref
static int ref[MAX_W *MAX_W]
Definition: jpeg2000dwt.c:112
ff_vlc_init_tables_sparse
const av_cold VLCElem * ff_vlc_init_tables_sparse(VLCInitState *state, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
Definition: vlc.c:400
decode_group3_1d_line
static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb, unsigned int pix_left, int *runs, const int *runend)
Definition: faxcompr.c:203
faxcompr.h
ff_vlc_init_tables
static const VLCElem * ff_vlc_init_tables(VLCInitState *state, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, int flags)
Definition: vlc.h:246
mem.h
flush_put_bits
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:143
av_free
#define av_free(p)
Definition: tableprint_vlc.h:33
VLC_INIT_STATE
#define VLC_INIT_STATE(_table)
Definition: vlc.h:217
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:618
ccitt_group3_2d_vlc
static VLCElem ccitt_group3_2d_vlc[512+528+648]
Definition: faxcompr.c:100
TiffCompr
TiffCompr
list of TIFF, TIFF/EP and DNG compression types
Definition: tiff.h:125
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
put_bits.h
decode_group3_2d_line
static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb, unsigned int width, int *runs, const int *runend, const int *ref)
Definition: faxcompr.c:249
av_log2
int av_log2(unsigned v)
Definition: intmath.c:26
put_line
static void put_line(uint8_t *dst, int size, int width, const int *runs)
Definition: faxcompr.c:363