> 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
>> >> --- >> --- 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