mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-28 11:55:39 +00:00
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:
parent
b69fcc471e
commit
faa417cf34
1 changed files with 21 additions and 3 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue