[MPlayer-dev-eng] Segfault caused by the "expand" filter

Reimar Döffinger Reimar.Doeffinger at gmx.de
Wed Mar 16 09:47:53 CET 2011


On 15 Mar 2011, at 03:57, Zuxy Meng <zuxy.meng at gmail.com> wrote:
> Hope here's still atmosphere for technical discussions:
> 
> I met segfaults triggered by unaligned accesses of SSE instructions.
> The root cause is within the get_image() function of the "expand"
> filter, in lines like:
> 
>    if(mpi->flags&MP_IMGFLAG_PLANAR){
>        mpi->planes[0]=vf->dmpi->planes[0]+
>        vf->priv->exp_y*vf->dmpi->stride[0]+vf->priv->exp_x;
> 
> Here vf->dmpi->planes[0] is 16-byte aligned, but mpi->planes[0] may not be.
> 
> I'm not sure what's the correct fix here. Would a simple forced align
> before the assignment work (e.g. ((vf->dmpi->planes[0] + ...)&~15))?

To solve it properly you have to allocate a new image and memcpy instead of using EXPORT image type (or is this the DR path? Disable DR in that case).
Alternatively filters requiring the alignment could do the memcpy, but I think that's more effort for little gain.


More information about the MPlayer-dev-eng mailing list