caps: Use default audio channel layouts for some codecs

For a few white-listed codecs, use default fallback channel
layouts when ffmpeg doesn't inform us.
This commit is contained in:
Jan Schmidt 2009-11-20 20:28:06 +01:00
parent b69fcc471e
commit faa417cf34

View file

@ -321,14 +321,32 @@ gst_ff_aud_caps_new (AVCodecContext * context, enum CodecID codec_id,
/* fixed, non-probing context */
if (context != NULL && context->channels != -1) {
GstAudioChannelPosition *pos;
guint64 channel_layout = context->channel_layout;
if (channel_layout == 0) {
const guint64 default_channel_set[] = {
0, 0, CH_LAYOUT_SURROUND, CH_LAYOUT_QUAD, CH_LAYOUT_5POINT0,
CH_LAYOUT_5POINT1, 0, CH_LAYOUT_7POINT1
};
switch (codec_id) {
case CODEC_ID_EAC3:
case CODEC_ID_AC3:
case CODEC_ID_DTS:
if (context->channels > 0
&& context->channels < G_N_ELEMENTS (default_channel_set))
channel_layout = default_channel_set[context->channels - 1];
break;
default:
break;
}
}
caps = gst_caps_new_simple (mimetype,
"rate", G_TYPE_INT, context->sample_rate,
"channels", G_TYPE_INT, context->channels, NULL);
pos =
gst_ff_channel_layout_to_gst (context->channel_layout,
context->channels);
pos = gst_ff_channel_layout_to_gst (channel_layout, context->channels);
if (pos != NULL) {
gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
g_free (pos);