From 47572323f2f908913b4d031af733047d481fb1f6 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 16 Dec 2011 05:54:03 +0100 Subject: [PATCH] lavf: add internal AVIOContext.maxsize This allows simple and generic limiting of allocations used for packets. Signed-off-by: Michael Niedermayer --- libavformat/avio.h | 6 ++++++ libavformat/utils.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libavformat/avio.h b/libavformat/avio.h index 7cf14f9f8c..920526f028 100644 --- a/libavformat/avio.h +++ b/libavformat/avio.h @@ -120,6 +120,12 @@ typedef struct { * A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable. */ int seekable; + + /** + * max filesize, used to limit allocations + * This field is internal to libavformat and access from outside is not allowed. + */ + int64_t maxsize; } AVIOContext; /* unbuffered I/O */ diff --git a/libavformat/utils.c b/libavformat/utils.c index 183aaff2b2..10cd6f3066 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -267,7 +267,15 @@ AVInputFormat *av_find_input_format(const char *short_name) int av_get_packet(AVIOContext *s, AVPacket *pkt, int size) { - int ret= av_new_packet(pkt, size); + int ret; + + if(s->maxsize>0){ + int64_t remaining= s->maxsize - avio_tell(s); + if(remaining>=0) + size= FFMIN(size, remaining); + } + + ret= av_new_packet(pkt, size); if(ret<0) return ret;