38 #define CBPLO_VLC_BITS 6
39 #define CBPHI_VLC_BITS 6
40 #define BLKTYPE_VLC_BITS 9
41 #define BLOCK_VLC_BITS 12
68 static const uint8_t
cbplo[][2] = {
69 { 0,-6 }, { 0x01, 6 }, { 0x02, 6 }, { 0x03, 6 }, { 0x00, 4 },
70 { 0x01, 3 }, { 0x02, 3 }, { 0x03, 3 }, { 0x00, 1 },
74 4, 5, 5, 4, 5, 4, 6, 4, 5, 6, 4, 4, 4, 4, 4, 2
78 3, 5, 4, 9, 3, 7, 2, 11, 2, 3, 5, 10, 4, 8, 6, 3
82 { 0,-8 }, { 0x34, 9 }, { 0,-9 }, { 0x14, 9 }, { 0,-9 },
83 { 0x23, 8 }, { 0x13, 8 }, { 0x32, 8 }, { 0x33, 7 }, { 0x22, 7 },
84 { 0x12, 7 }, { 0x21, 7 }, { 0x11, 7 }, { 0x04, 6 }, { 0x30, 6 },
85 { 0x03, 5 }, { 0x20, 4 }, { 0x10, 4 }, { 0x02, 3 }, { 0x01, 3 },
90 0, 0x4082, 0x4003, 0x000B, 0x000A, 0x4E01, 0x4D81, 0x4D01, 0x4C81,
91 0x0482, 0x0402, 0x0382, 0x0302, 0x0282, 0x0183, 0x0103, 0x0084, 0x000C,
92 0x0085, 0x0B81, 0x0C01, 0x4E81, 0x4F01, 0x4F81, 0x5001, 0x0086, 0x0104,
93 0x0203, 0x0283, 0x0303, 0x0502, 0x0C81, 0x0D01, 0x5081, 0x5101, 0x5181,
94 0x5201, 0x5281, 0x5301, 0x5381, 0x5401, 0x0000, 0x0009, 0x0008, 0x4C01,
95 0x4B81, 0x4B01, 0x4A81, 0x4A01, 0x4981, 0x4901, 0x4881, 0x4002, 0x0B01,
96 0x0A81, 0x0A01, 0x0981, 0x0901, 0x0881, 0x0801, 0x0781, 0x0202, 0x0182,
97 0x0007, 0x0006, 0x4801, 0x4781, 0x4701, 0x4681, 0x4601, 0x4581, 0x4501,
98 0x4481, 0x0701, 0x0681, 0x0102, 0x0083, 0x0005, 0x4401, 0x4381, 0x4301,
99 0x4281, 0x0601, 0x0581, 0x0501, 0x0004, 0x4201, 0x4181, 0x4101, 0x4081,
100 0x0481, 0x0401, 0x0381, 0x0301, 0x0082, 0x0003, 0x0281, 0x0201, 0x0181,
101 0x4001, 0x0001, 0x0081, 0x0101, 0x0002,
105 -9, 11, 11, 11, 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11,
106 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
107 12, 12, 12, 7, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
108 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
109 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6,
110 6, 5, 5, 5, 4, 2, 3, 4, 4,
133 const uint8_t *scantable =
s->intra_scantable.permutated;
134 int i, last,
len, factor2;
147 factor2 =
value & 0x7F;
148 last = (
value >> 14) & 1;
161 if (
s->hi == 2 && flag2 &&
block < 4) {
163 s->block[
block][scantable[0]] *= 2;
164 s->block[
block][scantable[1]] *= 2;
165 s->block[
block][scantable[8]] *= 2;
166 s->block[
block][scantable[16]] *= 2;
173 unsigned cbp,
int flag,
int offset,
unsigned flag2)
176 const uint8_t *scantable =
s->intra_scantable.permutated;
179 memset(
s->block, 0,
sizeof(
s->block));
181 for (
i = 0;
i < 6;
i++) {
189 s->block[
i][scantable[0]] = x;
192 if (cbp & (1 << (5 -
i))) {
212 s->factor =
s->lo * 2;
222 for (y = 0; y < avctx->
height; y += 16) {
223 for (x = 0; x < avctx->
width; x += 16) {
235 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x,
236 frame->linesize[0],
s->block[0]);
237 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x + 8,
238 frame->linesize[0],
s->block[1]);
239 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x,
240 frame->linesize[0],
s->block[2]);
241 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x + 8,
242 frame->linesize[0],
s->block[3]);
243 s->idsp.idct_put(
frame->data[1] + (y >> 1) *
frame->linesize[1] + (x >> 1),
244 frame->linesize[1],
s->block[4]);
245 s->idsp.idct_put(
frame->data[2] + (y >> 1) *
frame->linesize[2] + (x >> 1),
246 frame->linesize[2],
s->block[5]);
264 s->factor =
s->lo * 2;
274 for (y = 0; y < avctx->
height; y += 16) {
275 for (x = 0; x < avctx->
width; x += 16) {
276 int reverse, intra_block,
value;
277 unsigned cbphi,
cbplo, flag2 = 0;
284 prev->
data[1] + (y >> 1) * prev->
linesize[1] + (x >> 1),
287 prev->
data[2] + (y >> 1) * prev->
linesize[2] + (x >> 1),
296 intra_block =
value & 0x07;
297 reverse = intra_block == 3;
308 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x,
309 frame->linesize[0],
s->block[0]);
310 s->idsp.idct_put(
frame->data[0] + y *
frame->linesize[0] + x + 8,
311 frame->linesize[0],
s->block[1]);
312 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x,
313 frame->linesize[0],
s->block[2]);
314 s->idsp.idct_put(
frame->data[0] + (y + 8) *
frame->linesize[0] + x + 8,
315 frame->linesize[0],
s->block[3]);
316 s->idsp.idct_put(
frame->data[1] + (y >> 1) *
frame->linesize[1] + (x >> 1),
317 frame->linesize[1],
s->block[4]);
318 s->idsp.idct_put(
frame->data[2] + (y >> 1) *
frame->linesize[2] + (x >> 1),
319 frame->linesize[2],
s->block[5]);
331 prev->
data[1] + (y >> 1) * prev->
linesize[1] + (x >> 1),
334 prev->
data[2] + (y >> 1) * prev->
linesize[2] + (x >> 1),
337 s->idsp.idct_add(
frame->data[0] + y *
frame->linesize[0] + x,
338 frame->linesize[0],
s->block[0]);
339 s->idsp.idct_add(
frame->data[0] + y *
frame->linesize[0] + x + 8,
340 frame->linesize[0],
s->block[1]);
341 s->idsp.idct_add(
frame->data[0] + (y + 8) *
frame->linesize[0] + x,
342 frame->linesize[0],
s->block[2]);
343 s->idsp.idct_add(
frame->data[0] + (y + 8) *
frame->linesize[0] + x + 8,
344 frame->linesize[0],
s->block[3]);
345 s->idsp.idct_add(
frame->data[1] + (y >> 1) *
frame->linesize[1] + (x >> 1),
346 frame->linesize[1],
s->block[4]);
347 s->idsp.idct_add(
frame->data[2] + (y >> 1) *
frame->linesize[2] + (x >> 1),
348 frame->linesize[2],
s->block[5]);
365 if (avpkt->
size <= 32)
373 s->bdsp.bswap_buf((uint32_t *)
s->bitstream,
374 (uint32_t *)avpkt->
data,
375 (avpkt->
size + 3) >> 2);
386 scaled = avpkt->
data[8];
425 frame->key_frame = 1;
429 frame->key_frame = 0;
439 if (!
frame->key_frame) {
453 if (
frame->key_frame) {
462 if (!
s->prev_frame->data[0]) {
501 for (
int i = 0;
i < 64;
i++)
530 s->bitstream_size = 0;