[FFmpeg-devel] ff_idct_xvid_sse2-cannot-be-inline.patch

Alexander Strange astrange
Tue Mar 9 02:48:14 CET 2010


On Mar 8, 2010, at 8:41 PM, Pavel Pavlov wrote:

>>>> On Mon, Mar 08, 2010 at 06:43:11PM -0500, Pavel Pavlov wrote:
>>>>>>> The function ff_idct_xvid_sse2 simply cannot be static because
>>>>>>> it's
>>>>>> referenced inside dsputil_mmx.c:
>>>>>>>  c->idct    = ff_idct_xvid_sse2;
>>>>>>> I have no idea how gcc could compile/link this kind of code.
>> There
>>>>>> should have been a link error at least
>>>>>>> <ff_idct_xvid_sse2-cannot-be-inline.patch>
>>>>>> 
>>>>>> It's C99 inline. C99 doesn't make inline functions static if
>> there's
>>>>>> a prototype, and there is one.
>>>>>> 
>>>>> 
>>>>> 
>>>>> I don't know why I wrote static, if it's actually inline :)
>> Anyways,
>>>>> I'm getting a link error and I have to remove inline to fix it.
>>>> 
>>>> the function in question must be marked inline due to speed reasons
>>>> 
>>> 
>>> In this case I think there should be
>>> static av_inline_always void ff_idct_xvid_sse2_static(short *block){
>>> ...
>>> }
>>> 
>>> void ff_idct_xvid_sse2(short *block){
>>>   ff_idct_xvid_sse2_static(block);
>>> }
>>> 
>>> And the other two places should call ff_idct_xvid_sse2_static instead
>> 
>> Yes, something like that is the correct solution.  A non-static inline
>> function should not produce an external definition.  That's what the
>> spec says.
>> 
> 
> See attached patch.
> 
> <ff_idct_xvid_sse2-cannot-be-inline2.patch>

What happens if you add 'extern' to ff_idct_xvid_sse2 in libavcodec/x86/idct_xvid.h?




More information about the ffmpeg-devel mailing list