diff options
Diffstat (limited to 'gst-libs/gst/media-info')
-rw-r--r-- | gst-libs/gst/media-info/media-info-priv.c | 11 | ||||
-rw-r--r-- | gst-libs/gst/media-info/media-info.c | 67 |
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; } |