[FFmpeg-devel] [PATCH] avformat/hlsenc: free varstreams after write all varstreams info

Steven Liu lq at chinaffmpeg.org
Sat Dec 22 17:02:48 EET 2018



> On Dec 22, 2018, at 22:26, Jan Ekström <jeebjp at gmail.com> wrote:
> 
> On Sat, Dec 22, 2018 at 10:55 AM Steven Liu <lq at chinaffmpeg.org> wrote:
>> 
>> fix ticket: 7631
>> 
>> Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
>> ---
>> libavformat/hlsenc.c | 50 +++++++++++++++++++++++++++++++++-----------------
>> 1 file changed, 33 insertions(+), 17 deletions(-)
>> 
>> diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
>> index bdd2a113bd..e3cd6f375a 100644
>> --- a/libavformat/hlsenc.c
>> +++ b/libavformat/hlsenc.c
>> @@ -2360,6 +2360,37 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
>>     return ret;
>> }
>> 
>> +static void hls_varstreams_free(struct AVFormatContext *s)
>> +{
> 
> I think you only use the AVFormatContext to get the HLSContext, and
> you already have that pointer in hls_write_trailer.
> 
> Thus I think you could just make this function take in a HLSContext *hls.
Okay.
> 
> Also the function could be something like "hls_free_variant_streams",
> but this is just an opinion.
good opinion.
> 
>> +    int i = 0;
>> +    HLSContext *hls = s->priv_data;
>> +    AVFormatContext *vtt_oc = NULL;
>> +    VariantStream *vs = NULL;
>> +
>> +    for (i = 0; i < hls->nb_varstreams; i++) {
> 
> As far as I asked on IRC, we're OK with declaring iterators in a for
> loop, so it can be "int i = 0;”
I think the better declared the i at the start block of this function.
> 
>> +        vs = &hls->var_streams[i];
>> +        vtt_oc = vs->vtt_avf;
>> +
> 
> Also asked if things utilized within a for loop can have their own
> variables declared at the top of the loop.
> Thus the AVFormatContext and VariantStream can be declared here.
> 
>> +        av_freep(&vs->basename);
>> +        av_freep(&vs->base_output_dirname);
>> +        av_freep(&vs->fmp4_init_filename);
>> +        if (vtt_oc) {
>> +            av_freep(&vs->vtt_basename);
>> +            av_freep(&vs->vtt_m3u8_name);
>> +            avformat_free_context(vtt_oc);
>> +        }
>> +
>> +        hls_free_segments(vs->segments);
>> +        hls_free_segments(vs->old_segments);
>> +        av_freep(&vs->m3u8_name);
>> +        av_freep(&vs->streams);
>> +        av_freep(&vs->agroup);
>> +        av_freep(&vs->ccgroup);
>> +        av_freep(&vs->baseurl);
> 
> I also wonder if you should separate actual per-variant stream freeing
> into its own function which takes a VariantStream *vs in?
Okay,
> 
>> +    }
>> +
>> +
>> +}
> 
> Leave one empty line after the function, and no need for empty lines
> at the end of the function inside of it.
> 
> F.ex.
> {
>    for (...) {
>    }
> }
> 
> following_function {
>    ...
> 
>> static int hls_write_trailer(struct AVFormatContext *s)
>> {
>>     HLSContext *hls = s->priv_data;
>> @@ -2451,30 +2482,15 @@ failed:
>>             vs->size = avio_tell(vs->vtt_avf->pb) - vs->start_pos;
>>             ff_format_io_close(s, &vtt_oc->pb);
>>         }
>> -        av_freep(&vs->basename);
>> -        av_freep(&vs->base_output_dirname);
>>         avformat_free_context(oc);
>> 
>>         vs->avf = NULL;
>>         hls_window(s, 1, vs);
>> -
>> -        av_freep(&vs->fmp4_init_filename);
>> -        if (vtt_oc) {
>> -            av_freep(&vs->vtt_basename);
>> -            av_freep(&vs->vtt_m3u8_name);
>> -            avformat_free_context(vtt_oc);
>> -        }
>> -
>> -        hls_free_segments(vs->segments);
>> -        hls_free_segments(vs->old_segments);
>>         av_free(old_filename);
>> -        av_freep(&vs->m3u8_name);
>> -        av_freep(&vs->streams);
>> -        av_freep(&vs->agroup);
>> -        av_freep(&vs->ccgroup);
>> -        av_freep(&vs->baseurl);
>>     }
>> 
>> +    hls_varstreams_free(s);
>> +
>>     for (i = 0; i < hls->nb_ccstreams; i++) {
>>         ClosedCaptionsStream *ccs = &hls->cc_streams[i];
>>         av_freep(&ccs->ccgroup);
>> --
>> 2.15.1
>> 
> 
> Initial quick look.

New patch will come.

> 
> Jan
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Thanks
Steven







More information about the ffmpeg-devel mailing list