[FFmpeg-devel] [PATCH v4 7/7] lavc/bsf: make BSF iteration the same as other iterators
wm4
nfxjfg at googlemail.com
Sat Feb 3 12:39:19 EET 2018
On Fri, 2 Feb 2018 19:44:18 +0000
Josh de Kock <josh at itanimul.li> wrote:
> ---
> fftools/cmdutils.c | 2 +-
> libavcodec/avcodec.h | 6 +++++-
> libavcodec/bitstream_filter.c | 4 ++--
> libavcodec/bitstream_filters.c | 29 ++++++++++++++++++-----------
> 4 files changed, 26 insertions(+), 15 deletions(-)
>
> diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
> index 9ecc51b..0b06ccc 100644
> --- a/fftools/cmdutils.c
> +++ b/fftools/cmdutils.c
> @@ -1586,7 +1586,7 @@ int show_bsfs(void *optctx, const char *opt, const char *arg)
> void *opaque = NULL;
>
> printf("Bitstream filters:\n");
> - while ((bsf = av_bsf_next(&opaque)))
> + while ((bsf = av_bsf_iterate(&opaque)))
> printf("%s\n", bsf->name);
> printf("\n");
> return 0;
> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
> index 99f5fb9..c41779a 100644
> --- a/libavcodec/avcodec.h
> +++ b/libavcodec/avcodec.h
> @@ -5728,7 +5728,7 @@ attribute_deprecated
> void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
> /**
> * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
> - * is deprecated. Use av_bsf_next() from the new bitstream filtering API (using
> + * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using
> * AVBSFContext).
> */
> attribute_deprecated
> @@ -5750,7 +5750,11 @@ const AVBitStreamFilter *av_bsf_get_by_name(const char *name);
> * @return the next registered bitstream filter or NULL when the iteration is
> * finished
> */
> +const AVBitStreamFilter *av_bsf_iterate(void **opaque);
> +#if FF_API_NEXT
> +attribute_deprecated
> const AVBitStreamFilter *av_bsf_next(void **opaque);
> +#endif
>
> /**
> * Allocate a context for a given bitstream filter. The caller must fill in the
> diff --git a/libavcodec/bitstream_filter.c b/libavcodec/bitstream_filter.c
> index ed1cf33..ca11ed3 100644
> --- a/libavcodec/bitstream_filter.c
> +++ b/libavcodec/bitstream_filter.c
> @@ -34,9 +34,9 @@ const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f)
> void *opaque = NULL;
>
> while (filter != f)
> - filter = av_bsf_next(&opaque);
> + filter = av_bsf_iterate(&opaque);
>
> - return av_bsf_next(&opaque);
> + return av_bsf_iterate(&opaque);
> }
>
> void av_register_bitstream_filter(AVBitStreamFilter *bsf)
> diff --git a/libavcodec/bitstream_filters.c b/libavcodec/bitstream_filters.c
> index 7b0cb50..338ef82 100644
> --- a/libavcodec/bitstream_filters.c
> +++ b/libavcodec/bitstream_filters.c
> @@ -52,7 +52,7 @@ extern const AVBitStreamFilter ff_vp9_superframe_split_bsf;
>
> #include "libavcodec/bsf_list.c"
>
> -const AVBitStreamFilter *av_bsf_next(void **opaque)
> +const AVBitStreamFilter *av_bsf_iterate(void **opaque)
> {
> uintptr_t i = (uintptr_t)*opaque;
> const AVBitStreamFilter *f = bitstream_filters[i];
> @@ -63,12 +63,18 @@ const AVBitStreamFilter *av_bsf_next(void **opaque)
> return f;
> }
>
> +#if FF_API_NEXT
> +const AVBitStreamFilter *av_bsf_next(void **opaque) {
> + return av_bsf_iterate(opaque);
> +}
> +#endif
> +
> const AVBitStreamFilter *av_bsf_get_by_name(const char *name)
> {
> - int i;
> + const AVBitStreamFilter *f = NULL;
> + void *i = 0;
>
> - for (i = 0; bitstream_filters[i]; i++) {
> - const AVBitStreamFilter *f = bitstream_filters[i];
> + while ((f = av_bsf_iterate(&i))) {
> if (!strcmp(f->name, name))
> return f;
> }
> @@ -78,19 +84,20 @@ const AVBitStreamFilter *av_bsf_get_by_name(const char *name)
>
> const AVClass *ff_bsf_child_class_next(const AVClass *prev)
> {
> - int i;
> + const AVBitStreamFilter *f = NULL;
> + void *i = 0;
>
> /* find the filter that corresponds to prev */
> - for (i = 0; prev && bitstream_filters[i]; i++) {
> - if (bitstream_filters[i]->priv_class == prev) {
> - i++;
> + while (prev && (f = av_bsf_iterate(&i))) {
> + if (f->priv_class == prev) {
> break;
> }
> }
>
> /* find next filter with priv options */
> - for (; bitstream_filters[i]; i++)
> - if (bitstream_filters[i]->priv_class)
> - return bitstream_filters[i]->priv_class;
> + while ((f = av_bsf_iterate(&i))) {
> + if (f->priv_class)
> + return f->priv_class;
> + }
> return NULL;
> }
I like _next better than _iterate (as others have also said), but I
think I can tolerate it. At least it'll be consistent across all those
APIs.
More information about the ffmpeg-devel
mailing list