diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2008-08-04 02:41:19 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2008-08-04 02:41:19 +0000 |
commit | 71041842ec0be33cd120c8bfa6a2186220757071 (patch) | |
tree | 7277a83490e72785e56f3fa82e9f82e31d99ab47 /libavcodec | |
parent | 55aff0d90198b001a580d787464c0c5ffb58506a (diff) | |
download | ffmpeg-71041842ec0be33cd120c8bfa6a2186220757071.tar.gz |
Use the correct collocated field in pred_direct_motion() when it differs in parity.
Fixes at least:
FRExt/HPCAFL_BRCM_C.264
FRExt/HPCAFLNL_BRCM_C.264
FRExt/HPCVFL_BRCM_A.264
FRExt/HPCVFLNL_BRCM_A.264
Originally committed as revision 14529 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/h264.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/libavcodec/h264.c b/libavcodec/h264.c index da2e0f19ae..5de23da509 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -936,9 +936,10 @@ static inline void direct_ref_list_init(H264Context * const h){ static inline void pred_direct_motion(H264Context * const h, int *mb_type){ MpegEncContext * const s = &h->s; - const int mb_xy = h->mb_xy; - const int b8_xy = 2*s->mb_x + 2*s->mb_y*h->b8_stride; - const int b4_xy = 4*s->mb_x + 4*s->mb_y*h->b_stride; + const int fieldoff= (s->picture_structure & h->ref_list[1][0].reference) ? 0 : (3-2*s->picture_structure); + const int mb_xy = h->mb_xy + s->mb_stride*fieldoff; + const int b8_xy = 2*s->mb_x + 2*s->mb_y*h->b8_stride + 2*h->b8_stride*fieldoff; + const int b4_xy = 4*s->mb_x + 4*s->mb_y*h-> b_stride + 4*h-> b_stride*fieldoff; const int mb_type_col = h->ref_list[1][0].mb_type[mb_xy]; const int16_t (*l1mv0)[2] = (const int16_t (*)[2]) &h->ref_list[1][0].motion_val[0][b4_xy]; const int16_t (*l1mv1)[2] = (const int16_t (*)[2]) &h->ref_list[1][0].motion_val[1][b4_xy]; |