37 #define CBPLO_VLC_BITS 6
38 #define CBPHI_VLC_BITS 6
39 #define BLKTYPE_VLC_BITS 9
40 #define BLOCK_VLC_BITS 12
66 static const uint8_t
cbplo[][2] = {
67 { 0,-6 }, { 0x01, 6 }, { 0x02, 6 }, { 0x03, 6 }, { 0x00, 4 },
68 { 0x01, 3 }, { 0x02, 3 }, { 0x03, 3 }, { 0x00, 1 },
72 4, 5, 5, 4, 5, 4, 6, 4, 5, 6, 4, 4, 4, 4, 4, 2
76 3, 5, 4, 9, 3, 7, 2, 11, 2, 3, 5, 10, 4, 8, 6, 3
80 { 0,-8 }, { 0x34, 9 }, { 0,-9 }, { 0x14, 9 }, { 0,-9 },
81 { 0x23, 8 }, { 0x13, 8 }, { 0x32, 8 }, { 0x33, 7 }, { 0x22, 7 },
82 { 0x12, 7 }, { 0x21, 7 }, { 0x11, 7 }, { 0x04, 6 }, { 0x30, 6 },
83 { 0x03, 5 }, { 0x20, 4 }, { 0x10, 4 }, { 0x02, 3 }, { 0x01, 3 },
88 0, 0x4082, 0x4003, 0x000B, 0x000A, 0x4E01, 0x4D81, 0x4D01, 0x4C81,
89 0x0482, 0x0402, 0x0382, 0x0302, 0x0282, 0x0183, 0x0103, 0x0084, 0x000C,
90 0x0085, 0x0B81, 0x0C01, 0x4E81, 0x4F01, 0x4F81, 0x5001, 0x0086, 0x0104,
91 0x0203, 0x0283, 0x0303, 0x0502, 0x0C81, 0x0D01, 0x5081, 0x5101, 0x5181,
92 0x5201, 0x5281, 0x5301, 0x5381, 0x5401, 0x0000, 0x0009, 0x0008, 0x4C01,
93 0x4B81, 0x4B01, 0x4A81, 0x4A01, 0x4981, 0x4901, 0x4881, 0x4002, 0x0B01,
94 0x0A81, 0x0A01, 0x0981, 0x0901, 0x0881, 0x0801, 0x0781, 0x0202, 0x0182,
95 0x0007, 0x0006, 0x4801, 0x4781, 0x4701, 0x4681, 0x4601, 0x4581, 0x4501,
96 0x4481, 0x0701, 0x0681, 0x0102, 0x0083, 0x0005, 0x4401, 0x4381, 0x4301,
97 0x4281, 0x0601, 0x0581, 0x0501, 0x0004, 0x4201, 0x4181, 0x4101, 0x4081,
98 0x0481, 0x0401, 0x0381, 0x0301, 0x0082, 0x0003, 0x0281, 0x0201, 0x0181,
99 0x4001, 0x0001, 0x0081, 0x0101, 0x0002,
103 -9, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11,
104 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
105 12, 12, 12, 7, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
106 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
107 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6,
108 6, 5, 5, 5, 4, 2, 3, 4, 4,
131 const uint8_t *idct_permutation =
s->idsp.idct_permutation;
132 int i, last,
len, factor2;
145 factor2 =
value & 0x7F;
146 last = (
value >> 14) & 1;
159 if (
s->hi == 2 && flag2 &&
block < 4) {
161 s->block[
block][idct_permutation[0]] *= 2;
162 s->block[
block][idct_permutation[1]] *= 2;
163 s->block[
block][idct_permutation[8]] *= 2;
164 s->block[
block][idct_permutation[16]] *= 2;
171 unsigned cbp,
int flag,
int offset,
unsigned flag2)
174 const uint8_t *idct_permutation =
s->idsp.idct_permutation;
177 memset(
s->block, 0,
sizeof(
s->block));
179 for (
i = 0;
i < 6;
i++) {
187 s->block[
i][idct_permutation[0]] = x;
190 if (cbp & (1 << (5 -
i))) {
210 s->factor =
s->lo * 2;
220 for (y = 0; y < avctx->
height; y += 16) {
221 for (x = 0; x < avctx->
width; x += 16) {
233 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x,
234 frame->linesize[0],
s->block[0]);
235 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x + 8,
236 frame->linesize[0],
s->block[1]);
237 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x,
238 frame->linesize[0],
s->block[2]);
239 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x + 8,
240 frame->linesize[0],
s->block[3]);
241 s->idsp.idct_put(
frame->data[1] + (y >> 1) *
frame->linesize[1] + (x >> 1),
242 frame->linesize[1],
s->block[4]);
243 s->idsp.idct_put(
frame->data[2] + (y >> 1) *
frame->linesize[2] + (x >> 1),
244 frame->linesize[2],
s->block[5]);
262 s->factor =
s->lo * 2;
272 for (y = 0; y < avctx->
height; y += 16) {
273 for (x = 0; x < avctx->
width; x += 16) {
274 int reverse, intra_block,
value;
275 unsigned cbphi,
cbplo, flag2 = 0;
282 prev->
data[1] + (y >> 1) * prev->
linesize[1] + (x >> 1),
285 prev->
data[2] + (y >> 1) * prev->
linesize[2] + (x >> 1),
294 intra_block =
value & 0x07;
295 reverse = intra_block == 3;
306 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x,
307 frame->linesize[0],
s->block[0]);
308 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x + 8,
309 frame->linesize[0],
s->block[1]);
310 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x,
311 frame->linesize[0],
s->block[2]);
312 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x + 8,
313 frame->linesize[0],
s->block[3]);
314 s->idsp.idct_put(
frame->data[1] + (y >> 1) *
frame->linesize[1] + (x >> 1),
315 frame->linesize[1],
s->block[4]);
316 s->idsp.idct_put(
frame->data[2] + (y >> 1) *
frame->linesize[2] + (x >> 1),
317 frame->linesize[2],
s->block[5]);
329 prev->
data[1] + (y >> 1) * prev->
linesize[1] + (x >> 1),
332 prev->
data[2] + (y >> 1) * prev->
linesize[2] + (x >> 1),
335 s->idsp.idct_add(
frame->data[0] + y *
frame->linesize[0] + x,
336 frame->linesize[0],
s->block[0]);
337 s->idsp.idct_add(
frame->data[0] + y *
frame->linesize[0] + x + 8,
338 frame->linesize[0],
s->block[1]);
339 s->idsp.idct_add(
frame->data[0] + (y + 8) *
frame->linesize[0] + x,
340 frame->linesize[0],
s->block[2]);
341 s->idsp.idct_add(
frame->data[0] + (y + 8) *
frame->linesize[0] + x + 8,
342 frame->linesize[0],
s->block[3]);
343 s->idsp.idct_add(
frame->data[1] + (y >> 1) *
frame->linesize[1] + (x >> 1),
344 frame->linesize[1],
s->block[4]);
345 s->idsp.idct_add(
frame->data[2] + (y >> 1) *
frame->linesize[2] + (x >> 1),
346 frame->linesize[2],
s->block[5]);
363 if (avpkt->
size <= 32)
371 s->bdsp.bswap_buf((uint32_t *)
s->bitstream,
372 (uint32_t *)avpkt->
data,
373 (avpkt->
size + 3) >> 2);
384 scaled = avpkt->
data[8];
423 frame->key_frame = 1;
427 frame->key_frame = 0;
437 if (!
frame->key_frame) {
451 if (
frame->key_frame) {
460 if (!
s->prev_frame->data[0]) {
523 s->bitstream_size = 0;