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/thread.h"
28 #include "avcodec.h"
29 #include "get_bits.h"
30 #include "put_bits.h"
31 #include "faxcompr.h"
32 
33 #define CCITT_SYMS 104
34 
35 static const uint16_t ccitt_syms[CCITT_SYMS] = {
36  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
37  13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
38  26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39  39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
40  52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
41  128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896,
42  960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728,
43  1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560
44 };
45 
46 static const uint8_t ccitt_codes_bits[2][CCITT_SYMS] =
47 {
48  {
49  0x35, 0x07, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, 0x13, 0x14, 0x07, 0x08, 0x08,
50  0x03, 0x34, 0x35, 0x2A, 0x2B, 0x27, 0x0C, 0x08, 0x17, 0x03, 0x04, 0x28, 0x2B,
51  0x13, 0x24, 0x18, 0x02, 0x03, 0x1A, 0x1B, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
52  0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x04, 0x05, 0x0A, 0x0B, 0x52, 0x53, 0x54,
53  0x55, 0x24, 0x25, 0x58, 0x59, 0x5A, 0x5B, 0x4A, 0x4B, 0x32, 0x33, 0x34, 0x1B,
54  0x12, 0x17, 0x37, 0x36, 0x37, 0x64, 0x65, 0x68, 0x67, 0xCC, 0xCD, 0xD2, 0xD3,
55  0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0x98, 0x99, 0x9A, 0x18, 0x9B,
56  0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
57  },
58  {
59  0x37, 0x02, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x05, 0x04, 0x04, 0x05, 0x07,
60  0x04, 0x07, 0x18, 0x17, 0x18, 0x08, 0x67, 0x68, 0x6C, 0x37, 0x28, 0x17, 0x18,
61  0xCA, 0xCB, 0xCC, 0xCD, 0x68, 0x69, 0x6A, 0x6B, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
62  0xD7, 0x6C, 0x6D, 0xDA, 0xDB, 0x54, 0x55, 0x56, 0x57, 0x64, 0x65, 0x52, 0x53,
63  0x24, 0x37, 0x38, 0x27, 0x28, 0x58, 0x59, 0x2B, 0x2C, 0x5A, 0x66, 0x67, 0x0F,
64  0xC8, 0xC9, 0x5B, 0x33, 0x34, 0x35, 0x6C, 0x6D, 0x4A, 0x4B, 0x4C, 0x4D, 0x72,
65  0x73, 0x74, 0x75, 0x76, 0x77, 0x52, 0x53, 0x54, 0x55, 0x5A, 0x5B, 0x64, 0x65,
66  0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
67  }
68 };
69 
70 static const uint8_t ccitt_codes_lens[2][CCITT_SYMS] =
71 {
72  {
73  8, 6, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7,
74  7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
75  8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
76  8, 8, 8, 8, 5, 5, 6, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
77  9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 11, 11, 11, 12, 12, 12, 12, 12, 12,
78  12, 12, 12, 12
79  },
80  {
81  10, 3, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 10, 10, 11,
82  11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
83  12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
84  12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
85  13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 12, 12, 12, 12, 12, 12,
86  12, 12, 12, 12
87  }
88 };
89 
90 static const uint8_t ccitt_group3_2d_bits[11] = {
91  1, 1, 2, 2, 2, 1, 3, 3, 3, 1, 1
92 };
93 
94 static const uint8_t ccitt_group3_2d_lens[11] = {
95  4, 3, 7, 6, 3, 1, 3, 6, 7, 7, 9
96 };
97 
98 // Also contains the other VLC tables pointed to by ccitt_vlc
99 static VLCElem ccitt_group3_2d_vlc[512 + 528 + 648];
100 static const VLCElem *ccitt_vlc[2];
101 
102 static av_cold void ccitt_unpack_init(void)
103 {
105  int i;
106 
107  ff_vlc_init_tables(&state, 9, 11,
108  ccitt_group3_2d_lens, 1, 1,
109  ccitt_group3_2d_bits, 1, 1, 0);
110  for (i = 0; i < 2; i++) {
112  ccitt_codes_lens[i], 1, 1,
113  ccitt_codes_bits[i], 1, 1,
114  ccitt_syms, 2, 2, 0);
115  }
116 }
117 
119 {
120  static AVOnce init_static_once = AV_ONCE_INIT;
121  ff_thread_once(&init_static_once, ccitt_unpack_init);
122 }
123 
125  unsigned int *pix_left, int **runs,
126  const int *runend, int *mode)
127 {
128  int eob = 0;
129  int newmode;
130  int saved_run = 0;
131 
132  do {
133  int cwi, k;
134  int cw = 0;
135  int codes[2];
136  do {
137  cwi = show_bits(gb, 11);
138  if (!cwi) {
139  av_log(avctx, AV_LOG_ERROR, "Invalid uncompressed codeword\n");
140  return AVERROR_INVALIDDATA;
141  }
142  cwi = 10 - av_log2(cwi);
143  if (get_bits_left(gb) < cwi + 1)
144  return AVERROR_INVALIDDATA;
145  skip_bits(gb, cwi + 1);
146  if (cwi > 5) {
147  newmode = get_bits1(gb);
148  eob = 1;
149  cwi -= 6;
150  }
151  cw += cwi;
152  } while(cwi == 5);
153 
154  codes[0] = cw;
155  codes[1] = !eob;
156 
157  for (k = 0; k < 2; k++) {
158  if (codes[k]) {
159  if (*mode == !k) {
160  *(*runs)++ = saved_run;
161  if (*runs >= runend) {
162  av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
163  return AVERROR_INVALIDDATA;
164  }
165  if (*pix_left <= saved_run) {
166  av_log(avctx, AV_LOG_ERROR, "uncompressed run went out of bounds\n");
167  return AVERROR_INVALIDDATA;
168  }
169  *pix_left -= saved_run;
170  saved_run = 0;
171  *mode = !*mode;
172  }
173  saved_run += codes[k];
174  }
175  }
176  } while (!eob);
177  *(*runs)++ = saved_run;
178  if (*runs >= runend) {
179  av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
180  return AVERROR_INVALIDDATA;
181  }
182  if (*pix_left <= saved_run) {
183  if (*pix_left == saved_run)
184  return 1;
185  av_log(avctx, AV_LOG_ERROR, "uncompressed run went out of boundsE\n");
186  return AVERROR_INVALIDDATA;
187  }
188  *pix_left -= saved_run;
189  saved_run = 0;
190  *mode = !*mode;
191  if (newmode != *mode) { //FIXME CHECK
192  *(*runs)++ = 0;
193  if (*runs >= runend) {
194  av_log(avctx, AV_LOG_ERROR, "uncompressed run overrun\n");
195  return AVERROR_INVALIDDATA;
196  }
197  *mode = newmode;
198  }
199  return 0;
200 }
201 
203  unsigned int pix_left, int *runs,
204  const int *runend)
205 {
206  int mode = 0;
207  unsigned int run = 0;
208  unsigned int t;
209  for (;;) {
210  if (get_bits_left(gb) <= 0)
211  return AVERROR_INVALIDDATA;
212  t = get_vlc2(gb, ccitt_vlc[mode], 9, 2);
213  run += t;
214  if (t < 64) {
215  *runs++ = run;
216  if (runs >= runend) {
217  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
218  return AVERROR_INVALIDDATA;
219  }
220  if (pix_left <= run) {
221  if (pix_left == run)
222  break;
223  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
224  return AVERROR_INVALIDDATA;
225  }
226  pix_left -= run;
227  run = 0;
228  mode = !mode;
229  } else if ((int)t == -1) {
230  if (get_bits_left(gb) > 12 && show_bits(gb, 12) == 15) {
231  int ret;
232  skip_bits(gb, 12);
233  ret = decode_uncompressed(avctx, gb, &pix_left, &runs, runend, &mode);
234  if (ret < 0) {
235  return ret;
236  } else if (ret)
237  break;
238  } else {
239  av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
240  return AVERROR_INVALIDDATA;
241  }
242  }
243  }
244  *runs++ = 0;
245  return 0;
246 }
247 
249  unsigned int width, int *runs,
250  const int *runend, const int *ref)
251 {
252  int mode = 0, saved_run = 0, t;
253  int run_off = *ref++;
254  unsigned int offs = 0, run = 0;
255 
256  while (offs < width) {
257  int cmode;
258  if (get_bits_left(gb) <= 0)
259  return AVERROR_INVALIDDATA;
260  cmode = get_vlc2(gb, ccitt_group3_2d_vlc, 9, 1);
261  if (cmode == -1) {
262  av_log(avctx, AV_LOG_ERROR, "Incorrect mode VLC\n");
263  return AVERROR_INVALIDDATA;
264  }
265  if (!cmode) { //pass mode
266  if (run_off < width)
267  run_off += *ref++;
268  run = run_off - offs;
269  offs = run_off;
270  if (run_off < width)
271  run_off += *ref++;
272  if (offs > width) {
273  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
274  return AVERROR_INVALIDDATA;
275  }
276  saved_run += run;
277  } else if (cmode == 1) { //horizontal mode
278  int k;
279  for (k = 0; k < 2; k++) {
280  run = 0;
281  for (;;) {
282  if (get_bits_left(gb) <= 0)
283  return AVERROR_INVALIDDATA;
284  t = get_vlc2(gb, ccitt_vlc[mode], 9, 2);
285  if (t == -1) {
286  av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
287  return AVERROR_INVALIDDATA;
288  }
289  run += t;
290  if (t < 64)
291  break;
292  }
293  *runs++ = run + saved_run;
294  if (runs >= runend) {
295  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
296  return AVERROR_INVALIDDATA;
297  }
298  saved_run = 0;
299  offs += run;
300  if (offs > width || run > width) {
301  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
302  return AVERROR_INVALIDDATA;
303  }
304  mode = !mode;
305  }
306  } else if (cmode == 9 || cmode == 10) {
307  int xxx;
308  if (get_bits_left(gb) < 3)
309  return AVERROR_INVALIDDATA;
310  xxx = get_bits(gb, 3);
311  if (cmode == 9 && xxx == 7) {
312  int ret;
313  int pix_left = width - offs;
314 
315  if (saved_run) {
316  av_log(avctx, AV_LOG_ERROR, "saved run %d on entering uncompressed mode\n", saved_run);
317  return AVERROR_INVALIDDATA;
318  }
319  ret = decode_uncompressed(avctx, gb, &pix_left, &runs, runend, &mode);
320  offs = width - pix_left;
321  if (ret < 0) {
322  return ret;
323  } else if (ret)
324  break;
325  } else {
326  avpriv_report_missing_feature(avctx, "Special mode %d xxx=%d support", cmode, xxx);
327  return AVERROR_PATCHWELCOME;
328  }
329  } else { //vertical mode
330  run = run_off - offs + (cmode - 5);
331  run_off -= *--ref;
332  offs += run;
333  if (offs > width || run > width) {
334  av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
335  return AVERROR_INVALIDDATA;
336  }
337  *runs++ = run + saved_run;
338  if (runs >= runend) {
339  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
340  return AVERROR_INVALIDDATA;
341  }
342  saved_run = 0;
343  mode = !mode;
344  }
345  //sync line pointers
346  while (offs < width && run_off <= offs) {
347  run_off += *ref++;
348  run_off += *ref++;
349  }
350  }
351  *runs++ = saved_run;
352  if (saved_run) {
353  if (runs >= runend) {
354  av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
355  return -1;
356  }
357  *runs++ = 0;
358  }
359  return 0;
360 }
361 
362 static void put_line(uint8_t *dst, int size, int width, const int *runs)
363 {
364  PutBitContext pb;
365  int run, mode = ~0, pix_left = width, run_idx = 0;
366 
367  init_put_bits(&pb, dst, size);
368  while (pix_left > 0) {
369  run = runs[run_idx++];
370  mode = ~mode;
371  pix_left -= run;
372  for (; run > 16; run -= 16)
373  put_sbits(&pb, 16, mode);
374  if (run)
375  put_sbits(&pb, run, mode);
376  }
377  flush_put_bits(&pb);
378 }
379 
380 static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
381 {
382  unsigned int state = -1;
383  srcsize -= get_bits_count(gb);
384  while (srcsize-- > 0) {
385  state += state + get_bits1(gb);
386  if ((state & 0xFFF) == 1)
387  return 0;
388  }
389  return -1;
390 }
391 
392 int ff_ccitt_unpack(AVCodecContext *avctx, const uint8_t *src, int srcsize,
393  uint8_t *dst, int height, int stride,
394  enum TiffCompr compr, int opts)
395 {
396  int j;
397  GetBitContext gb;
398  int *runs, *ref = NULL, *runend;
399  int ret;
400  int runsize = avctx->width + 2;
401  int has_eol;
402 
403  runs = av_malloc_array(runsize, sizeof(runs[0]));
404  ref = av_malloc_array(runsize, sizeof(ref[0]));
405  if (!runs || !ref) {
406  ret = AVERROR(ENOMEM);
407  goto fail;
408  }
409  ref[0] = avctx->width;
410  ref[1] = 0;
411  ref[2] = 0;
412  if ((ret = init_get_bits8(&gb, src, srcsize)) < 0)
413  goto fail;
414  has_eol = show_bits(&gb, 12) == 1 || show_bits(&gb, 16) == 1;
415 
416  for (j = 0; j < height; j++) {
417  runend = runs + runsize;
418  if (compr == TIFF_G4) {
419  ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend,
420  ref);
421  if (ret < 0)
422  goto fail;
423  } else {
424  int g3d1 = (compr == TIFF_G3) && !(opts & 1);
425  if (compr != TIFF_CCITT_RLE &&
426  has_eol &&
427  find_group3_syncmarker(&gb, srcsize * 8) < 0)
428  break;
429  if (compr == TIFF_CCITT_RLE || g3d1 || get_bits1(&gb))
430  ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs,
431  runend);
432  else
433  ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs,
434  runend, ref);
435  if (compr == TIFF_CCITT_RLE)
436  align_get_bits(&gb);
437  }
438  if (avctx->err_recognition & AV_EF_EXPLODE && ret < 0)
439  goto fail;
440 
441  if (ret < 0) {
442  put_line(dst, stride, avctx->width, ref);
443  } else {
444  put_line(dst, stride, avctx->width, runs);
445  FFSWAP(int *, runs, ref);
446  }
447  dst += stride;
448  }
449  ret = 0;
450 fail:
451  av_free(runs);
452  av_free(ref);
453  return ret;
454 }
ccitt_group3_2d_bits
static const uint8_t ccitt_group3_2d_bits[11]
Definition: faxcompr.c:90
ccitt_codes_lens
static const uint8_t ccitt_codes_lens[2][CCITT_SYMS]
Definition: faxcompr.c:70
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:694
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:1416
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:130
find_group3_syncmarker
static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
Definition: faxcompr.c:380
ccitt_codes_bits
static const uint8_t ccitt_codes_bits[2][CCITT_SYMS]
Definition: faxcompr.c:46
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:392
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:209
width
#define width
TIFF_G4
@ TIFF_G4
Definition: tiff.h:132
state
static struct @376 state
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:118
opts
AVDictionary * opts
Definition: movenc.c:50
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:203
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:131
AVOnce
#define AVOnce
Definition: thread.h:202
ccitt_syms
static const uint16_t ccitt_syms[CCITT_SYMS]
Definition: faxcompr.c:35
ccitt_group3_2d_lens
static const uint8_t ccitt_group3_2d_lens[11]
Definition: faxcompr.c:94
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:245
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:100
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:102
decode_uncompressed
static int decode_uncompressed(AVCodecContext *avctx, GetBitContext *gb, unsigned int *pix_left, int **runs, const int *runend, int *mode)
Definition: faxcompr.c:124
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
AVCodecContext
main external API structure.
Definition: avcodec.h:445
CCITT_SYMS
#define CCITT_SYMS
Definition: faxcompr.c:33
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:202
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:243
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:214
src
INIT_CLIP pixel * src
Definition: h264pred_template.c:418
AVCodecContext::width
int width
picture width / height.
Definition: avcodec.h:625
ccitt_group3_2d_vlc
static VLCElem ccitt_group3_2d_vlc[512+528+648]
Definition: faxcompr.c:99
TiffCompr
TiffCompr
list of TIFF, TIFF/EP and DNG compression types
Definition: tiff.h:128
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:248
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:362