diff options
author | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2011-11-26 15:37:25 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2011-11-26 15:37:25 +0000 |
commit | 619915ea740a0cd44ec2208b600e2bab70c2a57d (patch) | |
tree | 061c3f06b16a752b8c357d90c5c4feab809d8335 | |
parent | a8024bb6989d524d11c8020ac67a60e63bee46ff (diff) | |
parent | 64c3d736426a947823dfceda15504dfb8b6da370 (diff) | |
download | gstreamer-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.c | 16 | ||||
-rw-r--r-- | ext/opus/gstopuscommon.h | 1 | ||||
-rw-r--r-- | ext/opus/gstopusdec.c | 4 | ||||
-rw-r--r-- | ext/opus/gstopusenc.c | 20 | ||||
-rw-r--r-- | ext/opus/gstopusheader.c | 4 |
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); } |