CVS: ffmpeg/libavcodec h264.c,1.173,1.174
Update of /cvsroot/ffmpeg/ffmpeg/libavcodec In directory mail:/var2/tmp/cvs-serv16049 Modified Files: h264.c Log Message: direct mvs in B_8x8 mbs were set too early. Index: h264.c =================================================================== RCS file: /cvsroot/ffmpeg/ffmpeg/libavcodec/h264.c,v retrieving revision 1.173 retrieving revision 1.174 diff -u -d -r1.173 -r1.174 --- h264.c 31 Dec 2005 10:11:37 -0000 1.173 +++ h264.c 31 Dec 2005 11:31:53 -0000 1.174 @@ -4872,8 +4872,13 @@ h->sub_mb_type[i]= b_sub_mb_type_info[ h->sub_mb_type[i] ].type; } if( IS_DIRECT(h->sub_mb_type[0]) || IS_DIRECT(h->sub_mb_type[1]) - || IS_DIRECT(h->sub_mb_type[2]) || IS_DIRECT(h->sub_mb_type[3])) + || IS_DIRECT(h->sub_mb_type[2]) || IS_DIRECT(h->sub_mb_type[3])) { pred_direct_motion(h, &mb_type); + h->ref_cache[0][scan8[4]] = + h->ref_cache[1][scan8[4]] = + h->ref_cache[0][scan8[12]] = + h->ref_cache[1][scan8[12]] = PART_NOT_AVAILABLE; + } }else{ assert(h->slice_type == P_TYPE || h->slice_type == SP_TYPE); //FIXME SP correct ? for(i=0; i<4; i++){ @@ -4912,7 +4917,10 @@ if(ref_count == 0) continue; for(i=0; i<4; i++){ - if(IS_DIRECT(h->sub_mb_type[i])) continue; + if(IS_DIRECT(h->sub_mb_type[i])) { + h->ref_cache[list][ scan8[4*i] ] = h->ref_cache[list][ scan8[4*i]+1 ]; + continue; + } h->ref_cache[list][ scan8[4*i] ]=h->ref_cache[list][ scan8[4*i]+1 ]= h->ref_cache[list][ scan8[4*i]+8 ]=h->ref_cache[list][ scan8[4*i]+9 ]= ref[list][i];
participants (1)
-
lorenm@mplayerhq.hu