Saves a few clocks in mv pred.
CHECKED_MALLOC( frame->mb_type, i_mb_count * sizeof(int8_t));
CHECKED_MALLOC( frame->mb_partition, i_mb_count * sizeof(uint8_t));
CHECKED_MALLOC( frame->mv[0], 2*16 * i_mb_count * sizeof(int16_t) );
- CHECKED_MALLOC( frame->mv16x16, 2*i_mb_count * sizeof(int16_t) );
+ CHECKED_MALLOC( frame->mv16x16, 2*(i_mb_count+1) * sizeof(int16_t) );
+ M32( frame->mv16x16[0] ) = 0;
+ frame->mv16x16++;
CHECKED_MALLOC( frame->ref[0], 4 * i_mb_count * sizeof(int8_t) );
if( h->param.i_bframe )
{
x264_free( frame->mb_partition );
x264_free( frame->mv[0] );
x264_free( frame->mv[1] );
- x264_free( frame->mv16x16 );
+ if( frame->mv16x16 )
+ x264_free( frame->mv16x16-1 );
x264_free( frame->ref[0] );
x264_free( frame->ref[1] );
x264_pthread_mutex_destroy( &frame->mutex );
i_refs = X264_MIN(16, i_refs + 1); //blind weights add one duplicate frame
for( int j = !i; j < i_refs; j++ )
- CHECKED_MALLOC( h->mb.mvr[i][j], 2 * i_mb_count * sizeof(int16_t) );
+ {
+ CHECKED_MALLOC( h->mb.mvr[i][j], 2 * (i_mb_count + 1) * sizeof(int16_t) );
+ M32( h->mb.mvr[i][j][0] ) = 0;
+ h->mb.mvr[i][j]++;
+ }
}
if( h->param.analyse.i_weighted_pred )
{
for( int i = 0; i < 2; i++ )
for( int j = !i; j < 32; j++ )
- x264_free( h->mb.mvr[i][j] );
+ if( h->mb.mvr[i][j] )
+ x264_free( h->mb.mvr[i][j]-1 );
for( int i = 0; i < 16; i++ )
x264_free( h->mb.p_weight_buf[i] );
}
/* spatial predictors */
- if( h->mb.i_neighbour_frame & MB_LEFT )
- {
- SET_MVP( mvr[h->mb.i_mb_left_xy] );
- }
- if( h->mb.i_neighbour_frame & MB_TOP )
- {
- SET_MVP( mvr[h->mb.i_mb_top_xy] );
-
- if( h->mb.i_neighbour_frame & MB_TOPLEFT )
- SET_MVP( mvr[h->mb.i_mb_topleft_xy] );
- if( h->mb.i_neighbour_frame & MB_TOPRIGHT )
- SET_MVP( mvr[h->mb.i_mb_topright_xy] );
- }
+ SET_MVP( mvr[h->mb.i_mb_left_xy] );
+ SET_MVP( mvr[h->mb.i_mb_top_xy] );
+ SET_MVP( mvr[h->mb.i_mb_topleft_xy] );
+ SET_MVP( mvr[h->mb.i_mb_topright_xy] );
#undef SET_MVP
/* temporal predictors */
lX->me8x8[i].cost = INT_MAX;
for( int i_ref = 0; i_ref <= i_maxref[l]; i_ref++ )
{
- m.i_ref_cost = REF_COST( l, i_ref );;
+ m.i_ref_cost = REF_COST( l, i_ref );
LOAD_HPELS( &m, h->mb.pic.p_fref[l][i_ref], l, i_ref, 8*x8, 8*y8 );
for( int j = 0; j < i_ref8s; j++ )
{
int i_ref = ref8[j];
- m.i_ref_cost = REF_COST( l, i_ref );;
+ m.i_ref_cost = REF_COST( l, i_ref );
LOAD_HPELS( &m, h->mb.pic.p_fref[l][i_ref], l, i_ref, 0, 8*i );