[FFmpeg-devel] regression - mpeg2 interlace/topfield flags not set anymore
Måns Rullgård
mans
Sat Jan 26 12:18:13 CET 2008
"V?ctor Paesa" <wzrlpy at arsystel.com> writes:
> Hi,
>
> christophelorenz said:
>> Michael Niedermayer wrote:
>>
>>>On Thu, Jan 24, 2008 at 03:46:50PM +0100, christophelorenz wrote:
>>>
>>>
>>>>Seems something has changed between rev 10908 and current causing the
>>>> interlaced and field order flag to be set to a wrong value.
>>>>
>>>>ffmpeg -i "source.avi" -y -flags +ildct+ilme -bufsize 2000k -b 7600k
>>>> -maxrate 8000k -top 1 -vcodec mpeg2video output.m2v
>>>>
>>>>
>>>
>>>bug not reproduceable tff/interlaced flags are correct
>>>-> closed/invalid
>>>
>>>[...]
>>>
>>>
>> I have been able to locate the problem and conditions more precisely :
>>
>> All linux builds are ok, it only happens under win32.
>> It doesn't depend on the source material format.
>> It happens with my builds, and other win32 binaries found on the net.
>>
>> After building a bunch or revisions, I found the problem appeared when
>> moving to rev 11142.
>>
>> The only affected file is ffmpeg.c from rev 11117 to 11142 done by
>> michael commented "Fix non-numeric AVOptions."
>>
>> I took rev 11608 and reverted some code to locate the problem and found
>> out that reverting the last change of ffmpeg.c fixes the problem.
>>
>> on svn, last ffmpeg.c line 3278 :
>> for(i=0; i<opt_name_count; i++){
>> char buf[256];
>> const AVOption *opt;
>> const char *str= av_get_string(avformat_opts, opt_names[i],
>> &opt, buf, sizeof(buf));
>> if(str && (opt->flags & AV_OPT_FLAG_ENCODING_PARAM))
>> av_set_string(oc, opt_names[i], str);
>> }
>>
>> replaced by previous code : (from rev 11117)
>> for(i=0; i<opt_name_count; i++){
>> const AVOption *opt;
>> double d = av_get_double(avformat_opts, opt_names[i], &opt);
>> if(!isnan(d) && (opt->flags&AV_OPT_FLAG_ENCODING_PARAM))
>> av_set_double(oc, opt_names[i], d);
>> }
>>
>> Restore the correct operation on interlaced mpegs.
>>
>> Obviously a simple arg parsing problem... but I must say I have no clue
>> why current rev it doesn't work as expected, more specifically under
>> win32...
>> I'll add some debug dump to see what happens, meanwhile if someone has
>> an idea ;-)
>
> I compiled SVN-11604 and more than Win32 the problem seems to be MinGW
> specific:
>
> gcc 3.4.4 compiling to Cygwin honors interlacing & -top.
> gcc 3.4.4 crosscompiling to MinGW doesn't honor them.
Smells like broken isnan() in Windows. Hardly a surprise given their
history of floating-point breakage.
--
M?ns Rullg?rd
mans at mansr.com
More information about the ffmpeg-devel
mailing list