From b845f5e97b655de0a191f736594777fec9754cf5 Mon Sep 17 00:00:00 2001 From: Luca Barbato Date: Sat, 20 Apr 2013 13:36:48 +0200 Subject: [PATCH] riff: Factor out WAVEFORMATEX parsing Makes the code simpler to follow. Signed-off-by: Diego Biurrun --- libavformat/riff.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/libavformat/riff.c b/libavformat/riff.c index 8a1962a704..eae1f644ca 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -682,6 +682,28 @@ void ff_riff_write_info(AVFormatContext *s) * WAVEFORMATEX adds 'WORD cbSize' and basically makes itself * an openended structure. */ + +static void parse_waveformatex(AVIOContext *pb, AVCodecContext *c) +{ + ff_asf_guid subformat; + c->bits_per_coded_sample = avio_rl16(pb); + c->channel_layout = avio_rl32(pb); /* dwChannelMask */ + + ff_get_guid(pb, &subformat); + if (!memcmp(subformat + 4, + (const uint8_t[]){ FF_MEDIASUBTYPE_BASE_GUID }, 12)) { + c->codec_tag = AV_RL32(subformat); + c->codec_id = ff_wav_codec_get_id(c->codec_tag, + c->bits_per_coded_sample); + } else { + c->codec_id = ff_codec_guid_get_id(ff_codec_wav_guids, subformat); + if (!c->codec_id) + av_log(c, AV_LOG_WARNING, + "unknown subformat:"FF_PRI_GUID"\n", + FF_ARG_GUID(subformat)); + } +} + int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size) { int id; @@ -708,24 +730,7 @@ int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size) size -= 18; cbSize = FFMIN(size, cbSize); if (cbSize >= 22 && id == 0xfffe) { /* WAVEFORMATEXTENSIBLE */ - ff_asf_guid subformat; - codec->bits_per_coded_sample = avio_rl16(pb); - codec->channel_layout = avio_rl32(pb); /* dwChannelMask */ - - ff_get_guid(pb, &subformat); - if (!memcmp(subformat + 4, - (const uint8_t[]){ FF_MEDIASUBTYPE_BASE_GUID }, 12)) { - codec->codec_tag = AV_RL32(subformat); - codec->codec_id = ff_wav_codec_get_id(codec->codec_tag, - codec->bits_per_coded_sample); - } else { - codec->codec_id = ff_codec_guid_get_id(ff_codec_wav_guids, - subformat); - if (!codec->codec_id) - av_log(codec, AV_LOG_WARNING, - "unknown subformat: "FF_PRI_GUID"\n", - FF_ARG_GUID(subformat)); - } + parse_waveformatex(pb, codec); cbSize -= 22; size -= 22; }