one more try, via 'git format-patch'.
0001-libavformat-hlsenc-fix-broken-hls_flags-temp_file.patch
Description: Binary data
> On 14 Dec 2018, at 17:21, Steven Liu <l...@chinaffmpeg.org> wrote: > > > >> On Dec 14, 2018, at 19:23, Aleksey Skripka <ca...@undev.ru> wrote: >> >>> >>> On 14 Dec 2018, at 13:10, Liu Steven <l...@chinaffmpeg.org> wrote: >>> >>> >>> >>>> 在 2018年12月14日,下午5:27,Aleksey Skripka <ca...@undev.ru> 写道: >>>> >>>> greetings! >>>> >>>> fixed version. >>>> thanks. >>> Is this patch create by git format-patch ? >> no. >> diff -up fileA fileB > https://ffmpeg.org/developer.html#Submitting-patches-1 > This is the rule for make a patch, I think your code is ok. :D > >> >>>> >>>> --- >>>> --- libavformat/hlsenc.c.orig 2018-12-14 09:25:06.541809226 +0000 >>>> +++ libavformat/hlsenc.c 2018-12-14 09:19:16.129377384 +0000 >>>> @@ -1348,7 +1348,7 @@ static int hls_window(AVFormatContext *s >>>> char temp_filename[1024]; >>>> int64_t sequence = FFMAX(hls->start_sequence, vs->sequence - >>>> vs->nb_entries); >>>> const char *proto = avio_find_protocol_name(s->url); >>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>> HLS_TEMP_FILE); >>>> + int use_temp_file = proto && !strcmp(proto, "file"); >>>> static unsigned warned_non_file; >>>> char *key_uri = NULL; >>>> char *iv_string = NULL; >>>> @@ -1463,7 +1463,7 @@ static int hls_start(AVFormatContext *s, >>>> AVFormatContext *vtt_oc = vs->vtt_avf; >>>> AVDictionary *options = NULL; >>>> const char *proto = avio_find_protocol_name(s->url); >>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>> HLS_TEMP_FILE); >>>> + int use_temp_file = proto && !strcmp(proto, "file") && (c->flags & >>>> HLS_TEMP_FILE); >>>> char *filename, iv_string[KEYSIZE*2 + 1]; >>>> int err = 0; >>>> >>>> @@ -2123,7 +2123,7 @@ static int hls_write_packet(AVFormatCont >>>> int stream_index = 0; >>>> int range_length = 0; >>>> const char *proto = avio_find_protocol_name(s->url); >>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>> HLS_TEMP_FILE); >>>> + int use_temp_file = proto && !strcmp(proto, "file") && (hls->flags & >>>> HLS_TEMP_FILE); >>>> uint8_t *buffer = NULL; >>>> VariantStream *vs = NULL; >>>> AVDictionary *options = NULL; >>>> @@ -2251,7 +2251,6 @@ static int hls_write_packet(AVFormatCont >>>> if (hls->flags & HLS_SINGLE_FILE) { >>>> ret = flush_dynbuf(vs, &range_length); >>>> if (ret < 0) { >>>> - av_free(old_filename); >>>> return ret; >>>> } >>>> vs->size = range_length; >>>> @@ -2269,20 +2268,12 @@ static int hls_write_packet(AVFormatCont >>>> return ret; >>>> } >>>> ff_format_io_close(s, &vs->out); >>>> - >>>> - // rename that segment from .tmp to the real one >>>> - if (use_temp_file && oc->url[0]) { >>>> - hls_rename_temp_file(s, oc); >>>> - av_free(old_filename); >>>> - old_filename = av_strdup(vs->avf->url); >>>> - >>>> - if (!old_filename) { >>>> - return AVERROR(ENOMEM); >>>> - } >>>> - } >>>> } >>>> } >>>> >>>> + if (use_temp_file && oc->url[0] && !(hls->flags & >>>> HLS_SINGLE_FILE)) >>>> + hls_rename_temp_file(s, oc); >>>> + >>>> old_filename = av_strdup(vs->avf->url); >>>> if (!old_filename) { >>>> return AVERROR(ENOMEM); >>>> @@ -2348,7 +2339,7 @@ static int hls_write_trailer(struct AVFo >>>> AVFormatContext *vtt_oc = NULL; >>>> char *old_filename = NULL; >>>> const char *proto = avio_find_protocol_name(s->url); >>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>> HLS_TEMP_FILE); >>>> + int use_temp_file = proto && !strcmp(proto, "file") && (hls->flags & >>>> HLS_TEMP_FILE); >>>> int i; >>>> int ret = 0; >>>> VariantStream *vs = NULL; >>>> --- >>>> >>>> -- >>>> Aleksey Skripka >>>> >>>> >>>> >>>>> On 14 Dec 2018, at 11:38, Liu Steven <l...@chinaffmpeg.org> wrote: >>>>> >>>>> >>>>> >>>>>> 在 2018年12月14日,下午3:04,Aleksey Skripka <ca...@undev.ru> 写道: >>>>>> >>>>>> greetings! >>>>>> >>>>>> after commit 223d2bde22ce33dcbcb6f17f234b609cb98f1fb6 temp_file >>>>>> functionality totally broken. >>>>>> >>>>>> attached patch prototype will fix: >>>>>> 1) while assigning 'use_temp_file' addressing to '->flags' is done >>>>>> incorrectly in 4 places. >>>>>> 2) before that commit playlist was always created via .tmp for 'file' >>>>>> proto, now not. sure we should keep it in such way, thus not look for >>>>>> this flag in hls_window(). >>>>>> 3) rename logic in hls_write_packet() was accidentally moved to >>>>>> fMP4-only code, thus not renaming files for mpegts. >>>>>> 4) av_free() call, where variable always NULL. >>>>>> >>>>>> please take a look. >>>>>> >>>>>> --- >>>>>> --- libavformat/hlsenc.c.orig 2018-12-13 13:27:03.307499151 +0000 >>>>>> +++ libavformat/hlsenc.c 2018-12-13 20:19:59.781833259 +0000 >>>>>> @@ -1348,7 +1348,7 @@ static int hls_window(AVFormatContext *s >>>>>> char temp_filename[1024]; >>>>>> int64_t sequence = FFMAX(hls->start_sequence, vs->sequence - >>>>>> vs->nb_entries); >>>>>> const char *proto = avio_find_protocol_name(s->url); >>>>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>>>> HLS_TEMP_FILE); >>>>>> + int use_temp_file = proto && !strcmp(proto, "file")/* && >>>>>> (hls->flags & HLS_TEMP_FILE)*/; // always use .tmp logic for 'file' >>>>>> proto. >>>>>> static unsigned warned_non_file; >>>>>> char *key_uri = NULL; >>>>>> char *iv_string = NULL; >>>>>> @@ -1463,7 +1463,7 @@ static int hls_start(AVFormatContext *s, >>>>>> AVFormatContext *vtt_oc = vs->vtt_avf; >>>>>> AVDictionary *options = NULL; >>>>>> const char *proto = avio_find_protocol_name(s->url); >>>>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>>>> HLS_TEMP_FILE); >>>>>> + int use_temp_file = proto && !strcmp(proto, "file") && (c->flags & >>>>>> HLS_TEMP_FILE); >>>>>> char *filename, iv_string[KEYSIZE*2 + 1]; >>>>>> int err = 0; >>>>>> >>>>>> @@ -2123,7 +2123,7 @@ static int hls_write_packet(AVFormatCont >>>>>> int stream_index = 0; >>>>>> int range_length = 0; >>>>>> const char *proto = avio_find_protocol_name(s->url); >>>>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>>>> HLS_TEMP_FILE); >>>>>> + int use_temp_file = proto && !strcmp(proto, "file") && (hls->flags >>>>>> & HLS_TEMP_FILE); >>>>>> uint8_t *buffer = NULL; >>>>>> VariantStream *vs = NULL; >>>>>> AVDictionary *options = NULL; >>>>>> @@ -2249,7 +2249,8 @@ static int hls_write_packet(AVFormatCont >>>>>> if (hls->flags & HLS_SINGLE_FILE) { >>>>>> ret = flush_dynbuf(vs, &range_length); >>>>>> if (ret < 0) { >>>>>> - av_free(old_filename); >>>>>> +// old_filename not yet defined here >>>>>> +// av_free(old_filename); >>>>>> return ret; >>>>>> } >>>>>> vs->size = range_length; >>>>>> @@ -2268,19 +2269,23 @@ static int hls_write_packet(AVFormatCont >>>>>> } >>>>>> ff_format_io_close(s, &vs->out); >>>>>> >>>>>> - // rename that segment from .tmp to the real one >>>>>> - if (use_temp_file && oc->url[0]) { >>>>>> - hls_rename_temp_file(s, oc); >>>>>> - av_free(old_filename); >>>>>> - old_filename = av_strdup(vs->avf->url); >>>>>> - >>>>>> - if (!old_filename) { >>>>>> - return AVERROR(ENOMEM); >>>>>> - } >>>>>> - } >>>>>> +// bad place for rename here, it does not rename non-fmp4 files >>>>>> +// // rename that segment from .tmp to the real one >>>>>> +// if (use_temp_file && oc->url[0]) { >>>>>> +// hls_rename_temp_file(s, oc); >>>>>> +// av_free(old_filename); >>>>>> +// old_filename = av_strdup(vs->avf->url); >>>>>> +// >>>>>> +// if (!old_filename) { >>>>>> +// return AVERROR(ENOMEM); >>>>>> +// } >>>>>> +// } >>>>> remove the code block when it unused. >>>>>> } >>>>>> } >>>>>> >>>>>> + if (use_temp_file && oc->url[0] && !(hls->flags & >>>>>> HLS_SINGLE_FILE)) >>>>>> + hls_rename_temp_file(s, oc); >>>>>> + >>>>>> old_filename = av_strdup(vs->avf->url); >>>>>> if (!old_filename) { >>>>>> return AVERROR(ENOMEM); >>>>>> @@ -2346,7 +2351,7 @@ static int hls_write_trailer(struct AVFo >>>>>> AVFormatContext *vtt_oc = NULL; >>>>>> char *old_filename = NULL; >>>>>> const char *proto = avio_find_protocol_name(s->url); >>>>>> - int use_temp_file = proto && !strcmp(proto, "file") && (s->flags & >>>>>> HLS_TEMP_FILE); >>>>>> + int use_temp_file = proto && !strcmp(proto, "file") && (hls->flags >>>>>> & HLS_TEMP_FILE); >>>>>> int i; >>>>>> int ret = 0; >>>>>> VariantStream *vs = NULL; >>>>>> --- >>>>>> -- >>>>>> Aleksey Skripka >>>>>> -- >>>>>> Aleksey Skripka >>>>>> >>>>> >>>>> Thanks >>>>> >>>>> Steven >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> ffmpeg-devel mailing list >>>>>> ffmpeg-devel@ffmpeg.org >>>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> ffmpeg-devel mailing list >>>>> ffmpeg-devel@ffmpeg.org >>>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>>> >>>> _______________________________________________ >>>> ffmpeg-devel mailing list >>>> ffmpeg-devel@ffmpeg.org >>>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >>> >>> _______________________________________________ >>> ffmpeg-devel mailing list >>> ffmpeg-devel@ffmpeg.org >>> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >> >> _______________________________________________ >> ffmpeg-devel mailing list >> ffmpeg-devel@ffmpeg.org >> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > Thanks > Steven > > > > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel