Commit 5780f41a authored by Clément Bœsch's avatar Clément Bœsch Committed by Diego Biurrun

oggdec: fix memleak with continuous streams.

This avoids the creation of a new AVStream instead of replacing it when
a stream reset occurs (track change with some webradios for example).
Signed-off-by: 's avatarDiego Biurrun <diego@biurrun.de>
parent 2501d2f3
...@@ -148,7 +148,7 @@ ogg_find_codec (uint8_t * buf, int size) ...@@ -148,7 +148,7 @@ ogg_find_codec (uint8_t * buf, int size)
} }
static int static int
ogg_new_stream (AVFormatContext * s, uint32_t serial) ogg_new_stream (AVFormatContext *s, uint32_t serial, int new_avstream)
{ {
struct ogg *ogg = s->priv_data; struct ogg *ogg = s->priv_data;
...@@ -165,11 +165,13 @@ ogg_new_stream (AVFormatContext * s, uint32_t serial) ...@@ -165,11 +165,13 @@ ogg_new_stream (AVFormatContext * s, uint32_t serial)
os->buf = av_malloc(os->bufsize); os->buf = av_malloc(os->bufsize);
os->header = -1; os->header = -1;
st = av_new_stream (s, idx); if (new_avstream) {
st = av_new_stream(s, idx);
if (!st) if (!st)
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
av_set_pts_info(st, 64, 1, 1000000); av_set_pts_info(st, 64, 1, 1000000);
}
return idx; return idx;
} }
...@@ -250,8 +252,10 @@ ogg_read_page (AVFormatContext * s, int *str) ...@@ -250,8 +252,10 @@ ogg_read_page (AVFormatContext * s, int *str)
} }
ogg->curidx = -1; ogg->curidx = -1;
ogg->nstreams = 0; ogg->nstreams = 0;
idx = ogg_new_stream(s, serial, 0);
} else {
idx = ogg_new_stream(s, serial, 1);
} }
idx = ogg_new_stream (s, serial);
if (idx < 0) if (idx < 0)
return -1; return -1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment