Commit 740f203f authored by Simon Horlick's avatar Simon Horlick Committed by Fiona Glaser
Browse files

MBAFF: Disable adaptive MBAFF when subme 0 is used

parent a11114e6
......@@ -574,6 +574,7 @@ struct x264_t
int i_psy_trellis; /* Psy trellis strength--fixed point value*/
int b_interlaced;
int b_adaptive_mbaff; /* MBAFF+subme 0 requires non-adaptive MBAFF i.e. all field mbs */
/* Allowed qpel MV range to stay within the picture + emulated edge pixels */
int mv_min[2];
......
......@@ -1035,6 +1035,10 @@ x264_t *x264_encoder_open( x264_param_t *param )
h->mb.i_mb_width = h->sps->i_mb_width;
h->mb.i_mb_height = h->sps->i_mb_height;
h->mb.i_mb_count = h->mb.i_mb_width * h->mb.i_mb_height;
/* Adaptive MBAFF and subme 0 are not supported as we require halving motion
* vectors during prediction, resulting in hpel mvs.
* The chosen solution is to make MBAFF non-adaptive in this case. */
h->mb.b_adaptive_mbaff = h->param.b_interlaced && h->param.analyse.i_subpel_refine;
/* Init frames. */
if( h->param.i_bframe_adaptive == X264_B_ADAPT_TRELLIS && !h->param.rc.b_stat_read )
......@@ -2031,9 +2035,12 @@ static int x264_slice_write( x264_t *h )
if( h->param.b_interlaced )
{
if( !(i_mb_y&1) )
h->mb.b_interlaced = 1;
x264_zigzag_init( h->param.cpu, &h->zigzagf, h->mb.b_interlaced );
if( h->mb.b_adaptive_mbaff )
{
if( !(i_mb_y&1) )
h->mb.b_interlaced = 1;
x264_zigzag_init( h->param.cpu, &h->zigzagf, h->mb.b_interlaced );
}
h->mb.field[mb_xy] = h->mb.b_interlaced;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment