mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-27 13:30:45 +00:00
oggdec: make sure the private parse data is cleaned up
This commit is contained in:
parent
89b51b570d
commit
d894f74762
@ -533,6 +533,10 @@ static int ogg_read_close(AVFormatContext *s)
|
||||
|
||||
for (i = 0; i < ogg->nstreams; i++) {
|
||||
av_free(ogg->streams[i].buf);
|
||||
if (ogg->streams[i].codec &&
|
||||
ogg->streams[i].codec->cleanup) {
|
||||
ogg->streams[i].codec->cleanup(s, i);
|
||||
}
|
||||
av_free(ogg->streams[i].private);
|
||||
}
|
||||
av_free(ogg->streams);
|
||||
|
@ -55,6 +55,7 @@ struct ogg_codec {
|
||||
* Number of expected headers
|
||||
*/
|
||||
int nb_header;
|
||||
void (*cleanup)(AVFormatContext *s, int idx);
|
||||
};
|
||||
|
||||
struct ogg_stream {
|
||||
|
@ -192,6 +192,16 @@ fixup_vorbis_headers(AVFormatContext * as, struct oggvorbis_private *priv,
|
||||
return offset;
|
||||
}
|
||||
|
||||
static int vorbis_cleanup(AVFormatContext *s, int idx)
|
||||
{
|
||||
struct ogg *ogg = s->priv_data;
|
||||
struct ogg_stream *os = ogg->streams + idx;
|
||||
struct oggvorbis_private *priv = os->private;
|
||||
int i;
|
||||
if (os->private)
|
||||
for (i = 0; i < 3; i++)
|
||||
av_freep(&priv->packet[i]);
|
||||
}
|
||||
|
||||
static int
|
||||
vorbis_header (AVFormatContext * s, int idx)
|
||||
@ -359,5 +369,6 @@ const struct ogg_codec ff_vorbis_codec = {
|
||||
.magicsize = 7,
|
||||
.header = vorbis_header,
|
||||
.packet = vorbis_packet,
|
||||
.cleanup= vorbis_cleanup,
|
||||
.nb_header = 3,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user