Merge commit '54ed488b1af583df6c9d2a73b4a44f16b7e4f82c'
* commit '54ed488b1af583df6c9d2a73b4a44f16b7e4f82c': flac muxer: write WAVEFORMATEXTENSIBLE_CHANNEL_MASK tag for multichannel files Conflicts: libavformat/flacenc.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		@@ -19,6 +19,7 @@
 | 
				
			|||||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
					 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "libavutil/channel_layout.h"
 | 
				
			||||||
#include "libavutil/opt.h"
 | 
					#include "libavutil/opt.h"
 | 
				
			||||||
#include "libavcodec/flac.h"
 | 
					#include "libavcodec/flac.h"
 | 
				
			||||||
#include "avformat.h"
 | 
					#include "avformat.h"
 | 
				
			||||||
@@ -97,6 +98,23 @@ static int flac_write_header(struct AVFormatContext *s)
 | 
				
			|||||||
    if (ret)
 | 
					    if (ret)
 | 
				
			||||||
        return 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, !padding,
 | 
					    ret = flac_write_block_comment(s->pb, &s->metadata, !padding,
 | 
				
			||||||
                                   s->flags & AVFMT_FLAG_BITEXACT);
 | 
					                                   s->flags & AVFMT_FLAG_BITEXACT);
 | 
				
			||||||
    if (ret)
 | 
					    if (ret)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,4 +29,6 @@
 | 
				
			|||||||
int ff_flac_write_header(AVIOContext *pb, AVCodecContext *codec,
 | 
					int ff_flac_write_header(AVIOContext *pb, AVCodecContext *codec,
 | 
				
			||||||
                         int last_block);
 | 
					                         int last_block);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ff_flac_is_native_layout(uint64_t channel_layout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* AVFORMAT_FLACENC_H */
 | 
					#endif /* AVFORMAT_FLACENC_H */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,8 @@
 | 
				
			|||||||
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
					 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "libavutil/channel_layout.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "libavcodec/flac.h"
 | 
					#include "libavcodec/flac.h"
 | 
				
			||||||
#include "libavcodec/bytestream.h"
 | 
					#include "libavcodec/bytestream.h"
 | 
				
			||||||
#include "avformat.h"
 | 
					#include "avformat.h"
 | 
				
			||||||
@@ -45,3 +47,17 @@ int ff_flac_write_header(AVIOContext *pb, AVCodecContext *codec,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int ff_flac_is_native_layout(uint64_t channel_layout)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (channel_layout == AV_CH_LAYOUT_MONO     ||
 | 
				
			||||||
 | 
					        channel_layout == AV_CH_LAYOUT_STEREO   ||
 | 
				
			||||||
 | 
					        channel_layout == AV_CH_LAYOUT_SURROUND ||
 | 
				
			||||||
 | 
					        channel_layout == AV_CH_LAYOUT_QUAD     ||
 | 
				
			||||||
 | 
					        channel_layout == AV_CH_LAYOUT_5POINT0  ||
 | 
				
			||||||
 | 
					        channel_layout == AV_CH_LAYOUT_5POINT1  ||
 | 
				
			||||||
 | 
					        channel_layout == AV_CH_LAYOUT_6POINT1  ||
 | 
				
			||||||
 | 
					        channel_layout == AV_CH_LAYOUT_7POINT1)
 | 
				
			||||||
 | 
					        return 1;
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user