37 #define BLOCK_TYPE_VLC_BITS 5 38 #define ACDC_VLC_BITS 9 40 #define CFRAME_BUFFER_COUNT 100 45 { 0, 1 }, { 2, 2 }, { 6, 3 }, { 14, 4 }, { 30, 5 }, { 31, 5 }, { 0, 0 }
47 { 0, 1 }, { 0, 0 }, { 2, 2 }, { 6, 3 }, { 14, 4 }, { 15, 4 }, { 0, 0 }
49 { 0, 1 }, { 2, 2 }, { 0, 0 }, { 6, 3 }, { 14, 4 }, { 15, 4 }, { 0, 0 }
51 { 0, 1 }, { 0, 0 }, { 0, 0 }, { 2, 2 }, { 6, 3 }, { 14, 4 }, { 15, 4 }
55 { 1, 2 }, { 4, 3 }, { 5, 3 }, { 0, 2 }, { 6, 3 }, { 7, 3 }, { 0, 0 }
57 { 1, 2 }, { 0, 0 }, { 2, 2 }, { 0, 2 }, { 6, 3 }, { 7, 3 }, { 0, 0 }
59 { 1, 2 }, { 2, 2 }, { 0, 0 }, { 0, 2 }, { 6, 3 }, { 7, 3 }, { 0, 0 }
61 { 1, 2 }, { 0, 0 }, { 0, 0 }, { 0, 2 }, { 2, 2 }, { 6, 3 }, { 7, 3 }
73 static const int8_t
mv[256][2] = {
74 { 0, 0 }, { 0, -1 }, { -1, 0 }, { 1, 0 }, { 0, 1 }, { -1, -1 }, { 1, -1 }, { -1, 1 },
75 { 1, 1 }, { 0, -2 }, { -2, 0 }, { 2, 0 }, { 0, 2 }, { -1, -2 }, { 1, -2 }, { -2, -1 },
76 { 2, -1 }, { -2, 1 }, { 2, 1 }, { -1, 2 }, { 1, 2 }, { -2, -2 }, { 2, -2 }, { -2, 2 },
77 { 2, 2 }, { 0, -3 }, { -3, 0 }, { 3, 0 }, { 0, 3 }, { -1, -3 }, { 1, -3 }, { -3, -1 },
78 { 3, -1 }, { -3, 1 }, { 3, 1 }, { -1, 3 }, { 1, 3 }, { -2, -3 }, { 2, -3 }, { -3, -2 },
79 { 3, -2 }, { -3, 2 }, { 3, 2 }, { -2, 3 }, { 2, 3 }, { 0, -4 }, { -4, 0 }, { 4, 0 },
80 { 0, 4 }, { -1, -4 }, { 1, -4 }, { -4, -1 }, { 4, -1 }, { 4, 1 }, { -1, 4 }, { 1, 4 },
81 { -3, -3 }, { -3, 3 }, { 3, 3 }, { -2, -4 }, { -4, -2 }, { 4, -2 }, { -4, 2 }, { -2, 4 },
82 { 2, 4 }, { -3, -4 }, { 3, -4 }, { 4, -3 }, { -5, 0 }, { -4, 3 }, { -3, 4 }, { 3, 4 },
83 { -1, -5 }, { -5, -1 }, { -5, 1 }, { -1, 5 }, { -2, -5 }, { 2, -5 }, { 5, -2 }, { 5, 2 },
84 { -4, -4 }, { -4, 4 }, { -3, -5 }, { -5, -3 }, { -5, 3 }, { 3, 5 }, { -6, 0 }, { 0, 6 },
85 { -6, -1 }, { -6, 1 }, { 1, 6 }, { 2, -6 }, { -6, 2 }, { 2, 6 }, { -5, -4 }, { 5, 4 },
86 { 4, 5 }, { -6, -3 }, { 6, 3 }, { -7, 0 }, { -1, -7 }, { 5, -5 }, { -7, 1 }, { -1, 7 },
87 { 4, -6 }, { 6, 4 }, { -2, -7 }, { -7, 2 }, { -3, -7 }, { 7, -3 }, { 3, 7 }, { 6, -5 },
88 { 0, -8 }, { -1, -8 }, { -7, -4 }, { -8, 1 }, { 4, 7 }, { 2, -8 }, { -2, 8 }, { 6, 6 },
89 { -8, 3 }, { 5, -7 }, { -5, 7 }, { 8, -4 }, { 0, -9 }, { -9, -1 }, { 1, 9 }, { 7, -6 },
90 { -7, 6 }, { -5, -8 }, { -5, 8 }, { -9, 3 }, { 9, -4 }, { 7, -7 }, { 8, -6 }, { 6, 8 },
91 { 10, 1 }, { -10, 2 }, { 9, -5 }, { 10, -3 }, { -8, -7 }, { -10, -4 }, { 6, -9 }, { -11, 0 },
92 { 11, 1 }, { -11, -2 }, { -2, 11 }, { 7, -9 }, { -7, 9 }, { 10, 6 }, { -4, 11 }, { 8, -9 },
93 { 8, 9 }, { 5, 11 }, { 7, -10 }, { 12, -3 }, { 11, 6 }, { -9, -9 }, { 8, 10 }, { 5, 12 },
94 { -11, 7 }, { 13, 2 }, { 6, -12 }, { 10, 9 }, { -11, 8 }, { -7, 12 }, { 0, 14 }, { 14, -2 },
95 { -9, 11 }, { -6, 13 }, { -14, -4 }, { -5, -14 }, { 5, 14 }, { -15, -1 }, { -14, -6 }, { 3, -15 },
96 { 11, -11 }, { -7, 14 }, { -5, 15 }, { 8, -14 }, { 15, 6 }, { 3, 16 }, { 7, -15 }, { -16, 5 },
97 { 0, 17 }, { -16, -6 }, { -10, 14 }, { -16, 7 }, { 12, 13 }, { -16, 8 }, { -17, 6 }, { -18, 3 },
98 { -7, 17 }, { 15, 11 }, { 16, 10 }, { 2, -19 }, { 3, -19 }, { -11, -16 }, { -18, 8 }, { -19, -6 },
99 { 2, -20 }, { -17, -11 }, { -10, -18 }, { 8, 19 }, { -21, -1 }, { -20, 7 }, { -4, 21 }, { 21, 5 },
100 { 15, 16 }, { 2, -22 }, { -10, -20 }, { -22, 5 }, { 20, -11 }, { -7, -22 }, { -12, 20 }, { 23, -5 },
101 { 13, -20 }, { 24, -2 }, { -15, 19 }, { -11, 22 }, { 16, 19 }, { 23, -10 }, { -18, -18 }, { -9, -24 },
102 { 24, -10 }, { -3, 26 }, { -23, 13 }, { -18, -20 }, { 17, 21 }, { -4, 27 }, { 27, 6 }, { 1, -28 },
103 { -11, 26 }, { -17, -23 }, { 7, 28 }, { 11, -27 }, { 29, 5 }, { -23, -19 }, { -28, -11 }, { -21, 22 },
104 { -30, 7 }, { -17, 26 }, { -27, 16 }, { 13, 29 }, { 19, -26 }, { 10, -31 }, { -14, -30 }, { 20, -27 },
105 { -29, 18 }, { -16, -31 }, { -28, -22 }, { 21, -30 }, { -25, 28 }, { 26, -29 }, { 25, -32 }, { -32, -32 }
111 16, 15, 13, 19, 24, 31, 28, 17,
112 17, 23, 25, 31, 36, 63, 45, 21,
113 18, 24, 27, 37, 52, 59, 49, 20,
114 16, 28, 34, 40, 60, 80, 51, 20,
115 18, 31, 48, 66, 68, 86, 56, 21,
116 19, 38, 56, 59, 64, 64, 48, 20,
117 27, 48, 55, 55, 56, 51, 35, 15,
118 20, 35, 34, 32, 31, 22, 15, 8,
150 #define FIX_1_082392200 70936 151 #define FIX_1_414213562 92682 152 #define FIX_1_847759065 121095 153 #define FIX_2_613125930 171254 155 #define MULTIPLY(var, const) (((var) * (const)) >> 16) 157 static void idct(int16_t block[64])
159 int tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
160 int tmp10, tmp11, tmp12, tmp13;
161 int z5, z10, z11, z12, z13;
165 for (i = 0; i < 8; i++) {
166 tmp10 = block[8 * 0 +
i] + block[8 * 4 +
i];
167 tmp11 = block[8 * 0 +
i] - block[8 * 4 +
i];
169 tmp13 = block[8 * 2 +
i] + block[8 * 6 +
i];
172 tmp0 = tmp10 + tmp13;
173 tmp3 = tmp10 - tmp13;
174 tmp1 = tmp11 + tmp12;
175 tmp2 = tmp11 - tmp12;
177 z13 = block[8 * 5 +
i] + block[8 * 3 +
i];
178 z10 = block[8 * 5 +
i] - block[8 * 3 +
i];
179 z11 = block[8 * 1 +
i] + block[8 * 7 +
i];
180 z12 = block[8 * 1 +
i] - block[8 * 7 +
i];
193 temp[8 * 0 +
i] = tmp0 + tmp7;
194 temp[8 * 7 +
i] = tmp0 - tmp7;
195 temp[8 * 1 +
i] = tmp1 + tmp6;
196 temp[8 * 6 +
i] = tmp1 - tmp6;
197 temp[8 * 2 +
i] = tmp2 + tmp5;
198 temp[8 * 5 +
i] = tmp2 - tmp5;
199 temp[8 * 4 +
i] = tmp3 + tmp4;
200 temp[8 * 3 +
i] = tmp3 - tmp4;
203 for (i = 0; i < 8 * 8; i += 8) {
204 tmp10 = temp[0 +
i] + temp[4 +
i];
205 tmp11 = temp[0 +
i] - temp[4 +
i];
207 tmp13 = temp[2 +
i] + temp[6 +
i];
210 tmp0 = tmp10 + tmp13;
211 tmp3 = tmp10 - tmp13;
212 tmp1 = tmp11 + tmp12;
213 tmp2 = tmp11 - tmp12;
215 z13 = temp[5 +
i] + temp[3 +
i];
216 z10 = temp[5 +
i] - temp[3 +
i];
217 z11 = temp[1 +
i] + temp[7 +
i];
218 z12 = temp[1 +
i] - temp[7 +
i];
231 block[0 +
i] = (tmp0 + tmp7) >> 6;
232 block[7 +
i] = (tmp0 - tmp7) >> 6;
233 block[1 +
i] = (tmp1 + tmp6) >> 6;
234 block[6 +
i] = (tmp1 - tmp6) >> 6;
235 block[2 +
i] = (tmp2 + tmp5) >> 6;
236 block[5 +
i] = (tmp2 - tmp5) >> 6;
237 block[4 +
i] = (tmp3 + tmp4) >> 6;
238 block[3 +
i] = (tmp3 - tmp4) >> 6;
247 for (i = 0; i < 2; i++) {
248 for (j = 0; j < 4; j++) {
249 block_type_vlc[
i][j].
table = table[
i][j];
263 for (i = 0; i < 256; i++) {
265 f->
mv[
i] =
mv[
i][0] +
mv[
i][1] * linesize / 2;
267 f->
mv[
i] = (i & 15) - 8 + ((i >> 4) - 8) * linesize / 2;
272 #define LE_CENTRIC_MUL(dst, src, scale, dc) \ 274 unsigned tmpval = AV_RN32(src); \ 275 tmpval = (tmpval << 16) | (tmpval >> 16); \ 276 tmpval = tmpval * (scale) + (dc); \ 277 tmpval = (tmpval << 16) | (tmpval >> 16); \ 278 AV_WN32A(dst, tmpval); \ 281 #define LE_CENTRIC_MUL(dst, src, scale, dc) \ 283 unsigned tmpval = AV_RN32(src) * (scale) + (dc); \ 284 AV_WN32A(dst, tmpval); \ 288 static inline void mcdc(uint16_t *
dst,
const uint16_t *
src,
int log2w,
296 for (i = 0; i < h; i++) {
297 dst[0] = scale * src[0] +
dc;
304 for (i = 0; i < h; i++) {
312 for (i = 0; i < h; i++) {
321 for (i = 0; i < h; i++) {
337 int log2w,
int log2h,
int stride)
340 const int h = 1 << log2h;
345 uint16_t *
end = start + stride * (f->
avctx->
height - h + 1) - (1 << log2w);
354 src += f->
mv[bytestream2_get_byteu(&f->
g)];
355 if (start > src || src >
end) {
359 mcdc(dst, src, log2w, h, stride, 1, 0);
360 }
else if (code == 1) {
364 src + (stride << log2h), log2w, log2h, stride);
365 }
else if (code == 2) {
369 src + (1 << log2w), log2w, log2h, stride);
370 }
else if (code == 3 && f->
version < 2) {
371 mcdc(dst, src, log2w, h, stride, 1, 0);
372 }
else if (code == 4) {
377 src += f->
mv[bytestream2_get_byteu(&f->
g)];
378 if (start > src || src >
end) {
386 mcdc(dst, src, log2w, h, stride, 1, bytestream2_get_le16u(&f->
g2));
387 }
else if (code == 5) {
392 mcdc(dst, src, log2w, h, stride, 0, bytestream2_get_le16u(&f->
g2));
393 }
else if (code == 6) {
399 dst[0] = bytestream2_get_le16u(&f->
g2);
400 dst[1] = bytestream2_get_le16u(&f->
g2);
402 dst[0] = bytestream2_get_le16u(&f->
g2);
403 dst[
stride] = bytestream2_get_le16u(&f->
g2);
415 uint16_t *
dst = (uint16_t *)frame->
data[0];
417 unsigned int bitstream_size, bytestream_size, wordstream_size, extra,
418 bytestream_offset, wordstream_offset;
424 bitstream_size =
AV_RL32(buf + 8);
425 wordstream_size =
AV_RL32(buf + 12);
426 bytestream_size =
AV_RL32(buf + 16);
429 bitstream_size =
AV_RL16(buf - 4);
430 wordstream_size =
AV_RL16(buf - 2);
431 bytestream_size =
FFMAX(length - bitstream_size - wordstream_size, 0);
434 if (bitstream_size > length || bitstream_size >= INT_MAX/8 ||
435 bytestream_size > length - bitstream_size ||
436 wordstream_size > length - bytestream_size - bitstream_size ||
437 extra > length - bytestream_size - bitstream_size - wordstream_size) {
439 bitstream_size+ bytestream_size+ wordstream_size - length);
453 wordstream_offset = extra + bitstream_size;
454 bytestream_offset = extra + bitstream_size + wordstream_size;
456 length - wordstream_offset);
458 length - bytestream_offset);
462 for (y = 0; y <
height; y += 8) {
463 for (x = 0; x <
width; x += 8)
526 int16_t (*block)[64] = f->block;
529 uint16_t *
dst = ((uint16_t*)frame->
data[0]) + y * stride +
x;
531 for (i = 0; i < 4; i++) {
532 block[
i][0] += 0x80 * 8 * 8;
537 for (i = 4; i < 6; i++)
545 for (y = 0; y < 8; y++) {
546 for (x = 0; x < 8; x++) {
547 int16_t *
temp = block[(x >> 2) + 2 * (y >> 2)] +
548 2 * (x & 3) + 2 * 8 * (y & 3);
549 int cb = block[4][x + 8 *
y];
550 int cr = block[5][x + 8 *
y];
551 int cg = (cb +
cr) >> 1;
557 dst[0] = ((y +
cb) >> 3) + (((y - cg) & 0xFC) << 3) + (((y + cr) & 0xF8) << 8);
559 dst[1] = ((y +
cb) >> 3) + (((y - cg) & 0xFC) << 3) + (((y + cr) & 0xF8) << 8);
561 dst[
stride] = ((y +
cb) >> 3) + (((y - cg) & 0xFC) << 3) + (((y + cr) & 0xF8) << 8);
563 dst[1 +
stride] = ((y +
cb) >> 3) + (((y - cg) & 0xFC) << 3) + (((y + cr) & 0xF8) << 8);
566 dst += 2 * stride - 2 * 8;
577 for (i = 0; i < 6; i++)
587 int frequency[512] = { 0 };
594 const uint8_t *ptr_end = buf + buf_size;
597 memset(up, -1,
sizeof(up));
604 if (ptr_end - ptr <
FFMAX(end - start + 1, 0) + 1) {
608 for (i = start; i <=
end; i++)
609 frequency[i] = *ptr++;
618 while ((ptr - buf) & 3)
626 for (j = 257; j < 512; j++) {
627 int min_freq[2] = { 256 * 256, 256 * 256 };
628 int smallest[2] = { 0, 0 };
630 for (i = 0; i < j; i++) {
631 if (frequency[i] == 0)
633 if (frequency[i] < min_freq[1]) {
634 if (frequency[i] < min_freq[0]) {
635 min_freq[1] = min_freq[0];
636 smallest[1] = smallest[0];
637 min_freq[0] = frequency[
i];
640 min_freq[1] = frequency[
i];
645 if (min_freq[1] == 256 * 256)
648 frequency[j] = min_freq[0] + min_freq[1];
649 flag[smallest[0]] = 0;
650 flag[smallest[1]] = 1;
653 frequency[smallest[0]] = frequency[smallest[1]] = 0;
656 for (j = 0; j < 257; j++) {
659 for (node = j; up[node] != -1; node = up[node]) {
665 "vlc length overflow\n");
681 int blue = 2 * (c0 & 0x001F) + (c1 & 0x001F);
682 int green = (2 * (c0 & 0x03E0) + (c1 & 0x03E0)) >> 5;
683 int red = 2 * (c0 >> 10) + (c1 >> 10);
684 return red / 3 * 1024 + green / 3 * 32 + blue / 3;
692 const int mbs = (
FFALIGN(width, 16) >> 4) * (
FFALIGN(height, 16) >> 4);
693 uint16_t *
dst = (uint16_t*)frame->
data[0];
695 const uint8_t *buf_end = buf + length;
698 if (length < mbs * 8) {
704 for (y = 0; y <
height; y += 16) {
705 for (x = 0; x <
width; x += 16) {
707 if (buf_end - buf < 8)
710 color[0] = bytestream2_get_le16u(&g3);
711 color[1] = bytestream2_get_le16u(&g3);
713 if (color[0] & 0x8000)
715 if (color[1] & 0x8000)
718 color[2] =
mix(color[0], color[1]);
719 color[3] =
mix(color[1], color[0]);
721 bits = bytestream2_get_le32u(&g3);
722 for (y2 = 0; y2 < 16; y2++) {
723 for (x2 = 0; x2 < 16; x2++) {
724 int index = 2 * (x2 >> 2) + 8 * (y2 >> 2);
741 const unsigned int bitstream_size =
AV_RL32(buf);
742 unsigned int prestream_size;
745 if (bitstream_size > (1<<26) || length < bitstream_size + 12) {
750 prestream_size = 4 *
AV_RL32(buf + bitstream_size + 4);
751 prestream = buf + bitstream_size + 12;
753 if (prestream_size + bitstream_size + 12 != length
754 || bitstream_size > (1 << 26)
755 || prestream_size > (1 << 26)) {
757 prestream_size, bitstream_size, length);
771 prestream_size = length + buf - prestream;
785 for (y = 0; y <
height; y += 16) {
786 for (x = 0; x <
width; x += 16) {
804 int buf_size = avpkt->
size;
812 if (buf_size !=
AV_RL32(buf + 4) + 8 || buf_size < 20)
816 if (frame_4cc ==
AV_RL32(
"cfrm")) {
818 const int data_size = buf_size - 20;
819 const int id =
AV_RL32(buf + 12);
820 const int whole_size =
AV_RL32(buf + 16);
823 if (data_size < 0 || whole_size < 0) {
845 if (i >= CFRAME_BUFFER_COUNT) {
862 memcpy(cfrm->
data + cfrm->
size, buf + 20, data_size);
863 cfrm->
size += data_size;
865 if (cfrm->
size >= whole_size) {
867 frame_size = cfrm->
size;
873 cfrm->
size = cfrm->
id = 0;
879 frame_size = buf_size - 12;
890 if (frame_4cc ==
AV_RL32(
"ifr2")) {
896 }
else if (frame_4cc ==
AV_RL32(
"ifrm")) {
902 }
else if (frame_4cc ==
AV_RL32(
"pfrm") || frame_4cc ==
AV_RL32(
"pfr2")) {
907 for (i=0; i<avctx->
height; i++)
916 }
else if (frame_4cc ==
AV_RL32(
"snd_")) {
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
This structure describes decoded (raw) audio or video data.
static void idct(int16_t block[64])
static av_cold int init(AVCodecContext *avctx)
static av_cold void init_vlcs(FourXContext *f)
AVCodec ff_fourxm_decoder
static VLC block_type_vlc[2][4]
static const uint8_t * read_huffman_tables(FourXContext *f, const uint8_t *const buf, int buf_size)
#define DECLARE_ALIGNED(n, t, v)
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
static void mcdc(uint16_t *dst, const uint16_t *src, int log2w, int h, int stride, int scale, unsigned dc)
void av_freep(void *arg)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
#define av_assert0(cond)
assert() equivalent, that is always enabled.
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
static const uint32_t color[16+AV_CLASS_CATEGORY_NB]
static int decode_i_frame(FourXContext *f, AVFrame *frame, const uint8_t *buf, int length)
unsigned int allocated_size
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
struct CFrameBuffer CFrameBuffer
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
static const uint8_t block_type_tab[2][4][8][2]
static av_cold int decode_init(AVCodecContext *avctx)
bitstream reader API header.
static void idct_put(FourXContext *f, AVFrame *frame, int x, int y)
AVFrame * current_picture
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static int decode_i_mb(FourXContext *f)
static const uint8_t frame_size[4]
static int get_bits_left(GetBitContext *gb)
void * av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
Reallocate the given block if it is not large enough, otherwise do nothing.
static void decode_p_block(FourXContext *f, uint16_t *dst, uint16_t *src, int log2w, int log2h, int stride)
#define LE_CENTRIC_MUL(dst, src, scale, dc)
static int decode_i_block(FourXContext *f, int16_t *block)
decode block and dequantize.
static const struct endianess table[]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static av_always_inline unsigned int bytestream2_get_bytes_left(GetByteContext *g)
void(* clear_blocks)(int16_t *blocks)
simple assert() macros that are a bit more flexible than ISO C assert().
void av_log(void *avcl, int level, const char *fmt,...)
static const uint8_t size2index[4][4]
const char * name
Name of the codec implementation.
#define CFRAME_BUFFER_COUNT
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame)
Identical in function to av_frame_make_writable(), except it uses ff_get_buffer() to allocate the buf...
enum AVPictureType pict_type
Picture type of the frame.
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.
FIXME Range Coding of cr are level
#define INIT_VLC_USE_NEW_STATIC
static const int8_t mv[256][2]
#define AV_PIX_FMT_BGR555
struct FourXContext FourXContext
static int mix(int c0, int c1)
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
main external API structure.
static void init_mv(FourXContext *f, int linesize)
static void close(AVCodecParserContext *s)
FIXME Range Coding of cr are mx and my are Motion Vector top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff)*mv_scale Intra DC Predicton block[y][x] dc[1]
static int get_xbits(GetBitContext *s, int n)
read mpeg1 dc style vlc (sign bit + mantisse with no MSB).
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
BYTE int const BYTE int int int height
static const uint8_t dequant_table[64]
synthesis window for stochastic i
void(* bswap_buf)(uint32_t *dst, const uint32_t *src, int w)
CFrameBuffer cfrm[CFRAME_BUFFER_COUNT]
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFilterBuffer 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.Buffer references ownership and permissions
unsigned int bitstream_buffer_size
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
static av_cold int decode_end(AVCodecContext *avctx)
int av_frame_ref(AVFrame *dst, AVFrame *src)
Setup a new reference to the data described by an given frame.
static int decode_p_frame(FourXContext *f, AVFrame *frame, const uint8_t *buf, int length)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define CODEC_FLAG_EMU_EDGE
Don't draw edges.
common internal api header.
const uint8_t ff_zigzag_direct[64]
#define CODEC_FLAG_GRAY
Only decode/encode grayscale.
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
GetBitContext pre_gb
ac/dc prefix
else dst[i][x+y *dst_stride[i]]
VLC_TYPE(* table)[2]
code, bits
int key_frame
1 -> keyframe, 0-> not
static int decode_i2_frame(FourXContext *f, AVFrame *frame, const uint8_t *buf, int length)
#define AV_PIX_FMT_RGB565
int frame_number
Frame counter, set by libavcodec.
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
#define BLOCK_TYPE_VLC_BITS
#define FFSWAP(type, a, b)
#define MULTIPLY(var, const)
static double cr(void *priv, double x, double y)
This structure stores compressed data.
void ff_free_vlc(VLC *vlc)
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.