summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2015-09-16 14:03:13 +0200
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2015-09-16 14:03:13 +0200
commitf17ca460093bb01f711a5db43b3e65555a1a937f (patch)
tree6d86a96a03b43023de4ae4db9f7b288201e7dfde
parent2fc552b629d771c8357a1b0262af4b21e5bcd4b8 (diff)
lavf/riff: Support decoding Ambisonic wav files.
Reported and tested by Andy Furniss, adf d lists at gmail
-rw-r--r--libavformat/riff.h2
-rw-r--r--libavformat/riffdec.c2
2 files changed, 4 insertions, 0 deletions
diff --git a/libavformat/riff.h b/libavformat/riff.h
index d6d91ef52d..3b57bb45d3 100644
--- a/libavformat/riff.h
+++ b/libavformat/riff.h
@@ -107,6 +107,8 @@ extern const AVCodecGuid ff_codec_wav_guids[];
#define FF_MEDIASUBTYPE_BASE_GUID \
0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71
+#define FF_AMBISONIC_BASE_GUID \
+ 0x21, 0x07, 0xD3, 0x11, 0x86, 0x44, 0xC8, 0xC1, 0xCA, 0x00, 0x00, 0x00
static av_always_inline int ff_guidcmp(const void *g1, const void *g2)
{
diff --git a/libavformat/riffdec.c b/libavformat/riffdec.c
index 7eecdb24b8..26779e1bfb 100644
--- a/libavformat/riffdec.c
+++ b/libavformat/riffdec.c
@@ -69,6 +69,8 @@ static void parse_waveformatex(AVIOContext *pb, AVCodecContext *c)
ff_get_guid(pb, &subformat);
if (!memcmp(subformat + 4,
+ (const uint8_t[]){ FF_AMBISONIC_BASE_GUID }, 12) ||
+ !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,