[rhythmbox] audiocd: Port to latest 1.0 gst API
- From: Jonathan Matthew <jmatthew src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [rhythmbox] audiocd: Port to latest 1.0 gst API
- Date: Sat, 8 Dec 2012 07:38:35 +0000 (UTC)
commit 374ebbaa884ae1be4e6eef0e2e220ae6a44b7a44
Author: Edward Hervey <edward hervey collabora co uk>
Date: Tue Sep 11 10:46:15 2012 +0200
audiocd: Port to latest 1.0 gst API
plugins/audiocd/rb-audiocd-info.c | 46 +++++++++++++++++++++-------------
plugins/audiocd/rb-audiocd-plugin.c | 10 +------
plugins/audiocd/rb-audiocd-source.c | 1 -
3 files changed, 30 insertions(+), 27 deletions(-)
---
diff --git a/plugins/audiocd/rb-audiocd-info.c b/plugins/audiocd/rb-audiocd-info.c
index 46c5203..0d9ee3e 100644
--- a/plugins/audiocd/rb-audiocd-info.c
+++ b/plugins/audiocd/rb-audiocd-info.c
@@ -27,9 +27,11 @@
#include "config.h"
+#include <stdio.h>
#include <glib/gi18n.h>
#include <gst/gst.h>
-#include <gst/cdda/gstcddabasesrc.h>
+#include <gst/audio/gstaudiocdsrc.h>
+#include <gst/tag/tag.h>
#include <gio/gio.h>
#include "rb-audiocd-info.h"
@@ -40,14 +42,11 @@ read_gst_disc_info (RBAudioCDInfo *info, GError **error)
GstElement *source;
GstElement *sink;
GstElement *pipeline;
- GstFormat format;
- GstFormat out_format;
GstBus *bus;
- gint64 num_tracks;
gboolean done;
- int i;
+ GstToc *toc = NULL;
- source = gst_element_make_from_uri (GST_URI_SRC, "cdda://", NULL);
+ source = gst_element_make_from_uri (GST_URI_SRC, "cdda://", NULL, NULL);
if (source == NULL) {
/* if cdparanoiasrc wasn't in base and installed by default
* everywhere, plugin install might be worth trying here.
@@ -109,6 +108,11 @@ read_gst_disc_info (RBAudioCDInfo *info, GError **error)
gst_message_parse_error (msg, error, NULL);
done = TRUE;
break;
+ case GST_MESSAGE_TOC:
+ GST_ERROR ("YAY, we have a TOC message !");
+ gst_message_parse_toc(msg, &toc, NULL);
+ done = TRUE;
+ break;
default:
break;
}
@@ -116,23 +120,26 @@ read_gst_disc_info (RBAudioCDInfo *info, GError **error)
gst_message_unref (msg);
}
- if (*error == NULL) {
- format = gst_format_get_by_nick ("track");
- out_format = format;
- gst_element_query_duration (source, &out_format, &num_tracks);
- info->num_tracks = num_tracks;
+ if (toc != NULL) {
+ gint i;
+ GList *tmp, *entries = gst_toc_get_entries (toc);
- info->tracks = g_new0 (RBAudioCDTrack, num_tracks);
- for (i = 0; i < num_tracks; i++) {
+ info->num_tracks = g_list_length (entries);
+ info->tracks = g_new0 (RBAudioCDTrack, info->num_tracks);
+ for (i = 0, tmp = entries; tmp; tmp = tmp->next, i++) {
RBAudioCDTrack *track = &info->tracks[i];
- GstCddaBaseSrcTrack *gst_track = &GST_CDDA_BASE_SRC (source)->tracks[i];
+ GstTocEntry *entry = (GstTocEntry*) tmp->data;
guint64 duration = 0;
+ gint64 start, stop;
- track->is_audio = gst_track->is_audio;
- track->track_num = gst_track->num;
+ /* FIXME : GstToc can't give us this kind of info */
+ track->is_audio = TRUE;
+ /* FIXME : Might not be 100% the same thing as the entry order */
+ track->track_num = i + 1;
- gst_tag_list_get_uint64 (gst_track->tags, GST_TAG_DURATION, &duration);
- track->duration = (duration / GST_MSECOND);
+ if (gst_toc_entry_get_start_stop_times (entry, &start, &stop))
+ duration = stop - start;
+ track->duration = duration / GST_MSECOND;
}
}
@@ -195,6 +202,9 @@ read_gvfs_disc_info (RBAudioCDInfo *info)
if (track_num < 1 || track_num > info->num_tracks) {
continue;
}
+ GST_ERROR ("track_num:%d info->tracks[track_num-1].track_num:%d",
+ track_num,
+ info->tracks[track_num-1].track_num);
g_assert (track_num == info->tracks[track_num-1].track_num);
attr = g_file_info_get_attribute_string (fileinfo, "xattr::org.gnome.audio.title");
diff --git a/plugins/audiocd/rb-audiocd-plugin.c b/plugins/audiocd/rb-audiocd-plugin.c
index 6104334..b22eafb 100644
--- a/plugins/audiocd/rb-audiocd-plugin.c
+++ b/plugins/audiocd/rb-audiocd-plugin.c
@@ -127,14 +127,8 @@ rb_audiocd_plugin_playing_uri_changed_cb (RBShellPlayer *player,
static void
set_source_properties (GstElement *source, const char *uri, gboolean playback_mode)
{
- char *device = NULL;
- gulong track;
-
- if (parse_cdda_uri (uri, &device, &track) == FALSE)
- return;
-
- g_object_set (source, "device", device, "track", track, NULL);
- g_free (device);
+ g_return_if_fail (GST_IS_URI_HANDLER (source));
+ gst_uri_handler_set_uri (GST_URI_HANDLER (source), uri, NULL);
if (playback_mode) {
/* disable paranoia (if using cdparanoiasrc) and set read speed to 1 */
diff --git a/plugins/audiocd/rb-audiocd-source.c b/plugins/audiocd/rb-audiocd-source.c
index 3c4243b..2adba5c 100644
--- a/plugins/audiocd/rb-audiocd-source.c
+++ b/plugins/audiocd/rb-audiocd-source.c
@@ -602,7 +602,6 @@ submit_info_bar_response_cb (GtkInfoBar *info_bar, gint response_id, RBAudioCdSo
}
g_free (submit_url);
}
-#endif
clear_info_bar (source);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]