[FFmpeg-devel] Fix for drawtext under FreeBSD

Eduardo M. Bragatto eduardo
Wed Jan 2 02:42:43 CET 2008

I've sent this message a while ago and had no feedback so far..

Do I need to create a patch form the latest snapshot in order to have my 
change being applied to the next release?

That's a very serious problem for those running drawtext vhook under 
FreeBSD (it simply does not work at all!!!). The fix couldn't be more 
simple, other vhook modules work the same way as I'm suggesting here, 
it's just drawtext module that has a problem with the portability to 
other OSes where getopt() does not behaviour the same way as under 
Linux. (I do like British english, behaviour is not misspelled).

If you guys don't care about portability to other OSes than Linux, let 
me know so I can contact the FreeBSD development list and having them 
patching the source under the ports system.

Eduardo M. Bragatto.

Eduardo M. Bragatto wrote:
> Hi there --
> I'm not a developer but I just came across an problem using drawtext 
> vhook under FreeBSD that I managed to fix. Basically drawtext was 
> complaining that I was not passing the parameters -t and -f, although I was.
> The vhook module has the following lines to parse it's command line 
> parameters:
>      optind = 0;
>      while ((c = getopt(argc, argv, "f:t:T:x:y:s:c:C:bo")) > 0) {
> On FreeBSD, getopt() will return -1 when the first non-argument  is 
> found. So, if optind is set to ZERO, the first string it will check will 
> be the module's filename, which of course is not considered an argument 
> (as it doesn't have "-" on the beginning). So, regardless of the 
> parameters I was passing, it was always failing. See getopt() manpage 
> for FreeBSD[1].
> On Linux, getopt() permutes the contents of argv during scan to make 
> sure all non-argument strings are at the end, so having optind set to 
> ZERO doesn't really make any difference as the module's filename would 
> be shifted to the end and the parameters would be properly parsed. See 
> getopt() manpage for Linux[2].
> The solution is simply change:
> optind = 1;
> That way, both Linux and FreeBSD will skip the vhook's filename and will 
> check only the parameters as we want.
> By the way, the vhook watermark.c uses this same approach I'm suggesting 
> here (setting optind=1).
> I have tested the module with this little modification both on Linux and 
> FreeBSD and it now works.
> Best regards,
> Eduardo M. Bragatto.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at mplayerhq.hu
> http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel

More information about the ffmpeg-devel mailing list