33 #define CCITT_SYMS 104
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
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
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
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,
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,
91 1, 1, 2, 2, 2, 1, 3, 3, 3, 1, 1
95 4, 3, 7, 6, 3, 1, 3, 6, 7, 7, 9
102 static VLC_TYPE code_table1[528][2];
103 static VLC_TYPE code_table2[648][2];
110 for (
i = 0;
i < 2;
i++) {
129 unsigned int *pix_left,
int **runs,
130 const int *runend,
int *
mode)
161 for (k = 0; k < 2; k++) {
164 *(*runs)++ = saved_run;
165 if (*runs >= runend) {
169 if (*pix_left <= saved_run) {
173 *pix_left -= saved_run;
177 saved_run += codes[k];
181 *(*runs)++ = saved_run;
182 if (*runs >= runend) {
186 if (*pix_left <= saved_run) {
187 if (*pix_left == saved_run)
192 *pix_left -= saved_run;
195 if (newmode != *
mode) {
197 if (*runs >= runend) {
207 unsigned int pix_left,
int *runs,
211 unsigned int run = 0;
220 if (runs >= runend) {
224 if (pix_left <=
run) {
233 }
else if ((
int)t == -1) {
253 unsigned int width,
int *runs,
254 const int *runend,
const int *
ref)
256 int mode = 0, saved_run = 0, t;
257 int run_off = *
ref++;
258 unsigned int offs = 0,
run = 0;
260 while (offs <
width) {
272 run = run_off - offs;
281 }
else if (cmode == 1) {
283 for (k = 0; k < 2; k++) {
297 *runs++ =
run + saved_run;
298 if (runs >= runend) {
310 }
else if (cmode == 9 || cmode == 10) {
315 if (cmode == 9 && xxx == 7) {
317 int pix_left =
width - offs;
320 av_log(avctx,
AV_LOG_ERROR,
"saved run %d on entering uncompressed mode\n", saved_run);
324 offs =
width - pix_left;
334 run = run_off - offs + (cmode - 5);
341 *runs++ =
run + saved_run;
342 if (runs >= runend) {
350 while (offs <
width && run_off <= offs) {
357 if (runs >= runend) {
372 while (pix_left > 0) {
373 run = runs[run_idx++];
376 for (;
run > 16;
run -= 16)
386 unsigned int state = -1;
388 while (srcsize-- > 0) {
390 if ((
state & 0xFFF) == 1)
402 int *runs, *
ref =
NULL, *runend;
404 int runsize = avctx->
width + 2;
420 for (j = 0; j <
height; j++) {
421 runend = runs + runsize;
Libavcodec external API header.
#define AV_EF_EXPLODE
abort decoding on minor error detection
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)
#define FFSWAP(type, a, b)
mode
Use these values in ebur128_init (or'ed).
static int decode_uncompressed(AVCodecContext *avctx, GetBitContext *gb, unsigned int *pix_left, int **runs, const int *runend, int *mode)
static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb, unsigned int width, int *runs, const int *runend, const int *ref)
static const uint16_t ccitt_syms[CCITT_SYMS]
static const uint8_t ccitt_codes_bits[2][CCITT_SYMS]
static const uint8_t ccitt_group3_2d_bits[11]
av_cold void ff_ccitt_unpack_init(void)
initialize unpacker code
static void put_line(uint8_t *dst, int size, int width, const int *runs)
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
static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb, unsigned int pix_left, int *runs, const int *runend)
static const uint8_t ccitt_group3_2d_lens[11]
static VLC ccitt_group3_2d_vlc
static av_cold void ccitt_unpack_init(void)
static const uint8_t ccitt_codes_lens[2][CCITT_SYMS]
static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
CCITT Fax Group 3 and 4 decompression.
bitstream reader API header.
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static int get_bits_left(GetBitContext *gb)
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
static int get_bits_count(const GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static const uint8_t * align_get_bits(GetBitContext *s)
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static int ff_thread_once(char *control, void(*routine)(void))
static const uint16_t table[]
static void put_sbits(PutBitContext *pb, int n, int32_t value)
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
main external API structure.
int width
picture width / height.
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
VLC_TYPE(* table)[2]
code, bits
#define av_malloc_array(a, b)
static int ref[MAX_W *MAX_W]
TiffCompr
list of TIFF, TIFF/EP and DNG compression types
#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size)
#define INIT_VLC_USE_NEW_STATIC