lavc/bsf: make BSF iteration the same as other iterators

This commit is contained in:
Josh de Kock 2018-02-02 19:25:36 +00:00
parent cdc78058c7
commit 26d879c1ce
4 changed files with 26 additions and 15 deletions

View File

@ -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;

View File

@ -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

View File

@ -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)

View File

@ -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;
}