[FFmpeg-devel] [PATCH 1/6] bitstream_filter: add an init function

Michael Niedermayer michaelni at gmx.at
Sun Nov 30 04:08:00 CET 2014


On Sun, Nov 30, 2014 at 12:45:51AM +0000, Christophe Gisquet wrote:
> From: Zongyi Zhou <zhouzy at os.pku.edu.cn>
> 
> Original patch was adding an arg field in the context structure. As it
> is most often only useful once, allow passing the arguments on init.
> 
> The proper solution would be using AVOption, but this is overkill for now.
> 
> Signed-off-by: Christophe Gisquet <christophe.gisquet at gmail.com>
> ---
>  ffmpeg_opt.c                  | 5 ++++-
>  libavcodec/avcodec.h          | 5 ++++-
>  libavcodec/bitstream_filter.c | 8 +++++++-
>  libavformat/concatdec.c       | 2 +-
>  libavformat/tee.c             | 7 ++++++-
>  5 files changed, 22 insertions(+), 5 deletions(-)
> 
> diff --git a/ffmpeg_opt.c b/ffmpeg_opt.c
> index 03e049b..b8cd35d 100644
> --- a/ffmpeg_opt.c
> +++ b/ffmpeg_opt.c
> @@ -1138,9 +1138,12 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
>  
>      MATCH_PER_STREAM_OPT(bitstream_filters, str, bsf, oc, st);
>      while (bsf) {
> +        char *arg = NULL;
>          if (next = strchr(bsf, ','))
>              *next++ = 0;
> -        if (!(bsfc = av_bitstream_filter_init(bsf))) {
> +        if (arg = strchr(bsf, '='))
> +            *arg++ = 0;
> +        if (!(bsfc = av_bitstream_filter_init(bsf, arg))) {
>              av_log(NULL, AV_LOG_FATAL, "Unknown bitstream filter %s\n", bsf);
>              exit_program(1);
>          }
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 3323284..03ce21f 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -5013,6 +5013,7 @@ typedef struct AVBitStreamFilter {
>                    const uint8_t *buf, int buf_size, int keyframe);
>      void (*close)(AVBitStreamFilterContext *bsfc);
>      struct AVBitStreamFilter *next;
> +    int (*init)(AVBitStreamFilterContext *bsfc, const char *args);
>  } AVBitStreamFilter;
>  
>  /**

> @@ -5033,10 +5034,12 @@ void av_register_bitstream_filter(AVBitStreamFilter *bsf);
>   * The returned context must be freed with av_bitstream_filter_close().
>   *
>   * @param name    the name of the bitstream filter
> + * @param args    initialization arguments for the bitstream filter
>   * @return a bitstream filter context if a matching filter was found
>   * and successfully initialized, NULL otherwise
>   */
> -AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
> +AVBitStreamFilterContext *av_bitstream_filter_init(const char *name,
> +                                                   const char *args);
>  

this breaks ABI/API
why is what is done in init not just done in the first packet when
the args are already available ?
This seems simpler and would avoid introducing a API that is possibly
going to be deprecated once a AVOption or AVDictionary based one is
introduced

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

I am the wisest man alive, for I know one thing, and that is that I know
nothing. -- Socrates
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141130/08197782/attachment.asc>


More information about the ffmpeg-devel mailing list