summaryrefslogtreecommitdiff
path: root/fftools/ffmpeg_opt.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2020-04-17 23:55:55 +0200
committerMarton Balint <cus@passwd.hu>2020-05-02 19:14:08 +0200
commitf821ae8591add999ce717d932a80673fc29b00f6 (patch)
treea6722a17ac5dcd7d88ca454ff5f6819c5989fb0b /fftools/ffmpeg_opt.c
parent425e08d571ea46d627bcd3dcbd75b056c98c5084 (diff)
fftools/ffmpeg: use a bsf list instead of individual bsfs
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'fftools/ffmpeg_opt.c')
-rw-r--r--fftools/ffmpeg_opt.c48
1 files changed, 3 insertions, 45 deletions
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c
index 16e321b5a3..60bb437ea7 100644
--- a/fftools/ffmpeg_opt.c
+++ b/fftools/ffmpeg_opt.c
@@ -1528,54 +1528,12 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
MATCH_PER_STREAM_OPT(copy_prior_start, i, ost->copy_prior_start, oc ,st);
MATCH_PER_STREAM_OPT(bitstream_filters, str, bsfs, oc, st);
- while (bsfs && *bsfs) {
- const AVBitStreamFilter *filter;
- char *bsf, *bsf_options_str, *bsf_name;
-
- bsf = av_get_token(&bsfs, ",");
- if (!bsf)
- exit_program(1);
- bsf_name = av_strtok(bsf, "=", &bsf_options_str);
- if (!bsf_name)
- exit_program(1);
-
- filter = av_bsf_get_by_name(bsf_name);
- if (!filter) {
- av_log(NULL, AV_LOG_FATAL, "Unknown bitstream filter %s\n", bsf_name);
- exit_program(1);
- }
-
- ost->bsf_ctx = av_realloc_array(ost->bsf_ctx,
- ost->nb_bitstream_filters + 1,
- sizeof(*ost->bsf_ctx));
- if (!ost->bsf_ctx)
- exit_program(1);
-
- ret = av_bsf_alloc(filter, &ost->bsf_ctx[ost->nb_bitstream_filters]);
+ if (bsfs && *bsfs) {
+ ret = av_bsf_list_parse_str(bsfs, &ost->bsf_ctx);
if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error allocating a bitstream filter context\n");
+ av_log(NULL, AV_LOG_ERROR, "Error parsing bitstream filter sequence '%s': %s\n", bsfs, av_err2str(ret));
exit_program(1);
}
-
- ost->nb_bitstream_filters++;
-
- if (bsf_options_str && filter->priv_class) {
- const AVOption *opt = av_opt_next(ost->bsf_ctx[ost->nb_bitstream_filters-1]->priv_data, NULL);
- const char * shorthand[2] = {NULL};
-
- if (opt)
- shorthand[0] = opt->name;
-
- ret = av_opt_set_from_string(ost->bsf_ctx[ost->nb_bitstream_filters-1]->priv_data, bsf_options_str, shorthand, "=", ":");
- if (ret < 0) {
- av_log(NULL, AV_LOG_ERROR, "Error parsing options for bitstream filter %s\n", bsf_name);
- exit_program(1);
- }
- }
- av_freep(&bsf);
-
- if (*bsfs)
- bsfs++;
}
MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, oc, st);