[FFmpeg-devel] [PATCH v1] avformat/tee.c: steal bsf option before passing to fifo muxer

Steven Liu lq at chinaffmpeg.org
Sat Oct 12 06:56:23 EEST 2019



> 在 2019年10月9日,01:51,Dennis Mungai <dmngaie at gmail.com> 写道:
> 
> On Tue, 8 Oct 2019 at 08:53, Steven Liu <lq at chinaffmpeg.org> wrote:
>> 
>> 
>> 
>>> 在 2019年10月8日,05:54,Dennis Mungai <dmngaie at gmail.com> 写道:
>>> 
>>> On Mon, 7 Oct 2019 at 08:26, Liu Steven <lq at chinaffmpeg.org> wrote:
>>>> 
>>>> 
>>>> 
>>>>> 在 2019年10月6日,上午11:37,Jun Li <junli1026 at gmail.com> 写道:
>>>>> 
>>>>> 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",
>>>>> "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);
>>>>> +        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;
>>>>> }
>>>>> --
>>>>> 2.17.1
>>>>> 
>>>>> _______________________________________________
>>>>> ffmpeg-devel mailing list
>>>>> ffmpeg-devel at ffmpeg.org
>>>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>>> 
>>>>> To unsubscribe, visit link above, or email
>>>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe”.
>>>> 
>>>> should be ok
>>>> 
>>>> 
>>>> Thanks
>>>> Steven
>>>> 
>>>> 
>>>> 
>>> Generating valid HLS + DASH streams using fragmented mp4 should be
>>> much easier now, thanks.
>> Do you mean much easier after this patch?
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel at ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>> 
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>> 
>> Thanks
>> Steven
> 
> Yes, Steven.
> Previously, attempting to use fifo within the tee muxer with any BSF
> applied resulted in error.
> And this patch fixes that, allowing for fifo-enabled tee slaves to
> resume operations with BSFs in place.
Will push if there have no objections.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".

Thanks
Steven







More information about the ffmpeg-devel mailing list