gst/audioconvert/gstaudioconvert.c: Passthrough the channel positions if the number of output channels is the same as...

Original commit message from CVS:
* gst/audioconvert/gstaudioconvert.c:
(gst_audio_convert_fixate_channels):
Passthrough the channel positions if the number of output channels is
the same as the number of input channels, the input had a channel
layout and downstream requests no special one. We did this already for
> 2 channels but now it's also done for 1 channel. Fixes bug #533617.
This commit is contained in:
Sebastian Dröge 2008-05-20 12:15:34 +00:00
parent d8dc371c0d
commit d76c4b4c65
2 changed files with 15 additions and 7 deletions

View file

@ -1,3 +1,12 @@
2008-05-20 Sebastian Dröge <slomo@circular-chaos.org>
* gst/audioconvert/gstaudioconvert.c:
(gst_audio_convert_fixate_channels):
Passthrough the channel positions if the number of output channels is
the same as the number of input channels, the input had a channel
layout and downstream requests no special one. We did this already for
> 2 channels but now it's also done for 1 channel. Fixes bug #533617.
2008-05-20 Wim Taymans <wim.taymans@collabora.co.uk>
* ext/gnomevfs/gstgnomevfssrc.c: (gst_gnome_vfs_src_init),

View file

@ -819,7 +819,7 @@ static void
gst_audio_convert_fixate_channels (GstBaseTransform * base, GstStructure * ins,
GstStructure * outs)
{
const GValue *out_layout;
const GValue *in_layout, *out_layout;
gint in_chans, out_chans;
if (!gst_structure_get_int (ins, "channels", &in_chans))
@ -844,19 +844,18 @@ gst_audio_convert_fixate_channels (GstBaseTransform * base, GstStructure * ins,
/* check if the output has a channel layout (or a list of layouts) */
out_layout = gst_structure_get_value (outs, "channel-positions");
/* get the channel layout of the input if any */
in_layout = gst_structure_get_value (ins, "channel-positions");
if (out_layout == NULL) {
if (out_chans <= 2)
if (out_chans <= 2 && in_chans != out_chans && in_layout == NULL)
return; /* nothing to do, default layout will be assumed */
GST_WARNING_OBJECT (base, "downstream caps contain no channel layout");
}
if (in_chans == out_chans) {
const GValue *in_layout;
if (in_chans == out_chans && in_layout != NULL) {
GValue res = { 0, };
in_layout = gst_structure_get_value (ins, "channel-positions");
g_return_if_fail (in_layout != NULL);
/* same number of channels and no output layout: just use input layout */
if (out_layout == NULL) {
gst_structure_set_value (outs, "channel-positions", in_layout);