FFmpeg
Loading...
Searching...
No Matches
vc1.c
Go to the documentation of this file.
1/*
2 * VC-1 and WMV3 decoder common code
3 * Copyright (c) 2011 Mashiat Sarker Shakkhar
4 * Copyright (c) 2006-2007 Konstantin Shishkov
5 * Partly based on vc9.c (c) 2005 Anonymous, Alex Beregszaszi, Michael Niedermayer
6 *
7 * This file is part of FFmpeg.
8 *
9 * FFmpeg is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13 *
14 * FFmpeg is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with FFmpeg; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 */
23
24/**
25 * @file
26 * VC-1 and WMV3 decoder common code
27 */
28
29#include "libavutil/mem.h"
30#include "avcodec.h"
31#include "decode.h"
32#include "mpegvideo.h"
33#include "vc1.h"
34#include "vc1data.h"
35#include "wmv2data.h"
36#include "unary.h"
37
38/***********************************************************************/
39/**
40 * @name VC-1 Bitplane decoding
41 * @see 8.7, p56
42 * @{
43 */
44
45/** Decode rows by checking if they are skipped
46 * @param plane Buffer to store decoded bits
47 * @param[in] width Width of this buffer
48 * @param[in] height Height of this buffer
49 * @param[in] stride of this buffer
50 */
51static void decode_rowskip(uint8_t* plane, int width, int height, int stride,
52 GetBitContext *gb)
53{
54 int x, y;
55
56 for (y = 0; y < height; y++) {
57 if (!get_bits1(gb)) //rowskip
58 memset(plane, 0, width);
59 else
60 for (x = 0; x < width; x++)
61 plane[x] = get_bits1(gb);
62 plane += stride;
63 }
64}
65
66/** Decode columns by checking if they are skipped
67 * @param plane Buffer to store decoded bits
68 * @param[in] width Width of this buffer
69 * @param[in] height Height of this buffer
70 * @param[in] stride of this buffer
71 * @todo FIXME: Optimize
72 */
73static void decode_colskip(uint8_t* plane, int width, int height, int stride,
74 GetBitContext *gb)
75{
76 int x, y;
77
78 for (x = 0; x < width; x++) {
79 if (!get_bits1(gb)) //colskip
80 for (y = 0; y < height; y++)
81 plane[y*stride] = 0;
82 else
83 for (y = 0; y < height; y++)
84 plane[y*stride] = get_bits1(gb);
85 plane ++;
86 }
87}
88
89/** Decode a bitplane's bits
90 * @param data bitplane where to store the decode bits
91 * @param[out] raw_flag pointer to the flag indicating that this bitplane is not coded explicitly
92 * @param v VC-1 context for bit reading and logging
93 * @return Status
94 * @todo FIXME: Optimize
95 */
96static int bitplane_decoding(uint8_t* data, int *raw_flag, VC1Context *v)
97{
98 GetBitContext *const gb = &v->gb;
99
100 int imode, x, y, code, offset;
101 uint8_t invert, *planep = data;
102 int width, height, stride;
103
104 width = v->s.mb_width;
105 height = v->s.mb_height >> v->field_mode;
106 stride = v->s.mb_stride;
107 invert = get_bits1(gb);
109
110 *raw_flag = 0;
111 switch (imode) {
112 case IMODE_RAW:
113 //Data is actually read in the MB layer (same for all tests == "raw")
114 *raw_flag = 1; //invert ignored
115 return invert;
116 case IMODE_DIFF2:
117 case IMODE_NORM2:
118 if ((height * width) & 1) {
119 *planep++ = get_bits1(gb);
120 y = offset = 1;
121 if (offset == width) {
122 offset = 0;
123 planep += stride - width;
124 }
125 }
126 else
127 y = offset = 0;
128 // decode bitplane as one long line
129 for (; y < height * width; y += 2) {
131 *planep++ = code & 1;
132 offset++;
133 if (offset == width) {
134 offset = 0;
135 planep += stride - width;
136 }
137 *planep++ = code >> 1;
138 offset++;
139 if (offset == width) {
140 offset = 0;
141 planep += stride - width;
142 }
143 }
144 break;
145 case IMODE_DIFF6:
146 case IMODE_NORM6:
147 if (!(height % 3) && (width % 3)) { // use 2x3 decoding
148 for (y = 0; y < height; y += 3) {
149 for (x = width & 1; x < width; x += 2) {
151 if (code < 0) {
152 av_log(v->s.avctx, AV_LOG_DEBUG, "invalid NORM-6 VLC\n");
153 return -1;
154 }
155 planep[x + 0] = (code >> 0) & 1;
156 planep[x + 1] = (code >> 1) & 1;
157 planep[x + 0 + stride] = (code >> 2) & 1;
158 planep[x + 1 + stride] = (code >> 3) & 1;
159 planep[x + 0 + stride * 2] = (code >> 4) & 1;
160 planep[x + 1 + stride * 2] = (code >> 5) & 1;
161 }
162 planep += stride * 3;
163 }
164 if (width & 1)
166 } else { // 3x2
167 planep += (height & 1) * stride;
168 for (y = height & 1; y < height; y += 2) {
169 for (x = width % 3; x < width; x += 3) {
171 if (code < 0) {
172 av_log(v->s.avctx, AV_LOG_DEBUG, "invalid NORM-6 VLC\n");
173 return -1;
174 }
175 planep[x + 0] = (code >> 0) & 1;
176 planep[x + 1] = (code >> 1) & 1;
177 planep[x + 2] = (code >> 2) & 1;
178 planep[x + 0 + stride] = (code >> 3) & 1;
179 planep[x + 1 + stride] = (code >> 4) & 1;
180 planep[x + 2 + stride] = (code >> 5) & 1;
181 }
182 planep += stride * 2;
183 }
184 x = width % 3;
185 if (x)
187 if (height & 1)
188 decode_rowskip(data + x, width - x, 1, stride, &v->gb);
189 }
190 break;
191 case IMODE_ROWSKIP:
193 break;
194 case IMODE_COLSKIP:
196 break;
197 default:
198 break;
199 }
200
201 /* Applying diff operator */
202 if (imode == IMODE_DIFF2 || imode == IMODE_DIFF6) {
203 planep = data;
204 planep[0] ^= invert;
205 for (x = 1; x < width; x++)
206 planep[x] ^= planep[x-1];
207 for (y = 1; y < height; y++) {
208 planep += stride;
209 planep[0] ^= planep[-stride];
210 for (x = 1; x < width; x++) {
211 if (planep[x-1] != planep[x-stride]) planep[x] ^= invert;
212 else planep[x] ^= planep[x-1];
213 }
214 }
215 } else if (invert) {
216 planep = data;
217 for (x = 0; x < stride * height; x++)
218 planep[x] = !planep[x]; //FIXME stride
219 }
220 return (imode << 1) + invert;
221}
222
223/** @} */ //Bitplane group
224
225/***********************************************************************/
226/** VOP Dquant decoding
227 * @param v VC-1 Context
228 */
230{
231 GetBitContext *const gb = &v->gb;
232 int pqdiff;
233
234 //variable size
235 if (v->dquant != 2) {
236 v->dquantfrm = get_bits1(gb);
237 if (!v->dquantfrm)
238 return 0;
239
240 v->dqprofile = get_bits(gb, 2);
241 switch (v->dqprofile) {
244 v->dqsbedge = get_bits(gb, 2);
245 break;
247 v->dqbilevel = get_bits1(gb);
248 if (!v->dqbilevel) {
249 v->halfpq = 0;
250 return 0;
251 }
252 break;
253 default:
254 break; //Forbidden ?
255 }
256 }
257
258 pqdiff = get_bits(gb, 3);
259 if (pqdiff == 7)
260 v->altpq = get_bits(gb, 5);
261 else
262 v->altpq = v->pq + pqdiff + 1;
263
264 return 0;
265}
266
268
269/**
270 * Decode Simple/Main Profiles sequence header
271 * @see Figure 7-8, p16-17
272 * @param avctx Codec context
273 * @param gb GetBit context initialized from Codec context extra_data
274 * @return Status
275 */
277{
278 av_log(avctx, AV_LOG_DEBUG, "Header: %0X\n", show_bits_long(gb, 32));
279 v->profile = get_bits(gb, 2);
280 if (v->profile == PROFILE_COMPLEX) {
281 av_log(avctx, AV_LOG_WARNING, "WMV3 Complex Profile is not fully supported\n");
282 }
283
284 if (v->profile == PROFILE_ADVANCED) {
287 return decode_sequence_header_adv(v, gb);
288 } else {
289 v->chromaformat = 1;
292 v->res_y411 = get_bits1(gb);
293 v->res_sprite = get_bits1(gb);
294 if (v->res_y411) {
295 av_log(avctx, AV_LOG_ERROR,
296 "Old interlaced mode is not supported\n");
297 return -1;
298 }
299 }
300
301 // (fps-2)/4 (->30)
302 v->frmrtq_postproc = get_bits(gb, 3); //common
303 // (bitrate-32kbps)/64kbps
304 v->bitrtq_postproc = get_bits(gb, 5); //common
305 v->loop_filter = get_bits1(gb); //common
306 if (v->loop_filter == 1 && v->profile == PROFILE_SIMPLE) {
307 av_log(avctx, AV_LOG_ERROR,
308 "LOOPFILTER shall not be enabled in Simple Profile\n");
309 }
311 v->loop_filter = 0;
312
313 v->res_x8 = get_bits1(gb); //reserved
314 v->multires = get_bits1(gb);
315 v->res_fasttx = get_bits1(gb);
316
317 v->fastuvmc = get_bits1(gb); //common
318 if (!v->profile && !v->fastuvmc) {
319 av_log(avctx, AV_LOG_ERROR,
320 "FASTUVMC unavailable in Simple Profile\n");
321 return -1;
322 }
323 v->extended_mv = get_bits1(gb); //common
324 if (!v->profile && v->extended_mv) {
325 av_log(avctx, AV_LOG_ERROR,
326 "Extended MVs unavailable in Simple Profile\n");
327 return -1;
328 }
329 v->dquant = get_bits(gb, 2); //common
330 v->vstransform = get_bits1(gb); //common
331
332 v->res_transtab = get_bits1(gb);
333 if (v->res_transtab) {
334 av_log(avctx, AV_LOG_ERROR,
335 "1 for reserved RES_TRANSTAB is forbidden\n");
336 return -1;
337 }
338
339 v->overlap = get_bits1(gb); //common
340
341 v->resync_marker = get_bits1(gb);
342 v->rangered = get_bits1(gb);
343 if (v->rangered && v->profile == PROFILE_SIMPLE) {
344 av_log(avctx, AV_LOG_INFO,
345 "RANGERED should be set to 0 in Simple Profile\n");
346 }
347
348 v->max_b_frames = avctx->max_b_frames = get_bits(gb, 3); //common
349 v->quantizer_mode = get_bits(gb, 2); //common
350
351 v->finterpflag = get_bits1(gb); //common
352
353 if (v->res_sprite) {
354 int w = get_bits(gb, 11);
355 int h = get_bits(gb, 11);
356 int ret = ff_set_dimensions(v->s.avctx, w, h);
357 if (ret < 0) {
358 av_log(avctx, AV_LOG_ERROR, "Failed to set dimensions %d %d\n", w, h);
359 return ret;
360 }
361 skip_bits(gb, 5); //frame rate
362 v->res_x8 = get_bits1(gb);
363 if (get_bits1(gb)) { // something to do with DC VLC selection
364 av_log(avctx, AV_LOG_ERROR, "Unsupported sprite feature\n");
365 return -1;
366 }
367 skip_bits(gb, 3); //slice code
368 v->res_rtm_flag = 0;
369 } else {
370 v->res_rtm_flag = get_bits1(gb); //reserved
371 }
372 //TODO: figure out what they mean (always 0x402F)
373 if (!v->res_fasttx)
374 skip_bits(gb, 16);
375 av_log(avctx, AV_LOG_DEBUG,
376 "Profile %i:\nfrmrtq_postproc=%i, bitrtq_postproc=%i\n"
377 "LoopFilter=%i, MultiRes=%i, FastUVMC=%i, Extended MV=%i\n"
378 "Rangered=%i, VSTransform=%i, Overlap=%i, SyncMarker=%i\n"
379 "DQuant=%i, Quantizer mode=%i, Max B-frames=%i\n",
383 v->dquant, v->quantizer_mode, avctx->max_b_frames);
384 return 0;
385}
386
388{
389 v->res_rtm_flag = 1;
390 v->level = get_bits(gb, 3);
391 if (v->level >= 5) {
392 av_log(v->s.avctx, AV_LOG_ERROR, "Reserved LEVEL %i\n",v->level);
393 }
394 v->chromaformat = get_bits(gb, 2);
395 if (v->chromaformat != 1) {
397 "Only 4:2:0 chroma format supported\n");
398 return -1;
399 }
400
401 // (fps-2)/4 (->30)
402 v->frmrtq_postproc = get_bits(gb, 3); //common
403 // (bitrate-32kbps)/64kbps
404 v->bitrtq_postproc = get_bits(gb, 5); //common
405 v->postprocflag = get_bits1(gb); //common
406
407 v->max_coded_width = (get_bits(gb, 12) + 1) << 1;
408 v->max_coded_height = (get_bits(gb, 12) + 1) << 1;
409 v->broadcast = get_bits1(gb);
410 v->interlace = get_bits1(gb);
411 v->tfcntrflag = get_bits1(gb);
412 v->finterpflag = get_bits1(gb);
413 skip_bits1(gb); // reserved
414
416 "Advanced Profile level %i:\nfrmrtq_postproc=%i, bitrtq_postproc=%i\n"
417 "LoopFilter=%i, ChromaFormat=%i, Pulldown=%i, Interlace: %i\n"
418 "TFCTRflag=%i, FINTERPflag=%i\n",
421 v->tfcntrflag, v->finterpflag);
422
423 v->psf = get_bits1(gb);
424 if (v->psf) { //PsF, 6.1.13
425 av_log(v->s.avctx, AV_LOG_ERROR, "Progressive Segmented Frame mode: not supported (yet)\n");
426 return -1;
427 }
428 v->max_b_frames = v->s.avctx->max_b_frames = 7;
429 if (get_bits1(gb)) { //Display Info - decoding is not affected by it
430 int w, h, ar = 0;
431 av_log(v->s.avctx, AV_LOG_DEBUG, "Display extended info:\n");
432 w = get_bits(gb, 14) + 1;
433 h = get_bits(gb, 14) + 1;
434 av_log(v->s.avctx, AV_LOG_DEBUG, "Display dimensions: %ix%i\n", w, h);
435 if (get_bits1(gb))
436 ar = get_bits(gb, 4);
437 if (ar && ar < 14) {
439 } else if (ar == 15) {
440 w = get_bits(gb, 8) + 1;
441 h = get_bits(gb, 8) + 1;
443 } else {
444 if (v->s.avctx->width > v->max_coded_width ||
445 v->s.avctx->height > v->max_coded_height) {
446 avpriv_request_sample(v->s.avctx, "Huge resolution");
447 } else
450 v->s.avctx->height * w,
451 v->s.avctx->width * h,
452 1 << 30);
453 }
455 av_log(v->s.avctx, AV_LOG_DEBUG, "Aspect: %i:%i\n",
458
459 if (get_bits1(gb)) { //framerate stuff
460 if (get_bits1(gb)) {
461 v->s.avctx->framerate.den = 32;
462 v->s.avctx->framerate.num = get_bits(gb, 16) + 1;
463 } else {
464 int nr, dr;
465 nr = get_bits(gb, 8);
466 dr = get_bits(gb, 4);
467 if (nr > 0 && nr < 8 && dr > 0 && dr < 3) {
468 v->s.avctx->framerate.den = ff_vc1_fps_dr[dr - 1];
469 v->s.avctx->framerate.num = ff_vc1_fps_nr[nr - 1] * 1000;
470 }
471 }
472 }
473
474 if (get_bits1(gb)) {
475 v->color_prim = get_bits(gb, 8);
476 v->transfer_char = get_bits(gb, 8);
477 v->matrix_coef = get_bits(gb, 8);
478 }
479 }
480
481 v->hrd_param_flag = get_bits1(gb);
482 if (v->hrd_param_flag) {
483 int i;
485 skip_bits(gb, 4); //bitrate exponent
486 skip_bits(gb, 4); //buffer size exponent
487 for (i = 0; i < v->hrd_num_leaky_buckets; i++) {
488 skip_bits(gb, 16); //hrd_rate[n]
489 skip_bits(gb, 16); //hrd_buffer[n]
490 }
491 }
492 return 0;
493}
494
496{
497 int i;
498 int w,h;
499 int ret;
500
501 av_log(avctx, AV_LOG_DEBUG, "Entry point: %08X\n", show_bits_long(gb, 32));
502 v->broken_link = get_bits1(gb);
503 v->closed_entry = get_bits1(gb);
504 v->panscanflag = get_bits1(gb);
505 v->refdist_flag = get_bits1(gb);
506 v->loop_filter = get_bits1(gb);
508 v->loop_filter = 0;
509 v->fastuvmc = get_bits1(gb);
510 v->extended_mv = get_bits1(gb);
511 v->dquant = get_bits(gb, 2);
512 v->vstransform = get_bits1(gb);
513 v->overlap = get_bits1(gb);
514 v->quantizer_mode = get_bits(gb, 2);
515
516 if (v->hrd_param_flag) {
517 for (i = 0; i < v->hrd_num_leaky_buckets; i++) {
518 skip_bits(gb, 8); //hrd_full[n]
519 }
520 }
521
522 if(get_bits1(gb)){
523 w = (get_bits(gb, 12)+1)<<1;
524 h = (get_bits(gb, 12)+1)<<1;
525 } else {
526 w = v->max_coded_width;
527 h = v->max_coded_height;
528 }
529 if ((ret = ff_set_dimensions(avctx, w, h)) < 0) {
530 av_log(avctx, AV_LOG_ERROR, "Failed to set dimensions %d %d\n", w, h);
531 return ret;
532 }
533
534 if (v->extended_mv)
535 v->extended_dmv = get_bits1(gb);
536 if ((v->range_mapy_flag = get_bits1(gb))) {
537 av_log(avctx, AV_LOG_ERROR, "Luma scaling is not supported, expect wrong picture\n");
538 v->range_mapy = get_bits(gb, 3);
539 }
540 if ((v->range_mapuv_flag = get_bits1(gb))) {
541 av_log(avctx, AV_LOG_ERROR, "Chroma scaling is not supported, expect wrong picture\n");
542 v->range_mapuv = get_bits(gb, 3);
543 }
544
545 av_log(avctx, AV_LOG_DEBUG, "Entry point info:\n"
546 "BrokenLink=%i, ClosedEntry=%i, PanscanFlag=%i\n"
547 "RefDist=%i, Postproc=%i, FastUVMC=%i, ExtMV=%i\n"
548 "DQuant=%i, VSTransform=%i, Overlap=%i, Qmode=%i\n",
551
552 return 0;
553}
554
556 int *seq_initialized, int *ep_initialized)
557{
558 const uint8_t *start = avctx->extradata;
559 const uint8_t *end = avctx->extradata + avctx->extradata_size;
560 const uint8_t *next;
561 uint8_t *buf2;
562 GetBitContext gb;
563 int ret = 0;
564
565 *seq_initialized = 0;
566 *ep_initialized = 0;
567
569 if (!buf2)
570 return AVERROR(ENOMEM);
571
572 start = find_next_marker(start, end); // in WVC1 extradata first byte is its size, but can be 0 in mkv
573 next = start;
574 for (; next < end; start = next) {
575 int size, buf2_size;
576
577 next = find_next_marker(start + 4, end);
578 size = next - start - 4;
579 if (size <= 0)
580 continue;
581 buf2_size = v->vc1dsp.vc1_unescape_buffer(start + 4, size, buf2);
582 ret = init_get_bits8(&gb, buf2, buf2_size);
583 if (ret < 0)
584 break;
585 switch (AV_RB32(start)) {
586 case VC1_CODE_SEQHDR:
587 if ((ret = ff_vc1_decode_sequence_header(avctx, v, &gb)) < 0)
588 goto end;
589 *seq_initialized = 1;
590 break;
592 if ((ret = ff_vc1_decode_entry_point(avctx, v, &gb)) < 0)
593 goto end;
594 *ep_initialized = 1;
595 break;
596 }
597 }
598
599end:
600 av_free(buf2);
601 return ret;
602}
603
604/* fill lookup tables for intensity compensation */
605#define INIT_LUT(lumscale, lumshift, luty, lutuv, chain) do { \
606 int scale, shift, i; \
607 if (!lumscale) { \
608 scale = -64; \
609 shift = (255 - lumshift * 2) * 64; \
610 if (lumshift > 31) \
611 shift += 128 << 6; \
612 } else { \
613 scale = lumscale + 32; \
614 if (lumshift > 31) \
615 shift = (lumshift - 64) * 64; \
616 else \
617 shift = lumshift << 6; \
618 } \
619 for (i = 0; i < 256; i++) { \
620 int iy = chain ? luty[i] : i; \
621 int iu = chain ? lutuv[i] : i; \
622 luty[i] = av_clip_uint8((scale * iy + shift + 32) >> 6); \
623 lutuv[i] = av_clip_uint8((scale * (iu - 128) + 128*64 + 32) >> 6);\
624 } \
625 } while(0)
626
627static void rotate_luts(VC1Context *v)
628{
630 v->curr_use_ic = &v->aux_use_ic;
631 v->curr_luty = v->aux_luty;
632 v->curr_lutuv = v->aux_lutuv;
633 } else {
634#define ROTATE(DEF, L, N, C) do { \
635 DEF; \
636 memcpy(&tmp, L , sizeof(tmp)); \
637 memcpy(L , N , sizeof(tmp)); \
638 memcpy(N , &tmp, sizeof(tmp)); \
639 C = N; \
640 } while(0)
641
642 ROTATE(int tmp, &v->last_use_ic, &v->next_use_ic, v->curr_use_ic);
643 ROTATE(uint8_t tmp[2][256], v->last_luty, v->next_luty, v->curr_luty);
644 ROTATE(uint8_t tmp[2][256], v->last_lutuv, v->next_lutuv, v->curr_lutuv);
645 }
646
647 INIT_LUT(32, 0, v->curr_luty[0], v->curr_lutuv[0], 0);
648 INIT_LUT(32, 0, v->curr_luty[1], v->curr_lutuv[1], 0);
649 *v->curr_use_ic = 0;
650}
651
653 int bfraction_lut_index = get_bits(gb, 3);
654
655 if (bfraction_lut_index == 7)
656 bfraction_lut_index = 7 + get_bits(gb, 4);
657
658 if (bfraction_lut_index == 21) {
659 av_log(v->s.avctx, AV_LOG_ERROR, "bfraction invalid\n");
660 return AVERROR_INVALIDDATA;
661 }
662 v->bfraction_lut_index = bfraction_lut_index;
664 return 0;
665}
666
668{
669 int pqindex, lowquant, status;
670
671 v->field_mode = 0;
672 v->fcm = PROGRESSIVE;
673 if (v->finterpflag)
674 v->interpfrm = get_bits1(gb);
675 if (v->s.avctx->codec_id == AV_CODEC_ID_MSS2)
676 v->respic =
677 v->rangered =
678 v->multires = get_bits(gb, 2) == 1;
679 else
680 skip_bits(gb, 2); //framecnt unused
681 v->rangeredfrm = 0;
682 if (v->rangered)
683 v->rangeredfrm = get_bits1(gb);
684 if (get_bits1(gb)) {
686 } else {
687 if (v->s.avctx->max_b_frames && !get_bits1(gb)) {
689 } else
691 }
692
693 v->bi_type = 0;
694 if (v->s.pict_type == AV_PICTURE_TYPE_B) {
695 if (read_bfraction(v, gb) < 0)
696 return AVERROR_INVALIDDATA;
697 if (v->bfraction == 0) {
699 }
700 }
702 skip_bits(gb, 7); // skip buffer fullness
703
704 if (v->parse_only)
705 return 0;
706
707 /* calculate RND */
709 v->rnd = 1;
710 if (v->s.pict_type == AV_PICTURE_TYPE_P)
711 v->rnd ^= 1;
712
713 if (get_bits_left(gb) < 5)
714 return AVERROR_INVALIDDATA;
715 /* Quantizer stuff */
716 pqindex = get_bits(gb, 5);
717 if (!pqindex)
718 return -1;
720 v->pq = ff_vc1_pquant_table[0][pqindex];
721 else
722 v->pq = ff_vc1_pquant_table[1][pqindex];
723 v->pqindex = pqindex;
724 if (pqindex < 9)
725 v->halfpq = get_bits1(gb);
726 else
727 v->halfpq = 0;
728 switch (v->quantizer_mode) {
730 v->pquantizer = pqindex < 9;
731 break;
733 v->pquantizer = 0;
734 break;
736 v->pquantizer = get_bits1(gb);
737 break;
738 default:
739 v->pquantizer = 1;
740 break;
741 }
742 v->dquantfrm = 0;
743 if (v->extended_mv == 1)
744 v->mvrange = get_unary(gb, 0, 3);
745 v->k_x = v->mvrange + 9 + (v->mvrange >> 1); //k_x can be 9 10 12 13
746 v->k_y = v->mvrange + 8; //k_y can be 8 9 10 11
747 v->range_x = 1 << (v->k_x - 1);
748 v->range_y = 1 << (v->k_y - 1);
749 if (v->multires && v->s.pict_type != AV_PICTURE_TYPE_B)
750 v->respic = get_bits(gb, 2);
751
752 if (v->res_x8 && (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI)) {
753 v->x8_type = get_bits1(gb);
754 } else
755 v->x8_type = 0;
756 ff_dlog(v->s.avctx, "%c Frame: QP=[%i]%i (+%i/2) %i\n",
757 (v->s.pict_type == AV_PICTURE_TYPE_P) ? 'P' : ((v->s.pict_type == AV_PICTURE_TYPE_I) ? 'I' : 'B'),
758 pqindex, v->pq, v->halfpq, v->rangeredfrm);
759
761 rotate_luts(v);
762
763 switch (v->s.pict_type) {
765 v->tt_index = (v->pq > 4) + (v->pq > 12);
766
767 lowquant = (v->pq > 12) ? 0 : 1;
768 v->mv_mode = ff_vc1_mv_pmode_table[lowquant][get_unary(gb, 1, 4)];
770 v->mv_mode2 = ff_vc1_mv_pmode_table2[lowquant][get_unary(gb, 1, 3)];
771 v->lumscale = get_bits(gb, 6);
772 v->lumshift = get_bits(gb, 6);
773 v->last_use_ic = 1;
774 /* fill lookup tables for intensity compensation */
775 INIT_LUT(v->lumscale, v->lumshift, v->last_luty[0], v->last_lutuv[0], 1);
776 INIT_LUT(v->lumscale, v->lumshift, v->last_luty[1], v->last_lutuv[1], 1);
777 }
782 } else {
786 }
787
788 if ((v->mv_mode == MV_PMODE_INTENSITY_COMP &&
792 if (status < 0)
793 return -1;
794 av_log(v->s.avctx, AV_LOG_DEBUG, "MB MV Type plane encoding: "
795 "Imode: %i, Invert: %i\n", status>>1, status&1);
796 } else {
797 v->mv_type_is_raw = 0;
798 memset(v->mv_type_mb_plane, 0, v->s.mb_stride * v->s.mb_height);
799 }
800 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
801 if (status < 0)
802 return -1;
803 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
804 "Imode: %i, Invert: %i\n", status>>1, status&1);
805
806 if (get_bits_left(gb) < 4)
807 return AVERROR_INVALIDDATA;
808
809 /* Hopefully this is correct for P-frames */
810 v->mv_table_index = get_bits(gb, 2); //but using ff_vc1_ tables
811 v->cbptab = get_bits(gb, 2);
813
814 if (v->dquant) {
815 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
817 }
818
819 if (v->vstransform) {
820 v->ttmbf = get_bits1(gb);
821 if (v->ttmbf) {
822 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
823 } else
824 v->ttfrm = 0; //FIXME Is that so ?
825 } else {
826 v->ttmbf = 1;
827 v->ttfrm = TT_8X8;
828 }
829 break;
831 v->tt_index = (v->pq > 4) + (v->pq > 12);
832
835 v->s.mspel = v->s.quarter_sample;
836
837 status = bitplane_decoding(v->direct_mb_plane, &v->dmb_is_raw, v);
838 if (status < 0)
839 return -1;
840 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Direct Type plane encoding: "
841 "Imode: %i, Invert: %i\n", status>>1, status&1);
842 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
843 if (status < 0)
844 return -1;
845 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
846 "Imode: %i, Invert: %i\n", status>>1, status&1);
847
848 v->mv_table_index = get_bits(gb, 2);
849 v->cbptab = get_bits(gb, 2);
851
852 if (v->dquant) {
853 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
855 }
856
857 if (v->vstransform) {
858 v->ttmbf = get_bits1(gb);
859 if (v->ttmbf) {
860 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
861 } else
862 v->ttfrm = 0;
863 } else {
864 v->ttmbf = 1;
865 v->ttfrm = TT_8X8;
866 }
867 break;
868 }
869
870 if (!v->x8_type) {
871 /* AC Syntax */
875 }
876 /* DC Syntax */
877 v->dc_table_index = get_bits1(gb);
878 }
879
880 if (v->s.pict_type == AV_PICTURE_TYPE_BI) {
882 v->bi_type = 1;
883 }
884 return 0;
885}
886
888{
889 int pqindex, lowquant;
890 int status;
891 int field_mode, fcm;
892
893 v->numref = 0;
894 v->p_frame_skipped = 0;
895 if (v->second_field) {
896 if (v->fcm != ILACE_FIELD || v->field_mode!=1)
897 return -1;
898 if (v->fptype & 4)
900 else
902 v->s.cur_pic.ptr->f->pict_type = v->s.pict_type;
903 if (!v->pic_header_flag)
904 goto parse_common_info;
905 }
906
907 field_mode = 0;
908 if (v->interlace) {
909 fcm = decode012(gb);
910 if (fcm) {
911 if (fcm == ILACE_FIELD)
912 field_mode = 1;
913 }
914 } else {
915 fcm = PROGRESSIVE;
916 }
917 if (!v->first_pic_header_flag && v->field_mode != field_mode)
918 return AVERROR_INVALIDDATA;
919 v->field_mode = field_mode;
920 v->fcm = fcm;
921
922 av_assert0( v->s.mb_height == v->s.height + 15 >> 4
923 || v->s.mb_height == FFALIGN(v->s.height + 15 >> 4, 2));
924 if (v->field_mode) {
925 v->s.mb_height = FFALIGN(v->s.height + 15 >> 4, 2);
926 v->fptype = get_bits(gb, 3);
927 if (v->fptype & 4) // B-picture
929 else
931 } else {
932 v->s.mb_height = v->s.height + 15 >> 4;
933 switch (get_unary(gb, 0, 4)) {
934 case 0:
936 break;
937 case 1:
939 break;
940 case 2:
942 break;
943 case 3:
945 break;
946 case 4:
947 v->s.pict_type = AV_PICTURE_TYPE_P; // skipped pic
948 v->p_frame_skipped = 1;
949 break;
950 }
951 }
952 if (v->tfcntrflag)
953 skip_bits(gb, 8);
954 if (v->broadcast) {
955 if (!v->interlace || v->psf) {
956 v->rptfrm = get_bits(gb, 2);
957 } else {
958 v->tff = get_bits1(gb);
959 v->rff = get_bits1(gb);
960 }
961 } else {
962 v->tff = 1;
963 }
964 if (v->panscanflag) {
965 avpriv_report_missing_feature(v->s.avctx, "Pan-scan");
966 //...
967 }
968 if (v->p_frame_skipped) {
969 return 0;
970 }
971 v->rnd = get_bits1(gb);
972 if (v->interlace)
973 v->uvsamp = get_bits1(gb);
974 if (v->field_mode) {
975 if (!v->refdist_flag)
976 v->refdist = 0;
977 else if ((v->s.pict_type != AV_PICTURE_TYPE_B) && (v->s.pict_type != AV_PICTURE_TYPE_BI)) {
978 v->refdist = get_bits(gb, 2);
979 if (v->refdist == 3)
980 v->refdist += get_unary(gb, 0, 14);
981 if (v->refdist > 16)
982 return AVERROR_INVALIDDATA;
983 }
985 if (read_bfraction(v, gb) < 0)
986 return AVERROR_INVALIDDATA;
987 v->frfd = (v->bfraction * v->refdist) >> 8;
988 v->brfd = v->refdist - v->frfd - 1;
989 if (v->brfd < 0)
990 v->brfd = 0;
991 }
992 goto parse_common_info;
993 }
994 if (v->fcm == PROGRESSIVE) {
995 if (v->finterpflag)
996 v->interpfrm = get_bits1(gb);
997 if (v->s.pict_type == AV_PICTURE_TYPE_B) {
998 if (read_bfraction(v, gb) < 0)
999 return AVERROR_INVALIDDATA;
1000 if (v->bfraction == 0) {
1001 v->s.pict_type = AV_PICTURE_TYPE_BI; /* XXX: should not happen here */
1002 }
1003 }
1004 }
1005
1006 parse_common_info:
1007 if (v->field_mode)
1008 v->cur_field_type = !(v->tff ^ v->second_field);
1009 pqindex = get_bits(gb, 5);
1010 if (!pqindex)
1011 return -1;
1013 v->pq = ff_vc1_pquant_table[0][pqindex];
1014 else
1015 v->pq = ff_vc1_pquant_table[1][pqindex];
1016 v->pqindex = pqindex;
1017 if (pqindex < 9)
1018 v->halfpq = get_bits1(gb);
1019 else
1020 v->halfpq = 0;
1021 switch (v->quantizer_mode) {
1023 v->pquantizer = pqindex < 9;
1024 break;
1025 case QUANT_NON_UNIFORM:
1026 v->pquantizer = 0;
1027 break;
1029 v->pquantizer = get_bits1(gb);
1030 break;
1031 default:
1032 v->pquantizer = 1;
1033 break;
1034 }
1035 v->dquantfrm = 0;
1036 if (v->postprocflag)
1037 v->postproc = get_bits(gb, 2);
1038
1039 if (v->parse_only)
1040 return 0;
1041
1042 if (v->first_pic_header_flag)
1043 rotate_luts(v);
1044
1045 switch (v->s.pict_type) {
1046 case AV_PICTURE_TYPE_I:
1047 case AV_PICTURE_TYPE_BI:
1048 if (v->fcm == ILACE_FRAME) { //interlace frame picture
1049 status = bitplane_decoding(v->fieldtx_plane, &v->fieldtx_is_raw, v);
1050 if (status < 0)
1051 return -1;
1052 av_log(v->s.avctx, AV_LOG_DEBUG, "FIELDTX plane encoding: "
1053 "Imode: %i, Invert: %i\n", status>>1, status&1);
1054 } else
1055 v->fieldtx_is_raw = 0;
1056 status = bitplane_decoding(v->acpred_plane, &v->acpred_is_raw, v);
1057 if (status < 0)
1058 return -1;
1059 av_log(v->s.avctx, AV_LOG_DEBUG, "ACPRED plane encoding: "
1060 "Imode: %i, Invert: %i\n", status>>1, status&1);
1062 if (v->overlap && v->pq <= 8) {
1063 v->condover = decode012(gb);
1064 if (v->condover == CONDOVER_SELECT) {
1066 if (status < 0)
1067 return -1;
1068 av_log(v->s.avctx, AV_LOG_DEBUG, "CONDOVER plane encoding: "
1069 "Imode: %i, Invert: %i\n", status>>1, status&1);
1070 }
1071 }
1072 break;
1073 case AV_PICTURE_TYPE_P:
1074 if (v->field_mode) {
1075 v->numref = get_bits1(gb);
1076 if (!v->numref) {
1077 v->reffield = get_bits1(gb);
1078 v->ref_field_type[0] = v->reffield ^ !v->cur_field_type;
1079 }
1080 }
1081 if (v->extended_mv)
1082 v->mvrange = get_unary(gb, 0, 3);
1083 else
1084 v->mvrange = 0;
1085 if (v->interlace) {
1086 if (v->extended_dmv)
1087 v->dmvrange = get_unary(gb, 0, 3);
1088 else
1089 v->dmvrange = 0;
1090 if (v->fcm == ILACE_FRAME) { // interlaced frame picture
1091 v->fourmvswitch = get_bits1(gb);
1092 v->intcomp = get_bits1(gb);
1093 if (v->intcomp) {
1094 v->lumscale = get_bits(gb, 6);
1095 v->lumshift = get_bits(gb, 6);
1096 INIT_LUT(v->lumscale, v->lumshift, v->last_luty[0], v->last_lutuv[0], 1);
1097 INIT_LUT(v->lumscale, v->lumshift, v->last_luty[1], v->last_lutuv[1], 1);
1098 v->last_use_ic = 1;
1099 }
1100 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
1101 if (status < 0)
1102 return -1;
1103 av_log(v->s.avctx, AV_LOG_DEBUG, "SKIPMB plane encoding: "
1104 "Imode: %i, Invert: %i\n", status>>1, status&1);
1105 v->mbmodetab = get_bits(gb, 2);
1106 if (v->fourmvswitch)
1108 else
1110 v->imvtab = get_bits(gb, 2);
1112 // interlaced p-picture cbpcy range is [1, 63]
1113 v->icbptab = get_bits(gb, 3);
1115 v->twomvbptab = get_bits(gb, 2);
1117 if (v->fourmvswitch) {
1118 v->fourmvbptab = get_bits(gb, 2);
1120 }
1121 }
1122 }
1123 v->k_x = v->mvrange + 9 + (v->mvrange >> 1); //k_x can be 9 10 12 13
1124 v->k_y = v->mvrange + 8; //k_y can be 8 9 10 11
1125 v->range_x = 1 << (v->k_x - 1);
1126 v->range_y = 1 << (v->k_y - 1);
1127
1128 v->tt_index = (v->pq > 4) + (v->pq > 12);
1129 if (v->fcm != ILACE_FRAME) {
1130 int mvmode;
1131 mvmode = get_unary(gb, 1, 4);
1132 lowquant = (v->pq > 12) ? 0 : 1;
1133 v->mv_mode = ff_vc1_mv_pmode_table[lowquant][mvmode];
1134 if (v->mv_mode == MV_PMODE_INTENSITY_COMP) {
1135 int mvmode2;
1136 mvmode2 = get_unary(gb, 1, 3);
1137 v->mv_mode2 = ff_vc1_mv_pmode_table2[lowquant][mvmode2];
1138 if (v->field_mode) {
1139 v->intcompfield = decode210(gb) ^ 3;
1140 } else
1141 v->intcompfield = 3;
1142
1143 v->lumscale2 = v->lumscale = 32;
1144 v->lumshift2 = v->lumshift = 0;
1145 if (v->intcompfield & 1) {
1146 v->lumscale = get_bits(gb, 6);
1147 v->lumshift = get_bits(gb, 6);
1148 }
1149 if ((v->intcompfield & 2) && v->field_mode) {
1150 v->lumscale2 = get_bits(gb, 6);
1151 v->lumshift2 = get_bits(gb, 6);
1152 } else if(!v->field_mode) {
1153 v->lumscale2 = v->lumscale;
1154 v->lumshift2 = v->lumshift;
1155 }
1156 if (v->field_mode && v->second_field) {
1157 if (v->cur_field_type) {
1160 } else {
1163 }
1164 v->next_use_ic = *v->curr_use_ic = 1;
1165 } else {
1166 INIT_LUT(v->lumscale , v->lumshift , v->last_luty[0], v->last_lutuv[0], 1);
1167 INIT_LUT(v->lumscale2, v->lumshift2, v->last_luty[1], v->last_lutuv[1], 1);
1168 }
1169 v->last_use_ic = 1;
1170 }
1171 if (v->mv_mode == MV_PMODE_INTENSITY_COMP) {
1175 } else {
1179 }
1180 }
1181 if (v->fcm == PROGRESSIVE) { // progressive
1182 if ((v->mv_mode == MV_PMODE_INTENSITY_COMP &&
1184 || v->mv_mode == MV_PMODE_MIXED_MV) {
1186 if (status < 0)
1187 return -1;
1188 av_log(v->s.avctx, AV_LOG_DEBUG, "MB MV Type plane encoding: "
1189 "Imode: %i, Invert: %i\n", status>>1, status&1);
1190 } else {
1191 v->mv_type_is_raw = 0;
1192 memset(v->mv_type_mb_plane, 0, v->s.mb_stride * v->s.mb_height);
1193 }
1194 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
1195 if (status < 0)
1196 return -1;
1197 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
1198 "Imode: %i, Invert: %i\n", status>>1, status&1);
1199
1200 /* Hopefully this is correct for P-frames */
1201 v->mv_table_index = get_bits(gb, 2); //but using ff_vc1_ tables
1202 v->cbptab = get_bits(gb, 2);
1204 } else if (v->fcm == ILACE_FRAME) { // frame interlaced
1205 v->s.quarter_sample = 1;
1206 v->s.mspel = 1;
1207 } else { // field interlaced
1208 v->mbmodetab = get_bits(gb, 3);
1209 v->imvtab = get_bits(gb, 2 + v->numref);
1210 if (!v->numref)
1212 else
1214 v->icbptab = get_bits(gb, 3);
1216 if ((v->mv_mode == MV_PMODE_INTENSITY_COMP &&
1218 v->fourmvbptab = get_bits(gb, 2);
1221 } else {
1223 }
1224 }
1225 if (v->dquant) {
1226 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
1228 }
1229
1230 if (v->vstransform) {
1231 v->ttmbf = get_bits1(gb);
1232 if (v->ttmbf) {
1233 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
1234 } else
1235 v->ttfrm = 0; //FIXME Is that so ?
1236 } else {
1237 v->ttmbf = 1;
1238 v->ttfrm = TT_8X8;
1239 }
1240 break;
1241 case AV_PICTURE_TYPE_B:
1242 if (v->fcm == ILACE_FRAME) {
1243 if (read_bfraction(v, gb) < 0)
1244 return AVERROR_INVALIDDATA;
1245 if (v->bfraction == 0) {
1246 return -1;
1247 }
1248 }
1249 if (v->extended_mv)
1250 v->mvrange = get_unary(gb, 0, 3);
1251 else
1252 v->mvrange = 0;
1253 v->k_x = v->mvrange + 9 + (v->mvrange >> 1); //k_x can be 9 10 12 13
1254 v->k_y = v->mvrange + 8; //k_y can be 8 9 10 11
1255 v->range_x = 1 << (v->k_x - 1);
1256 v->range_y = 1 << (v->k_y - 1);
1257
1258 v->tt_index = (v->pq > 4) + (v->pq > 12);
1259
1260 if (v->field_mode) {
1261 int mvmode;
1262 av_log(v->s.avctx, AV_LOG_DEBUG, "B Fields\n");
1263 if (v->extended_dmv)
1264 v->dmvrange = get_unary(gb, 0, 3);
1265 mvmode = get_unary(gb, 1, 3);
1266 lowquant = (v->pq > 12) ? 0 : 1;
1267 v->mv_mode = ff_vc1_mv_pmode_table2[lowquant][mvmode];
1270 status = bitplane_decoding(v->forward_mb_plane, &v->fmb_is_raw, v);
1271 if (status < 0)
1272 return -1;
1273 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Forward Type plane encoding: "
1274 "Imode: %i, Invert: %i\n", status>>1, status&1);
1275 v->mbmodetab = get_bits(gb, 3);
1276 if (v->mv_mode == MV_PMODE_MIXED_MV)
1278 else
1280 v->imvtab = get_bits(gb, 3);
1282 v->icbptab = get_bits(gb, 3);
1284 if (v->mv_mode == MV_PMODE_MIXED_MV) {
1285 v->fourmvbptab = get_bits(gb, 2);
1287 }
1288 v->numref = 1; // interlaced field B pictures are always 2-ref
1289 } else if (v->fcm == ILACE_FRAME) {
1290 if (v->extended_dmv)
1291 v->dmvrange = get_unary(gb, 0, 3);
1292 if (get_bits1(gb)) /* intcomp - present but shall always be 0 */
1293 av_log(v->s.avctx, AV_LOG_WARNING, "Intensity compensation set for B picture\n");
1294 v->intcomp = 0;
1295 v->mv_mode = MV_PMODE_1MV;
1296 v->fourmvswitch = 0;
1297 v->s.quarter_sample = 1;
1298 v->s.mspel = 1;
1299 status = bitplane_decoding(v->direct_mb_plane, &v->dmb_is_raw, v);
1300 if (status < 0)
1301 return -1;
1302 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Direct Type plane encoding: "
1303 "Imode: %i, Invert: %i\n", status>>1, status&1);
1304 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
1305 if (status < 0)
1306 return -1;
1307 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
1308 "Imode: %i, Invert: %i\n", status>>1, status&1);
1309 v->mbmodetab = get_bits(gb, 2);
1311 v->imvtab = get_bits(gb, 2);
1313 // interlaced p/b-picture cbpcy range is [1, 63]
1314 v->icbptab = get_bits(gb, 3);
1316 v->twomvbptab = get_bits(gb, 2);
1318 v->fourmvbptab = get_bits(gb, 2);
1320 } else {
1322 v->s.quarter_sample = (v->mv_mode == MV_PMODE_1MV);
1323 v->s.mspel = v->s.quarter_sample;
1324 status = bitplane_decoding(v->direct_mb_plane, &v->dmb_is_raw, v);
1325 if (status < 0)
1326 return -1;
1327 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Direct Type plane encoding: "
1328 "Imode: %i, Invert: %i\n", status>>1, status&1);
1329 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
1330 if (status < 0)
1331 return -1;
1332 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
1333 "Imode: %i, Invert: %i\n", status>>1, status&1);
1334 v->mv_table_index = get_bits(gb, 2);
1335 v->cbptab = get_bits(gb, 2);
1337 }
1338
1339 if (v->dquant) {
1340 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
1342 }
1343
1344 if (v->vstransform) {
1345 v->ttmbf = get_bits1(gb);
1346 if (v->ttmbf) {
1347 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
1348 } else
1349 v->ttfrm = 0;
1350 } else {
1351 v->ttmbf = 1;
1352 v->ttfrm = TT_8X8;
1353 }
1354 break;
1355 }
1356
1357
1358 /* AC Syntax */
1359 v->c_ac_table_index = decode012(gb);
1361 v->y_ac_table_index = decode012(gb);
1362 }
1363 else if (v->fcm != PROGRESSIVE && !v->s.quarter_sample) {
1364 v->range_x <<= 1;
1365 v->range_y <<= 1;
1366 }
1367
1368 /* DC Syntax */
1369 v->dc_table_index = get_bits1(gb);
1371 && v->dquant) {
1372 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
1374 }
1375
1377 if (v->bi_type)
1379
1380 return 0;
1381}
static void invert(float *h, int n)
Definition asrc_sinc.c:186
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition avassert.h:42
Libavcodec external API header.
static int BS_FUNC decode012(BSCTX *bc)
Return decoded truncated unary code for the values 0, 1, 2.
static int BS_FUNC decode210(BSCTX *bc)
Return decoded truncated unary code for the values 2, 1, 0.
#define i(width, name, range_min, range_max)
Definition cbs_h264.c:63
int ff_set_sar(AVCodecContext *avctx, AVRational sar)
Check that the provided sample aspect ratio is valid and set it on the codec context.
Definition utils.c:106
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Definition utils.c:91
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
Definition get_bits.h:498
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition get_bits.h:645
static int get_bits_left(GetBitContext *gb)
Definition get_bits.h:688
static unsigned int get_bits1(GetBitContext *s)
Definition get_bits.h:391
static void skip_bits(GetBitContext *s, int n)
Definition get_bits.h:383
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
Definition get_bits.h:544
static void skip_bits1(GetBitContext *s)
Definition get_bits.h:416
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition get_bits.h:337
@ AV_CODEC_ID_MSS2
Definition codec_id.h:216
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
Definition defs.h:40
@ AVDISCARD_ALL
discard all
Definition defs.h:241
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition error.h:61
#define AVERROR(e)
Definition error.h:45
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition log.h:231
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition log.h:216
#define AV_LOG_INFO
Standard information.
Definition log.h:221
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition log.h:210
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
Definition rational.c:35
@ AV_PICTURE_TYPE_I
Intra.
Definition avutil.h:278
@ AV_PICTURE_TYPE_BI
BI type.
Definition avutil.h:284
@ AV_PICTURE_TYPE_P
Predicted.
Definition avutil.h:279
@ AV_PICTURE_TYPE_B
Bi-dir predicted.
Definition avutil.h:280
#define AV_RB32(p)
unsigned offset
Definition libaomenc.c:763
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
uint8_t w
Definition llvidencdsp.c:39
#define FFALIGN(x, a)
Definition macros.h:78
Memory handling functions.
mpegvideo header.
const char data[16]
Definition mxf.c:149
const uint8_t * code
Definition spdifenc.c:433
main external API structure.
Definition avcodec.h:443
int width
picture width / height.
Definition avcodec.h:604
int max_b_frames
maximum number of B-frames between non-B-frames Note: The output will be delayed by max_b_frames+1 re...
Definition avcodec.h:781
AVRational framerate
Definition avcodec.h:563
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
Definition avcodec.h:628
enum AVDiscard skip_loop_filter
Skip loop filtering for selected frames.
Definition avcodec.h:1658
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition avcodec.h:526
enum AVCodecID codec_id
Definition avcodec.h:453
int extradata_size
Definition avcodec.h:527
enum AVPictureType pict_type
Picture type of the frame.
Definition frame.h:564
Rational number (pair of numerator and denominator).
Definition rational.h:58
int num
Numerator.
Definition rational.h:59
int den
Denominator.
Definition rational.h:60
struct AVFrame * f
Definition mpegpicture.h:59
MPVPicture * ptr
RefStruct reference.
Definition mpegpicture.h:99
int mb_stride
mb_width+1 used for some arrays to allow simple addressing of left & top MBs without sig11
Definition mpegvideo.h:97
struct AVCodecContext * avctx
Definition mpegvideo.h:82
int mb_height
number of MBs horizontally & vertically
Definition mpegvideo.h:96
int quarter_sample
1->qpel, 0->half pel ME/MC
Definition mpegvideo.h:230
int height
picture size. must be a multiple of 16
Definition mpegvideo.h:84
enum AVPictureType pict_type
AV_PICTURE_TYPE_I, AV_PICTURE_TYPE_P, AV_PICTURE_TYPE_B, ...
Definition mpegvideo.h:154
uint8_t * mbskip_table
used to avoid copy if macroblock skipped (for black regions for example) and used for B-frame encodin...
Definition mpegvideo.h:144
MPVWorkPicture cur_pic
copy of the current picture structure.
Definition mpegvideo.h:132
The VC1 Context.
Definition vc1.h:176
int loop_filter
Definition vc1.h:223
uint8_t lumshift2
Definition vc1.h:343
int pqindex
raw pqindex used in coding set selection
Definition vc1.h:269
int tfcntrflag
TFCNTR present.
Definition vc1.h:204
int twomvbptab
Definition vc1.h:376
uint8_t uvsamp
Definition vc1.h:322
int transfer_char
8 bits, Opto-electronic transfer characteristics
Definition vc1.h:209
uint8_t((* curr_lutuv)[256]
Definition vc1.h:304
int profile
Sequence header data for all Profiles TODO: choose between ints, uint8_ts and monobit flags.
Definition vc1.h:220
int tt_index
Index for Transform Type tables (to decode TTMB)
Definition vc1.h:292
int imvtab
Definition vc1.h:375
int cbptab
Definition vc1.h:308
int range_x
Definition vc1.h:241
int * curr_use_ic
Definition vc1.h:305
int res_x8
reserved
Definition vc1.h:187
int k_x
Number of bits for MVs (depends on MV range)
Definition vc1.h:239
uint8_t * over_flags_plane
Overflags bitplane.
Definition vc1.h:329
int range_y
MV range.
Definition vc1.h:241
uint8_t * direct_mb_plane
bitplane for "direct" MBs
Definition vc1.h:295
int pic_header_flag
Definition vc1.h:372
uint8_t last_luty[2][256]
Definition vc1.h:301
const VLCElem * fourmvbp_vlc
Definition vc1.h:347
int first_pic_header_flag
Definition vc1.h:371
uint8_t bfraction_lut_index
Index for BFRACTION value (see Table 40, reproduced into ff_vc1_bfraction_lut[])
Definition vc1.h:397
int max_coded_width
Definition vc1.h:224
int brfd
reference frame distance (forward or backward)
Definition vc1.h:370
uint8_t lumshift
Definition vc1.h:277
uint8_t interpfrm
Definition vc1.h:313
int p_frame_skipped
Definition vc1.h:388
int skip_is_raw
skip mb plane is not coded
Definition vc1.h:300
int dquant
How qscale varies with MBs, 2 bits (not in Simple)
Definition vc1.h:227
uint8_t tff
Definition vc1.h:321
int reffield
if numref = 0 (1 reference) then reffield decides which
Definition vc1.h:362
int multires
frame-level RESPIC syntax element present
Definition vc1.h:188
const uint8_t * zz_4x8
Zigzag scan table for TT_4x8 coding mode.
Definition vc1.h:246
uint8_t ttmbf
Transform type flag.
Definition vc1.h:265
int fieldtx_is_raw
Definition vc1.h:351
const VLCElem * cbpcy_vlc
CBPCY VLC table.
Definition vc1.h:291
VC1DSPContext vc1dsp
Definition vc1.h:181
int ref_field_type[2]
forward and backward reference field type (top or bottom)
Definition vc1.h:367
int finterpflag
INTERPFRM present.
Definition vc1.h:232
uint8_t range_mapuv_flag
Definition vc1.h:333
int extended_mv
Ext MV in P/B (not in Simple)
Definition vc1.h:226
uint8_t range_mapy_flag
Definition vc1.h:332
uint8_t pquantizer
Uniform (over sequence) quantizer in use.
Definition vc1.h:290
int bi_type
Definition vc1.h:389
int acpred_is_raw
Definition vc1.h:328
int icbptab
Definition vc1.h:374
int second_field
Definition vc1.h:358
int fourmvswitch
Definition vc1.h:340
uint8_t range_mapy
Definition vc1.h:334
uint8_t pq
Definition vc1.h:242
uint8_t altpq
Current/alternate frame quantizer scale.
Definition vc1.h:242
int extended_dmv
Additional extended dmv range at P/B-frame-level.
Definition vc1.h:207
uint8_t dqbilevel
Definition vc1.h:252
int panscanflag
NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present.
Definition vc1.h:205
int parse_only
Context is used within parser.
Definition vc1.h:403
uint8_t mv_mode2
Secondary MV coding mode (B-frames)
Definition vc1.h:238
const VLCElem * imv_vlc
Definition vc1.h:345
int psf
Progressive Segmented Frame.
Definition vc1.h:213
int res_rtm_flag
reserved, set to 1
Definition vc1.h:193
int res_fasttx
reserved, always 1
Definition vc1.h:189
int refdist
distance of the current picture from reference
Definition vc1.h:359
int field_mode
1 for interlaced field pictures
Definition vc1.h:356
uint8_t broken_link
Broken link flag (BROKEN_LINK syntax element)
Definition vc1.h:398
int16_t bfraction
Relative position % anchors=> how to scale MVs.
Definition vc1.h:279
uint8_t rangeredfrm
Frame decoding info for S/M profiles only.
Definition vc1.h:312
int res_sprite
Simple/Main Profile sequence header.
Definition vc1.h:185
int quantizer_mode
2 bits, quantizer mode used for sequence, see QUANT_*
Definition vc1.h:231
uint8_t next_luty[2][256]
Definition vc1.h:303
int broadcast
TFF/RFF present.
Definition vc1.h:202
int res_y411
reserved, old interlaced mode
Definition vc1.h:186
int refdist_flag
REFDIST syntax element present in II, IP, PI or PP field picture headers.
Definition vc1.h:206
int frfd
Definition vc1.h:370
int max_b_frames
max number of B-frames
Definition vc1.h:230
uint8_t * fieldtx_plane
Definition vc1.h:350
int chromaformat
2 bits, 2=4:2:0, only defined
Definition vc1.h:200
uint8_t * mv_type_mb_plane
bitplane for mv_type == (4MV)
Definition vc1.h:294
MpegEncContext s
Definition vc1.h:177
int dc_table_index
Definition vc1.h:254
int overlap
overlapped transforms in use
Definition vc1.h:229
int fmb_is_raw
forward mb plane is raw
Definition vc1.h:299
int color_prim
8 bits, chroma coordinates of the color primaries
Definition vc1.h:208
int aux_use_ic
Definition vc1.h:305
GetBitContext gb
Definition vc1.h:178
uint8_t closed_entry
Closed entry point flag (CLOSED_ENTRY syntax element)
Definition vc1.h:399
uint8_t * acpred_plane
AC prediction flags bitplane.
Definition vc1.h:327
const VLCElem * mbmode_vlc
Definition vc1.h:344
int x8_type
Definition vc1.h:390
int fourmvbptab
Definition vc1.h:377
int rnd
rounding control
Definition vc1.h:307
uint8_t mvrange
Ranges:
Definition vc1.h:289
int intcompfield
which of the two fields to be intensity compensated
Definition vc1.h:364
uint8_t next_lutuv[2][256]
lookup tables used for intensity compensation
Definition vc1.h:303
uint8_t dmvrange
Frame decoding info for interlaced picture.
Definition vc1.h:339
int hrd_num_leaky_buckets
Definition vc1.h:324
uint8_t range_mapuv
Definition vc1.h:335
int res_transtab
reserved, always 0
Definition vc1.h:190
int bitrtq_postproc
5 bits, quantized framerate-based postprocessing strength
Definition vc1.h:222
int level
Advanced Profile.
Definition vc1.h:199
uint8_t rff
Definition vc1.h:321
uint8_t mv_mode
Frame decoding info for all profiles.
Definition vc1.h:237
uint8_t dquantfrm
pquant parameters
Definition vc1.h:249
int dmb_is_raw
direct mb plane is raw
Definition vc1.h:298
int k_y
Number of bits for MVs (depends on MV range)
Definition vc1.h:240
int hrd_param_flag
Presence of Hypothetical Reference Decoder parameters.
Definition vc1.h:211
int cur_field_type
0: top, 1: bottom
Definition vc1.h:366
int postprocflag
Per-frame processing suggestion flag present.
Definition vc1.h:201
int last_use_ic
Definition vc1.h:305
enum FrameCodingMode fcm
Frame decoding info for Advanced profile.
Definition vc1.h:318
int interlace
Progressive/interlaced (RPTFTM syntax element)
Definition vc1.h:203
uint8_t(* curr_luty)[256]
Definition vc1.h:304
uint8_t lumscale
Luma compensation parameters.
Definition vc1.h:276
int c_ac_table_index
AC coding set indexes.
Definition vc1.h:259
const uint8_t * zz_8x4
Zigzag scan table for TT_8x4 coding mode.
Definition vc1.h:245
uint8_t lumscale2
for interlaced field P picture
Definition vc1.h:342
int mbmodetab
Definition vc1.h:373
int next_use_ic
Definition vc1.h:305
int resync_marker
could this stream contain resync markers
Definition vc1.h:404
int fptype
Definition vc1.h:357
int ttfrm
Transform type info present at frame level.
Definition vc1.h:264
uint8_t dqprofile
Definition vc1.h:250
int y_ac_table_index
Luma index from AC2FRM element.
Definition vc1.h:260
uint8_t last_lutuv[2][256]
lookup tables used for intensity compensation
Definition vc1.h:301
const VLCElem * twomvbp_vlc
Definition vc1.h:346
uint8_t halfpq
Uniform quant over image and qp+.5.
Definition vc1.h:280
uint8_t * forward_mb_plane
bitplane for "forward" MBs
Definition vc1.h:296
uint8_t aux_lutuv[2][256]
lookup tables used for intensity compensation
Definition vc1.h:302
int mv_table_index
Definition vc1.h:293
uint8_t condover
Definition vc1.h:331
int matrix_coef
8 bits, Color primaries->YCbCr transform matrix
Definition vc1.h:210
uint8_t respic
Frame-level flag for resized images.
Definition vc1.h:281
int fastuvmc
Rounding of qpel vector to hpel ? (not in Simple)
Definition vc1.h:225
int overflg_is_raw
Definition vc1.h:330
uint8_t dqsbedge
Definition vc1.h:251
int mv_type_is_raw
mv type mb plane is not coded
Definition vc1.h:297
uint8_t postproc
Definition vc1.h:323
uint8_t aux_luty[2][256]
Definition vc1.h:302
uint8_t rptfrm
Definition vc1.h:321
int frmrtq_postproc
3 bits,
Definition vc1.h:221
int numref
number of past field pictures used as reference
Definition vc1.h:360
int max_coded_height
Definition vc1.h:224
int intcomp
Definition vc1.h:341
int rangered
RANGEREDFRM (range reduction) syntax element present at frame level.
Definition vc1.h:191
int vstransform
variable-size [48]x[48] transform type + info
Definition vc1.h:228
int(* vc1_unescape_buffer)(const uint8_t *src, int size, uint8_t *dst)
Definition vc1dsp.h:87
#define stride
#define av_free(p)
#define av_mallocz(s)
#define ff_dlog(a,...)
#define avpriv_request_sample(...)
#define av_log(a,...)
static uint8_t tmp[40]
Definition aes_ctr.c:52
#define height
Definition dsp.h:89
#define width
Definition dsp.h:89
int size
static int get_unary(GetBitContext *gb, int stop, int len)
Get unary code of limited length.
Definition unary.h:46
int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext *gb)
Definition vc1.c:887
static int bitplane_decoding(uint8_t *data, int *raw_flag, VC1Context *v)
Decode a bitplane's bits.
Definition vc1.c:96
int ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb)
Decode Simple/Main Profiles sequence header.
Definition vc1.c:276
static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb)
Definition vc1.c:387
int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext *gb)
Definition vc1.c:667
int ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb)
Definition vc1.c:495
#define ROTATE(DEF, L, N, C)
static void decode_colskip(uint8_t *plane, int width, int height, int stride, GetBitContext *gb)
Decode columns by checking if they are skipped.
Definition vc1.c:73
static void decode_rowskip(uint8_t *plane, int width, int height, int stride, GetBitContext *gb)
Decode rows by checking if they are skipped.
Definition vc1.c:51
int ff_vc1_decode_extradata(AVCodecContext *avctx, VC1Context *v, int *seq_initialized, int *ep_initialized)
Read the sequence and entry point headers carried in VC-1 extradata.
Definition vc1.c:555
static int vop_dquant_decoding(VC1Context *v)
VOP Dquant decoding.
Definition vc1.c:229
static void rotate_luts(VC1Context *v)
Definition vc1.c:627
#define INIT_LUT(lumscale, lumshift, luty, lutuv, chain)
Definition vc1.c:605
static int read_bfraction(VC1Context *v, GetBitContext *gb)
Definition vc1.c:652
@ CONDOVER_NONE
Definition vc1.h:140
@ CONDOVER_SELECT
Definition vc1.h:142
@ TT_8X8
Definition vc1.h:115
@ IMODE_RAW
Definition vc1.h:162
@ IMODE_DIFF6
Definition vc1.h:166
@ IMODE_DIFF2
Definition vc1.h:164
@ IMODE_COLSKIP
Definition vc1.h:168
@ IMODE_NORM6
Definition vc1.h:165
@ IMODE_ROWSKIP
Definition vc1.h:167
@ IMODE_NORM2
Definition vc1.h:163
@ PROGRESSIVE
in the bitstream is reported as 00b
Definition vc1.h:152
@ ILACE_FIELD
in the bitstream is reported as 11b
Definition vc1.h:154
@ ILACE_FRAME
in the bitstream is reported as 10b
Definition vc1.h:153
@ QUANT_FRAME_EXPLICIT
Explicitly specified at frame level.
Definition vc1.h:42
@ QUANT_FRAME_IMPLICIT
Implicitly specified at frame level.
Definition vc1.h:41
@ QUANT_NON_UNIFORM
Non-uniform quant used for all frames.
Definition vc1.h:43
@ MV_PMODE_INTENSITY_COMP
Definition vc1.h:86
@ MV_PMODE_1MV_HPEL
Definition vc1.h:84
@ MV_PMODE_1MV
Definition vc1.h:83
@ MV_PMODE_1MV_HPEL_BILIN
Definition vc1.h:82
@ MV_PMODE_MIXED_MV
Definition vc1.h:85
@ DQPROFILE_DOUBLE_EDGES
Definition vc1.h:52
@ DQPROFILE_SINGLE_EDGE
Definition vc1.h:53
@ DQPROFILE_ALL_MBS
Definition vc1.h:54
static av_always_inline const uint8_t * find_next_marker(const uint8_t *src, const uint8_t *end)
Find VC-1 marker in buffer.
Definition vc1_common.h:59
@ PROFILE_ADVANCED
Definition vc1_common.h:52
@ PROFILE_COMPLEX
TODO: WMV9 specific.
Definition vc1_common.h:51
@ PROFILE_SIMPLE
Definition vc1_common.h:49
@ VC1_CODE_SEQHDR
Definition vc1_common.h:40
@ VC1_CODE_ENTRYPOINT
Definition vc1_common.h:39
const VLCElem * ff_vc1_2ref_mvdata_vlc[8]
Definition vc1data.c:122
const AVRational ff_vc1_pixel_aspect[16]
Definition vc1data.c:154
const VLCElem * ff_vc1_icbpcy_vlc[8]
Definition vc1data.c:112
const int ff_vc1_ttfrm_to_tt[4]
Definition vc1data.c:40
VLCElem ff_vc1_norm6_vlc[556]
Definition vc1data.c:107
const int ff_vc1_fps_dr[2]
Definition vc1data.c:88
const int16_t ff_vc1_bfraction_lut[23]
Definition vc1data.c:142
const uint8_t ff_vc1_mv_pmode_table[2][5]
MV P mode - the 5th element is only used for mode 1.
Definition vc1data.c:43
const uint8_t ff_vc1_mv_pmode_table2[2][4]
Definition vc1data.c:47
VLCElem ff_vc1_imode_vlc[1<< VC1_IMODE_VLC_BITS]
Definition vc1data.c:105
VLCElem ff_vc1_norm2_vlc[1<< VC1_NORM2_VLC_BITS]
Definition vc1data.c:106
const VLCElem * ff_vc1_if_1mv_mbmode_vlc[8]
Definition vc1data.c:120
const uint8_t ff_vc1_adv_progressive_4x8_zz[32]
Definition vc1data.c:196
const uint8_t ff_vc1_pquant_table[3][32]
Definition vc1data.c:89
const VLCElem * ff_vc1_if_mmv_mbmode_vlc[8]
Definition vc1data.c:119
const int ff_vc1_fps_nr[7]
Definition vc1data.c:87
const VLCElem * ff_vc1_intfr_4mv_mbmode_vlc[4]
Definition vc1data.c:117
const VLCElem * ff_vc1_intfr_non4mv_mbmode_vlc[4]
Definition vc1data.c:118
const VLCElem * ff_vc1_2mv_block_pattern_vlc[4]
Definition vc1data.c:114
const VLCElem * ff_vc1_1ref_mvdata_vlc[4]
Definition vc1data.c:121
const VLCElem * ff_vc1_4mv_block_pattern_vlc[4]
Definition vc1data.c:113
const VLCElem * ff_vc1_cbpcy_p_vlc[4]
Definition vc1data.c:111
const uint8_t ff_vc1_adv_progressive_8x4_zz[32]
Definition vc1data.c:189
VC-1 tables.
#define VC1_NORM6_VLC_BITS
Definition vc1data.h:62
#define VC1_IMODE_VLC_BITS
Definition vc1data.h:58
#define VC1_NORM2_VLC_BITS
Definition vc1data.h:60
const uint8_t ff_wmv2_scantableA[64]
Definition wmv2data.c:23
const uint8_t ff_wmv2_scantableB[64]
Definition wmv2data.c:30