[FFmpeg-devel] [PATCH 1/2] avformat/hls demuxer: Add WebVTT subtitle support
    Soft Works 
    softworkz at hotmail.com
       
    Fri Feb 21 13:56:41 EET 2025
    
    
  
> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
> Andreas Rheinhardt
> Sent: Freitag, 21. Februar 2025 10:18
> To: ffmpeg-devel at ffmpeg.org
> Subject: Re: [FFmpeg-devel] [PATCH 1/2] avformat/hls demuxer: Add WebVTT
> subtitle support
> 
> softworkz:
> > From: softworkz <softworkz at hotmail.com>
> >
[...]
> >      /* Open the demuxer for each playlist */
> >      for (i = 0; i < c->n_playlists; i++) {
> >          struct playlist *pls = c->playlists[i];
> > @@ -2107,8 +2230,12 @@ static int hls_read_header(AVFormatContext
> *s)
> >              return AVERROR(ENOMEM);
> >          }
> >
> > -        ffio_init_context(&pls->pb, pls->read_buffer, INITIAL_BUFFER_SIZE, 0,
> pls,
> > -                          read_data, NULL, NULL);
> > +        if (pls->is_subtitle)
> > +            ffio_init_context(&pls->pb, (unsigned char*)av_strdup(vtt_sample),
> (int)strlen(vtt_sample), 0, pls,
> > +                                        NULL, NULL, NULL);
> > +        else
> > +            ffio_init_context(&pls->pb, pls->read_buffer, INITIAL_BUFFER_SIZE,
> 0, pls,
> > +                                        read_data_continuous, NULL, NULL);
> 
> 1. Unchecked av_strdup().
Yup, thanks.
> 2. Is duplicating the string even needed? Can't we simply set the
> AVIOContext to NULL before closing the AVFormatContext?
The lifetime of these two is not aligned. Also, I wouldn't want to 
make assumptions as to what is being done with that buffer at
other places of the code (where the constant might be subject 
of an attempt to get freed.
[...]
> > +        if (pls->is_subtitle) {
> > +            avformat_free_context(pls->ctx);
> 
> Doesn't the copy of vtt_sample leak here?
Unless I'm overseeing something, the FFIOContext owns the buffer with the
copied vtt_sample string, and that FFIOContext, is owned by the playlist 
(pls->pb). It is freed in free_playlist_list():
	av_freep(&pls->pb.pub.buffer);
In that function it would be ugly to make a distinction depending on which 
type of memory the buffer would be carrying, no?
Thanks
sw
    
    
More information about the ffmpeg-devel
mailing list