diff --git a/libavformat/avio_internal.h b/libavformat/avio_internal.h index f140897c5df1b..df614b22d9d31 100644 --- a/libavformat/avio_internal.h +++ b/libavformat/avio_internal.h @@ -71,6 +71,8 @@ uint64_t ffio_read_varlen(AVIOContext *bc); /** @warning must be called before any I/O */ int ffio_set_buf_size(AVIOContext *s, int buf_size); +int ffio_limit(AVIOContext *s, int size); + void ffio_init_checksum(AVIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum); diff --git a/libavformat/utils.c b/libavformat/utils.c index f0df759bf56f5..edcae2fe376e9 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -264,11 +264,8 @@ AVInputFormat *av_find_input_format(const char *short_name) return NULL; } - -int av_get_packet(AVIOContext *s, AVPacket *pkt, int size) +int ffio_limit(AVIOContext *s, int size) { - int ret; - if(s->maxsize>=0){ int64_t remaining= s->maxsize - avio_tell(s); if(remaining < size){ @@ -283,6 +280,13 @@ int av_get_packet(AVIOContext *s, AVPacket *pkt, int size) size= remaining+1; } } + return size; +} + +int av_get_packet(AVIOContext *s, AVPacket *pkt, int size) +{ + int ret; + size= ffio_limit(s, size); ret= av_new_packet(pkt, size);