X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=libavformat%2Fthp.c;h=75f7941ff8a1085daafa442a852aec053cbf62c2;hb=c130428ab5a17911d0bfa11f804ec05e6f7a53e6;hp=e2aba3bc324aaaa93628b40b02a579b66781d0f4;hpb=f955fdc7c6a8c651c9e67fb1f79d3f0b2f72df11;p=ffmpeg diff --git a/libavformat/thp.c b/libavformat/thp.c index e2aba3bc324..75f7941ff8a 100644 --- a/libavformat/thp.c +++ b/libavformat/thp.c @@ -20,8 +20,9 @@ */ #include "libavutil/intreadwrite.h" -#include "libavutil/intfloat_readwrite.h" +#include "libavutil/intfloat.h" #include "avformat.h" +#include "internal.h" typedef struct ThpDemuxContext { int version; @@ -40,7 +41,7 @@ typedef struct ThpDemuxContext { unsigned char components[16]; AVStream* vst; int has_audio; - int audiosize; + unsigned audiosize; } ThpDemuxContext; @@ -59,6 +60,7 @@ static int thp_read_header(AVFormatContext *s, ThpDemuxContext *thp = s->priv_data; AVStream *st; AVIOContext *pb = s->pb; + int64_t fsize= avio_size(pb); int i; /* Read the file header. */ @@ -68,10 +70,12 @@ static int thp_read_header(AVFormatContext *s, avio_rb32(pb); /* Max buf size. */ avio_rb32(pb); /* Max samples. */ - thp->fps = av_d2q(av_int2flt(avio_rb32(pb)), INT_MAX); + thp->fps = av_d2q(av_int2float(avio_rb32(pb)), INT_MAX); thp->framecnt = avio_rb32(pb); thp->first_framesz = avio_rb32(pb); - avio_rb32(pb); /* Data size. */ + pb->maxsize = avio_rb32(pb); + if(fsize>0 && (!pb->maxsize || fsize < pb->maxsize)) + pb->maxsize= fsize; thp->compoff = avio_rb32(pb); avio_rb32(pb); /* offsetDataOffset. */ @@ -100,7 +104,7 @@ static int thp_read_header(AVFormatContext *s, /* The denominator and numerator are switched because 1/fps is required. */ - av_set_pts_info(st, 64, thp->fps.den, thp->fps.num); + avpriv_set_pts_info(st, 64, thp->fps.den, thp->fps.num); st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_id = CODEC_ID_THP; st->codec->codec_tag = 0; /* no fourcc */ @@ -127,7 +131,7 @@ static int thp_read_header(AVFormatContext *s, st->codec->channels = avio_rb32(pb); /* numChannels. */ st->codec->sample_rate = avio_rb32(pb); /* Frequency. */ - av_set_pts_info(st, 64, 1, st->codec->sample_rate); + avpriv_set_pts_info(st, 64, 1, st->codec->sample_rate); thp->audio_stream_index = st->index; thp->has_audio = 1; @@ -142,7 +146,7 @@ static int thp_read_packet(AVFormatContext *s, { ThpDemuxContext *thp = s->priv_data; AVIOContext *pb = s->pb; - int size; + unsigned int size; int ret; if (thp->audiosize == 0) {