[FFmpeg-cvslog] r21735 - trunk/libavutil/internal.h
Måns Rullgård
mans
Sat Feb 20 13:24:22 CET 2010
Michael Kostylev <michael.kostylev at gmail.com> writes:
> On Fri Feb 19 19:44:04 2010
> M?ns Rullg?rd wrote:
>
>>>>>>> On Tue Feb 9 23:55:16 2010
>>>>>>> mru wrote:
>>>>>>>
>>>>>>>> Define missing llrint() as macro instead of inline function
>>>>>>>>
>>>>>>>> This fixes building on some broken systems.
>>>>>>>>
>>>>>>>> Modified:
>>>>>>>> trunk/libavutil/internal.h
>>>>>>>>
>>>>>>>> Modified: trunk/libavutil/internal.h
>>>>>>>> ==============================================================================
>>>>>>>> --- trunk/libavutil/internal.h Tue Feb 9 23:55:13 2010 (r21734)
>>>>>>>> +++ trunk/libavutil/internal.h Tue Feb 9 23:55:16 2010 (r21735)
>>>>>>>> @@ -225,10 +225,8 @@ static inline av_const unsigned int ff_s
>>>>>>>> #endif /* HAVE_EXP2F */
>>>>>>>>
>>>>>>>> #if !HAVE_LLRINT
>>>>>>>> -static av_always_inline av_const long long llrint(double x)
>>>>>>>> -{
>>>>>>>> - return rint(x);
>>>>>>>> -}
>>>>>>>> +#undef llrint
>>>>>>>> +#define llrint(x) rint(x)
>>>>>>>
>>>>>>> The dos machine is unhappy with this macro.
>>>>>>
>>>>>> Please elaborate.
>>>>>
>>>>> A bunch of tests from the regression suite and the idroq-video-encode
>>>>> test no longer pass since r21735 (reverting it or applying a quick
>>>>> hack attached in the previous message make them pass again).
>>>>
>>>> Weird. Which call to llrint() is causing the trouble?
>>>
>>> libavcodec/opt.c, line 67:
>>> case FF_OPT_TYPE_INT: *(int *)dst= llrint(num/den)*intnum; break;
>>
>> Applying your cast to that expression should have no effect at all
>> since the usual arithmetic conversions already specify that action.
>
> Under dos the argument of rint might be too big, e.g. 0xa0080004.0/1 while
> normally it should be equal to 0x80004.0/1.
How the hell does casting the *result* fix a problem with the *argument*?
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-cvslog
mailing list