Only the low 31 bits are used for channel assignments. The high bit is a
special-case flag bit used to indicate that any channel layout is supported.
---
libavformat/riff.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/libavformat/riff.c b/libavformat/riff.c
index fe6cc55..7ddbf36 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -430,7 +430,8 @@ int ff_put_wav_header(AVIOContext *pb, AVCodecContext *enc)
hdrsize += 22;
avio_wl16(pb, riff_extradata - riff_extradata_start + 22); /* 22 is WAVEFORMATEXTENSIBLE size */
avio_wl16(pb, enc->bits_per_coded_sample); /* ValidBitsPerSample || SamplesPerBlock || Reserved */
- avio_wl32(pb, enc->channel_layout); /* dwChannelMask */
+ /* only 31 bits of dwChannelMask are used for channel assignments */
+ avio_wl32(pb, enc->channel_layout & 0x7FFFFFFF); /* dwChannelMask */
avio_wl32(pb, enc->codec_tag); /* GUID + next 3 */
avio_wl32(pb, 0x00100000);
avio_wl32(pb, 0xAA000080);
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel