From 349cca9f12e2290b27bba99627c8e4a8f8cdce7d 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 (cherry picked from commit 47572323f2f908913b4d031af733047d481fb1f6) 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 201a7c6bf8..f4746b017f 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;