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

Zuxy Meng zuxy.meng at gmail.com
Wed Mar 16 11:19:04 CET 2011


Hi,

2011/3/16 Reimar Döffinger <Reimar.Doeffinger at gmx.de>:
> 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).

Yes I guess it's the DR path.

> Alternatively filters requiring the alignment could do the memcpy, but I think that's more effort for little gain.

The problem happens when expand isn't the last filter, e.g. vf=expand...,pp=ac

I'm afraid I don't understand too much stuff here. What do you mean by
"disabling DR" here? Do you think the expand filter should stop using
DR in certain cases? If so, how do we determine whether DR should be
disabled?

-- 
Zuxy
Beauty is truth,
While truth is beauty.
PGP KeyID: E8555ED6


More information about the MPlayer-dev-eng mailing list