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

Reply via email to