comparison vc1.c @ 12521:db36486a6f89 libavcodec

Make WMV3 decoder attempt to decode WMVP as well
author kostya
date Sun, 26 Sep 2010 13:56:50 +0000
parents 5915f4f0e172
children
comparison
equal deleted inserted replaced
12520:5915f4f0e172 12521:db36486a6f89
313 av_log(avctx, AV_LOG_ERROR, 313 av_log(avctx, AV_LOG_ERROR,
314 "Old interlaced mode is not supported\n"); 314 "Old interlaced mode is not supported\n");
315 return -1; 315 return -1;
316 } 316 }
317 if (v->res_sprite) { 317 if (v->res_sprite) {
318 av_log(avctx, AV_LOG_ERROR, "WMVP is not supported\n"); 318 av_log(avctx, AV_LOG_ERROR, "WMVP is not fully supported\n");
319 return -1;
320 } 319 }
321 } 320 }
322 321
323 // (fps-2)/4 (->30) 322 // (fps-2)/4 (->30)
324 v->frmrtq_postproc = get_bits(gb, 3); //common 323 v->frmrtq_postproc = get_bits(gb, 3); //common
385 384
386 v->s.max_b_frames = avctx->max_b_frames = get_bits(gb, 3); //common 385 v->s.max_b_frames = avctx->max_b_frames = get_bits(gb, 3); //common
387 v->quantizer_mode = get_bits(gb, 2); //common 386 v->quantizer_mode = get_bits(gb, 2); //common
388 387
389 v->finterpflag = get_bits1(gb); //common 388 v->finterpflag = get_bits1(gb); //common
390 v->res_rtm_flag = get_bits1(gb); //reserved 389
390 if (v->res_sprite) {
391 v->s.avctx->width = v->s.avctx->coded_width = get_bits(gb, 11);
392 v->s.avctx->height = v->s.avctx->coded_height = get_bits(gb, 11);
393 skip_bits(gb, 5); //frame rate
394 v->res_x8 = get_bits1(gb);
395 if (get_bits1(gb)) { // something to do with DC VLC selection
396 av_log(avctx, AV_LOG_ERROR, "Unsupported sprite feature\n");
397 return -1;
398 }
399 skip_bits(gb, 3); //slice code
400 v->res_rtm_flag = 0;
401 } else {
402 v->res_rtm_flag = get_bits1(gb); //reserved
403 }
391 if (!v->res_rtm_flag) 404 if (!v->res_rtm_flag)
392 { 405 {
393 // av_log(avctx, AV_LOG_ERROR, 406 // av_log(avctx, AV_LOG_ERROR,
394 // "0 for reserved RES_RTM_FLAG is forbidden\n"); 407 // "0 for reserved RES_RTM_FLAG is forbidden\n");
395 av_log(avctx, AV_LOG_ERROR, 408 av_log(avctx, AV_LOG_ERROR,
564 577
565 int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb) 578 int vc1_parse_frame_header(VC1Context *v, GetBitContext* gb)
566 { 579 {
567 int pqindex, lowquant, status; 580 int pqindex, lowquant, status;
568 581
582 if(v->res_sprite) {
583 skip_bits(gb, 2); //not yet deciphered
584 }
569 if(v->finterpflag) v->interpfrm = get_bits1(gb); 585 if(v->finterpflag) v->interpfrm = get_bits1(gb);
570 skip_bits(gb, 2); //framecnt unused 586 skip_bits(gb, 2); //framecnt unused
571 v->rangeredfrm = 0; 587 v->rangeredfrm = 0;
572 if (v->rangered) v->rangeredfrm = get_bits1(gb); 588 if (v->rangered) v->rangeredfrm = get_bits1(gb);
573 v->s.pict_type = get_bits1(gb); 589 v->s.pict_type = get_bits1(gb);