From 54ed488b1af583df6c9d2a73b4a44f16b7e4f82c Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 25 May 2014 11:34:32 +0200 Subject: flac muxer: write WAVEFORMATEXTENSIBLE_CHANNEL_MASK tag for multichannel files --- libavformat/flacenc.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'libavformat/flacenc.c') diff --git a/libavformat/flacenc.c b/libavformat/flacenc.c index 8a23163..021891d 100644 --- a/libavformat/flacenc.c +++ b/libavformat/flacenc.c @@ -19,6 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include "libavutil/channel_layout.h" #include "libavutil/opt.h" #include "libavcodec/flac.h" #include "avformat.h" @@ -83,6 +84,23 @@ static int flac_write_header(struct AVFormatContext *s) if (ret) return ret; + /* add the channel layout tag */ + if (codec->channel_layout && + !(codec->channel_layout & ~0x3ffffULL) && + !ff_flac_is_native_layout(codec->channel_layout)) { + AVDictionaryEntry *chmask = av_dict_get(s->metadata, "WAVEFORMATEXTENSIBLE_CHANNEL_MASK", + NULL, 0); + + if (chmask) { + av_log(s, AV_LOG_WARNING, "A WAVEFORMATEXTENSIBLE_CHANNEL_MASK is " + "already present, this muxer will not overwrite it.\n"); + } else { + uint8_t buf[32]; + snprintf(buf, sizeof(buf), "0x%"PRIx64, codec->channel_layout); + av_dict_set(&s->metadata, "WAVEFORMATEXTENSIBLE_CHANNEL_MASK", buf, 0); + } + } + ret = flac_write_block_comment(s->pb, &s->metadata, 0, s->flags & AVFMT_FLAG_BITEXACT); if (ret) -- cgit v1.1