[FFmpeg-devel] [PATCH v1] avformat/tee.c: steal bsf option before passing to fifo muxer
Nicolas George
george at nsup.org
Sun Oct 13 20:39:44 EEST 2019
Jun Li (12019-10-05):
> Fix #7620
> In the case tee muxer with both "bsf" and "use_fifo" parameters
> wil trigger this bug. Tee muxer will first steal parameters (like "f",
will
> "select"...) and then "use_fifo" will try reading out remaining options
> and pass them to fifo as option "format_options".
> Current code miss the part of stealing "bsf" options.
> ---
> libavformat/tee.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/libavformat/tee.c b/libavformat/tee.c
> index 89a4ceb280..3530582dbd 100644
> --- a/libavformat/tee.c
> +++ b/libavformat/tee.c
> @@ -159,7 +159,7 @@ static void close_slaves(AVFormatContext *avf)
> static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
> {
> int i, ret;
> - AVDictionary *options = NULL;
> + AVDictionary *options = NULL, *bsf_options = NULL;
> AVDictionaryEntry *entry;
> char *filename;
> char *format = NULL, *select = NULL, *on_fail = NULL;
> @@ -186,6 +186,11 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
> STEAL_OPTION("onfail", on_fail);
> STEAL_OPTION("use_fifo", use_fifo);
> STEAL_OPTION("fifo_options", fifo_options_str);
> + entry = NULL;
> + while ((entry = av_dict_get(options, "bsfs", entry, AV_DICT_IGNORE_SUFFIX))) {
> + av_dict_set(&bsf_options, entry->key, entry->value, 0);
You could use entry->key + 4 to trim the "bsfs" prefix.
> + av_dict_set(&options, entry->key, NULL, 0);
> + }
>
> ret = parse_slave_failure_policy_option(on_fail, tee_slave);
> if (ret < 0) {
> @@ -311,7 +316,7 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
> }
>
> entry = NULL;
> - while (entry = av_dict_get(options, "bsfs", NULL, AV_DICT_IGNORE_SUFFIX)) {
> + while (entry = av_dict_get(bsf_options, "bsfs", NULL, AV_DICT_IGNORE_SUFFIX)) {
> const char *spec = entry->key + strlen("bsfs");
> if (*spec) {
> if (strspn(spec, slave_bsfs_spec_sep) != 1) {
> @@ -352,7 +357,7 @@ static int open_slave(AVFormatContext *avf, char *slave, TeeSlave *tee_slave)
> }
> }
>
> - av_dict_set(&options, entry->key, NULL, 0);
> + av_dict_set(&bsf_options, entry->key, NULL, 0);
> }
>
> for (i = 0; i < avf->nb_streams; i++){
> @@ -399,6 +404,7 @@ end:
> av_free(select);
> av_free(on_fail);
> av_dict_free(&options);
> + av_dict_free(&bsf_options);
> av_freep(&tmp_select);
> return ret;
> }
Apart from that, LGTM.
Regards,
--
Nicolas George
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20191013/78225a84/attachment.sig>
More information about the ffmpeg-devel
mailing list