* Microsoft XMV demuxer
*/
-#include <stdint.h>
+#include <inttypes.h>
#include "libavutil/intreadwrite.h"
XMV_AUDIO_ADPCM51_FRONTCENTERLOW | \
XMV_AUDIO_ADPCM51_REARLEFTRIGHT)
+#define XMV_BLOCK_ALIGN_SIZE 36
+
typedef struct XMVAudioTrack {
uint16_t compression;
uint16_t channels;
file_version = avio_rl32(pb);
if ((file_version != 4) && (file_version != 2))
- avpriv_request_sample(s, "Uncommon version %d", file_version);
+ avpriv_request_sample(s, "Uncommon version %"PRIu32"", file_version);
/* Video track */
return AVERROR(ENOMEM);
xmv->audio = av_malloc(xmv->audio_track_count * sizeof(XMVAudioPacket));
- if (!xmv->audio)
- return AVERROR(ENOMEM);
+ if (!xmv->audio) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
for (audio_track = 0; audio_track < xmv->audio_track_count; audio_track++) {
XMVAudioTrack *track = &xmv->audio_tracks[audio_track];
track->bit_rate = track->bits_per_sample *
track->sample_rate *
track->channels;
- track->block_align = 36 * track->channels;
+ track->block_align = XMV_BLOCK_ALIGN_SIZE * track->channels;
track->block_samples = 64;
track->codec_id = ff_wav_codec_get_id(track->compression,
track->bits_per_sample);
av_log(s, AV_LOG_WARNING, "Unsupported 5.1 ADPCM audio stream "
"(0x%04X)\n", track->flags);
- if (!track->channels || !track->sample_rate) {
- av_log(s, AV_LOG_ERROR, "Invalid parameters for audio track %d.\n",
+ if (!track->channels || !track->sample_rate ||
+ track->channels >= UINT16_MAX / XMV_BLOCK_ALIGN_SIZE) {
+ av_log(s, AV_LOG_ERROR, "Invalid parameters for audio track %"PRIu16".\n",
audio_track);
ret = AVERROR_INVALIDDATA;
goto fail;
}
ast = avformat_new_stream(s, NULL);
- if (!ast)
- return AVERROR(ENOMEM);
+ if (!ast) {
+ ret = AVERROR(ENOMEM);
+ goto fail;
+ }
ast->codec->codec_type = AVMEDIA_TYPE_AUDIO;
ast->codec->codec_id = track->codec_id;