[libav-devel] [PATCH] Add a fd protocol

Martin Storsjö martin at martin.st
Thu Apr 25 11:41:57 CEST 2019


On Thu, 25 Apr 2019, Luca Barbato wrote:

> ---
>
> Sometimes you receive a seekable fd from the outside.
>
> libavformat/file.c      | 32 ++++++++++++++++++++++++++++++++
> libavformat/protocols.c |  1 +
> 2 files changed, 33 insertions(+)
>
> diff --git a/libavformat/file.c b/libavformat/file.c
> index 27ce4de6eb..6a74ebbf48 100644
> --- a/libavformat/file.c
> +++ b/libavformat/file.c
> @@ -204,3 +204,35 @@ const URLProtocol ff_pipe_protocol = {
> };
>
> #endif /* CONFIG_PIPE_PROTOCOL */
> +
> +#if CONFIG_FD_PROTOCOL
> +
> +static int fd_open(URLContext *h, const char *filename, int flags)
> +{
> +    FileContext *c = h->priv_data;
> +    int fd;
> +    char *final;
> +    av_strstart(filename, "fd:", &filename);
> +
> +    fd = strtol(filename, &final, 10);
> +    if ((filename == final) || *final ) {
> +        return AVERROR(EINVAL);
> +    }
> +#if HAVE_SETMODE
> +    setmode(fd, O_BINARY);
> +#endif
> +    c->fd = fd;
> +    return 0;
> +}
> +
> +const URLProtocol ff_pipe_protocol = {

Did you test compilation of this? It doesn't look like it would work given 
this ^

Isn't this essentially exactly the same as the pipe protocol, except for 
not setting the is_streamed flag? Even though the name pipe doesn't feel 
quite right for that case, wouldn't it be possible to just add an option 
to the pipe protocol for controlling this?

// Martin



More information about the libav-devel mailing list