[Ffmpeg-devel] A Bug in libavcodec\h264.c ?

Chengji Zhao czhao
Mon May 9 07:37:56 CEST 2005


Hi, Michael Niedermayer and all,

I think I found one typing mistake/ bug in function fill_caches(),

if(IS_INTER(left_type[0])){
                const int b_xy= h->mb2b_xy[left_xy[0]] + 3;
                const int b8_xy= h->mb2b8_xy[left_xy[0]] + 1;
                *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 0*8]= 
*(uint32_t*)s->current_picture.motion_val[list][b_xy + 
h->b_stride*left_block[0]];
                *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 1*8]= 
*(uint32_t*)s->current_picture.motion_val[list][b_xy + 
h->b_stride*left_block[1]];
                h->ref_cache[list][scan8[0] - 1 + 0*8]=
                h->ref_cache[list][scan8[0] - 1 + 1*8]= 
s->current_picture.ref_index[list][b8_xy + h->b8_stride*(left_block[0]>>1)];
            }else{
                *(uint32_t*)h->mv_cache [list][scan8[0] - 1 + 0*8]=
                *(uint32_t*)h->mv_cache [list][scan8[0] - 1 + 1*8]= 0;
                h->ref_cache[list][scan8[0] - 1 + 0*8]=
                h->ref_cache[list][scan8[0] - 1 + 1*8]= left_type[0] ? 
LIST_NOT_USED : PART_NOT_AVAILABLE;
            }
           
            if(IS_INTER(left_type[1])){
                const int b_xy= h->mb2b_xy[left_xy[1]] + 3;
                const int b8_xy= h->mb2b8_xy[left_xy[1]] + 1;
                *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 2*8]= 
*(uint32_t*)s->current_picture.motion_val[list][b_xy + 
h->b_stride*left_block[2]];
                *(uint32_t*)h->mv_cache[list][scan8[0] - 1 + 3*8]= 
*(uint32_t*)s->current_picture.motion_val[list][b_xy + 
h->b_stride*left_block[3]];
                h->ref_cache[list][scan8[0] - 1 + 2*8]=
                h->ref_cache[list][scan8[0] - 1 + 3*8]= 
s->current_picture.ref_index[list][b8_xy + h->b8_stride*(left_block[2]>>1)];
            }else{
                *(uint32_t*)h->mv_cache [list][scan8[0] - 1 + 2*8]=
                *(uint32_t*)h->mv_cache [list][scan8[0] - 1 + 3*8]= 0;
                h->ref_cache[list][scan8[0] - 1 + 2*8]=
                h->ref_cache[list][scan8[0] - 1 + 3*8]= left_type[0] ? 
LIST_NOT_USED : PART_NOT_AVAILABLE;
            }

I think the last line should be changed to
h->ref_cache[list][scan8[0] - 1 + 3*8]= left_type[1] ? LIST_NOT_USED : 
PART_NOT_AVAILABLE;
Am I correct?

Chengji





More information about the ffmpeg-devel mailing list