[FFmpeg-devel] ff_idct_xvid_sse2-cannot-be-inline.patch
Måns Rullgård
mans
Tue Mar 9 03:22:10 CET 2010
Alexander Strange <astrange at ithinksw.com> writes:
> 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?
GCC does not adhere to C99 with non-static inline functions. It's
better to avoid messing with that can of worms.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list