[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