Commit be233a56 authored by Justin Ruggles's avatar Justin Ruggles

Check that channel layout is compatible with number of channels for

output audio stream.

Originally committed as revision 18621 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent dc1ed614
......@@ -3212,6 +3212,8 @@ static void new_audio_stream(AVFormatContext *oc)
audio_enc->channels = audio_channels;
audio_enc->sample_fmt = audio_sample_fmt;
audio_enc->channel_layout = channel_layout;
if (avcodec_channel_layout_num_channels(channel_layout) != audio_channels)
audio_enc->channel_layout = 0;
if(codec && codec->sample_fmts){
const enum SampleFormat *p= codec->sample_fmts;
......
......@@ -153,6 +153,15 @@ void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels,
}
}
int avcodec_channel_layout_num_channels(int64_t channel_layout)
{
int count;
uint64_t x = channel_layout;
for (count = 0; x; count++)
x &= x-1; // unset lowest set bit
return count;
}
struct AVAudioConvert {
int in_channels, out_channels;
int fmt_pair;
......
......@@ -73,6 +73,10 @@ void avcodec_get_channel_layout_string(char *buf, int buf_size, int nb_channels,
*/
int64_t avcodec_guess_channel_layout(int nb_channels, enum CodecID codec_id, const char *fmt_name);
/**
* @return the number of channels in the channel layout.
*/
int avcodec_channel_layout_num_channels(int64_t channel_layout);
struct AVAudioConvert;
typedef struct AVAudioConvert AVAudioConvert;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment