summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2011-11-26 15:37:25 +0000
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2011-11-26 15:37:25 +0000
commit619915ea740a0cd44ec2208b600e2bab70c2a57d (patch)
tree061c3f06b16a752b8c357d90c5c4feab809d8335
parenta8024bb6989d524d11c8020ac67a60e63bee46ff (diff)
parent64c3d736426a947823dfceda15504dfb8b6da370 (diff)
downloadgstreamer-plugins-base-619915ea740a0cd44ec2208b600e2bab70c2a57d.tar.gz
Merge remote-tracking branch 'origin/master' into 0.11
Conflicts: ext/opus/gstopusdec.c ext/opus/gstopusparse.c gst-libs/gst/video/gstbasevideodecoder.c gst-libs/gst/video/gstbasevideodecoder.h
-rw-r--r--ext/opus/gstopuscommon.c16
-rw-r--r--ext/opus/gstopuscommon.h1
-rw-r--r--ext/opus/gstopusdec.c4
-rw-r--r--ext/opus/gstopusenc.c20
-rw-r--r--ext/opus/gstopusheader.c4
5 files changed, 34 insertions, 11 deletions
diff --git a/ext/opus/gstopuscommon.c b/ext/opus/gstopuscommon.c
index fc3e0376b..426c5b897 100644
--- a/ext/opus/gstopuscommon.c
+++ b/ext/opus/gstopuscommon.c
@@ -70,3 +70,19 @@ const GstAudioChannelPosition gst_opus_channel_positions[][8] = {
GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT,
GST_AUDIO_CHANNEL_POSITION_LFE},
};
+
+const char *gst_opus_channel_names[] = {
+ "mono",
+ "front left",
+ "front right",
+ "rear center",
+ "rear left",
+ "rear right",
+ "lfe",
+ "front center",
+ "front left of center",
+ "front right of center",
+ "side left",
+ "side right",
+ "none"
+};
diff --git a/ext/opus/gstopuscommon.h b/ext/opus/gstopuscommon.h
index 96a303e30..65b944e9e 100644
--- a/ext/opus/gstopuscommon.h
+++ b/ext/opus/gstopuscommon.h
@@ -27,6 +27,7 @@
G_BEGIN_DECLS
extern const GstAudioChannelPosition gst_opus_channel_positions[][8];
+extern const char *gst_opus_channel_names[];
G_END_DECLS
diff --git a/ext/opus/gstopusdec.c b/ext/opus/gstopusdec.c
index 3a6334967..b060b22ae 100644
--- a/ext/opus/gstopusdec.c
+++ b/ext/opus/gstopusdec.c
@@ -219,7 +219,8 @@ gst_opus_dec_parse_header (GstOpusDec * dec, GstBuffer * buf)
data = gst_buffer_map (buf, NULL, NULL, GST_MAP_READ);
- g_return_val_if_fail (dec->n_channels != data[9], GST_FLOW_ERROR);
+ g_return_val_if_fail (dec->n_channels == 0
+ || dec->n_channels == data[9], GST_FLOW_ERROR);
dec->n_channels = data[9];
dec->pre_skip = GST_READ_UINT16_LE (data + 10);
@@ -288,6 +289,7 @@ gst_opus_dec_parse_header (GstOpusDec * dec, GstBuffer * buf)
dec->sample_rate);
if (pos) {
+ GST_DEBUG_OBJECT (dec, "Setting channel positions on caps");
gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
}
diff --git a/ext/opus/gstopusenc.c b/ext/opus/gstopusenc.c
index b7e282c95..72af29a97 100644
--- a/ext/opus/gstopusenc.c
+++ b/ext/opus/gstopusenc.c
@@ -187,11 +187,9 @@ static void
gst_opus_enc_class_init (GstOpusEncClass * klass)
{
GObjectClass *gobject_class;
- GstElementClass *gstelement_class;
GstAudioEncoderClass *base_class;
gobject_class = (GObjectClass *) klass;
- gstelement_class = (GstElementClass *) klass;
base_class = (GstAudioEncoderClass *) klass;
gobject_class->set_property = gst_opus_enc_set_property;
@@ -446,7 +444,8 @@ gst_opus_enc_setup_channel_mapping (GstOpusEnc * enc, const GstAudioInfo * info)
GstAudioChannelPosition pos = GST_AUDIO_INFO_POSITION (info, n);
int c;
- GST_DEBUG_OBJECT (enc, "Channel %d has position %d", n, pos);
+ GST_DEBUG_OBJECT (enc, "Channel %d has position %d (%s)", n, pos,
+ gst_opus_channel_names[pos]);
for (c = 0; c < enc->n_channels; ++c) {
if (gst_opus_channel_positions[enc->n_channels - 1][c] == pos) {
GST_DEBUG_OBJECT (enc, "Found in Vorbis mapping as channel %d", c);
@@ -456,12 +455,13 @@ gst_opus_enc_setup_channel_mapping (GstOpusEnc * enc, const GstAudioInfo * info)
if (c == enc->n_channels) {
/* We did not find that position, so use undefined */
GST_WARNING_OBJECT (enc,
- "Position %d not found in Vorbis mapping, using unknown mapping",
- pos);
+ "Position %d (%s) not found in Vorbis mapping, using unknown mapping",
+ pos, gst_opus_channel_positions[pos]);
enc->channel_mapping_family = 255;
return;
}
- GST_DEBUG_OBJECT (enc, "Mapping output channel %d to %d", c, n);
+ GST_DEBUG_OBJECT (enc, "Mapping output channel %d to %d (%s)", c, n,
+ gst_opus_channel_names[pos]);
enc->channel_mapping[c] = n;
}
GST_INFO_OBJECT (enc, "Permutation found, using Vorbis mapping");
@@ -512,13 +512,17 @@ gst_opus_enc_set_format (GstAudioEncoder * benc, GstAudioInfo * info)
static gboolean
gst_opus_enc_setup (GstOpusEnc * enc)
{
- int error = OPUS_OK;
+ int error = OPUS_OK, n;
+ guint8 trivial_mapping[256];
GST_DEBUG_OBJECT (enc, "setup");
+ for (n = 0; n < 256; ++n)
+ trivial_mapping[n] = n;
+
enc->state =
opus_multistream_encoder_create (enc->sample_rate, enc->n_channels,
- (enc->n_channels + 1) / 2, enc->n_channels / 2, enc->channel_mapping,
+ enc->n_channels, 0, trivial_mapping,
enc->audio_or_voip ? OPUS_APPLICATION_AUDIO : OPUS_APPLICATION_VOIP,
&error);
if (!enc->state || error != OPUS_OK)
diff --git a/ext/opus/gstopusheader.c b/ext/opus/gstopusheader.c
index 4f9536333..a46c5d6f6 100644
--- a/ext/opus/gstopusheader.c
+++ b/ext/opus/gstopusheader.c
@@ -44,8 +44,8 @@ gst_opus_enc_create_id_buffer (gint nchannels, gint sample_rate,
gst_byte_writer_put_uint16_le (&bw, 0); /* output gain */
gst_byte_writer_put_uint8 (&bw, channel_mapping_family);
if (channel_mapping_family > 0) {
- gst_byte_writer_put_uint8 (&bw, (nchannels + 1) / 2);
- gst_byte_writer_put_uint8 (&bw, nchannels / 2);
+ gst_byte_writer_put_uint8 (&bw, nchannels);
+ gst_byte_writer_put_uint8 (&bw, 0);
gst_byte_writer_put_data (&bw, channel_mapping, nchannels);
}