[FFmpeg-devel] [PATCH 5/6] avformat/hlsenc: Simplify setting basename with av_asprintf()

Steven Liu lq at chinaffmpeg.org
Sun May 10 06:04:05 EEST 2020



> 2020年5月10日 上午3:15,Andreas Rheinhardt <andreas.rheinhardt at gmail.com> 写道:
> 
> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at gmail.com>
> ---
> libavformat/hlsenc.c | 43 ++++++++++++++-----------------------------
> 1 file changed, 14 insertions(+), 29 deletions(-)
> 
> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> index 5517cb4354..d80852739e 100644
> --- a/libavformat/hlsenc.c
> +++ b/libavformat/hlsenc.c
> @@ -2739,15 +2739,21 @@ static int hls_init(AVFormatContext *s)
>     int i = 0;
>     int j = 0;
>     HLSContext *hls = s->priv_data;
> -    const char *pattern = "%d.ts";
> +    const char *pattern;
>     VariantStream *vs = NULL;
> -    int basename_size = 0;
> -    const char *pattern_localtime_fmt = get_default_pattern_localtime_fmt(s);
>     const char *vtt_pattern = hls->flags & HLS_SINGLE_FILE ? ".vtt" : "%d.vtt";
>     char *p = NULL;
>     int http_base_proto = ff_is_http_proto(s->url);
>     int fmp4_init_filename_len = strlen(hls->fmp4_init_filename) + 1;
> 
> +    if (hls->use_localtime) {
> +        pattern = get_default_pattern_localtime_fmt(s);
> +    } else {
> +        pattern = hls->segment_type == SEGMENT_TYPE_FMP4 ? "%d.m4s" : "%d.ts";
> +        if (hls->flags & HLS_SINGLE_FILE)
> +            pattern += 2;
> +    }
> +
>     hls->has_default_key = 0;
>     hls->has_video_m3u8 = 0;
>     ret = update_variant_stream_info(s);
> @@ -2792,9 +2798,6 @@ static int hls_init(AVFormatContext *s)
>         }
>     }
> 
> -    if (hls->segment_type == SEGMENT_TYPE_FMP4) {
> -        pattern = "%d.m4s";
> -    }
>     if ((hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_SECONDS_SINCE_EPOCH) ||
>         (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_MICROSECONDS_SINCE_EPOCH) ||
>         (hls->start_sequence_source_type == HLS_START_SEQUENCE_AS_FORMATTED_DATETIME)) {
> @@ -2868,34 +2871,16 @@ static int hls_init(AVFormatContext *s)
>             if (ret < 0)
>                 return ret;
>         } else {
> -            if (hls->flags & HLS_SINGLE_FILE) {
> -                if (hls->segment_type == SEGMENT_TYPE_FMP4) {
> -                    pattern = ".m4s";
> -                } else {
> -                    pattern = ".ts";
> -                }
> -            }
> -
> -            if (hls->use_localtime) {
> -                basename_size = strlen(vs->m3u8_name) + strlen(pattern_localtime_fmt) + 1;
> -            } else {
> -                basename_size = strlen(vs->m3u8_name) + strlen(pattern) + 1;
> -            }
> +            p = strrchr(vs->m3u8_name, '.');
> +            if (p)
> +                *p = '\0';
> 
> -            vs->basename = av_malloc(basename_size);
> +            vs->basename = av_asprintf("%s%s", vs->m3u8_name, pattern);
>             if (!vs->basename)
>                 return AVERROR(ENOMEM);
> 
> -            av_strlcpy(vs->basename, vs->m3u8_name, basename_size);
> -
> -            p = strrchr(vs->basename, '.');
>             if (p)
> -                *p = '\0';
> -            if (hls->use_localtime) {
> -                av_strlcat(vs->basename, pattern_localtime_fmt, basename_size);
> -            } else {
> -                av_strlcat(vs->basename, pattern, basename_size);
> -            }
> +                *p = '.';
>         }
> 
>         if (hls->segment_type == SEGMENT_TYPE_FMP4) {
> -- 
> 2.20.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".

LGTM

Thanks

Steven Liu



More information about the ffmpeg-devel mailing list