[gupnp-dlna] Fix format detection for ADTS streams
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gupnp-dlna] Fix format detection for ADTS streams
- Date: Mon, 6 May 2013 10:40:48 +0000 (UTC)
commit 39730d90aff276ccbc58dd045e04674c115607b6
Author: Jens Georg <jensg openismus com>
Date: Mon Apr 29 16:59:34 2013 +0200
Fix format detection for ADTS streams
.../gstreamer/gupnp-dlna-gst-audio-information.c | 30 ++++++++++++++++++--
1 files changed, 27 insertions(+), 3 deletions(-)
---
diff --git a/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c
b/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c
index a6ea58d..67cb3a8 100644
--- a/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c
+++ b/libgupnp-dlna/metadata-backends/gstreamer/gupnp-dlna-gst-audio-information.c
@@ -50,6 +50,8 @@ get_audio_info (GUPnPDLNAGstAudioInformation *gst_info)
if (!priv->audio_info) {
GList *iter;
+ gboolean adts_hack = FALSE;
+ int stream_count = 0;
if (!priv->stream_list) {
priv->stream_list =
@@ -58,16 +60,38 @@ get_audio_info (GUPnPDLNAGstAudioInformation *gst_info)
return NULL;
}
+ /* For ADTS files we get two audio streams and the important
+ * information is only on the "outer" stream which is the
+ * second stream in the stream list. If we only have audio
+ * streams, we skip the first audio stream we see
+ *
+ * Works around
+ * https://bugzilla.gnome.org/show_bug.cgi?id=699212
+ */
+ iter = gst_discoverer_info_get_audio_streams (priv->info);
+ stream_count = g_list_length (priv->stream_list);
+
+ adts_hack = (stream_count == g_list_length (iter)) &&
+ stream_count == 2;
+
for (iter = priv->stream_list; iter; iter = iter->next) {
GstDiscovererStreamInfo *stream =
GST_DISCOVERER_STREAM_INFO (iter->data);
GType stream_type = G_TYPE_FROM_INSTANCE (stream);
+ /* copy caps from other stream */
+ if (adts_hack && !iter->next) {
+ priv->caps = gst_discoverer_stream_info_get_caps (stream);
+
+ continue;
+ }
+
if (stream_type == GST_TYPE_DISCOVERER_AUDIO_INFO) {
priv->audio_info =
GST_DISCOVERER_AUDIO_INFO (stream);
- break;
+ if (!adts_hack)
+ break;
}
}
}
@@ -79,10 +103,10 @@ static GstCaps *
get_caps (GUPnPDLNAGstAudioInformation *gst_info)
{
GUPnPDLNAGstAudioInformationPrivate *priv = gst_info->priv;
+ GstDiscovererStreamInfo *info = GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info));
if (!priv->caps)
- priv->caps = gst_discoverer_stream_info_get_caps
- (GST_DISCOVERER_STREAM_INFO (get_audio_info (gst_info)));
+ priv->caps = gst_discoverer_stream_info_get_caps (info);
return priv->caps;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]