2016-12-26 9:14 GMT+08:00 Bodecs Bela <bode...@vivanet.hu>: > Dear All, > > with use_localtime parameter hlsenc may produce identical filenames for > different but still existing segments. It happens when > hls_segment_filename contains > syntacticaly correct but inadequate format parameters. Currently there > is no any log message when such a situaton occurs but these cases should > be avoided in most times. This patch generate warning log messages in these > cases. > > best regards, > > bb > >> From 7055e0b0bec3fee61373dd446bcab24d15117b7e Mon Sep 17 00:00:00 2001 > > From: Bela Bodecs <bode...@vivanet.hu> > > Date: Mon, 26 Dec 2016 02:00:49 +0100 > > Subject: [PATCH] avformat/hlsenc: detecting duplicated segment filenames > > >> with use_localtime parameter hlsenc may produce identical filenames for > > different but still existing segments. It happens when > > hls_segment_filename contains > > syntacticaly correct but inadequate format parameters. Currently there > > is no any log message when such a situaton occurs but these cases should > > be avoided in most times. This patch generate warning messages in these > > cases. > > >> Signed-off-by: Bela Bodecs <bode...@vivanet.hu> > > --- > > libavformat/hlsenc.c | 34 ++++++++++++++++++++++++++++++++++ > > 1 file changed, 34 insertions(+) > > >> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c > > index acf3a30..11ec3b8 100644 > > --- a/libavformat/hlsenc.c > > +++ b/libavformat/hlsenc.c > > @@ -653,6 +653,38 @@ fail: > > return ret; > > } > > > > +static HLSSegment * find_segment_by_filename(HLSSegment * segment, const >> char * filename) > > +{ > > + /* filename may contain rel/abs path, but segments store only >> basename */ > > + char *p, *dirname, *path; > > + int path_size; > > + HLSSegment *ret_segment = NULL; > > + dirname = av_strdup(filename); > > + if (!dirname) > > + return NULL; > > + p = (char *)av_basename(dirname); // av_dirname would return . in >> case of no dir > > + *p = '\0'; // maybe empty > > + > > + while (segment) { > > + path_size = strlen(dirname) + strlen(segment->filename) + 1; > > + path = av_malloc(path_size); > > + if (!path) > > + goto end; > > + av_strlcpy(path, dirname, path_size); > > + av_strlcat(path, segment->filename, path_size); > > + if (!strcmp(path,filename)) { > > + ret_segment = segment; > > + av_free(path); > > + goto end; > > + } > > + av_free(path); > > + segment = segment->next; > > + } > > +end: > > + av_free(dirname); > > + return ret_segment; > > +} > > + > > static int hls_start(AVFormatContext *s) > > { > > HLSContext *c = s->priv_data; > > @@ -685,6 +717,8 @@ static int hls_start(AVFormatContext *s) > > av_log(oc, AV_LOG_ERROR, "Could not get segment filename >> with use_localtime\n"); > > return AVERROR(EINVAL); > > } > > + if (find_segment_by_filename(c->segments, oc->filename) || >> find_segment_by_filename(c->old_segments, oc->filename)) > > + av_log(c, AV_LOG_WARNING, "Duplicated segment filename >> detected: %s\n",oc->filename); > > > > if (c->use_localtime_mkdir) { > > const char *dir; > > -- > > 2.5.3.windows.1 > > >> LTGM
> > > _______________________________________________ > 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