[FFmpeg-devel] imagepipe filter (was [PATCH] avfilter: add dynoverlay filter.)

Paul B Mahol onemda at gmail.com
Wed Sep 28 00:20:14 EEST 2016


On 9/27/16, Priebe, Jason <jpriebe at cbcnewmedia.com> wrote:
> On 9/23/16, Paul B Mahol <onemda at gmail.com> wrote:
>
>> Named pipe approach would implement video source which would read images
>> from named pipe. It would read from named pipe until it decodes single
>> frame
>> and then would use that frame as input to next filter, for example
>> overlay filter.
>>
>> If it encounters EOF in named pipe it would not abort but would instead
>> keep
>> sending last frame it got, for example completely transparent frame.
>>
>> If it suddenly get more data from pipe it would update its internal
>> frame and output it as input to next filter in chain.
>>
>> So command would look like this:
>>
>> imagepipe=named_pipe:rate=30[o],[0:v][o]overlay=x=0:y=0 ...
>>
>> And than in another terminal, you would use commands like this:
>>
>> cat random_image.format > named_pipe
>
> Paul:  this is a really good idea (when you first mentioned pipes, I
> thought you meant to use pipes as a standard ffmpeg input, which doesn't
> really work in the way I'm trying to make it work here).  But a purpose-
> built filter that reads from a pipe is another story.
>
> I built an imagepipe filter that I'd like to submit as a patch, but
> I have some questions before I do that:
>
> - it outputs YUVA420P.  Does it need to output other pixel formats to
>   be accepted?

Not neccessary if adding other formats is easy.

>
> - it uses a slightly inelegant technique to read the images; it writes
>   the image data to a temp file so it can call ff_load_image().  I didn't
>   see a function that can load an image directly from an in-memory byte
> array.

AVFrame stores all decoded data from image. Using temp files is ridicculous.

>
> - I'm not 100% sure how to write the test.  I added a block=1 option to
>   the filter so that it will block on each frame to read in an image from
>   the pipe; this is designed for testing only (normally, you want
> non-blocking
>   reads).  But I don't know how to leverage FATE to build a test that
>   runs ffmpeg and also in another process, writes files to the pipe.  I
>   think I can do it if I add a new function to fate-run.sh, but I don't know
>   if that is discouraged.

Test can be added later.

>
> - Portability - I'm worried this is the big one.  mkfifo isn't readily
>   available on Windows without compatibility libraries, and even then,
>   I'm not sure whether they would work the same way they do under *nix.
>   Generally speaking, how does the ffmpeg team tackle cross-platform
>   issues like this?

IIRC named pipes are available for Windows.


More information about the ffmpeg-devel mailing list