#include "isom.h"
#include "id3v2.h"
#include "mov_chan.h"
+#include "replaygain.h"
#define AIFF 0
#define AIFF_C_VERSION1 0xA2805140
if (size < 0)
return size;
- filesize -= size + 8;
+ if (size >= 0x7fffffff - 8)
+ filesize = 0;
+ else
+ filesize -= size + 8;
switch (tag) {
case MKTAG('C', 'O', 'M', 'M'): /* Common chunk */
case MKTAG('w', 'a', 'v', 'e'):
if ((uint64_t)size > (1<<30))
return -1;
- if (ff_get_extradata(s, st->codecpar, pb, size) < 0)
- return AVERROR(ENOMEM);
+ if ((ret = ff_get_extradata(s, st->codecpar, pb, size)) < 0)
+ return ret;
if ( (st->codecpar->codec_id == AV_CODEC_ID_QDMC || st->codecpar->codec_id == AV_CODEC_ID_QDM2)
&& size>=12*4 && !st->codecpar->block_align) {
st->codecpar->block_align = AV_RB32(st->codecpar->extradata+11*4);
}
break;
case MKTAG('C','H','A','N'):
- if(ff_mov_read_chan(s, pb, st, size) < 0)
- return AVERROR_INVALIDDATA;
+ if ((ret = ff_mov_read_chan(s, pb, st, size)) < 0)
+ return ret;
break;
case MKTAG('A','P','C','M'): /* XA ADPCM compressed sound chunk */
st->codecpar->codec_id = AV_CODEC_ID_ADPCM_XA;
}
}
+ ret = ff_replaygain_export(st, s->metadata);
+ if (ret < 0)
+ return ret;
+
got_sound:
if (!st->codecpar->block_align && st->codecpar->codec_id == AV_CODEC_ID_QCELP) {
av_log(s, AV_LOG_WARNING, "qcelp without wave chunk, assuming full rate\n");