[FFmpeg-devel] libavfilter: extending overlay filter
Sun Mar 13 15:26:42 CET 2011
On date Sunday 2011-03-13 14:18:42 +0000, Mark Himsley encoded:
> Dear Developers,
> I have extended the overlay filter so that it can overlay BGRA,
> RGBA, ABGR and ARGB streams over BGR24, RGB24, ARGB, RGBA, ABGR and
> BGRA backgrounds (extended from yuva420p over a yuv420p background),
> including adding the ability to output non-pre-multiplied video and
> combined alpha when the main input background has alpha.
> This is working really well for keying BGRA over BGRA, and
> outputting combined fill+key for use in professional editing
> With the extension I have added, the overlay filter must have either
> YUV type inputs for BOTH the main and overlay OR have BGR type
> inputs for BOTH the main and overlay inputs.
> That means that, with the extension I have added, I have broken the
> more usual YUV for the main and BGR for the overlay.
> This has happened because I have allowed the filter to accept the
> BGR type inputs (adding to the PixelFormat enums), so ffmpeg doesn't
> automatically insert a BGR to YUV filter any more.
> It is not an insurmountable problem for users to change their filter from:
> -vf "movie='text.tif' [movie]; [in][movie] overlay=0:0 [out]"
> -vf "movie='text.tif', format=yuva420p [movie]; [in][movie]
> overlay=0:0 [out]"
> But, is it possible for the filter to programmatically insert the
> format change filter so that my extension does not break users
> current filter chains?
> I would like to submit my extension for inclusion into libavfilter
> but I don't feel that I can submit it while it breaks users current
> filter chains...
Current the overlay filter has the RGB path disabled. I believe the
more senseful approach is to let the main input determine the output
format, that is we should have:
RGB main, ANY overlay -> RGB output
YUV main, ANY overlay -> YUV output
while it currently forces both input and output to be YUV.
Note that format conversion setup is automatically performed just
after the link configuration stage, in query_formats(), and doesn't
involve explicit configuration from users.
Show us your approach so that we can suggest how to fix the issue.
FFmpeg = Fabulous and Faithful Mega Plastic Everlasting Governor
More information about the ffmpeg-devel