Support for BI-frames in Advanced Profile

Originally committed as revision 6211 to svn://svn.ffmpeg.org/ffmpeg/trunk
pull/126/head
Kostya Shishkov 19 years ago
parent d429c98208
commit 767516533d
  1. 11
      libavcodec/vc1.c

@ -1326,7 +1326,7 @@ static int decode_entry_point(AVCodecContext *avctx, GetBitContext *gb)
av_log(avctx, AV_LOG_DEBUG, "Entry point: %08X\n", show_bits_long(gb, 32)); av_log(avctx, AV_LOG_DEBUG, "Entry point: %08X\n", show_bits_long(gb, 32));
get_bits1(gb); // broken link get_bits1(gb); // broken link
get_bits1(gb); // closed entry avctx->max_b_frames = 1 - get_bits1(gb); // 'closed entry' also signalize possible B-frames
v->panscanflag = get_bits1(gb); v->panscanflag = get_bits1(gb);
get_bits1(gb); // refdist flag get_bits1(gb); // refdist flag
v->s.loop_filter = get_bits1(gb); v->s.loop_filter = get_bits1(gb);
@ -1592,8 +1592,7 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
break; break;
case 3: case 3:
v->s.pict_type = BI_TYPE; v->s.pict_type = BI_TYPE;
return -1; break;
// break;
case 4: case 4:
v->s.pict_type = P_TYPE; // skipped pic v->s.pict_type = P_TYPE; // skipped pic
v->p_frame_skipped = 1; v->p_frame_skipped = 1;
@ -1636,6 +1635,7 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
switch(v->s.pict_type) { switch(v->s.pict_type) {
case I_TYPE: case I_TYPE:
case BI_TYPE:
status = bitplane_decoding(v->acpred_plane, &v->acpred_is_raw, v); status = bitplane_decoding(v->acpred_plane, &v->acpred_is_raw, v);
if (status < 0) return -1; if (status < 0) return -1;
av_log(v->s.avctx, AV_LOG_DEBUG, "ACPRED plane encoding: " av_log(v->s.avctx, AV_LOG_DEBUG, "ACPRED plane encoding: "
@ -1756,6 +1756,11 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
vop_dquant_decoding(v); vop_dquant_decoding(v);
} }
v->bi_type = 0;
if(v->s.pict_type == BI_TYPE) {
v->s.pict_type = B_TYPE;
v->bi_type = 1;
}
return 0; return 0;
} }

Loading…
Cancel
Save