diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-12-16 05:54:03 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-12-16 05:59:43 +0100 |
commit | 47572323f2f908913b4d031af733047d481fb1f6 (patch) | |
tree | 0219bdc39d41ea1010333e8827684ce2e4f883b8 | |
parent | 482ee63641f4fa50f017538af384aadbceee7a18 (diff) | |
download | ffmpeg-47572323f2f908913b4d031af733047d481fb1f6.tar.gz |
lavf: add internal AVIOContext.maxsize
This allows simple and generic limiting of allocations used for packets.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavformat/avio.h | 6 | ||||
-rw-r--r-- | libavformat/utils.c | 10 |
2 files changed, 15 insertions, 1 deletions
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; |