summaryrefslogtreecommitdiffstats
path: root/gst-libs/gst/media-info
diff options
context:
space:
mode:
Diffstat (limited to 'gst-libs/gst/media-info')
-rw-r--r--gst-libs/gst/media-info/media-info-priv.c11
-rw-r--r--gst-libs/gst/media-info/media-info.c67
2 files changed, 12 insertions, 66 deletions
diff --git a/gst-libs/gst/media-info/media-info-priv.c b/gst-libs/gst/media-info/media-info-priv.c
index 71a31f2c..8f4a1f56 100644
--- a/gst-libs/gst/media-info/media-info-priv.c
+++ b/gst-libs/gst/media-info/media-info-priv.c
@@ -354,22 +354,25 @@ gmi_set_mime (GstMediaInfo *info, const char *mime)
/* FIXME: please figure out proper mp3 mimetypes */
if ((strcmp (mime, "application/x-ogg") == 0) ||
(strcmp (mime, "application/ogg") == 0))
- desc = g_strdup_printf ("%s name=source ! oggdemux ! vorbisdec name=decoder ! audioconvert ! audio/x-raw-int ! fakesink name=sink", priv->source_name);
+ desc = g_strdup_printf ("%s name=source ! oggdemux ! vorbisdec name=decoder ! fakesink name=sink", priv->source_name);
else if ((strcmp (mime, "audio/mpeg") == 0) ||
(strcmp (mime, "audio/x-mp3") == 0) ||
(strcmp (mime, "audio/mp3") == 0) ||
(strcmp (mime, "application/x-id3") == 0) ||
(strcmp (mime, "audio/x-id3") == 0))
desc = g_strdup_printf ("%s name=source ! id3tag ! mad name=decoder ! audio/x-raw-int ! fakesink name=sink", priv->source_name);
- else if (strcmp (mime, "application/x-flac") == 0)
- desc = g_strdup_printf ("%s name=source ! flac name=decoder ! audio/x-raw-int ! fakesink name=sink", priv->source_name);
- else if (strcmp (mime, "audio/x-wav") == 0)
+ else if ((strcmp (mime, "application/x-flac") == 0) ||
+ (strcmp (mime, "audio/x-flac") == 0))
+ desc = g_strdup_printf ("%s name=source ! flacdec name=decoder ! audio/x-raw-int ! fakesink name=sink", priv->source_name);
+ else if ((strcmp (mime, "audio/wav") == 0) ||
+ (strcmp (mime, "audio/x-wav") == 0))
desc = g_strdup_printf ("%s ! wavparse name=decoder ! audio/x-raw-int ! fakesink name=sink", priv->source_name);
else if (strcmp (mime, "audio/x-mod") == 0 ||
strcmp (mime, "audio/x-s3m") == 0 ||
strcmp (mime, "audio/x-xm") == 0 ||
strcmp (mime, "audio/x-it") == 0)
desc = g_strdup_printf ("%s name=source ! modplug name=decoder ! audio/x-raw-int ! fakesink name=sink", priv->source_name);
+ else return FALSE;
GST_DEBUG ("using description %s", desc);
priv->pipeline_desc = desc;
diff --git a/gst-libs/gst/media-info/media-info.c b/gst-libs/gst/media-info/media-info.c
index e6030315..902b6cef 100644
--- a/gst-libs/gst/media-info/media-info.c
+++ b/gst-libs/gst/media-info/media-info.c
@@ -419,72 +419,15 @@ gst_media_info_read_idler (GstMediaInfo *info, GstMediaInfoStream **streamp, GEr
GstMediaInfoStream *
gst_media_info_read (GstMediaInfo *info, const char *location, guint16 flags, GError **error)
{
- GstMediaInfoPriv *priv = info->priv;
GstMediaInfoStream *stream = NULL;
- GstElement *decoder = NULL;
- gchar *mime;
- int i;
-
- GST_DEBUG ("DEBUG: gst_media_info_read: start");
- gmip_reset (info->priv); /* reset all structs */
- priv->location = g_strdup (location);
- priv->flags = flags;
- if (!gmip_find_type (priv, error)) return NULL;
-
- mime = g_strdup (gst_structure_get_name (
- gst_caps_get_structure(priv->type, 0)));
- GST_DEBUG ("mime type: %s", mime);
-
- /* c) figure out decoding pipeline */
- //FIXMEdecoder = gmi_get_pipeline_description (info, mime);
- g_print ("DEBUG: using decoder %s\n", gst_element_get_name (decoder));
-
- /* if it's NULL, then that's a sign we can't decode it */
- if (decoder == NULL)
- {
- g_warning ("Can't find a decoder for type %s\n", mime);
+ gst_media_info_read_with_idler (info, location, flags, error);
+ if (*error) return FALSE;
+ while (gst_media_info_read_idler (info, &stream, error) && stream == NULL)
+ /* keep looping */;
+ if (*error)
return NULL;
- }
-
- /* b) create media info stream object */
- priv->stream = gmi_stream_new ();
- priv->stream->mime = mime;
- priv->stream->path = priv->location;
-
- /* install this decoder in the pipeline */
-
- //FIXME: use new systemgmi_set_decoder (info, decoder);
-
- /* collect total stream properties */
- /* d) get all stream properties */
- gmip_find_stream (priv);
-
- /* e) if we have multiple tracks, loop over them; if not, just get
- * metadata and return it */
- GST_DEBUG ("num tracks %ld", priv->stream->length_tracks);
- for (i = 0; i < priv->stream->length_tracks; ++i)
- {
- priv->current_track = gmi_track_new ();
- if (i > 0)
- {
- GST_DEBUG ("seeking to track %d", i);
- gmi_seek_to_track (info, i);
- }
- if (flags & GST_MEDIA_INFO_METADATA)
- gmip_find_track_metadata (priv);
- if (flags & GST_MEDIA_INFO_STREAMINFO)
- gmip_find_track_streaminfo (priv);
- if (flags & GST_MEDIA_INFO_FORMAT)
- gmip_find_track_format (priv);
- priv->stream->tracks = g_list_append (priv->stream->tracks,
- priv->current_track);
- priv->current_track = NULL;
- }
- /* please return it */
- stream = priv->stream;
- priv->stream = NULL;
return stream;
}