@ -1729,7 +1729,7 @@ static inline void mc_dir_part(H264Context *h, Picture *pic, int n, int square,
if ( MB_FIELD ) {
// chroma offset when predicting from a field of opposite parity
my + = 2 * ( ( s - > mb_y & 1 ) - ( h - > ref_cache [ list ] [ scan8 [ n ] ] & 1 ) ) ;
my + = 2 * ( ( s - > mb_y & 1 ) - ( pic - > reference - 1 ) ) ;
emu | = ( my > > 3 ) < 0 | | ( my > > 3 ) + 8 > = ( pic_height > > 1 ) ;
}
src_cb = pic - > data [ 1 ] + ( mx > > 3 ) + ( my > > 3 ) * h - > mb_uvlinesize ;
@ -2764,11 +2764,12 @@ static void hl_decode_mb(H264Context *h){
else hl_decode_mb_simple ( h ) ;
}
static void pic_as_field ( Picture * pic , const int bottom ) {
static void pic_as_field ( Picture * pic , const int parity ) {
int i ;
for ( i = 0 ; i < 4 ; + + i ) {
if ( bottom )
if ( parity = = PICT_BOTTOM_FIELD )
pic - > data [ i ] + = pic - > linesize [ i ] ;
pic - > reference = parity ;
pic - > linesize [ i ] * = 2 ;
}
}
@ -2779,7 +2780,7 @@ static int split_field_copy(Picture *dest, Picture *src,
if ( match ) {
* dest = * src ;
pic_as_field ( dest , parity = = PICT_BOTTOM_FIELD ) ;
pic_as_field ( dest , parity ) ;
dest - > pic_id * = 2 ;
dest - > pic_id + = id_add ;
}
@ -3133,8 +3134,7 @@ static int decode_ref_pic_list_reordering(H264Context *h){
}
h - > ref_list [ list ] [ index ] = * ref ;
if ( FIELD_PICTURE ) {
int bot = pic_structure = = PICT_BOTTOM_FIELD ;
pic_as_field ( & h - > ref_list [ list ] [ index ] , bot ) ;
pic_as_field ( & h - > ref_list [ list ] [ index ] , pic_structure ) ;
}
}
} else {
@ -3166,9 +3166,11 @@ static void fill_mbaff_ref_list(H264Context *h){
field [ 0 ] = * frame ;
for ( j = 0 ; j < 3 ; j + + )
field [ 0 ] . linesize [ j ] < < = 1 ;
field [ 0 ] . reference = PICT_TOP_FIELD ;
field [ 1 ] = field [ 0 ] ;
for ( j = 0 ; j < 3 ; j + + )
field [ 1 ] . data [ j ] + = frame - > linesize [ j ] ;
field [ 1 ] . reference = PICT_BOTTOM_FIELD ;
h - > luma_weight [ list ] [ 16 + 2 * i ] = h - > luma_weight [ list ] [ 16 + 2 * i + 1 ] = h - > luma_weight [ list ] [ i ] ;
h - > luma_offset [ list ] [ 16 + 2 * i ] = h - > luma_offset [ list ] [ 16 + 2 * i + 1 ] = h - > luma_offset [ list ] [ i ] ;