aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/siff.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2011-12-19 19:23:56 +0100
committerMichael Niedermayer <michaelni@gmx.at>2011-12-19 21:11:09 +0100
commitb08a742526d05bcf300af820da5c79d2a05f9959 (patch)
treeca198b3bd8b6d78e5e1ad87bc1eb99cbd449a6f4 /libavformat/siff.c
parent1dcce49e10dcebde9d2cc52565fa299c5fdfd691 (diff)
downloadffmpeg-b08a742526d05bcf300af820da5c79d2a05f9959.tar.gz
siff: simplify code by using ffio_limit()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/siff.c')
-rw-r--r--libavformat/siff.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/libavformat/siff.c b/libavformat/siff.c
index 51dc694e4f..1a3f0a4e47 100644
--- a/libavformat/siff.c
+++ b/libavformat/siff.c
@@ -22,6 +22,7 @@
#include "libavutil/intreadwrite.h"
#include "avformat.h"
#include "internal.h"
+#include "avio_internal.h"
enum SIFFTags{
TAG_SIFF = MKTAG('S', 'I', 'F', 'F'),
@@ -201,18 +202,16 @@ static int siff_read_packet(AVFormatContext *s, AVPacket *pkt)
}
if (!c->curstrm){
- int64_t fsize= avio_size(s->pb);
- size = c->pktsize - c->sndsize;
- if(fsize>0)
- size= FFMIN(size, fsize - avio_tell(s->pb) + c->gmcsize + 3);
- if(size < 2 + c->gmcsize || c->pktsize < c->sndsize)
+ size = c->pktsize - c->sndsize - c->gmcsize - 2;
+ size = ffio_limit(s->pb, size);
+ if(size < 0 || c->pktsize < c->sndsize)
return AVERROR_INVALIDDATA;
- if (av_new_packet(pkt, size) < 0)
+ if (av_new_packet(pkt, size + c->gmcsize + 2) < 0)
return AVERROR(ENOMEM);
AV_WL16(pkt->data, c->flags);
if (c->gmcsize)
memcpy(pkt->data + 2, c->gmc, c->gmcsize);
- avio_read(s->pb, pkt->data + 2 + c->gmcsize, size - c->gmcsize - 2);
+ avio_read(s->pb, pkt->data + 2 + c->gmcsize, size);
pkt->stream_index = 0;
c->curstrm = -1;
}else{