32 #define CCITT_SYMS 104 35 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
36 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
37 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
38 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
39 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
40 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896,
41 960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728,
42 1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560
48 0x35, 0x07, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, 0x13, 0x14, 0x07, 0x08, 0x08,
49 0x03, 0x34, 0x35, 0x2A, 0x2B, 0x27, 0x0C, 0x08, 0x17, 0x03, 0x04, 0x28, 0x2B,
50 0x13, 0x24, 0x18, 0x02, 0x03, 0x1A, 0x1B, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
51 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x04, 0x05, 0x0A, 0x0B, 0x52, 0x53, 0x54,
52 0x55, 0x24, 0x25, 0x58, 0x59, 0x5A, 0x5B, 0x4A, 0x4B, 0x32, 0x33, 0x34, 0x1B,
53 0x12, 0x17, 0x37, 0x36, 0x37, 0x64, 0x65, 0x68, 0x67, 0xCC, 0xCD, 0xD2, 0xD3,
54 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0x98, 0x99, 0x9A, 0x18, 0x9B,
55 0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
58 0x37, 0x02, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x05, 0x04, 0x04, 0x05, 0x07,
59 0x04, 0x07, 0x18, 0x17, 0x18, 0x08, 0x67, 0x68, 0x6C, 0x37, 0x28, 0x17, 0x18,
60 0xCA, 0xCB, 0xCC, 0xCD, 0x68, 0x69, 0x6A, 0x6B, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
61 0xD7, 0x6C, 0x6D, 0xDA, 0xDB, 0x54, 0x55, 0x56, 0x57, 0x64, 0x65, 0x52, 0x53,
62 0x24, 0x37, 0x38, 0x27, 0x28, 0x58, 0x59, 0x2B, 0x2C, 0x5A, 0x66, 0x67, 0x0F,
63 0xC8, 0xC9, 0x5B, 0x33, 0x34, 0x35, 0x6C, 0x6D, 0x4A, 0x4B, 0x4C, 0x4D, 0x72,
64 0x73, 0x74, 0x75, 0x76, 0x77, 0x52, 0x53, 0x54, 0x55, 0x5A, 0x5B, 0x64, 0x65,
65 0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
72 8, 6, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7,
73 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
74 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
75 8, 8, 8, 8, 5, 5, 6, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9,
76 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 11, 11, 11, 12, 12, 12, 12, 12, 12,
80 10, 3, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8, 8, 9, 10, 10, 10, 11,
81 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
82 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
83 12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
84 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 12, 12, 12, 12, 12, 12,
90 1, 1, 2, 2, 2, 1, 3, 3, 3, 1, 1
94 4, 3, 7, 6, 3, 1, 3, 6, 7, 7, 9
101 static VLC_TYPE code_table1[528][2];
102 static VLC_TYPE code_table2[648][2];
108 ccitt_vlc[0].
table = code_table1;
110 ccitt_vlc[1].
table = code_table2;
112 for (i = 0; i < 2; i++) {
126 unsigned int *pix_left,
int **runs,
127 const int *runend,
int *
mode)
158 for (k = 0; k < 2; k++) {
161 *(*runs)++ = saved_run;
162 if (*runs >= runend) {
166 if (*pix_left <= saved_run) {
170 *pix_left -= saved_run;
174 saved_run += codes[k];
178 *(*runs)++ = saved_run;
179 if (*runs >= runend) {
183 if (*pix_left <= saved_run) {
184 if (*pix_left == saved_run)
189 *pix_left -= saved_run;
192 if (newmode != *mode) {
194 if (*runs >= runend) {
204 unsigned int pix_left,
int *runs,
208 unsigned int run = 0;
217 if (runs >= runend) {
221 if (pix_left <= run) {
230 }
else if ((
int)t == -1) {
250 unsigned int width,
int *runs,
251 const int *runend,
const int *
ref)
253 int mode = 0, saved_run = 0, t;
254 int run_off = *ref++;
255 unsigned int offs = 0,
run = 0;
257 while (offs < width) {
269 run = run_off - offs;
278 }
else if (cmode == 1) {
280 for (k = 0; k < 2; k++) {
294 *runs++ =
run + saved_run;
295 if (runs >= runend) {
301 if (offs > width ||
run > width) {
307 }
else if (cmode == 9 || cmode == 10) {
312 if (cmode == 9 && xxx == 7) {
314 int pix_left = width - offs;
317 av_log(avctx,
AV_LOG_ERROR,
"saved run %d on entering uncompressed mode\n", saved_run);
321 offs = width - pix_left;
331 run = run_off - offs + (cmode - 5);
334 if (offs > width ||
run > width) {
338 *runs++ =
run + saved_run;
339 if (runs >= runend) {
347 while (offs < width && run_off <= offs) {
354 if (runs >= runend) {
369 while (pix_left > 0) {
370 run = runs[run_idx++];
373 for (; run > 16; run -= 16)
383 unsigned int state = -1;
385 while (srcsize-- > 0) {
387 if ((state & 0xFFF) == 1)
399 int *runs, *
ref =
NULL, *runend;
401 int runsize = avctx->
width + 2;
410 ref[0] = avctx->
width;
417 for (j = 0; j <
height; j++) {
418 runend = runs + runsize;
425 int g3d1 = (compr ==
TIFF_G3) && !(opts & 1);
static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb, unsigned int pix_left, int *runs, const int *runend)
static void put_sbits(PutBitContext *pb, int n, int32_t value)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
int ff_init_vlc_sparse(VLC *vlc_arg, 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)
static void put_line(uint8_t *dst, int size, int width, const int *runs)
static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb, unsigned int width, int *runs, const int *runend, const int *ref)
static const uint8_t ccitt_group3_2d_bits[11]
av_cold void ff_ccitt_unpack_init(void)
initialize unpacker code
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
static const uint16_t table[]
static int get_bits_left(GetBitContext *gb)
#define i(width, name, range_min, range_max)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static const uint16_t ccitt_syms[CCITT_SYMS]
static const uint8_t ccitt_codes_bits[2][CCITT_SYMS]
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
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
int width
picture width / height.
static int decode_uncompressed(AVCodecContext *avctx, GetBitContext *gb, unsigned int *pix_left, int **runs, const int *runend, int *mode)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define AV_EF_EXPLODE
abort decoding on minor error detection
static VLC ccitt_group3_2d_vlc
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
TiffCompr
list of TIFF, TIFF/EP and DNG compression types
Libavcodec external API header.
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
main external API structure.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static const uint8_t ccitt_group3_2d_lens[11]
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static const uint8_t ccitt_codes_lens[2][CCITT_SYMS]
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static int ref[MAX_W *MAX_W]
#define INIT_VLC_USE_NEW_STATIC
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
VLC_TYPE(* table)[2]
code, bits
static const uint8_t * align_get_bits(GetBitContext *s)
#define av_malloc_array(a, b)
#define FFSWAP(type, a, b)
mode
Use these values in ebur128_init (or'ed).
CCITT Fax Group 3 and 4 decompression.