summaryrefslogtreecommitdiffstats
path: root/demux/demux_lavf.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux_lavf.c')
-rw-r--r--demux/demux_lavf.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 21b1cf8624..11e17f949f 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -76,7 +76,6 @@ typedef struct lavf_priv {
AVInputFormat *avif;
AVFormatContext *avfc;
AVIOContext *pb;
- uint8_t buffer[BIO_BUFFER_SIZE];
int64_t last_pts;
struct sh_stream **streams; // NULL for unknown streams
int num_streams;
@@ -571,8 +570,15 @@ static int demux_open_lavf(demuxer_t *demuxer, enum demux_check check)
if (!(priv->avif->flags & AVFMT_NOFILE) &&
demuxer->stream->type != STREAMTYPE_AVDEVICE)
{
- priv->pb = avio_alloc_context(priv->buffer, BIO_BUFFER_SIZE, 0,
+ void *buffer = av_malloc(BIO_BUFFER_SIZE);
+ if (!buffer)
+ return -1;
+ priv->pb = avio_alloc_context(buffer, BIO_BUFFER_SIZE, 0,
demuxer, mp_read, NULL, mp_seek);
+ if (!priv->pb) {
+ av_free(buffer);
+ return -1;
+ }
priv->pb->read_seek = mp_read_seek;
priv->pb->seekable = demuxer->stream->end_pos
&& (demuxer->stream->flags & MP_STREAM_SEEK) == MP_STREAM_SEEK
@@ -970,6 +976,8 @@ static void demux_close_lavf(demuxer_t *demuxer)
av_freep(&priv->avfc->key);
avformat_close_input(&priv->avfc);
}
+ if (priv->pb)
+ av_freep(&priv->pb->buffer);
av_freep(&priv->pb);
talloc_free(priv);
demuxer->priv = NULL;