Commit 5d5b0bbc authored by Michael Niedermayer's avatar Michael Niedermayer

avformat/oggdec: Factor buffer reallocation out

Signed-off-by: 's avatarMichael Niedermayer <michael@niedermayer.cc>
parent 3c740f2d
......@@ -297,6 +297,20 @@ static int data_packets_seen(const struct ogg *ogg)
return 0;
}
static int buf_realloc(struct ogg_stream *os, int size)
{
/* Even if invalid guarantee there's enough memory to read the page */
if (os->bufsize - os->bufpos < size) {
uint8_t *nb = av_realloc(os->buf, 2*os->bufsize + AV_INPUT_BUFFER_PADDING_SIZE);
if (!nb)
return AVERROR(ENOMEM);
os->buf = nb;
os->bufsize *= 2;
}
return 0;
}
static int ogg_read_page(AVFormatContext *s, int *sid, int probing)
{
AVIOContext *bc = s->pb;
......@@ -378,14 +392,9 @@ static int ogg_read_page(AVFormatContext *s, int *sid, int probing)
if (idx >= 0) {
os = ogg->streams + idx;
/* Even if invalid guarantee there's enough memory to read the page */
if (os->bufsize - os->bufpos < size) {
uint8_t *nb = av_realloc(os->buf, 2*os->bufsize + AV_INPUT_BUFFER_PADDING_SIZE);
if (!nb)
return AVERROR(ENOMEM);
os->buf = nb;
os->bufsize *= 2;
}
ret = buf_realloc(os, size);
if (ret < 0)
return ret;
readout_buf = os->buf + os->bufpos;
} else {
......
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