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];
104 static int initialized = 0;
108 ccitt_vlc[0].
table = code_table1;
110 ccitt_vlc[1].
table = code_table2;
112 for(i = 0; i < 2; i++){
127 unsigned int pix_left,
int *runs,
const int *runend)
133 t =
get_vlc2(gb, ccitt_vlc[mode].table, 9, 2);
150 }
else if((
int)t == -1){
160 unsigned int width,
int *runs,
const int *runend,
const int *ref)
162 int mode = 0, saved_run = 0,
t;
163 int run_off = *ref++;
164 unsigned int offs=0,
run= 0;
176 run = run_off - offs;
184 }
else if(cmode == 1){
186 for(k = 0; k < 2; k++){
189 t =
get_vlc2(gb, ccitt_vlc[mode].table, 9, 2);
198 *runs++ =
run + saved_run;
205 if(offs > width ||
run > width){
211 }
else if(cmode == 9 || cmode == 10){
215 run = run_off - offs + (cmode - 5);
218 if(offs > width ||
run > width){
222 *runs++ =
run + saved_run;
231 while(run_off <= offs){
244 int run, mode = ~0, pix_left =
width, run_idx = 0;
248 run = runs[run_idx++];
251 for(; run > 16; run -= 16)
261 unsigned int state = -1;
263 while(srcsize-- > 0){
265 if((state & 0xFFF) == 1)
272 const uint8_t *src,
int srcsize,
278 int *runs, *ref, *runend;
280 int runsize= avctx->
width + 2;
282 runs =
av_malloc(runsize *
sizeof(runs[0]));
283 ref =
av_malloc(runsize *
sizeof(ref[0]));
284 ref[0] = avctx->
width;
288 for(j = 0; j <
height; j++){
289 runend = runs + runsize;
298 int g3d1 = (compr ==
TIFF_G3) && !(opts & 1);
static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
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 void align_get_bits(GetBitContext *s)
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 upacker code
int ff_init_vlc_sparse(VLC *vlc, 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)
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
static const uint16_t ccitt_syms[CCITT_SYMS]
static const uint8_t ccitt_codes_bits[2][CCITT_SYMS]
void av_log(void *avcl, int level, const char *fmt,...)
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 width
picture width / height.
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
#define INIT_VLC_USE_NEW_STATIC
static VLC ccitt_group3_2d_vlc
TiffCompr
list of TIFF compression types
main external API structure.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static unsigned int get_bits1(GetBitContext *s)
void * av_malloc(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
static const uint8_t ccitt_group3_2d_lens[11]
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 void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
VLC_TYPE(* table)[2]
code, bits
#define FFSWAP(type, a, b)
CCITT Fax Group 3 and 4 decompression.