mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
B-frames support for adv. profile
Originally committed as revision 7170 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
b8ce8f15a0
commit
5081f3aad5
@ -1591,8 +1591,7 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
|
|||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
v->s.pict_type = B_TYPE;
|
v->s.pict_type = B_TYPE;
|
||||||
return -1;
|
break;
|
||||||
// break;
|
|
||||||
case 2:
|
case 2:
|
||||||
v->s.pict_type = I_TYPE;
|
v->s.pict_type = I_TYPE;
|
||||||
break;
|
break;
|
||||||
@ -1621,6 +1620,13 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
|
|||||||
if(v->interlace)
|
if(v->interlace)
|
||||||
v->uvsamp = get_bits1(gb);
|
v->uvsamp = get_bits1(gb);
|
||||||
if(v->finterpflag) v->interpfrm = get_bits(gb, 1);
|
if(v->finterpflag) v->interpfrm = get_bits(gb, 1);
|
||||||
|
if(v->s.pict_type == B_TYPE) {
|
||||||
|
v->bfraction = get_vlc2(gb, vc1_bfraction_vlc.table, VC1_BFRACTION_VLC_BITS, 1);
|
||||||
|
v->bfraction = vc1_bfraction_lut[v->bfraction];
|
||||||
|
if(v->bfraction == 0) {
|
||||||
|
v->s.pict_type = BI_TYPE; /* XXX: should not happen here */
|
||||||
|
}
|
||||||
|
}
|
||||||
pqindex = get_bits(gb, 5);
|
pqindex = get_bits(gb, 5);
|
||||||
v->pqindex = pqindex;
|
v->pqindex = pqindex;
|
||||||
if (v->quantizer_mode == QUANT_FRAME_IMPLICIT)
|
if (v->quantizer_mode == QUANT_FRAME_IMPLICIT)
|
||||||
@ -1747,6 +1753,56 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
|
|||||||
v->ttfrm = TT_8X8;
|
v->ttfrm = TT_8X8;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case B_TYPE:
|
||||||
|
if(v->postprocflag)
|
||||||
|
v->postproc = get_bits1(gb);
|
||||||
|
if (v->extended_mv) v->mvrange = get_prefix(gb, 0, 3);
|
||||||
|
else v->mvrange = 0;
|
||||||
|
v->k_x = v->mvrange + 9 + (v->mvrange >> 1); //k_x can be 9 10 12 13
|
||||||
|
v->k_y = v->mvrange + 8; //k_y can be 8 9 10 11
|
||||||
|
v->range_x = 1 << (v->k_x - 1);
|
||||||
|
v->range_y = 1 << (v->k_y - 1);
|
||||||
|
|
||||||
|
if (v->pq < 5) v->tt_index = 0;
|
||||||
|
else if(v->pq < 13) v->tt_index = 1;
|
||||||
|
else v->tt_index = 2;
|
||||||
|
|
||||||
|
lowquant = (v->pq > 12) ? 0 : 1;
|
||||||
|
v->mv_mode = get_bits1(gb) ? MV_PMODE_1MV : MV_PMODE_1MV_HPEL_BILIN;
|
||||||
|
v->s.quarter_sample = (v->mv_mode == MV_PMODE_1MV);
|
||||||
|
v->s.mspel = v->s.quarter_sample;
|
||||||
|
|
||||||
|
status = bitplane_decoding(v->direct_mb_plane, &v->dmb_is_raw, v);
|
||||||
|
if (status < 0) return -1;
|
||||||
|
av_log(v->s.avctx, AV_LOG_DEBUG, "MB Direct Type plane encoding: "
|
||||||
|
"Imode: %i, Invert: %i\n", status>>1, status&1);
|
||||||
|
status = bitplane_decoding(v->s.mbskip_table, &v->skip_is_raw, v);
|
||||||
|
if (status < 0) return -1;
|
||||||
|
av_log(v->s.avctx, AV_LOG_DEBUG, "MB Skip plane encoding: "
|
||||||
|
"Imode: %i, Invert: %i\n", status>>1, status&1);
|
||||||
|
|
||||||
|
v->s.mv_table_index = get_bits(gb, 2);
|
||||||
|
v->cbpcy_vlc = &vc1_cbpcy_p_vlc[get_bits(gb, 2)];
|
||||||
|
|
||||||
|
if (v->dquant)
|
||||||
|
{
|
||||||
|
av_log(v->s.avctx, AV_LOG_DEBUG, "VOP DQuant info\n");
|
||||||
|
vop_dquant_decoding(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
v->ttfrm = 0;
|
||||||
|
if (v->vstransform)
|
||||||
|
{
|
||||||
|
v->ttmbf = get_bits(gb, 1);
|
||||||
|
if (v->ttmbf)
|
||||||
|
{
|
||||||
|
v->ttfrm = ttfrm_to_tt[get_bits(gb, 2)];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
v->ttmbf = 1;
|
||||||
|
v->ttfrm = TT_8X8;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AC Syntax */
|
/* AC Syntax */
|
||||||
|
Loading…
Reference in New Issue
Block a user