[FFmpeg-devel] [PATCH 1/3] libavformat/avio: Utility function to return URLContext

Nicolas George george at nsup.org
Wed Nov 15 15:04:44 EET 2017


Le septidi 17 brumaire, an CCXXVI, Karthick J a écrit :
> ---
>  libavformat/avio_internal.h | 8 ++++++++
>  libavformat/aviobuf.c       | 8 ++++++++
>  2 files changed, 16 insertions(+)
> 
> diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h
> index c01835d..04c1ad5 100644
> --- a/libavformat/avio_internal.h
> +++ b/libavformat/avio_internal.h
> @@ -133,6 +133,14 @@ int ffio_open_dyn_packet_buf(AVIOContext **s, int max_packet_size);
>  int ffio_fdopen(AVIOContext **s, URLContext *h);
>  
>  /**
> + * Return the URLContext associated with the AVIOContext
> + *
> + * @param s IO context
> + * @return pointer to URLContext or NULL.
> + */
> +URLContext *ffio_geturlcontext(AVIOContext *s);
> +
> +/**
>   * Open a write-only fake memory stream. The written data is not stored
>   * anywhere - this is only used for measuring the amount of data
>   * written.
> diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
> index 3b4c843..1353c80 100644
> --- a/libavformat/aviobuf.c
> +++ b/libavformat/aviobuf.c
> @@ -980,6 +980,14 @@ fail:
>      return AVERROR(ENOMEM);
>  }
>  
> +URLContext* ffio_geturlcontext(AVIOContext *s) {
> +    AVIOInternal *internal = s->opaque;

> +    if (internal)
> +        return internal->h;

This is rather fragile. Some kind of check that is is actually a real
URLContext would be a very good idea.

> +    else
> +        return NULL;
> +}
> +
>  int ffio_ensure_seekback(AVIOContext *s, int64_t buf_size)
>  {
>      uint8_t *buffer;

Regards,

-- 
  Nicolas George


More information about the ffmpeg-devel mailing list