[Ffmpeg-devel] [PATCH]: Too much alignment assumed by H264 decoder

Michael Niedermayer michaelni
Mon Dec 26 05:57:40 CET 2005


Hi

On Sun, Dec 25, 2005 at 06:53:24PM -0800, David S. Miller wrote:
> From: Mike Melanson <mike at multimedia.cx>
> Date: Sun, 25 Dec 2005 17:51:52 -0800
> 
> > 	Plus, it still doesn't make any sense: Why is an 8-byte alignment 
> > causing trouble but a 4-byte alignment is okay? Logically, the 8-byte 
> > alignment *is also* a 4-byte alignment.
> 
> The issue is that the mv_cache[] is an array of int16 objects.
> So even if you align the "array" on an 8-byte boundary (which
> is done using the __align8 directive), when you index into this
> array as this code does, the resulting pointer will not necessarily
> be 8-byte aligned.
> 
> I have a case trapped in GDB to explain this point, we are at this
> block of code in write_back_motion():
> 
>         for(y=0; y<4; y++){
>             *(uint64_t*)s->current_picture.motion_val[list][b_xy + 0 + y*h->b_stride]= *(uint64_t*)h->mv_cache[list][scan8[0]+0 + 8*y];
>             *(uint64_t*)s->current_picture.motion_val[list][b_xy + 2 + y*h->b_stride]= *(uint64_t*)h->mv_cache[list][scan8[0]+2 + 8*y];
>         }
> 
> The problematic access is the h->mv_cache[] one, h->mv_cache itself
> is 8-byte aligned, but the indexed value here is only 4-byte aligned.
> 
> Is the problem at least a little bit clearer to folks now? :-)

no it was always clear, fix b_stride so its a multiple of 2

[...]

-- 
Michael





More information about the ffmpeg-devel mailing list