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];
106 ccitt_vlc[0].
table = code_table1;
108 ccitt_vlc[1].
table = code_table2;
110 for (i = 0; i < 2; i++) {
129 unsigned int *pix_left,
int **runs,
130 const int *runend,
int *
mode)
159 for (k = 0; k < 2; k++) {
162 *(*runs)++ = saved_run;
163 if (*runs >= runend) {
167 if (*pix_left <= saved_run) {
171 *pix_left -= saved_run;
175 saved_run += codes[k];
179 *(*runs)++ = saved_run;
180 if (*runs >= runend) {
184 if (*pix_left <= saved_run) {
185 if (*pix_left == saved_run)
190 *pix_left -= saved_run;
193 if (newmode != *mode) {
195 if (*runs >= runend) {
205 unsigned int pix_left,
int *runs,
209 unsigned int run = 0;
216 if (runs >= runend) {
220 if (pix_left <= run) {
229 }
else if ((
int)t == -1) {
249 unsigned int width,
int *runs,
250 const int *runend,
const int *
ref)
252 int mode = 0, saved_run = 0, t;
253 int run_off = *ref++;
254 unsigned int offs = 0,
run = 0;
256 while (offs < width) {
265 run = run_off - offs;
274 }
else if (cmode == 1) {
276 for (k = 0; k < 2; k++) {
288 *runs++ =
run + saved_run;
289 if (runs >= runend) {
295 if (offs > width ||
run > width) {
301 }
else if (cmode == 9 || cmode == 10) {
303 if (cmode == 9 && xxx == 7) {
305 int pix_left = width - offs;
308 av_log(avctx,
AV_LOG_ERROR,
"saved run %d on entering uncompressed mode\n", saved_run);
312 offs = width - pix_left;
322 run = run_off - offs + (cmode - 5);
325 if (offs > width ||
run > width) {
329 *runs++ =
run + saved_run;
330 if (runs >= runend) {
338 while (offs < width && run_off <= offs) {
345 if (runs >= runend) {
360 while (pix_left > 0) {
361 run = runs[run_idx++];
364 for (; run > 16; run -= 16)
374 unsigned int state = -1;
376 while (srcsize-- > 0) {
378 if ((state & 0xFFF) == 1)
390 int *runs, *
ref =
NULL, *runend;
392 int runsize = avctx->
width + 2;
401 ref[0] = avctx->
width;
408 for (j = 0; j <
height; j++) {
409 runend = runs + runsize;
416 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[]
#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
static av_cold void ccitt_unpack_init(void)
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.
GLint GLenum GLboolean GLsizei stride
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.
static int ff_thread_once(char *control, void(*routine)(void))
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)
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
mode
Use these values in ebur128_init (or'ed).
CCITT Fax Group 3 and 4 decompression.