[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