00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00030 #include "internal.h"
00031 #include "dsputil.h"
00032 #include "avcodec.h"
00033 #include "mpegvideo.h"
00034 #include "vc1.h"
00035 #include "vc1data.h"
00036 #include "msmpeg4data.h"
00037 #include "unary.h"
00038 #include "simple_idct.h"
00039
00040 #undef NDEBUG
00041 #include <assert.h>
00042
00043
00054 enum Imode {
00055 IMODE_RAW,
00056 IMODE_NORM2,
00057 IMODE_DIFF2,
00058 IMODE_NORM6,
00059 IMODE_DIFF6,
00060 IMODE_ROWSKIP,
00061 IMODE_COLSKIP
00062 };
00064
00071 static void decode_rowskip(uint8_t* plane, int width, int height, int stride,
00072 GetBitContext *gb)
00073 {
00074 int x, y;
00075
00076 for (y = 0; y < height; y++) {
00077 if (!get_bits1(gb))
00078 memset(plane, 0, width);
00079 else
00080 for (x = 0; x < width; x++)
00081 plane[x] = get_bits1(gb);
00082 plane += stride;
00083 }
00084 }
00085
00093 static void decode_colskip(uint8_t* plane, int width, int height, int stride,
00094 GetBitContext *gb)
00095 {
00096 int x, y;
00097
00098 for (x = 0; x < width; x++) {
00099 if (!get_bits1(gb))
00100 for (y = 0; y < height; y++)
00101 plane[y*stride] = 0;
00102 else
00103 for (y = 0; y < height; y++)
00104 plane[y*stride] = get_bits1(gb);
00105 plane ++;
00106 }
00107 }
00108
00116 static int bitplane_decoding(uint8_t* data, int *raw_flag, VC1Context *v)
00117 {
00118 GetBitContext *gb = &v->s.gb;
00119
00120 int imode, x, y, code, offset;
00121 uint8_t invert, *planep = data;
00122 int width, height, stride;
00123
00124 width = v->s.mb_width;
00125 height = v->s.mb_height >> v->field_mode;
00126 stride = v->s.mb_stride;
00127 invert = get_bits1(gb);
00128 imode = get_vlc2(gb, ff_vc1_imode_vlc.table, VC1_IMODE_VLC_BITS, 1);
00129
00130 *raw_flag = 0;
00131 switch (imode) {
00132 case IMODE_RAW:
00133
00134 *raw_flag = 1;
00135 return invert;
00136 case IMODE_DIFF2:
00137 case IMODE_NORM2:
00138 if ((height * width) & 1) {
00139 *planep++ = get_bits1(gb);
00140 offset = 1;
00141 }
00142 else
00143 offset = 0;
00144
00145 for (y = offset; y < height * width; y += 2) {
00146 code = get_vlc2(gb, ff_vc1_norm2_vlc.table, VC1_NORM2_VLC_BITS, 1);
00147 *planep++ = code & 1;
00148 offset++;
00149 if (offset == width) {
00150 offset = 0;
00151 planep += stride - width;
00152 }
00153 *planep++ = code >> 1;
00154 offset++;
00155 if (offset == width) {
00156 offset = 0;
00157 planep += stride - width;
00158 }
00159 }
00160 break;
00161 case IMODE_DIFF6:
00162 case IMODE_NORM6:
00163 if (!(height % 3) && (width % 3)) {
00164 for (y = 0; y < height; y += 3) {
00165 for (x = width & 1; x < width; x += 2) {
00166 code = get_vlc2(gb, ff_vc1_norm6_vlc.table, VC1_NORM6_VLC_BITS, 2);
00167 if (code < 0) {
00168 av_log(v->s.avctx, AV_LOG_DEBUG, "invalid NORM-6 VLC\n");
00169 return -1;
00170 }
00171 planep[x + 0] = (code >> 0) & 1;
00172 planep[x + 1] = (code >> 1) & 1;
00173 planep[x + 0 + stride] = (code >> 2) & 1;
00174 planep[x + 1 + stride] = (code >> 3) & 1;
00175 planep[x + 0 + stride * 2] = (code >> 4) & 1;
00176 planep[x + 1 + stride * 2] = (code >> 5) & 1;
00177 }
00178 planep += stride * 3;
00179 }
00180 if (width & 1)
00181 decode_colskip(data, 1, height, stride, &v->s.gb);
00182 } else {
00183 planep += (height & 1) * stride;
00184 for (y = height & 1; y < height; y += 2) {
00185 for (x = width % 3; x < width; x += 3) {
00186 code = get_vlc2(gb, ff_vc1_norm6_vlc.table, VC1_NORM6_VLC_BITS, 2);
00187 if (code < 0) {
00188 av_log(v->s.avctx, AV_LOG_DEBUG, "invalid NORM-6 VLC\n");
00189 return -1;
00190 }
00191 planep[x + 0] = (code >> 0) & 1;
00192 planep[x + 1] = (code >> 1) & 1;
00193 planep[x + 2] = (code >> 2) & 1;
00194 planep[x + 0 + stride] = (code >> 3) & 1;
00195 planep[x + 1 + stride] = (code >> 4) & 1;
00196 planep[x + 2 + stride] = (code >> 5) & 1;
00197 }
00198 planep += stride * 2;
00199 }
00200 x = width % 3;
00201 if (x)
00202 decode_colskip(data, x, height, stride, &v->s.gb);
00203 if (height & 1)
00204 decode_rowskip(data + x, width - x, 1, stride, &v->s.gb);
00205 }
00206 break;
00207 case IMODE_ROWSKIP:
00208 decode_rowskip(data, width, height, stride, &v->s.gb);
00209 break;
00210 case IMODE_COLSKIP:
00211 decode_colskip(data, width, height, stride, &v->s.gb);
00212 break;
00213 default:
00214 break;
00215 }
00216
00217
00218 if (imode == IMODE_DIFF2 || imode == IMODE_DIFF6) {
00219 planep = data;
00220 planep[0] ^= invert;
00221 for (x = 1; x < width; x++)
00222 planep[x] ^= planep[x-1];
00223 for (y = 1; y < height; y++) {
00224 planep += stride;
00225 planep[0] ^= planep[-stride];
00226 for (x = 1; x < width; x++) {
00227 if (planep[x-1] != planep[x-stride]) planep[x] ^= invert;
00228 else planep[x] ^= planep[x-1];
00229 }
00230 }
00231 } else if (invert) {
00232 planep = data;
00233 for (x = 0; x < stride * height; x++)
00234 planep[x] = !planep[x];
00235 }
00236 return (imode << 1) + invert;
00237 }
00238
00240
00241
00245 static int vop_dquant_decoding(VC1Context *v)
00246 {
00247 GetBitContext *gb = &v->s.gb;
00248 int pqdiff;
00249
00250
00251 if (v->dquant == 2) {
00252 pqdiff = get_bits(gb, 3);
00253 if (pqdiff == 7)
00254 v->altpq = get_bits(gb, 5);
00255 else
00256 v->altpq = v->pq + pqdiff + 1;
00257 } else {
00258 v->dquantfrm = get_bits1(gb);
00259 if (v->dquantfrm) {
00260 v->dqprofile = get_bits(gb, 2);
00261 switch (v->dqprofile) {
00262 case DQPROFILE_SINGLE_EDGE:
00263 case DQPROFILE_DOUBLE_EDGES:
00264 v->dqsbedge = get_bits(gb, 2);
00265 break;
00266 case DQPROFILE_ALL_MBS:
00267 v->dqbilevel = get_bits1(gb);
00268 if (!v->dqbilevel)
00269 v->halfpq = 0;
00270 default:
00271 break;
00272 }
00273 if (v->dqbilevel || v->dqprofile != DQPROFILE_ALL_MBS) {
00274 pqdiff = get_bits(gb, 3);
00275 if (pqdiff == 7)
00276 v->altpq = get_bits(gb, 5);
00277 else
00278 v->altpq = v->pq + pqdiff + 1;
00279 }
00280 }
00281 }
00282 return 0;
00283 }
00284
00285 static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb);
00286
00294 int ff_vc1_decode_sequence_header(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb)
00295 {
00296 av_log(avctx, AV_LOG_DEBUG, "Header: %0X\n", show_bits_long(gb, 32));
00297 v->profile = get_bits(gb, 2);
00298 if (v->profile == PROFILE_COMPLEX) {
00299 av_log(avctx, AV_LOG_WARNING, "WMV3 Complex Profile is not fully supported\n");
00300 }
00301
00302 if (v->profile == PROFILE_ADVANCED) {
00303 v->zz_8x4 = ff_vc1_adv_progressive_8x4_zz;
00304 v->zz_4x8 = ff_vc1_adv_progressive_4x8_zz;
00305 return decode_sequence_header_adv(v, gb);
00306 } else {
00307 v->zz_8x4 = ff_wmv2_scantableA;
00308 v->zz_4x8 = ff_wmv2_scantableB;
00309 v->res_y411 = get_bits1(gb);
00310 v->res_sprite = get_bits1(gb);
00311 if (v->res_y411) {
00312 av_log(avctx, AV_LOG_ERROR,
00313 "Old interlaced mode is not supported\n");
00314 return -1;
00315 }
00316 }
00317
00318
00319 v->frmrtq_postproc = get_bits(gb, 3);
00320
00321 v->bitrtq_postproc = get_bits(gb, 5);
00322 v->s.loop_filter = get_bits1(gb);
00323 if (v->s.loop_filter == 1 && v->profile == PROFILE_SIMPLE) {
00324 av_log(avctx, AV_LOG_ERROR,
00325 "LOOPFILTER shall not be enabled in Simple Profile\n");
00326 }
00327 if (v->s.avctx->skip_loop_filter >= AVDISCARD_ALL)
00328 v->s.loop_filter = 0;
00329
00330 v->res_x8 = get_bits1(gb);
00331 v->multires = get_bits1(gb);
00332 v->res_fasttx = get_bits1(gb);
00333 if (!v->res_fasttx) {
00334 v->vc1dsp.vc1_inv_trans_8x8 = ff_simple_idct_8;
00335 v->vc1dsp.vc1_inv_trans_8x4 = ff_simple_idct84_add;
00336 v->vc1dsp.vc1_inv_trans_4x8 = ff_simple_idct48_add;
00337 v->vc1dsp.vc1_inv_trans_4x4 = ff_simple_idct44_add;
00338 v->vc1dsp.vc1_inv_trans_8x8_dc = ff_simple_idct_add_8;
00339 v->vc1dsp.vc1_inv_trans_8x4_dc = ff_simple_idct84_add;
00340 v->vc1dsp.vc1_inv_trans_4x8_dc = ff_simple_idct48_add;
00341 v->vc1dsp.vc1_inv_trans_4x4_dc = ff_simple_idct44_add;
00342 }
00343
00344 v->fastuvmc = get_bits1(gb);
00345 if (!v->profile && !v->fastuvmc) {
00346 av_log(avctx, AV_LOG_ERROR,
00347 "FASTUVMC unavailable in Simple Profile\n");
00348 return -1;
00349 }
00350 v->extended_mv = get_bits1(gb);
00351 if (!v->profile && v->extended_mv)
00352 {
00353 av_log(avctx, AV_LOG_ERROR,
00354 "Extended MVs unavailable in Simple Profile\n");
00355 return -1;
00356 }
00357 v->dquant = get_bits(gb, 2);
00358 v->vstransform = get_bits1(gb);
00359
00360 v->res_transtab = get_bits1(gb);
00361 if (v->res_transtab)
00362 {
00363 av_log(avctx, AV_LOG_ERROR,
00364 "1 for reserved RES_TRANSTAB is forbidden\n");
00365 return -1;
00366 }
00367
00368 v->overlap = get_bits1(gb);
00369
00370 v->s.resync_marker = get_bits1(gb);
00371 v->rangered = get_bits1(gb);
00372 if (v->rangered && v->profile == PROFILE_SIMPLE) {
00373 av_log(avctx, AV_LOG_INFO,
00374 "RANGERED should be set to 0 in Simple Profile\n");
00375 }
00376
00377 v->s.max_b_frames = avctx->max_b_frames = get_bits(gb, 3);
00378 v->quantizer_mode = get_bits(gb, 2);
00379
00380 v->finterpflag = get_bits1(gb);
00381
00382 if (v->res_sprite) {
00383 int w = get_bits(gb, 11);
00384 int h = get_bits(gb, 11);
00385 avcodec_set_dimensions(v->s.avctx, w, h);
00386 skip_bits(gb, 5);
00387 v->res_x8 = get_bits1(gb);
00388 if (get_bits1(gb)) {
00389 av_log(avctx, AV_LOG_ERROR, "Unsupported sprite feature\n");
00390 return -1;
00391 }
00392 skip_bits(gb, 3);
00393 v->res_rtm_flag = 0;
00394 } else {
00395 v->res_rtm_flag = get_bits1(gb);
00396 }
00397 if (!v->res_rtm_flag) {
00398
00399
00400 av_log(avctx, AV_LOG_ERROR,
00401 "Old WMV3 version detected, some frames may be decoded incorrectly\n");
00402
00403 }
00404
00405 if (!v->res_fasttx)
00406 skip_bits(gb, 16);
00407 av_log(avctx, AV_LOG_DEBUG,
00408 "Profile %i:\nfrmrtq_postproc=%i, bitrtq_postproc=%i\n"
00409 "LoopFilter=%i, MultiRes=%i, FastUVMC=%i, Extended MV=%i\n"
00410 "Rangered=%i, VSTransform=%i, Overlap=%i, SyncMarker=%i\n"
00411 "DQuant=%i, Quantizer mode=%i, Max B frames=%i\n",
00412 v->profile, v->frmrtq_postproc, v->bitrtq_postproc,
00413 v->s.loop_filter, v->multires, v->fastuvmc, v->extended_mv,
00414 v->rangered, v->vstransform, v->overlap, v->s.resync_marker,
00415 v->dquant, v->quantizer_mode, avctx->max_b_frames);
00416 return 0;
00417 }
00418
00419 static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb)
00420 {
00421 v->res_rtm_flag = 1;
00422 v->level = get_bits(gb, 3);
00423 if (v->level >= 5) {
00424 av_log(v->s.avctx, AV_LOG_ERROR, "Reserved LEVEL %i\n",v->level);
00425 }
00426 v->chromaformat = get_bits(gb, 2);
00427 if (v->chromaformat != 1) {
00428 av_log(v->s.avctx, AV_LOG_ERROR,
00429 "Only 4:2:0 chroma format supported\n");
00430 return -1;
00431 }
00432
00433
00434 v->frmrtq_postproc = get_bits(gb, 3);
00435
00436 v->bitrtq_postproc = get_bits(gb, 5);
00437 v->postprocflag = get_bits1(gb);
00438
00439 v->max_coded_width = (get_bits(gb, 12) + 1) << 1;
00440 v->max_coded_height = (get_bits(gb, 12) + 1) << 1;
00441 v->broadcast = get_bits1(gb);
00442 v->interlace = get_bits1(gb);
00443 v->tfcntrflag = get_bits1(gb);
00444 v->finterpflag = get_bits1(gb);
00445 skip_bits1(gb);
00446
00447 av_log(v->s.avctx, AV_LOG_DEBUG,
00448 "Advanced Profile level %i:\nfrmrtq_postproc=%i, bitrtq_postproc=%i\n"
00449 "LoopFilter=%i, ChromaFormat=%i, Pulldown=%i, Interlace: %i\n"
00450 "TFCTRflag=%i, FINTERPflag=%i\n",
00451 v->level, v->frmrtq_postproc, v->bitrtq_postproc,
00452 v->s.loop_filter, v->chromaformat, v->broadcast, v->interlace,
00453 v->tfcntrflag, v->finterpflag);
00454
00455 v->psf = get_bits1(gb);
00456 if (v->psf) {
00457 av_log(v->s.avctx, AV_LOG_ERROR, "Progressive Segmented Frame mode: not supported (yet)\n");
00458 return -1;
00459 }
00460 v->s.max_b_frames = v->s.avctx->max_b_frames = 7;
00461 if (get_bits1(gb)) {
00462 int w, h, ar = 0;
00463 av_log(v->s.avctx, AV_LOG_DEBUG, "Display extended info:\n");
00464 w = get_bits(gb, 14) + 1;
00465 h = get_bits(gb, 14) + 1;
00466 av_log(v->s.avctx, AV_LOG_DEBUG, "Display dimensions: %ix%i\n", w, h);
00467 if (get_bits1(gb))
00468 ar = get_bits(gb, 4);
00469 if (ar && ar < 14) {
00470 v->s.avctx->sample_aspect_ratio = ff_vc1_pixel_aspect[ar];
00471 } else if (ar == 15) {
00472 w = get_bits(gb, 8) + 1;
00473 h = get_bits(gb, 8) + 1;
00474 v->s.avctx->sample_aspect_ratio = (AVRational){w, h};
00475 } else {
00476 av_reduce(&v->s.avctx->sample_aspect_ratio.num,
00477 &v->s.avctx->sample_aspect_ratio.den,
00478 v->s.avctx->height * w,
00479 v->s.avctx->width * h,
00480 1 << 30);
00481 }
00482 av_log(v->s.avctx, AV_LOG_DEBUG, "Aspect: %i:%i\n",
00483 v->s.avctx->sample_aspect_ratio.num,
00484 v->s.avctx->sample_aspect_ratio.den);
00485
00486 if (get_bits1(gb)) {
00487 if (get_bits1(gb)) {
00488 v->s.avctx->time_base.num = 32;
00489 v->s.avctx->time_base.den = get_bits(gb, 16) + 1;
00490 } else {
00491 int nr, dr;
00492 nr = get_bits(gb, 8);
00493 dr = get_bits(gb, 4);
00494 if (nr > 0 && nr < 8 && dr > 0 && dr < 3) {
00495 v->s.avctx->time_base.num = ff_vc1_fps_dr[dr - 1];
00496 v->s.avctx->time_base.den = ff_vc1_fps_nr[nr - 1] * 1000;
00497 }
00498 }
00499 if (v->broadcast) {
00500 v->s.avctx->time_base.den *= 2;
00501 v->s.avctx->ticks_per_frame = 2;
00502 }
00503 }
00504
00505 if (get_bits1(gb)) {
00506 v->s.avctx->color_primaries = get_bits(gb, 8);
00507 v->s.avctx->color_trc = get_bits(gb, 8);
00508 v->s.avctx->colorspace = get_bits(gb, 8);
00509 v->s.avctx->color_range = AVCOL_RANGE_MPEG;
00510 }
00511 }
00512
00513 v->hrd_param_flag = get_bits1(gb);
00514 if (v->hrd_param_flag) {
00515 int i;
00516 v->hrd_num_leaky_buckets = get_bits(gb, 5);
00517 skip_bits(gb, 4);
00518 skip_bits(gb, 4);
00519 for (i = 0; i < v->hrd_num_leaky_buckets; i++) {
00520 skip_bits(gb, 16);
00521 skip_bits(gb, 16);
00522 }
00523 }
00524 return 0;
00525 }
00526
00527 int ff_vc1_decode_entry_point(AVCodecContext *avctx, VC1Context *v, GetBitContext *gb)
00528 {
00529 int i;
00530 int w,h;
00531
00532 av_log(avctx, AV_LOG_DEBUG, "Entry point: %08X\n", show_bits_long(gb, 32));
00533 v->broken_link = get_bits1(gb);
00534 v->closed_entry = get_bits1(gb);
00535 v->panscanflag = get_bits1(gb);
00536 v->refdist_flag = get_bits1(gb);
00537 v->s.loop_filter = get_bits1(gb);
00538 if (v->s.avctx->skip_loop_filter >= AVDISCARD_ALL)
00539 v->s.loop_filter = 0;
00540 v->fastuvmc = get_bits1(gb);
00541 v->extended_mv = get_bits1(gb);
00542 v->dquant = get_bits(gb, 2);
00543 v->vstransform = get_bits1(gb);
00544 v->overlap = get_bits1(gb);
00545 v->quantizer_mode = get_bits(gb, 2);
00546
00547 if (v->hrd_param_flag) {
00548 for (i = 0; i < v->hrd_num_leaky_buckets; i++) {
00549 skip_bits(gb, 8);
00550 }
00551 }
00552
00553 if(get_bits1(gb)){
00554 w = (get_bits(gb, 12)+1)<<1;
00555 h = (get_bits(gb, 12)+1)<<1;
00556 } else {
00557 w = v->max_coded_width;
00558 h = v->max_coded_height;
00559 }
00560 avcodec_set_dimensions(avctx, w, h);
00561 if (v->extended_mv)
00562 v->extended_dmv = get_bits1(gb);
00563 if ((v->range_mapy_flag = get_bits1(gb))) {
00564 av_log(avctx, AV_LOG_ERROR, "Luma scaling is not supported, expect wrong picture\n");
00565 v->range_mapy = get_bits(gb, 3);
00566 }
00567 if ((v->range_mapuv_flag = get_bits1(gb))) {
00568 av_log(avctx, AV_LOG_ERROR, "Chroma scaling is not supported, expect wrong picture\n");
00569 v->range_mapuv = get_bits(gb, 3);
00570 }
00571
00572 av_log(avctx, AV_LOG_DEBUG, "Entry point info:\n"
00573 "BrokenLink=%i, ClosedEntry=%i, PanscanFlag=%i\n"
00574 "RefDist=%i, Postproc=%i, FastUVMC=%i, ExtMV=%i\n"
00575 "DQuant=%i, VSTransform=%i, Overlap=%i, Qmode=%i\n",
00576 v->broken_link, v->closed_entry, v->panscanflag, v->refdist_flag, v->s.loop_filter,
00577 v->fastuvmc, v->extended_mv, v->dquant, v->vstransform, v->overlap, v->quantizer_mode);
00578
00579 return 0;
00580 }
00581
00582 int ff_vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
00583 {
00584 int pqindex, lowquant, status;
00585
00586 if (v->finterpflag)
00587 v->interpfrm = get_bits1(gb);
00588 if (!v->s.avctx->codec)
00589 return -1;
00590 if (v->s.avctx->codec->id == AV_CODEC_ID_MSS2)
00591 v->respic =
00592 v->rangered =
00593 v->multires = get_bits(gb, 2) == 1;
00594 else
00595 skip_bits(gb, 2);
00596 v->rangeredfrm = 0;
00597 if (v->rangered)
00598 v->rangeredfrm = get_bits1(gb);
00599 v->s.pict_type = get_bits1(gb);
00600 if (v->s.avctx->max_b_frames) {
00601 if (!v->s.pict_type) {
00602 if (get_bits1(gb))
00603 v->s.pict_type = AV_PICTURE_TYPE_I;
00604 else
00605 v->s.pict_type = AV_PICTURE_TYPE_B;
00606 } else
00607 v->s.pict_type = AV_PICTURE_TYPE_P;
00608 } else
00609 v->s.pict_type = v->s.pict_type ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
00610
00611 v->bi_type = 0;
00612 if (v->s.pict_type == AV_PICTURE_TYPE_B) {
00613 v->bfraction_lut_index = get_vlc2(gb, ff_vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1);
00614 v->bfraction = ff_vc1_bfraction_lut[v->bfraction_lut_index];
00615 if (v->bfraction == 0) {
00616 v->s.pict_type = AV_PICTURE_TYPE_BI;
00617 }
00618 }
00619 if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI)
00620 skip_bits(gb, 7);
00621
00622 if (v->parse_only)
00623 return 0;
00624
00625
00626 if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI)
00627 v->rnd = 1;
00628 if (v->s.pict_type == AV_PICTURE_TYPE_P)
00629 v->rnd ^= 1;
00630
00631
00632 pqindex = get_bits(gb, 5);
00633 if (!pqindex)
00634 return -1;
00635 if (v->quantizer_mode == QUANT_FRAME_IMPLICIT)
00636 v->pq = ff_vc1_pquant_table[0][pqindex];
00637 else
00638 v->pq = ff_vc1_pquant_table[1][pqindex];
00639
00640 v->pquantizer = 1;
00641 if (v->quantizer_mode == QUANT_FRAME_IMPLICIT)
00642 v->pquantizer = pqindex < 9;
00643 if (v->quantizer_mode == QUANT_NON_UNIFORM)
00644 v->pquantizer = 0;
00645 v->pqindex = pqindex;
00646 if (pqindex < 9)
00647 v->halfpq = get_bits1(gb);
00648 else
00649 v->halfpq = 0;
00650 if (v->quantizer_mode == QUANT_FRAME_EXPLICIT)
00651 v->pquantizer = get_bits1(gb);
00652 v->dquantfrm = 0;
00653 if (v->extended_mv == 1)
00654 v->mvrange = get_unary(gb, 0, 3);
00655 v->k_x = v->mvrange + 9 + (v->mvrange >> 1);
00656 v->k_y = v->mvrange + 8;
00657 v->range_x = 1 << (v->k_x - 1);
00658 v->range_y = 1 << (v->k_y - 1);
00659 if (v->multires && v->s.pict_type != AV_PICTURE_TYPE_B)
00660 v->respic = get_bits(gb, 2);
00661
00662 if (v->res_x8 && (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI)) {
00663 v->x8_type = get_bits1(gb);
00664 } else
00665 v->x8_type = 0;
00666
00667
00668
00669 if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_P)
00670 v->use_ic = 0;
00671
00672 switch (v->s.pict_type) {
00673 case AV_PICTURE_TYPE_P:
00674 if (v->pq < 5) v->tt_index = 0;
00675 else if (v->pq < 13) v->tt_index = 1;
00676 else v->tt_index = 2;
00677
00678 lowquant = (v->pq > 12) ? 0 : 1;
00679 v->mv_mode = ff_vc1_mv_pmode_table[lowquant][get_unary(gb, 1, 4)];
00680 if (v->mv_mode == MV_PMODE_INTENSITY_COMP) {
00681 int scale, shift, i;
00682 v->mv_mode2 = ff_vc1_mv_pmode_table2[lowquant][get_unary(gb, 1, 3)];
00683 v->lumscale = get_bits(gb, 6);
00684 v->lumshift = get_bits(gb, 6);
00685 v->use_ic = 1;
00686
00687 if (!v->lumscale) {
00688 scale = -64;
00689 shift = (255 - v->lumshift * 2) << 6;
00690 if (v->lumshift > 31)
00691 shift += 128 << 6;
00692 } else {
00693 scale = v->lumscale + 32;
00694 if (v->lumshift > 31)
00695 shift = (v->lumshift - 64) << 6;
00696 else
00697 shift = v->lumshift << 6;
00698 }
00699 for (i = 0; i < 256; i++) {
00700 v->luty[i] = av_clip_uint8((scale * i + shift + 32) >> 6);
00701 v->lutuv[i] = av_clip_uint8((scale * (i - 128) + 128*64 + 32) >> 6);
00702 }
00703 }
00704 v->qs_last = v->s.quarter_sample;
00705 if (v->mv_mode == MV_PMODE_1MV_HPEL || v->mv_mode == MV_PMODE_1MV_HPEL_BILIN)
00706 v->s.quarter_sample = 0;
00707 else if (v->mv_mode == MV_PMODE_INTENSITY_COMP) {
00708 if (v->mv_mode2 == MV_PMODE_1MV_HPEL || v->mv_mode2 == MV_PMODE_1MV_HPEL_BILIN)
00709 v->s.quarter_sample = 0;
00710 else
00711 v->s.quarter_sample = 1;
00712 } else
00713 v->s.quarter_sample = 1;
00714 v->s.mspel = !(v->mv_mode == MV_PMODE_1MV_HPEL_BILIN || (v->mv_mode == MV_PMODE_INTENSITY_COMP && v->mv_mode2 == MV_PMODE_1MV_HPEL_BILIN));
00715
00716 if ((v->mv_mode == MV_PMODE_INTENSITY_COMP &&
00717 v->mv_mode2 == MV_PMODE_MIXED_MV) ||
00718 v->mv_mode == MV_PMODE_MIXED_MV) {
00719 status = bitplane_decoding(v->mv_type_mb_plane, &v->mv_type_is_raw, v);
00720 if (status < 0)
00721 return -1;
00722 av_log(v->s.avctx, AV_LOG_DEBUG, "MB MV Type plane encoding: "
00723 "Imode: %i, Invert: %i\n", status>>1, status&1);
00724 } else {
00725 v->mv_type_is_raw = 0;
00726 memset(v->mv_type_mb_plane, 0, v->s.mb_stride * v->s.mb_height);
00727 }
00728 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
00729 if (status < 0)
00730 return -1;
00731 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
00732 "Imode: %i, Invert: %i\n", status>>1, status&1);
00733
00734
00735 v->s.mv_table_index = get_bits(gb, 2);
00736 v->cbpcy_vlc = &ff_vc1_cbpcy_p_vlc[get_bits(gb, 2)];
00737
00738 if (v->dquant) {
00739 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
00740 vop_dquant_decoding(v);
00741 }
00742
00743 v->ttfrm = 0;
00744 if (v->vstransform) {
00745 v->ttmbf = get_bits1(gb);
00746 if (v->ttmbf) {
00747 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
00748 }
00749 } else {
00750 v->ttmbf = 1;
00751 v->ttfrm = TT_8X8;
00752 }
00753 break;
00754 case AV_PICTURE_TYPE_B:
00755 if (v->pq < 5) v->tt_index = 0;
00756 else if (v->pq < 13) v->tt_index = 1;
00757 else v->tt_index = 2;
00758
00759 v->mv_mode = get_bits1(gb) ? MV_PMODE_1MV : MV_PMODE_1MV_HPEL_BILIN;
00760 v->qs_last = v->s.quarter_sample;
00761 v->s.quarter_sample = (v->mv_mode == MV_PMODE_1MV);
00762 v->s.mspel = v->s.quarter_sample;
00763
00764 status = bitplane_decoding(v->direct_mb_plane, &v->dmb_is_raw, v);
00765 if (status < 0)
00766 return -1;
00767 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Direct Type plane encoding: "
00768 "Imode: %i, Invert: %i\n", status>>1, status&1);
00769 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
00770 if (status < 0)
00771 return -1;
00772 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
00773 "Imode: %i, Invert: %i\n", status>>1, status&1);
00774
00775 v->s.mv_table_index = get_bits(gb, 2);
00776 v->cbpcy_vlc = &ff_vc1_cbpcy_p_vlc[get_bits(gb, 2)];
00777
00778 if (v->dquant) {
00779 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
00780 vop_dquant_decoding(v);
00781 }
00782
00783 v->ttfrm = 0;
00784 if (v->vstransform) {
00785 v->ttmbf = get_bits1(gb);
00786 if (v->ttmbf) {
00787 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
00788 }
00789 } else {
00790 v->ttmbf = 1;
00791 v->ttfrm = TT_8X8;
00792 }
00793 break;
00794 }
00795
00796 if (!v->x8_type) {
00797
00798 v->c_ac_table_index = decode012(gb);
00799 if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI) {
00800 v->y_ac_table_index = decode012(gb);
00801 }
00802
00803 v->s.dc_table_index = get_bits1(gb);
00804 }
00805
00806 if (v->s.pict_type == AV_PICTURE_TYPE_BI) {
00807 v->s.pict_type = AV_PICTURE_TYPE_B;
00808 v->bi_type = 1;
00809 }
00810 return 0;
00811 }
00812
00813
00814 #define INIT_LUT(lumscale, lumshift, luty, lutuv) \
00815 if (!lumscale) { \
00816 scale = -64; \
00817 shift = (255 - lumshift * 2) << 6; \
00818 if (lumshift > 31) \
00819 shift += 128 << 6; \
00820 } else { \
00821 scale = lumscale + 32; \
00822 if (lumshift > 31) \
00823 shift = (lumshift - 64) << 6; \
00824 else \
00825 shift = lumshift << 6; \
00826 } \
00827 for (i = 0; i < 256; i++) { \
00828 luty[i] = av_clip_uint8((scale * i + shift + 32) >> 6); \
00829 lutuv[i] = av_clip_uint8((scale * (i - 128) + 128*64 + 32) >> 6); \
00830 }
00831
00832 int ff_vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
00833 {
00834 int pqindex, lowquant;
00835 int status;
00836 int mbmodetab, imvtab, icbptab, twomvbptab, fourmvbptab;
00837 int scale, shift, i;
00838
00839 v->numref=0;
00840 v->p_frame_skipped = 0;
00841 if (v->second_field) {
00842 if(v->fcm!=2 || v->field_mode!=1)
00843 return -1;
00844 v->s.pict_type = (v->fptype & 1) ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
00845 if (v->fptype & 4)
00846 v->s.pict_type = (v->fptype & 1) ? AV_PICTURE_TYPE_BI : AV_PICTURE_TYPE_B;
00847 v->s.current_picture_ptr->f.pict_type = v->s.pict_type;
00848 if (!v->pic_header_flag)
00849 goto parse_common_info;
00850 }
00851
00852 v->field_mode = 0;
00853 if (v->interlace) {
00854 v->fcm = decode012(gb);
00855 if (v->fcm) {
00856 if (v->fcm == ILACE_FIELD)
00857 v->field_mode = 1;
00858 if (!v->warn_interlaced++)
00859 av_log(v->s.avctx, AV_LOG_ERROR,
00860 "Interlaced frames/fields support is incomplete\n");
00861 }
00862 } else {
00863 v->fcm = PROGRESSIVE;
00864 }
00865
00866 if (v->field_mode) {
00867 v->fptype = get_bits(gb, 3);
00868 v->s.pict_type = (v->fptype & 2) ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I;
00869 if (v->fptype & 4)
00870 v->s.pict_type = (v->fptype & 2) ? AV_PICTURE_TYPE_BI : AV_PICTURE_TYPE_B;
00871 } else {
00872 switch (get_unary(gb, 0, 4)) {
00873 case 0:
00874 v->s.pict_type = AV_PICTURE_TYPE_P;
00875 break;
00876 case 1:
00877 v->s.pict_type = AV_PICTURE_TYPE_B;
00878 break;
00879 case 2:
00880 v->s.pict_type = AV_PICTURE_TYPE_I;
00881 break;
00882 case 3:
00883 v->s.pict_type = AV_PICTURE_TYPE_BI;
00884 break;
00885 case 4:
00886 v->s.pict_type = AV_PICTURE_TYPE_P;
00887 v->p_frame_skipped = 1;
00888 break;
00889 }
00890 }
00891 if (v->tfcntrflag)
00892 skip_bits(gb, 8);
00893 if (v->broadcast) {
00894 if (!v->interlace || v->psf) {
00895 v->rptfrm = get_bits(gb, 2);
00896 } else {
00897 v->tff = get_bits1(gb);
00898 v->rff = get_bits1(gb);
00899 }
00900 }
00901 if (v->panscanflag) {
00902 av_log_missing_feature(v->s.avctx, "Pan-scan", 0);
00903
00904 }
00905 if (v->p_frame_skipped) {
00906 return 0;
00907 }
00908 v->rnd = get_bits1(gb);
00909 if (v->interlace)
00910 v->uvsamp = get_bits1(gb);
00911 if(!ff_vc1_bfraction_vlc.table)
00912 return 0;
00913 if (v->field_mode) {
00914 if (!v->refdist_flag)
00915 v->refdist = 0;
00916 else if ((v->s.pict_type != AV_PICTURE_TYPE_B) && (v->s.pict_type != AV_PICTURE_TYPE_BI)) {
00917 v->refdist = get_bits(gb, 2);
00918 if (v->refdist == 3)
00919 v->refdist += get_unary(gb, 0, 16);
00920 }
00921 if ((v->s.pict_type == AV_PICTURE_TYPE_B) || (v->s.pict_type == AV_PICTURE_TYPE_BI)) {
00922 v->bfraction_lut_index = get_vlc2(gb, ff_vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1);
00923 v->bfraction = ff_vc1_bfraction_lut[v->bfraction_lut_index];
00924 v->frfd = (v->bfraction * v->refdist) >> 8;
00925 v->brfd = v->refdist - v->frfd - 1;
00926 if (v->brfd < 0)
00927 v->brfd = 0;
00928 }
00929 goto parse_common_info;
00930 }
00931 if (v->fcm == PROGRESSIVE) {
00932 if (v->finterpflag)
00933 v->interpfrm = get_bits1(gb);
00934 if (v->s.pict_type == AV_PICTURE_TYPE_B) {
00935 v->bfraction_lut_index = get_vlc2(gb, ff_vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1);
00936 v->bfraction = ff_vc1_bfraction_lut[v->bfraction_lut_index];
00937 if (v->bfraction == 0) {
00938 v->s.pict_type = AV_PICTURE_TYPE_BI;
00939 }
00940 }
00941 }
00942
00943 parse_common_info:
00944 if (v->field_mode)
00945 v->cur_field_type = !(v->tff ^ v->second_field);
00946 pqindex = get_bits(gb, 5);
00947 if (!pqindex)
00948 return -1;
00949 v->pqindex = pqindex;
00950 if (v->quantizer_mode == QUANT_FRAME_IMPLICIT)
00951 v->pq = ff_vc1_pquant_table[0][pqindex];
00952 else
00953 v->pq = ff_vc1_pquant_table[1][pqindex];
00954
00955 v->pquantizer = 1;
00956 if (v->quantizer_mode == QUANT_FRAME_IMPLICIT)
00957 v->pquantizer = pqindex < 9;
00958 if (v->quantizer_mode == QUANT_NON_UNIFORM)
00959 v->pquantizer = 0;
00960 v->pqindex = pqindex;
00961 if (pqindex < 9)
00962 v->halfpq = get_bits1(gb);
00963 else
00964 v->halfpq = 0;
00965 if (v->quantizer_mode == QUANT_FRAME_EXPLICIT)
00966 v->pquantizer = get_bits1(gb);
00967 if (v->postprocflag)
00968 v->postproc = get_bits(gb, 2);
00969
00970 if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_P)
00971 v->use_ic = 0;
00972
00973 if (v->parse_only)
00974 return 0;
00975
00976 switch (v->s.pict_type) {
00977 case AV_PICTURE_TYPE_I:
00978 case AV_PICTURE_TYPE_BI:
00979 if (v->fcm == ILACE_FRAME) {
00980 status = bitplane_decoding(v->fieldtx_plane, &v->fieldtx_is_raw, v);
00981 if (status < 0)
00982 return -1;
00983 av_log(v->s.avctx, AV_LOG_DEBUG, "FIELDTX plane encoding: "
00984 "Imode: %i, Invert: %i\n", status>>1, status&1);
00985 }
00986 status = bitplane_decoding(v->acpred_plane, &v->acpred_is_raw, v);
00987 if (status < 0)
00988 return -1;
00989 av_log(v->s.avctx, AV_LOG_DEBUG, "ACPRED plane encoding: "
00990 "Imode: %i, Invert: %i\n", status>>1, status&1);
00991 v->condover = CONDOVER_NONE;
00992 if (v->overlap && v->pq <= 8) {
00993 v->condover = decode012(gb);
00994 if (v->condover == CONDOVER_SELECT) {
00995 status = bitplane_decoding(v->over_flags_plane, &v->overflg_is_raw, v);
00996 if (status < 0)
00997 return -1;
00998 av_log(v->s.avctx, AV_LOG_DEBUG, "CONDOVER plane encoding: "
00999 "Imode: %i, Invert: %i\n", status>>1, status&1);
01000 }
01001 }
01002 break;
01003 case AV_PICTURE_TYPE_P:
01004 if (v->field_mode) {
01005 v->numref = get_bits1(gb);
01006 if (!v->numref) {
01007 v->reffield = get_bits1(gb);
01008 v->ref_field_type[0] = v->reffield ^ !v->cur_field_type;
01009 }
01010 }
01011 if (v->extended_mv)
01012 v->mvrange = get_unary(gb, 0, 3);
01013 else
01014 v->mvrange = 0;
01015 if (v->interlace) {
01016 if (v->extended_dmv)
01017 v->dmvrange = get_unary(gb, 0, 3);
01018 else
01019 v->dmvrange = 0;
01020 if (v->fcm == ILACE_FRAME) {
01021 v->fourmvswitch = get_bits1(gb);
01022 v->intcomp = get_bits1(gb);
01023 if (v->intcomp) {
01024 v->lumscale = get_bits(gb, 6);
01025 v->lumshift = get_bits(gb, 6);
01026 INIT_LUT(v->lumscale, v->lumshift, v->luty, v->lutuv);
01027 }
01028 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
01029 av_log(v->s.avctx, AV_LOG_DEBUG, "SKIPMB plane encoding: "
01030 "Imode: %i, Invert: %i\n", status>>1, status&1);
01031 mbmodetab = get_bits(gb, 2);
01032 if (v->fourmvswitch)
01033 v->mbmode_vlc = &ff_vc1_intfr_4mv_mbmode_vlc[mbmodetab];
01034 else
01035 v->mbmode_vlc = &ff_vc1_intfr_non4mv_mbmode_vlc[mbmodetab];
01036 imvtab = get_bits(gb, 2);
01037 v->imv_vlc = &ff_vc1_1ref_mvdata_vlc[imvtab];
01038
01039 icbptab = get_bits(gb, 3);
01040 v->cbpcy_vlc = &ff_vc1_icbpcy_vlc[icbptab];
01041 twomvbptab = get_bits(gb, 2);
01042 v->twomvbp_vlc = &ff_vc1_2mv_block_pattern_vlc[twomvbptab];
01043 if (v->fourmvswitch) {
01044 fourmvbptab = get_bits(gb, 2);
01045 v->fourmvbp_vlc = &ff_vc1_4mv_block_pattern_vlc[fourmvbptab];
01046 }
01047 }
01048 }
01049 v->k_x = v->mvrange + 9 + (v->mvrange >> 1);
01050 v->k_y = v->mvrange + 8;
01051 v->range_x = 1 << (v->k_x - 1);
01052 v->range_y = 1 << (v->k_y - 1);
01053
01054 if (v->pq < 5)
01055 v->tt_index = 0;
01056 else if (v->pq < 13)
01057 v->tt_index = 1;
01058 else
01059 v->tt_index = 2;
01060 if (v->fcm != ILACE_FRAME) {
01061 int mvmode;
01062 mvmode = get_unary(gb, 1, 4);
01063 lowquant = (v->pq > 12) ? 0 : 1;
01064 v->mv_mode = ff_vc1_mv_pmode_table[lowquant][mvmode];
01065 if (v->mv_mode == MV_PMODE_INTENSITY_COMP) {
01066 int mvmode2;
01067 mvmode2 = get_unary(gb, 1, 3);
01068 v->mv_mode2 = ff_vc1_mv_pmode_table2[lowquant][mvmode2];
01069 if (v->field_mode)
01070 v->intcompfield = decode210(gb);
01071 v->lumscale = get_bits(gb, 6);
01072 v->lumshift = get_bits(gb, 6);
01073 INIT_LUT(v->lumscale, v->lumshift, v->luty, v->lutuv);
01074 if ((v->field_mode) && !v->intcompfield) {
01075 v->lumscale2 = get_bits(gb, 6);
01076 v->lumshift2 = get_bits(gb, 6);
01077 INIT_LUT(v->lumscale2, v->lumshift2, v->luty2, v->lutuv2);
01078 }
01079 v->use_ic = 1;
01080 }
01081 v->qs_last = v->s.quarter_sample;
01082 if (v->mv_mode == MV_PMODE_1MV_HPEL || v->mv_mode == MV_PMODE_1MV_HPEL_BILIN)
01083 v->s.quarter_sample = 0;
01084 else if (v->mv_mode == MV_PMODE_INTENSITY_COMP) {
01085 if (v->mv_mode2 == MV_PMODE_1MV_HPEL || v->mv_mode2 == MV_PMODE_1MV_HPEL_BILIN)
01086 v->s.quarter_sample = 0;
01087 else
01088 v->s.quarter_sample = 1;
01089 } else
01090 v->s.quarter_sample = 1;
01091 v->s.mspel = !(v->mv_mode == MV_PMODE_1MV_HPEL_BILIN
01092 || (v->mv_mode == MV_PMODE_INTENSITY_COMP
01093 && v->mv_mode2 == MV_PMODE_1MV_HPEL_BILIN));
01094 }
01095 if (v->fcm == PROGRESSIVE) {
01096 if ((v->mv_mode == MV_PMODE_INTENSITY_COMP &&
01097 v->mv_mode2 == MV_PMODE_MIXED_MV)
01098 || v->mv_mode == MV_PMODE_MIXED_MV) {
01099 status = bitplane_decoding(v->mv_type_mb_plane, &v->mv_type_is_raw, v);
01100 if (status < 0)
01101 return -1;
01102 av_log(v->s.avctx, AV_LOG_DEBUG, "MB MV Type plane encoding: "
01103 "Imode: %i, Invert: %i\n", status>>1, status&1);
01104 } else {
01105 v->mv_type_is_raw = 0;
01106 memset(v->mv_type_mb_plane, 0, v->s.mb_stride * v->s.mb_height);
01107 }
01108 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
01109 if (status < 0)
01110 return -1;
01111 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
01112 "Imode: %i, Invert: %i\n", status>>1, status&1);
01113
01114
01115 v->s.mv_table_index = get_bits(gb, 2);
01116 v->cbpcy_vlc = &ff_vc1_cbpcy_p_vlc[get_bits(gb, 2)];
01117 } else if (v->fcm == ILACE_FRAME) {
01118 v->qs_last = v->s.quarter_sample;
01119 v->s.quarter_sample = 1;
01120 v->s.mspel = 1;
01121 } else {
01122 mbmodetab = get_bits(gb, 3);
01123 imvtab = get_bits(gb, 2 + v->numref);
01124 if (!v->numref)
01125 v->imv_vlc = &ff_vc1_1ref_mvdata_vlc[imvtab];
01126 else
01127 v->imv_vlc = &ff_vc1_2ref_mvdata_vlc[imvtab];
01128 icbptab = get_bits(gb, 3);
01129 v->cbpcy_vlc = &ff_vc1_icbpcy_vlc[icbptab];
01130 if ((v->mv_mode == MV_PMODE_INTENSITY_COMP &&
01131 v->mv_mode2 == MV_PMODE_MIXED_MV) || v->mv_mode == MV_PMODE_MIXED_MV) {
01132 fourmvbptab = get_bits(gb, 2);
01133 v->fourmvbp_vlc = &ff_vc1_4mv_block_pattern_vlc[fourmvbptab];
01134 v->mbmode_vlc = &ff_vc1_if_mmv_mbmode_vlc[mbmodetab];
01135 } else {
01136 v->mbmode_vlc = &ff_vc1_if_1mv_mbmode_vlc[mbmodetab];
01137 }
01138 }
01139 if (v->dquant) {
01140 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
01141 vop_dquant_decoding(v);
01142 }
01143
01144 v->ttfrm = 0;
01145 if (v->vstransform) {
01146 v->ttmbf = get_bits1(gb);
01147 if (v->ttmbf) {
01148 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
01149 }
01150 } else {
01151 v->ttmbf = 1;
01152 v->ttfrm = TT_8X8;
01153 }
01154 break;
01155 case AV_PICTURE_TYPE_B:
01156 if (v->fcm == ILACE_FRAME) {
01157 v->bfraction_lut_index = get_vlc2(gb, ff_vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1);
01158 v->bfraction = ff_vc1_bfraction_lut[v->bfraction_lut_index];
01159 if (v->bfraction == 0) {
01160 return -1;
01161 }
01162 return -1;
01163 }
01164 if (v->extended_mv)
01165 v->mvrange = get_unary(gb, 0, 3);
01166 else
01167 v->mvrange = 0;
01168 v->k_x = v->mvrange + 9 + (v->mvrange >> 1);
01169 v->k_y = v->mvrange + 8;
01170 v->range_x = 1 << (v->k_x - 1);
01171 v->range_y = 1 << (v->k_y - 1);
01172
01173 if (v->pq < 5)
01174 v->tt_index = 0;
01175 else if (v->pq < 13)
01176 v->tt_index = 1;
01177 else
01178 v->tt_index = 2;
01179
01180 if (v->field_mode) {
01181 int mvmode;
01182 av_log(v->s.avctx, AV_LOG_DEBUG, "B Fields\n");
01183 if (v->extended_dmv)
01184 v->dmvrange = get_unary(gb, 0, 3);
01185 mvmode = get_unary(gb, 1, 3);
01186 lowquant = (v->pq > 12) ? 0 : 1;
01187 v->mv_mode = ff_vc1_mv_pmode_table2[lowquant][mvmode];
01188 v->qs_last = v->s.quarter_sample;
01189 v->s.quarter_sample = (v->mv_mode == MV_PMODE_1MV || v->mv_mode == MV_PMODE_MIXED_MV);
01190 v->s.mspel = !(v->mv_mode == MV_PMODE_1MV_HPEL_BILIN || v->mv_mode == MV_PMODE_1MV_HPEL);
01191 status = bitplane_decoding(v->forward_mb_plane, &v->fmb_is_raw, v);
01192 if (status < 0)
01193 return -1;
01194 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Forward Type plane encoding: "
01195 "Imode: %i, Invert: %i\n", status>>1, status&1);
01196 mbmodetab = get_bits(gb, 3);
01197 if (v->mv_mode == MV_PMODE_MIXED_MV)
01198 v->mbmode_vlc = &ff_vc1_if_mmv_mbmode_vlc[mbmodetab];
01199 else
01200 v->mbmode_vlc = &ff_vc1_if_1mv_mbmode_vlc[mbmodetab];
01201 imvtab = get_bits(gb, 3);
01202 v->imv_vlc = &ff_vc1_2ref_mvdata_vlc[imvtab];
01203 icbptab = get_bits(gb, 3);
01204 v->cbpcy_vlc = &ff_vc1_icbpcy_vlc[icbptab];
01205 if (v->mv_mode == MV_PMODE_MIXED_MV) {
01206 fourmvbptab = get_bits(gb, 2);
01207 v->fourmvbp_vlc = &ff_vc1_4mv_block_pattern_vlc[fourmvbptab];
01208 }
01209 v->numref = 1;
01210 } else if (v->fcm == ILACE_FRAME) {
01211 if (v->extended_dmv)
01212 v->dmvrange = get_unary(gb, 0, 3);
01213 get_bits1(gb);
01214 v->intcomp = 0;
01215 v->mv_mode = MV_PMODE_1MV;
01216 v->fourmvswitch = 0;
01217 v->qs_last = v->s.quarter_sample;
01218 v->s.quarter_sample = 1;
01219 v->s.mspel = 1;
01220 status = bitplane_decoding(v->direct_mb_plane, &v->dmb_is_raw, v);
01221 if (status < 0)
01222 return -1;
01223 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Direct Type plane encoding: "
01224 "Imode: %i, Invert: %i\n", status>>1, status&1);
01225 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
01226 if (status < 0)
01227 return -1;
01228 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
01229 "Imode: %i, Invert: %i\n", status>>1, status&1);
01230 mbmodetab = get_bits(gb, 2);
01231 v->mbmode_vlc = &ff_vc1_intfr_non4mv_mbmode_vlc[mbmodetab];
01232 imvtab = get_bits(gb, 2);
01233 v->imv_vlc = &ff_vc1_1ref_mvdata_vlc[imvtab];
01234
01235 icbptab = get_bits(gb, 3);
01236 v->cbpcy_vlc = &ff_vc1_icbpcy_vlc[icbptab];
01237 twomvbptab = get_bits(gb, 2);
01238 v->twomvbp_vlc = &ff_vc1_2mv_block_pattern_vlc[twomvbptab];
01239 fourmvbptab = get_bits(gb, 2);
01240 v->fourmvbp_vlc = &ff_vc1_4mv_block_pattern_vlc[fourmvbptab];
01241 } else {
01242 v->mv_mode = get_bits1(gb) ? MV_PMODE_1MV : MV_PMODE_1MV_HPEL_BILIN;
01243 v->qs_last = v->s.quarter_sample;
01244 v->s.quarter_sample = (v->mv_mode == MV_PMODE_1MV);
01245 v->s.mspel = v->s.quarter_sample;
01246 status = bitplane_decoding(v->direct_mb_plane, &v->dmb_is_raw, v);
01247 if (status < 0)
01248 return -1;
01249 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Direct Type plane encoding: "
01250 "Imode: %i, Invert: %i\n", status>>1, status&1);
01251 status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
01252 if (status < 0)
01253 return -1;
01254 av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
01255 "Imode: %i, Invert: %i\n", status>>1, status&1);
01256 v->s.mv_table_index = get_bits(gb, 2);
01257 v->cbpcy_vlc = &ff_vc1_cbpcy_p_vlc[get_bits(gb, 2)];
01258 }
01259
01260 if (v->dquant) {
01261 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
01262 vop_dquant_decoding(v);
01263 }
01264
01265 v->ttfrm = 0;
01266 if (v->vstransform) {
01267 v->ttmbf = get_bits1(gb);
01268 if (v->ttmbf) {
01269 v->ttfrm = ff_vc1_ttfrm_to_tt[get_bits(gb, 2)];
01270 }
01271 } else {
01272 v->ttmbf = 1;
01273 v->ttfrm = TT_8X8;
01274 }
01275 break;
01276 }
01277
01278
01279 v->c_ac_table_index = decode012(gb);
01280 if (v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI) {
01281 v->y_ac_table_index = decode012(gb);
01282 }
01283
01284 v->s.dc_table_index = get_bits1(gb);
01285 if ((v->s.pict_type == AV_PICTURE_TYPE_I || v->s.pict_type == AV_PICTURE_TYPE_BI)
01286 && v->dquant) {
01287 av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
01288 vop_dquant_decoding(v);
01289 }
01290
01291 v->bi_type = 0;
01292 if (v->s.pict_type == AV_PICTURE_TYPE_BI) {
01293 v->s.pict_type = AV_PICTURE_TYPE_B;
01294 v->bi_type = 1;
01295 }
01296 return 0;
01297 }
01298
01299 static const uint32_t vc1_ac_tables[AC_MODES][186][2] = {
01300 {
01301 { 0x0001, 2}, { 0x0005, 3}, { 0x000D, 4}, { 0x0012, 5}, { 0x000E, 6}, { 0x0015, 7},
01302 { 0x0013, 8}, { 0x003F, 8}, { 0x004B, 9}, { 0x011F, 9}, { 0x00B8, 10}, { 0x03E3, 10},
01303 { 0x0172, 11}, { 0x024D, 12}, { 0x03DA, 12}, { 0x02DD, 13}, { 0x1F55, 13}, { 0x05B9, 14},
01304 { 0x3EAE, 14}, { 0x0000, 4}, { 0x0010, 5}, { 0x0008, 7}, { 0x0020, 8}, { 0x0029, 9},
01305 { 0x01F4, 9}, { 0x0233, 10}, { 0x01E0, 11}, { 0x012A, 12}, { 0x03DD, 12}, { 0x050A, 13},
01306 { 0x1F29, 13}, { 0x0A42, 14}, { 0x1272, 15}, { 0x1737, 15}, { 0x0003, 5}, { 0x0011, 7},
01307 { 0x00C4, 8}, { 0x004B, 10}, { 0x00B4, 11}, { 0x07D4, 11}, { 0x0345, 12}, { 0x02D7, 13},
01308 { 0x07BF, 13}, { 0x0938, 14}, { 0x0BBB, 14}, { 0x095E, 15}, { 0x0013, 5}, { 0x0078, 7},
01309 { 0x0069, 9}, { 0x0232, 10}, { 0x0461, 11}, { 0x03EC, 12}, { 0x0520, 13}, { 0x1F2A, 13},
01310 { 0x3E50, 14}, { 0x3E51, 14}, { 0x1486, 15}, { 0x000C, 6}, { 0x0024, 9}, { 0x0094, 11},
01311 { 0x08C0, 12}, { 0x0F09, 14}, { 0x1EF0, 15}, { 0x003D, 6}, { 0x0053, 9}, { 0x01A0, 11},
01312 { 0x02D6, 13}, { 0x0F08, 14}, { 0x0013, 7}, { 0x007C, 9}, { 0x07C1, 11}, { 0x04AC, 14},
01313 { 0x001B, 7}, { 0x00A0, 10}, { 0x0344, 12}, { 0x0F79, 14}, { 0x0079, 7}, { 0x03E1, 10},
01314 { 0x02D4, 13}, { 0x2306, 14}, { 0x0021, 8}, { 0x023C, 10}, { 0x0FAE, 12}, { 0x23DE, 14},
01315 { 0x0035, 8}, { 0x0175, 11}, { 0x07B3, 13}, { 0x00C5, 8}, { 0x0174, 11}, { 0x0785, 13},
01316 { 0x0048, 9}, { 0x01A3, 11}, { 0x049E, 13}, { 0x002C, 9}, { 0x00FA, 10}, { 0x07D6, 11},
01317 { 0x0092, 10}, { 0x05CC, 13}, { 0x1EF1, 15}, { 0x00A3, 10}, { 0x03ED, 12}, { 0x093E, 14},
01318 { 0x01E2, 11}, { 0x1273, 15}, { 0x07C4, 11}, { 0x1487, 15}, { 0x0291, 12}, { 0x0293, 12},
01319 { 0x0F8A, 12}, { 0x0509, 13}, { 0x0508, 13}, { 0x078D, 13}, { 0x07BE, 13}, { 0x078C, 13},
01320 { 0x04AE, 14}, { 0x0BBA, 14}, { 0x2307, 14}, { 0x0B9A, 14}, { 0x1736, 15}, { 0x000E, 4},
01321 { 0x0045, 7}, { 0x01F3, 9}, { 0x047A, 11}, { 0x05DC, 13}, { 0x23DF, 14}, { 0x0019, 5},
01322 { 0x0028, 9}, { 0x0176, 11}, { 0x049D, 13}, { 0x23DD, 14}, { 0x0030, 6}, { 0x00A2, 10},
01323 { 0x02EF, 12}, { 0x05B8, 14}, { 0x003F, 6}, { 0x00A5, 10}, { 0x03DB, 12}, { 0x093F, 14},
01324 { 0x0044, 7}, { 0x07CB, 11}, { 0x095F, 15}, { 0x0063, 7}, { 0x03C3, 12}, { 0x0015, 8},
01325 { 0x08F6, 12}, { 0x0017, 8}, { 0x0498, 13}, { 0x002C, 8}, { 0x07B2, 13}, { 0x002F, 8},
01326 { 0x1F54, 13}, { 0x008D, 8}, { 0x07BD, 13}, { 0x008E, 8}, { 0x1182, 13}, { 0x00FB, 8},
01327 { 0x050B, 13}, { 0x002D, 8}, { 0x07C0, 11}, { 0x0079, 9}, { 0x1F5F, 13}, { 0x007A, 9},
01328 { 0x1F56, 13}, { 0x0231, 10}, { 0x03E4, 10}, { 0x01A1, 11}, { 0x0143, 11}, { 0x01F7, 11},
01329 { 0x016F, 12}, { 0x0292, 12}, { 0x02E7, 12}, { 0x016C, 12}, { 0x016D, 12}, { 0x03DC, 12},
01330 { 0x0F8B, 12}, { 0x0499, 13}, { 0x03D8, 12}, { 0x078E, 13}, { 0x02D5, 13}, { 0x1F5E, 13},
01331 { 0x1F2B, 13}, { 0x078F, 13}, { 0x04AD, 14}, { 0x3EAF, 14}, { 0x23DC, 14}, { 0x004A, 9}
01332 },
01333 {
01334 { 0x0000, 3}, { 0x0003, 4}, { 0x000B, 5}, { 0x0014, 6}, { 0x003F, 6}, { 0x005D, 7},
01335 { 0x00A2, 8}, { 0x00AC, 9}, { 0x016E, 9}, { 0x020A, 10}, { 0x02E2, 10}, { 0x0432, 11},
01336 { 0x05C9, 11}, { 0x0827, 12}, { 0x0B54, 12}, { 0x04E6, 13}, { 0x105F, 13}, { 0x172A, 13},
01337 { 0x20B2, 14}, { 0x2D4E, 14}, { 0x39F0, 14}, { 0x4175, 15}, { 0x5A9E, 15}, { 0x0004, 4},
01338 { 0x001E, 5}, { 0x0042, 7}, { 0x00B6, 8}, { 0x0173, 9}, { 0x0395, 10}, { 0x072E, 11},
01339 { 0x0B94, 12}, { 0x16A4, 13}, { 0x20B3, 14}, { 0x2E45, 14}, { 0x0005, 5}, { 0x0040, 7},
01340 { 0x0049, 9}, { 0x028F, 10}, { 0x05CB, 11}, { 0x048A, 13}, { 0x09DD, 14}, { 0x73E2, 15},
01341 { 0x0018, 5}, { 0x0025, 8}, { 0x008A, 10}, { 0x051B, 11}, { 0x0E5F, 12}, { 0x09C9, 14},
01342 { 0x139C, 15}, { 0x0029, 6}, { 0x004F, 9}, { 0x0412, 11}, { 0x048D, 13}, { 0x2E41, 14},
01343 { 0x0038, 6}, { 0x010E, 9}, { 0x05A8, 11}, { 0x105C, 13}, { 0x39F2, 14}, { 0x0058, 7},
01344 { 0x021F, 10}, { 0x0E7E, 12}, { 0x39FF, 14}, { 0x0023, 8}, { 0x02E3, 10}, { 0x04E5, 13},
01345 { 0x2E40, 14}, { 0x00A1, 8}, { 0x05BE, 11}, { 0x09C8, 14}, { 0x0083, 8}, { 0x013A, 11},
01346 { 0x1721, 13}, { 0x0044, 9}, { 0x0276, 12}, { 0x39F6, 14}, { 0x008B, 10}, { 0x04EF, 13},
01347 { 0x5A9B, 15}, { 0x0208, 10}, { 0x1CFE, 13}, { 0x0399, 10}, { 0x1CB4, 13}, { 0x039E, 10},
01348 { 0x39F3, 14}, { 0x05AB, 11}, { 0x73E3, 15}, { 0x0737, 11}, { 0x5A9F, 15}, { 0x082D, 12},
01349 { 0x0E69, 12}, { 0x0E68, 12}, { 0x0433, 11}, { 0x0B7B, 12}, { 0x2DF8, 14}, { 0x2E56, 14},
01350 { 0x2E57, 14}, { 0x39F7, 14}, { 0x51A5, 15}, { 0x0003, 3}, { 0x002A, 6}, { 0x00E4, 8},
01351 { 0x028E, 10}, { 0x0735, 11}, { 0x1058, 13}, { 0x1CFA, 13}, { 0x2DF9, 14}, { 0x4174, 15},
01352 { 0x0009, 4}, { 0x0054, 8}, { 0x0398, 10}, { 0x048B, 13}, { 0x139D, 15}, { 0x000D, 4},
01353 { 0x00AD, 9}, { 0x0826, 12}, { 0x2D4C, 14}, { 0x0011, 5}, { 0x016B, 9}, { 0x0B7F, 12},
01354 { 0x51A4, 15}, { 0x0019, 5}, { 0x021B, 10}, { 0x16FD, 13}, { 0x001D, 5}, { 0x0394, 10},
01355 { 0x28D3, 14}, { 0x002B, 6}, { 0x05BC, 11}, { 0x5A9A, 15}, { 0x002F, 6}, { 0x0247, 12},
01356 { 0x0010, 7}, { 0x0A35, 12}, { 0x003E, 6}, { 0x0B7A, 12}, { 0x0059, 7}, { 0x105E, 13},
01357 { 0x0026, 8}, { 0x09CF, 14}, { 0x0055, 8}, { 0x1CB5, 13}, { 0x0057, 8}, { 0x0E5B, 12},
01358 { 0x00A0, 8}, { 0x1468, 13}, { 0x0170, 9}, { 0x0090, 10}, { 0x01CE, 9}, { 0x021A, 10},
01359 { 0x0218, 10}, { 0x0168, 9}, { 0x021E, 10}, { 0x0244, 12}, { 0x0736, 11}, { 0x0138, 11},
01360 { 0x0519, 11}, { 0x0E5E, 12}, { 0x072C, 11}, { 0x0B55, 12}, { 0x09DC, 14}, { 0x20BB, 14},
01361 { 0x048C, 13}, { 0x1723, 13}, { 0x2E44, 14}, { 0x16A5, 13}, { 0x0518, 11}, { 0x39FE, 14},
01362 { 0x0169, 9}
01363 },
01364 {
01365 { 0x0001, 2}, { 0x0006, 3}, { 0x000F, 4}, { 0x0016, 5}, { 0x0020, 6}, { 0x0018, 7},
01366 { 0x0008, 8}, { 0x009A, 8}, { 0x0056, 9}, { 0x013E, 9}, { 0x00F0, 10}, { 0x03A5, 10},
01367 { 0x0077, 11}, { 0x01EF, 11}, { 0x009A, 12}, { 0x005D, 13}, { 0x0001, 4}, { 0x0011, 5},
01368 { 0x0002, 7}, { 0x000B, 8}, { 0x0012, 9}, { 0x01D6, 9}, { 0x027E, 10}, { 0x0191, 11},
01369 { 0x00EA, 12}, { 0x03DC, 12}, { 0x013B, 13}, { 0x0004, 5}, { 0x0014, 7}, { 0x009E, 8},
01370 { 0x0009, 10}, { 0x01AC, 11}, { 0x01E2, 11}, { 0x03CA, 12}, { 0x005F, 13}, { 0x0017, 5},
01371 { 0x004E, 7}, { 0x005E, 9}, { 0x00F3, 10}, { 0x01AD, 11}, { 0x00EC, 12}, { 0x05F0, 13},
01372 { 0x000E, 6}, { 0x00E1, 8}, { 0x03A4, 10}, { 0x009C, 12}, { 0x013D, 13}, { 0x003B, 6},
01373 { 0x001C, 9}, { 0x0014, 11}, { 0x09BE, 12}, { 0x0006, 7}, { 0x007A, 9}, { 0x0190, 11},
01374 { 0x0137, 13}, { 0x001B, 7}, { 0x0008, 10}, { 0x075C, 11}, { 0x0071, 7}, { 0x00D7, 10},
01375 { 0x09BF, 12}, { 0x0007, 8}, { 0x00AF, 10}, { 0x04CC, 11}, { 0x0034, 8}, { 0x0265, 10},
01376 { 0x009F, 12}, { 0x00E0, 8}, { 0x0016, 11}, { 0x0327, 12}, { 0x0015, 9}, { 0x017D, 11},
01377 { 0x0EBB, 12}, { 0x0014, 9}, { 0x00F6, 10}, { 0x01E4, 11}, { 0x00CB, 10}, { 0x099D, 12},
01378 { 0x00CA, 10}, { 0x02FC, 12}, { 0x017F, 11}, { 0x04CD, 11}, { 0x02FD, 12}, { 0x04FE, 11},
01379 { 0x013A, 13}, { 0x000A, 4}, { 0x0042, 7}, { 0x01D3, 9}, { 0x04DD, 11}, { 0x0012, 5},
01380 { 0x00E8, 8}, { 0x004C, 11}, { 0x0136, 13}, { 0x0039, 6}, { 0x0264, 10}, { 0x0EBA, 12},
01381 { 0x0000, 7}, { 0x00AE, 10}, { 0x099C, 12}, { 0x001F, 7}, { 0x04DE, 11}, { 0x0043, 7},
01382 { 0x04DC, 11}, { 0x0003, 8}, { 0x03CB, 12}, { 0x0006, 8}, { 0x099E, 12}, { 0x002A, 8},
01383 { 0x05F1, 13}, { 0x000F, 8}, { 0x09FE, 12}, { 0x0033, 8}, { 0x09FF, 12}, { 0x0098, 8},
01384 { 0x099F, 12}, { 0x00EA, 8}, { 0x013C, 13}, { 0x002E, 8}, { 0x0192, 11}, { 0x0136, 9},
01385 { 0x006A, 9}, { 0x0015, 11}, { 0x03AF, 10}, { 0x01E3, 11}, { 0x0074, 11}, { 0x00EB, 12},
01386 { 0x02F9, 12}, { 0x005C, 13}, { 0x00ED, 12}, { 0x03DD, 12}, { 0x0326, 12}, { 0x005E, 13},
01387 { 0x0016, 7}
01388 },
01389 {
01390 { 0x0004, 3}, { 0x0014, 5}, { 0x0017, 7}, { 0x007F, 8}, { 0x0154, 9}, { 0x01F2, 10},
01391 { 0x00BF, 11}, { 0x0065, 12}, { 0x0AAA, 12}, { 0x0630, 13}, { 0x1597, 13}, { 0x03B7, 14},
01392 { 0x2B22, 14}, { 0x0BE6, 15}, { 0x000B, 4}, { 0x0037, 7}, { 0x0062, 9}, { 0x0007, 11},
01393 { 0x0166, 12}, { 0x00CE, 13}, { 0x1590, 13}, { 0x05F6, 14}, { 0x0BE7, 15}, { 0x0007, 5},
01394 { 0x006D, 8}, { 0x0003, 11}, { 0x031F, 12}, { 0x05F2, 14}, { 0x0002, 6}, { 0x0061, 9},
01395 { 0x0055, 12}, { 0x01DF, 14}, { 0x001A, 6}, { 0x001E, 10}, { 0x0AC9, 12}, { 0x2B23, 14},
01396 { 0x001E, 6}, { 0x001F, 10}, { 0x0AC3, 12}, { 0x2B2B, 14}, { 0x0006, 7}, { 0x0004, 11},
01397 { 0x02F8, 13}, { 0x0019, 7}, { 0x0006, 11}, { 0x063D, 13}, { 0x0057, 7}, { 0x0182, 11},
01398 { 0x2AA2, 14}, { 0x0004, 8}, { 0x0180, 11}, { 0x059C, 14}, { 0x007D, 8}, { 0x0164, 12},
01399 { 0x076D, 15}, { 0x0002, 9}, { 0x018D, 11}, { 0x1581, 13}, { 0x00AD, 8}, { 0x0060, 12},
01400 { 0x0C67, 14}, { 0x001C, 9}, { 0x00EE, 13}, { 0x0003, 9}, { 0x02CF, 13}, { 0x00D9, 9},
01401 { 0x1580, 13}, { 0x0002, 11}, { 0x0183, 11}, { 0x0057, 12}, { 0x0061, 12}, { 0x0031, 11},
01402 { 0x0066, 12}, { 0x0631, 13}, { 0x0632, 13}, { 0x00AC, 13}, { 0x031D, 12}, { 0x0076, 12},
01403 { 0x003A, 11}, { 0x0165, 12}, { 0x0C66, 14}, { 0x0003, 2}, { 0x0054, 7}, { 0x02AB, 10},
01404 { 0x0016, 13}, { 0x05F7, 14}, { 0x0005, 4}, { 0x00F8, 9}, { 0x0AA9, 12}, { 0x005F, 15},
01405 { 0x0004, 4}, { 0x001C, 10}, { 0x1550, 13}, { 0x0004, 5}, { 0x0077, 11}, { 0x076C, 15},
01406 { 0x000E, 5}, { 0x000A, 12}, { 0x000C, 5}, { 0x0562, 11}, { 0x0004, 6}, { 0x031C, 12},
01407 { 0x0006, 6}, { 0x00C8, 13}, { 0x000D, 6}, { 0x01DA, 13}, { 0x0007, 6}, { 0x00C9, 13},
01408 { 0x0001, 7}, { 0x002E, 14}, { 0x0014, 7}, { 0x1596, 13}, { 0x000A, 7}, { 0x0AC2, 12},
01409 { 0x0016, 7}, { 0x015B, 14}, { 0x0015, 7}, { 0x015A, 14}, { 0x000F, 8}, { 0x005E, 15},
01410 { 0x007E, 8}, { 0x00AB, 8}, { 0x002D, 9}, { 0x00D8, 9}, { 0x000B, 9}, { 0x0014, 10},
01411 { 0x02B3, 10}, { 0x01F3, 10}, { 0x003A, 10}, { 0x0000, 10}, { 0x0058, 10}, { 0x002E, 9},
01412 { 0x005E, 10}, { 0x0563, 11}, { 0x00EC, 12}, { 0x0054, 12}, { 0x0AC1, 12}, { 0x1556, 13},
01413 { 0x02FA, 13}, { 0x0181, 11}, { 0x1557, 13}, { 0x059D, 14}, { 0x2AA3, 14}, { 0x2B2A, 14},
01414 { 0x01DE, 14}, { 0x063C, 13}, { 0x00CF, 13}, { 0x1594, 13}, { 0x000D, 9}
01415 },
01416 {
01417 { 0x0002, 2}, { 0x0006, 3}, { 0x000F, 4}, { 0x000D, 5}, { 0x000C, 5}, { 0x0015, 6},
01418 { 0x0013, 6}, { 0x0012, 6}, { 0x0017, 7}, { 0x001F, 8}, { 0x001E, 8}, { 0x001D, 8},
01419 { 0x0025, 9}, { 0x0024, 9}, { 0x0023, 9}, { 0x0021, 9}, { 0x0021, 10}, { 0x0020, 10},
01420 { 0x000F, 10}, { 0x000E, 10}, { 0x0007, 11}, { 0x0006, 11}, { 0x0020, 11}, { 0x0021, 11},
01421 { 0x0050, 12}, { 0x0051, 12}, { 0x0052, 12}, { 0x000E, 4}, { 0x0014, 6}, { 0x0016, 7},
01422 { 0x001C, 8}, { 0x0020, 9}, { 0x001F, 9}, { 0x000D, 10}, { 0x0022, 11}, { 0x0053, 12},
01423 { 0x0055, 12}, { 0x000B, 5}, { 0x0015, 7}, { 0x001E, 9}, { 0x000C, 10}, { 0x0056, 12},
01424 { 0x0011, 6}, { 0x001B, 8}, { 0x001D, 9}, { 0x000B, 10}, { 0x0010, 6}, { 0x0022, 9},
01425 { 0x000A, 10}, { 0x000D, 6}, { 0x001C, 9}, { 0x0008, 10}, { 0x0012, 7}, { 0x001B, 9},
01426 { 0x0054, 12}, { 0x0014, 7}, { 0x001A, 9}, { 0x0057, 12}, { 0x0019, 8}, { 0x0009, 10},
01427 { 0x0018, 8}, { 0x0023, 11}, { 0x0017, 8}, { 0x0019, 9}, { 0x0018, 9}, { 0x0007, 10},
01428 { 0x0058, 12}, { 0x0007, 4}, { 0x000C, 6}, { 0x0016, 8}, { 0x0017, 9}, { 0x0006, 10},
01429 { 0x0005, 11}, { 0x0004, 11}, { 0x0059, 12}, { 0x000F, 6}, { 0x0016, 9}, { 0x0005, 10},
01430 { 0x000E, 6}, { 0x0004, 10}, { 0x0011, 7}, { 0x0024, 11}, { 0x0010, 7}, { 0x0025, 11},
01431 { 0x0013, 7}, { 0x005A, 12}, { 0x0015, 8}, { 0x005B, 12}, { 0x0014, 8}, { 0x0013, 8},
01432 { 0x001A, 8}, { 0x0015, 9}, { 0x0014, 9}, { 0x0013, 9}, { 0x0012, 9}, { 0x0011, 9},
01433 { 0x0026, 11}, { 0x0027, 11}, { 0x005C, 12}, { 0x005D, 12}, { 0x005E, 12}, { 0x005F, 12},
01434 { 0x0003, 7}
01435 },
01436 {
01437 { 0x0002, 2}, { 0x000F, 4}, { 0x0015, 6}, { 0x0017, 7}, { 0x001F, 8}, { 0x0025, 9},
01438 { 0x0024, 9}, { 0x0021, 10}, { 0x0020, 10}, { 0x0007, 11}, { 0x0006, 11}, { 0x0020, 11},
01439 { 0x0006, 3}, { 0x0014, 6}, { 0x001E, 8}, { 0x000F, 10}, { 0x0021, 11}, { 0x0050, 12},
01440 { 0x000E, 4}, { 0x001D, 8}, { 0x000E, 10}, { 0x0051, 12}, { 0x000D, 5}, { 0x0023, 9},
01441 { 0x000D, 10}, { 0x000C, 5}, { 0x0022, 9}, { 0x0052, 12}, { 0x000B, 5}, { 0x000C, 10},
01442 { 0x0053, 12}, { 0x0013, 6}, { 0x000B, 10}, { 0x0054, 12}, { 0x0012, 6}, { 0x000A, 10},
01443 { 0x0011, 6}, { 0x0009, 10}, { 0x0010, 6}, { 0x0008, 10}, { 0x0016, 7}, { 0x0055, 12},
01444 { 0x0015, 7}, { 0x0014, 7}, { 0x001C, 8}, { 0x001B, 8}, { 0x0021, 9}, { 0x0020, 9},
01445 { 0x001F, 9}, { 0x001E, 9}, { 0x001D, 9}, { 0x001C, 9}, { 0x001B, 9}, { 0x001A, 9},
01446 { 0x0022, 11}, { 0x0023, 11}, { 0x0056, 12}, { 0x0057, 12}, { 0x0007, 4}, { 0x0019, 9},
01447 { 0x0005, 11}, { 0x000F, 6}, { 0x0004, 11}, { 0x000E, 6}, { 0x000D, 6}, { 0x000C, 6},
01448 { 0x0013, 7}, { 0x0012, 7}, { 0x0011, 7}, { 0x0010, 7}, { 0x001A, 8}, { 0x0019, 8},
01449 { 0x0018, 8}, { 0x0017, 8}, { 0x0016, 8}, { 0x0015, 8}, { 0x0014, 8}, { 0x0013, 8},
01450 { 0x0018, 9}, { 0x0017, 9}, { 0x0016, 9}, { 0x0015, 9}, { 0x0014, 9}, { 0x0013, 9},
01451 { 0x0012, 9}, { 0x0011, 9}, { 0x0007, 10}, { 0x0006, 10}, { 0x0005, 10}, { 0x0004, 10},
01452 { 0x0024, 11}, { 0x0025, 11}, { 0x0026, 11}, { 0x0027, 11}, { 0x0058, 12}, { 0x0059, 12},
01453 { 0x005A, 12}, { 0x005B, 12}, { 0x005C, 12}, { 0x005D, 12}, { 0x005E, 12}, { 0x005F, 12},
01454 { 0x0003, 7}
01455 },
01456 {
01457 { 0x0000, 2}, { 0x0003, 3}, { 0x000D, 4}, { 0x0005, 4}, { 0x001C, 5}, { 0x0016, 5},
01458 { 0x003F, 6}, { 0x003A, 6}, { 0x002E, 6}, { 0x0022, 6}, { 0x007B, 7}, { 0x0067, 7},
01459 { 0x005F, 7}, { 0x0047, 7}, { 0x0026, 7}, { 0x00EF, 8}, { 0x00CD, 8}, { 0x00C1, 8},
01460 { 0x00A9, 8}, { 0x004F, 8}, { 0x01F2, 9}, { 0x01DD, 9}, { 0x0199, 9}, { 0x0185, 9},
01461 { 0x015D, 9}, { 0x011B, 9}, { 0x03EF, 10}, { 0x03E1, 10}, { 0x03C8, 10}, { 0x0331, 10},
01462 { 0x0303, 10}, { 0x02F1, 10}, { 0x02A0, 10}, { 0x0233, 10}, { 0x0126, 10}, { 0x07C0, 11},
01463 { 0x076F, 11}, { 0x076C, 11}, { 0x0661, 11}, { 0x0604, 11}, { 0x0572, 11}, { 0x0551, 11},
01464 { 0x046A, 11}, { 0x0274, 11}, { 0x0F27, 12}, { 0x0F24, 12}, { 0x0EDB, 12}, { 0x0C8E, 12},
01465 { 0x0C0B, 12}, { 0x0C0A, 12}, { 0x0AE3, 12}, { 0x08D6, 12}, { 0x0490, 12}, { 0x0495, 12},
01466 { 0x1F19, 13}, { 0x1DB5, 13}, { 0x0009, 4}, { 0x0010, 5}, { 0x0029, 6}, { 0x0062, 7},
01467 { 0x00F3, 8}, { 0x00AD, 8}, { 0x01E5, 9}, { 0x0179, 9}, { 0x009C, 9}, { 0x03B1, 10},
01468 { 0x02AE, 10}, { 0x0127, 10}, { 0x076E, 11}, { 0x0570, 11}, { 0x0275, 11}, { 0x0F25, 12},
01469 { 0x0EC0, 12}, { 0x0AA0, 12}, { 0x08D7, 12}, { 0x1E4C, 13}, { 0x0008, 5}, { 0x0063, 7},
01470 { 0x00AF, 8}, { 0x017B, 9}, { 0x03B3, 10}, { 0x07DD, 11}, { 0x0640, 11}, { 0x0F8D, 12},
01471 { 0x0BC1, 12}, { 0x0491, 12}, { 0x0028, 6}, { 0x00C3, 8}, { 0x0151, 9}, { 0x02A1, 10},
01472 { 0x0573, 11}, { 0x0EC3, 12}, { 0x1F35, 13}, { 0x0065, 7}, { 0x01DA, 9}, { 0x02AF, 10},
01473 { 0x0277, 11}, { 0x08C9, 12}, { 0x1781, 13}, { 0x0025, 7}, { 0x0118, 9}, { 0x0646, 11},
01474 { 0x0AA6, 12}, { 0x1780, 13}, { 0x00C9, 8}, { 0x0321, 10}, { 0x0F9B, 12}, { 0x191E, 13},
01475 { 0x0048, 8}, { 0x07CC, 11}, { 0x0AA1, 12}, { 0x0180, 9}, { 0x0465, 11}, { 0x1905, 13},
01476 { 0x03E2, 10}, { 0x0EC1, 12}, { 0x3C9B, 14}, { 0x02F4, 10}, { 0x08C8, 12}, { 0x07C1, 11},
01477 { 0x0928, 13}, { 0x05E1, 11}, { 0x320D, 14}, { 0x0EC2, 12}, { 0x6418, 15}, { 0x1F34, 13},
01478 { 0x0078, 7}, { 0x0155, 9}, { 0x0552, 11}, { 0x191F, 13}, { 0x00FA, 8}, { 0x07DC, 11},
01479 { 0x1907, 13}, { 0x00AC, 8}, { 0x0249, 11}, { 0x13B1, 14}, { 0x01F6, 9}, { 0x0AE2, 12},
01480 { 0x01DC, 9}, { 0x04ED, 12}, { 0x0184, 9}, { 0x1904, 13}, { 0x0156, 9}, { 0x09D9, 13},
01481 { 0x03E7, 10}, { 0x0929, 13}, { 0x03B2, 10}, { 0x3B68, 14}, { 0x02F5, 10}, { 0x13B0, 14},
01482 { 0x0322, 10}, { 0x3B69, 14}, { 0x0234, 10}, { 0x7935, 15}, { 0x07C7, 11}, { 0xC833, 16},
01483 { 0x0660, 11}, { 0x7934, 15}, { 0x024B, 11}, { 0xC832, 16}, { 0x0AA7, 12}, { 0x1F18, 13},
01484 { 0x007A, 7}
01485 },
01486 {
01487 { 0x0002, 2}, { 0x0000, 3}, { 0x001E, 5}, { 0x0004, 5}, { 0x0012, 6}, { 0x0070, 7},
01488 { 0x001A, 7}, { 0x005F, 8}, { 0x0047, 8}, { 0x01D3, 9}, { 0x00B5, 9}, { 0x0057, 9},
01489 { 0x03B5, 10}, { 0x016D, 10}, { 0x0162, 10}, { 0x07CE, 11}, { 0x0719, 11}, { 0x0691, 11},
01490 { 0x02C6, 11}, { 0x0156, 11}, { 0x0F92, 12}, { 0x0D2E, 12}, { 0x0D20, 12}, { 0x059E, 12},
01491 { 0x0468, 12}, { 0x02A6, 12}, { 0x1DA2, 13}, { 0x1C60, 13}, { 0x1A43, 13}, { 0x0B1D, 13},
01492 { 0x08C0, 13}, { 0x055D, 13}, { 0x0003, 3}, { 0x000A, 5}, { 0x0077, 7}, { 0x00E5, 8},
01493 { 0x01D9, 9}, { 0x03E5, 10}, { 0x0166, 10}, { 0x0694, 11}, { 0x0152, 11}, { 0x059F, 12},
01494 { 0x1F3C, 13}, { 0x1A4B, 13}, { 0x055E, 13}, { 0x000C, 4}, { 0x007D, 7}, { 0x0044, 8},
01495 { 0x03E0, 10}, { 0x0769, 11}, { 0x0E31, 12}, { 0x1F26, 13}, { 0x055C, 13}, { 0x001B, 5},
01496 { 0x00E2, 8}, { 0x03A5, 10}, { 0x02C9, 11}, { 0x1F23, 13}, { 0x3B47, 14}, { 0x0007, 5},
01497 { 0x01D8, 9}, { 0x02D8, 11}, { 0x1F27, 13}, { 0x3494, 14}, { 0x0035, 6}, { 0x03E1, 10},
01498 { 0x059C, 12}, { 0x38C3, 14}, { 0x000C, 6}, { 0x0165, 10}, { 0x1D23, 13}, { 0x1638, 14},
01499 { 0x0068, 7}, { 0x0693, 11}, { 0x3A45, 14}, { 0x0020, 7}, { 0x0F90, 12}, { 0x7CF6, 15},
01500 { 0x00E8, 8}, { 0x058F, 12}, { 0x2CEF, 15}, { 0x0045, 8}, { 0x0B3A, 13}, { 0x01F1, 9},
01501 { 0x3B46, 14}, { 0x01A7, 9}, { 0x1676, 14}, { 0x0056, 9}, { 0x692A, 15}, { 0x038D, 10},
01502 { 0xE309, 16}, { 0x00AA, 10}, { 0x1C611, 17}, { 0x02DF, 11}, { 0xB3B9, 17}, { 0x02C8, 11},
01503 { 0x38C20, 18}, { 0x01B0, 11}, { 0x16390, 18}, { 0x0F9F, 12}, { 0x16771, 18}, { 0x0ED0, 12},
01504 { 0x71843, 19}, { 0x0D2A, 12}, { 0xF9E8C, 20}, { 0x0461, 12}, { 0xF9E8E, 20}, { 0x0B67, 13},
01505 { 0x055F, 13}, { 0x003F, 6}, { 0x006D, 9}, { 0x0E90, 12}, { 0x054E, 13}, { 0x0013, 6},
01506 { 0x0119, 10}, { 0x0B66, 13}, { 0x000B, 6}, { 0x0235, 11}, { 0x7CF5, 15}, { 0x0075, 7},
01507 { 0x0D24, 12}, { 0xF9E9, 16}, { 0x002E, 7}, { 0x1F22, 13}, { 0x0021, 7}, { 0x054F, 13},
01508 { 0x0014, 7}, { 0x3A44, 14}, { 0x00E4, 8}, { 0x7CF7, 15}, { 0x005E, 8}, { 0x7185, 15},
01509 { 0x0037, 8}, { 0x2C73, 15}, { 0x01DB, 9}, { 0x59DD, 16}, { 0x01C7, 9}, { 0x692B, 15},
01510 { 0x01A6, 9}, { 0x58E5, 16}, { 0x00B4, 9}, { 0x1F3D0, 17}, { 0x00B0, 9}, { 0xB1C9, 17},
01511 { 0x03E6, 10}, { 0x16770, 18}, { 0x016E, 10}, { 0x3E7A2, 18}, { 0x011B, 10}, { 0xF9E8D, 20},
01512 { 0x00D9, 10}, { 0xF9E8F, 20}, { 0x00A8, 10}, { 0x2C723, 19}, { 0x0749, 11}, { 0xE3084, 20},
01513 { 0x0696, 11}, { 0x58E45, 20}, { 0x02DE, 11}, { 0xB1C88, 21}, { 0x0231, 11}, { 0x1C610A, 21},
01514 { 0x01B1, 11}, { 0x71842D, 23}, { 0x0D2B, 12}, { 0x38C217, 22}, { 0x0D2F, 12}, { 0x163913, 22},
01515 { 0x05B2, 12}, { 0x163912, 22}, { 0x0469, 12}, { 0x71842C, 23}, { 0x1A42, 13}, { 0x08C1, 13},
01516 { 0x0073, 7}
01517 }
01518 };
01519
01520 static const uint16_t vlc_offs[] = {
01521 0, 520, 552, 616, 1128, 1160, 1224, 1740, 1772, 1836, 1900, 2436,
01522 2986, 3050, 3610, 4154, 4218, 4746, 5326, 5390, 5902, 6554, 7658, 8342,
01523 9304, 9988, 10630, 11234, 12174, 13006, 13560, 14232, 14786, 15432, 16350, 17522,
01524 20372, 21818, 22330, 22394, 23166, 23678, 23742, 24820, 25332, 25396, 26460, 26980,
01525 27048, 27592, 27600, 27608, 27616, 27624, 28224, 28258, 28290, 28802, 28834, 28866,
01526 29378, 29412, 29444, 29960, 29994, 30026, 30538, 30572, 30604, 31120, 31154, 31186,
01527 31714, 31746, 31778, 32306, 32340, 32372
01528 };
01529
01535 int ff_vc1_init_common(VC1Context *v)
01536 {
01537 static int done = 0;
01538 int i = 0;
01539 static VLC_TYPE vlc_table[32372][2];
01540
01541 v->hrd_rate = v->hrd_buffer = NULL;
01542
01543
01544 if (!done) {
01545 INIT_VLC_STATIC(&ff_vc1_bfraction_vlc, VC1_BFRACTION_VLC_BITS, 23,
01546 ff_vc1_bfraction_bits, 1, 1,
01547 ff_vc1_bfraction_codes, 1, 1, 1 << VC1_BFRACTION_VLC_BITS);
01548 INIT_VLC_STATIC(&ff_vc1_norm2_vlc, VC1_NORM2_VLC_BITS, 4,
01549 ff_vc1_norm2_bits, 1, 1,
01550 ff_vc1_norm2_codes, 1, 1, 1 << VC1_NORM2_VLC_BITS);
01551 INIT_VLC_STATIC(&ff_vc1_norm6_vlc, VC1_NORM6_VLC_BITS, 64,
01552 ff_vc1_norm6_bits, 1, 1,
01553 ff_vc1_norm6_codes, 2, 2, 556);
01554 INIT_VLC_STATIC(&ff_vc1_imode_vlc, VC1_IMODE_VLC_BITS, 7,
01555 ff_vc1_imode_bits, 1, 1,
01556 ff_vc1_imode_codes, 1, 1, 1 << VC1_IMODE_VLC_BITS);
01557 for (i = 0; i < 3; i++) {
01558 ff_vc1_ttmb_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 0]];
01559 ff_vc1_ttmb_vlc[i].table_allocated = vlc_offs[i * 3 + 1] - vlc_offs[i * 3 + 0];
01560 init_vlc(&ff_vc1_ttmb_vlc[i], VC1_TTMB_VLC_BITS, 16,
01561 ff_vc1_ttmb_bits[i], 1, 1,
01562 ff_vc1_ttmb_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
01563 ff_vc1_ttblk_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 1]];
01564 ff_vc1_ttblk_vlc[i].table_allocated = vlc_offs[i * 3 + 2] - vlc_offs[i * 3 + 1];
01565 init_vlc(&ff_vc1_ttblk_vlc[i], VC1_TTBLK_VLC_BITS, 8,
01566 ff_vc1_ttblk_bits[i], 1, 1,
01567 ff_vc1_ttblk_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
01568 ff_vc1_subblkpat_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 2]];
01569 ff_vc1_subblkpat_vlc[i].table_allocated = vlc_offs[i * 3 + 3] - vlc_offs[i * 3 + 2];
01570 init_vlc(&ff_vc1_subblkpat_vlc[i], VC1_SUBBLKPAT_VLC_BITS, 15,
01571 ff_vc1_subblkpat_bits[i], 1, 1,
01572 ff_vc1_subblkpat_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
01573 }
01574 for (i = 0; i < 4; i++) {
01575 ff_vc1_4mv_block_pattern_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 9]];
01576 ff_vc1_4mv_block_pattern_vlc[i].table_allocated = vlc_offs[i * 3 + 10] - vlc_offs[i * 3 + 9];
01577 init_vlc(&ff_vc1_4mv_block_pattern_vlc[i], VC1_4MV_BLOCK_PATTERN_VLC_BITS, 16,
01578 ff_vc1_4mv_block_pattern_bits[i], 1, 1,
01579 ff_vc1_4mv_block_pattern_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
01580 ff_vc1_cbpcy_p_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 10]];
01581 ff_vc1_cbpcy_p_vlc[i].table_allocated = vlc_offs[i * 3 + 11] - vlc_offs[i * 3 + 10];
01582 init_vlc(&ff_vc1_cbpcy_p_vlc[i], VC1_CBPCY_P_VLC_BITS, 64,
01583 ff_vc1_cbpcy_p_bits[i], 1, 1,
01584 ff_vc1_cbpcy_p_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
01585 ff_vc1_mv_diff_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 11]];
01586 ff_vc1_mv_diff_vlc[i].table_allocated = vlc_offs[i * 3 + 12] - vlc_offs[i * 3 + 11];
01587 init_vlc(&ff_vc1_mv_diff_vlc[i], VC1_MV_DIFF_VLC_BITS, 73,
01588 ff_vc1_mv_diff_bits[i], 1, 1,
01589 ff_vc1_mv_diff_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
01590 }
01591 for (i = 0; i < 8; i++) {
01592 ff_vc1_ac_coeff_table[i].table = &vlc_table[vlc_offs[i * 2 + 21]];
01593 ff_vc1_ac_coeff_table[i].table_allocated = vlc_offs[i * 2 + 22] - vlc_offs[i * 2 + 21];
01594 init_vlc(&ff_vc1_ac_coeff_table[i], AC_VLC_BITS, ff_vc1_ac_sizes[i],
01595 &vc1_ac_tables[i][0][1], 8, 4,
01596 &vc1_ac_tables[i][0][0], 8, 4, INIT_VLC_USE_NEW_STATIC);
01597
01598 ff_vc1_2ref_mvdata_vlc[i].table = &vlc_table[vlc_offs[i * 2 + 22]];
01599 ff_vc1_2ref_mvdata_vlc[i].table_allocated = vlc_offs[i * 2 + 23] - vlc_offs[i * 2 + 22];
01600 init_vlc(&ff_vc1_2ref_mvdata_vlc[i], VC1_2REF_MVDATA_VLC_BITS, 126,
01601 ff_vc1_2ref_mvdata_bits[i], 1, 1,
01602 ff_vc1_2ref_mvdata_codes[i], 4, 4, INIT_VLC_USE_NEW_STATIC);
01603 }
01604 for (i = 0; i < 4; i++) {
01605
01606 ff_vc1_intfr_4mv_mbmode_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 37]];
01607 ff_vc1_intfr_4mv_mbmode_vlc[i].table_allocated = vlc_offs[i * 3 + 38] - vlc_offs[i * 3 + 37];
01608 init_vlc(&ff_vc1_intfr_4mv_mbmode_vlc[i], VC1_INTFR_4MV_MBMODE_VLC_BITS, 15,
01609 ff_vc1_intfr_4mv_mbmode_bits[i], 1, 1,
01610 ff_vc1_intfr_4mv_mbmode_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
01611
01612 ff_vc1_intfr_non4mv_mbmode_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 38]];
01613 ff_vc1_intfr_non4mv_mbmode_vlc[i].table_allocated = vlc_offs[i * 3 + 39] - vlc_offs[i * 3 + 38];
01614 init_vlc(&ff_vc1_intfr_non4mv_mbmode_vlc[i], VC1_INTFR_NON4MV_MBMODE_VLC_BITS, 9,
01615 ff_vc1_intfr_non4mv_mbmode_bits[i], 1, 1,
01616 ff_vc1_intfr_non4mv_mbmode_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
01617
01618 ff_vc1_1ref_mvdata_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 39]];
01619 ff_vc1_1ref_mvdata_vlc[i].table_allocated = vlc_offs[i * 3 + 40] - vlc_offs[i * 3 + 39];
01620 init_vlc(&ff_vc1_1ref_mvdata_vlc[i], VC1_1REF_MVDATA_VLC_BITS, 72,
01621 ff_vc1_1ref_mvdata_bits[i], 1, 1,
01622 ff_vc1_1ref_mvdata_codes[i], 4, 4, INIT_VLC_USE_NEW_STATIC);
01623 }
01624 for (i = 0; i < 4; i++) {
01625
01626 ff_vc1_2mv_block_pattern_vlc[i].table = &vlc_table[vlc_offs[i + 49]];
01627 ff_vc1_2mv_block_pattern_vlc[i].table_allocated = vlc_offs[i + 50] - vlc_offs[i + 49];
01628 init_vlc(&ff_vc1_2mv_block_pattern_vlc[i], VC1_2MV_BLOCK_PATTERN_VLC_BITS, 4,
01629 ff_vc1_2mv_block_pattern_bits[i], 1, 1,
01630 ff_vc1_2mv_block_pattern_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
01631 }
01632 for (i = 0; i < 8; i++) {
01633
01634 ff_vc1_icbpcy_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 53]];
01635 ff_vc1_icbpcy_vlc[i].table_allocated = vlc_offs[i * 3 + 54] - vlc_offs[i * 3 + 53];
01636 init_vlc(&ff_vc1_icbpcy_vlc[i], VC1_ICBPCY_VLC_BITS, 63,
01637 ff_vc1_icbpcy_p_bits[i], 1, 1,
01638 ff_vc1_icbpcy_p_codes[i], 2, 2, INIT_VLC_USE_NEW_STATIC);
01639
01640 ff_vc1_if_mmv_mbmode_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 54]];
01641 ff_vc1_if_mmv_mbmode_vlc[i].table_allocated = vlc_offs[i * 3 + 55] - vlc_offs[i * 3 + 54];
01642 init_vlc(&ff_vc1_if_mmv_mbmode_vlc[i], VC1_IF_MMV_MBMODE_VLC_BITS, 8,
01643 ff_vc1_if_mmv_mbmode_bits[i], 1, 1,
01644 ff_vc1_if_mmv_mbmode_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
01645 ff_vc1_if_1mv_mbmode_vlc[i].table = &vlc_table[vlc_offs[i * 3 + 55]];
01646 ff_vc1_if_1mv_mbmode_vlc[i].table_allocated = vlc_offs[i * 3 + 56] - vlc_offs[i * 3 + 55];
01647 init_vlc(&ff_vc1_if_1mv_mbmode_vlc[i], VC1_IF_1MV_MBMODE_VLC_BITS, 6,
01648 ff_vc1_if_1mv_mbmode_bits[i], 1, 1,
01649 ff_vc1_if_1mv_mbmode_codes[i], 1, 1, INIT_VLC_USE_NEW_STATIC);
01650 }
01651 done = 1;
01652 }
01653
01654
01655 v->pq = -1;
01656 v->mvrange = 0;
01657
01658 return 0;
01659 }