r2612 - in trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer: images src

abraxa at sita.openmoko.org abraxa at sita.openmoko.org
Fri Aug 3 02:12:12 CEST 2007


Author: abraxa
Date: 2007-08-03 02:12:09 +0200 (Fri, 03 Aug 2007)
New Revision: 2612

Removed:
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-ffwd.png
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-nexttrack.png
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-pause.png
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-play.png
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-prevtrack.png
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-rwd.png
Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/Makefile.am
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/main.c
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/mainwin.c
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.c
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.h
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playlist.c
Log:
Set proper application icon
Use openmoko theme stock icons for player buttons
Improve playlist/playback functionality



Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/Makefile.am	2007-08-03 00:05:40 UTC (rev 2611)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/Makefile.am	2007-08-03 00:12:09 UTC (rev 2612)
@@ -6,12 +6,6 @@
 	btn-white-p.png \
 	ico-track.png \
 	ico-time.png \
-	ico-pause.png \
-	ico-play.png \
-	ico-ffwd.png \
-	ico-rwd.png \
-	ico-nexttrack.png \
-	ico-prevtrack.png \
 	ico-repeat.png \
 	ico-shuffle.png \
 	ico-list.png \

Deleted: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-ffwd.png
===================================================================
(Binary files differ)

Deleted: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-nexttrack.png
===================================================================
(Binary files differ)

Deleted: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-pause.png
===================================================================
(Binary files differ)

Deleted: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-play.png
===================================================================
(Binary files differ)

Deleted: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-prevtrack.png
===================================================================
(Binary files differ)

Deleted: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/images/ico-rwd.png
===================================================================
(Binary files differ)

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/main.c	2007-08-03 00:05:40 UTC (rev 2611)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/main.c	2007-08-03 00:12:09 UTC (rev 2612)
@@ -81,16 +81,6 @@
 
 
 /*
-static void
-OMP_set_default_icon(void)
-{
-    //GdkPixbuf *icon;
-
-    //icon = gdk_pixbuf_new_from_xpm_data((const gchar **) OMP_player_icon);
-    //gtk_window_set_default_icon(icon);
-    //g_object_unref(icon);
-}
-
 void
 init_dbus()
 {
@@ -366,7 +356,7 @@
 	ui_image_path = g_build_filename(DATA_DIR, RELATIVE_UI_IMAGE_PATH, NULL);
 
 	g_set_application_name(_("Media Player"));
-	gtk_window_set_default_icon_name("openmoko-mediaplayer");
+	gtk_window_set_default_icon_name("openmoko-soundandvideo");
 
 	// Set up signal handlers
 	signal(SIGSEGV, handler_sigsegfault);

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/mainwin.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/mainwin.c	2007-08-03 00:05:40 UTC (rev 2611)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/mainwin.c	2007-08-03 00:12:09 UTC (rev 2612)
@@ -265,12 +265,12 @@
 
 /**
  * Creates a button and returns it
+ * @param image_name The name of the image resource to use, not a file name
  */
 GtkWidget*
 omp_button_create(gchar *image_name, GCallback callback)
 {
 	GtkWidget *image, *button;
-	gchar *image_file_name;
 
 	button = gtk_button_new();
 	gtk_widget_set_size_request(GTK_WIDGET(button), 66, 66);
@@ -280,10 +280,9 @@
 
 	g_object_set(G_OBJECT(button), "xalign", (gfloat)0.37, "yalign", (gfloat)0.37, NULL);
 
-	image_file_name = g_build_path("/", ui_image_path, image_name, NULL);
-	image = gtk_image_new_from_file(image_file_name);
-	g_free(image_file_name);
+	image = gtk_image_new_from_icon_name(image_name, 36);
 	gtk_container_add(GTK_CONTAINER(button), GTK_WIDGET(image));
+	g_object_unref(image);
 
 	return button;
 }
@@ -479,27 +478,27 @@
 	gtk_box_set_homogeneous(GTK_BOX(controls_hbox), TRUE);
 
 	// Previous Track button
-	button = omp_button_create("ico-prevtrack.png", G_CALLBACK(omp_playlist_set_prev_track));
+	button = omp_button_create("gtk-media-previous-ltr", G_CALLBACK(omp_playlist_set_prev_track));
 	gtk_box_pack_start(GTK_BOX(controls_hbox), button, TRUE, TRUE, 0);
 	gtk_box_set_child_packing(GTK_BOX(controls_hbox), GTK_WIDGET(button), FALSE, FALSE, 0, GTK_PACK_START);
 
 	// Rewind button
-	button = omp_button_create("ico-rwd.png", G_CALLBACK(omp_shuffle_button_callback));
+	button = omp_button_create("gtk-media-rewind-ltr", NULL);
 	gtk_box_pack_start(GTK_BOX(controls_hbox), button, TRUE, TRUE, 0);
 	gtk_box_set_child_packing(GTK_BOX(controls_hbox), GTK_WIDGET(button), FALSE, FALSE, 0, GTK_PACK_START);
 
 	// Play/Pause button
-	button = omp_button_create("ico-play.png", G_CALLBACK(omp_main_button_play_pause_callback));
+	button = omp_button_create("gtk-media-play-ltr", G_CALLBACK(omp_main_button_play_pause_callback));
 	gtk_box_pack_start(GTK_BOX(controls_hbox), button, TRUE, TRUE, 0);
 	gtk_box_set_child_packing(GTK_BOX(controls_hbox), GTK_WIDGET(button), FALSE, FALSE, 0, GTK_PACK_START);
 
 	// Fast Forward button
-	button = omp_button_create("ico-ffwd.png", G_CALLBACK(omp_shuffle_button_callback));
+	button = omp_button_create("gtk-media-forward-ltr", NULL);
 	gtk_box_pack_start(GTK_BOX(controls_hbox), button, TRUE, TRUE, 0);
 	gtk_box_set_child_packing(GTK_BOX(controls_hbox), GTK_WIDGET(button), FALSE, FALSE, 0, GTK_PACK_START);
 
 	// Next Track button
-	button = omp_button_create("ico-nexttrack.png", G_CALLBACK(omp_playlist_set_next_track));
+	button = omp_button_create("gtk-media-next-ltr", G_CALLBACK(omp_playlist_set_next_track));
 	gtk_box_pack_start(GTK_BOX(controls_hbox), button, TRUE, TRUE, 0);
 	gtk_box_set_child_packing(GTK_BOX(controls_hbox), GTK_WIDGET(button), FALSE, FALSE, 0, GTK_PACK_START);
 }
@@ -542,7 +541,8 @@
 
 /**
  * Attaches the event handlers to the appropriate signals
- * @note Can't be done in omp_main_window_create() because the signals need to be created first by the subsystems
+ * @note Can't be done in omp_main_window_create() because the signals need to be created
+ * @note first by the subsystems which in turn need the main window handle for creating them
  */
 void
 omp_main_connect_signals()

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.c	2007-08-03 00:05:40 UTC (rev 2611)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.c	2007-08-03 00:12:09 UTC (rev 2612)
@@ -94,8 +94,8 @@
 	// DEBUG
 	g_printf("Loading %s\n", uri);
 
+	gst_element_set_state(omp_gst_playbin, GST_STATE_NULL);
 	g_object_set(G_OBJECT(omp_gst_playbin), "uri", uri, NULL);
-
 	gst_element_set_state(omp_gst_playbin, GST_STATE_PAUSED);
 }
 
@@ -112,6 +112,29 @@
 }
 
 /**
+ * Returns the current state the playback engine is in
+ */
+gint
+omp_playback_get_state()
+{
+	GstState state;
+	GstSystemClock *system_clock;
+
+	// Poll state with an immediate timeout
+	system_clock = gst_system_clock_obtain();
+	gst_element_get_state(GST_OBJECT(omp_gst_playbin), &state, NULL, gst_clock_get_time(system_clock));
+	gst_object_unref(system_clock);
+
+	// The NULL element state is no different from READY for more abstract layers
+	if (state == GST_STATE_NULL)
+	{
+		state = GST_STATE_READY;
+	}
+
+	return (gint)state;
+}
+
+/**
  * Handles gstreamer's end-of-stream notification
  */
 static gboolean
@@ -120,6 +143,7 @@
 	// DEBUG
 	g_printf("End of stream reached.\n");
 
+	gst_element_set_state(omp_gst_playbin, GST_STATE_NULL);
 	g_signal_emit_by_name(G_OBJECT(omp_main_window), OMP_EVENT_PLAYBACK_EOS);
 
 	return TRUE;

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.h	2007-08-03 00:05:40 UTC (rev 2611)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playback.h	2007-08-03 00:12:09 UTC (rev 2612)
@@ -31,12 +31,19 @@
 
 #define OMP_EVENT_PLAYBACK_EOS "playback_end_of_stream"
 
+// Player states masking the gstreamer states so we can be more abstract
+#define OMP_PLAYBACK_STATE_READY GST_STATE_READY
+#define OMP_PLAYBACK_STATE_PAUSED GST_STATE_PAUSED
+#define OMP_PLAYBACK_STATE_PLAYING GST_STATE_PLAYING
+
+
 void omp_playback_init();
 void omp_playback_free();
 
 gboolean omp_playback_load_track_from_uri(gchar *uri);
 
 void omp_playback_play();
+gint omp_playback_get_state();
 
 static gboolean omp_gst_message_eos(GstBus *bus, GstMessage *message, gpointer data);
 static gboolean omp_gst_message_error(GstBus *bus, GstMessage *message, gpointer data);

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playlist.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playlist.c	2007-08-03 00:05:40 UTC (rev 2611)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer/src/playlist.c	2007-08-03 00:12:09 UTC (rev 2612)
@@ -127,6 +127,11 @@
 	// DEBUG
 	g_printf("Setting current track to #%d\n", playlist_pos);
 
+	if (!omp_playlist)
+	{
+		return FALSE;
+	}
+
 	// Walk through the playlist and see if the new position is valid
 	for (track=omp_playlist->tracks; track!=NULL; track=track->next, track_num++)
 	{
@@ -211,11 +216,13 @@
  * Moves one track forward in playlist
  * @return TRUE if a new track is to be played, FALSE if current track didn't change
  * @todo Shuffle mode, repeat
+ * @todo Will cause an infinite loop if playlist only consists of tracks that can't be played and player is in shuffle mode
  */
 gboolean
 omp_playlist_set_next_track()
 {
 	struct omp_track_history_entry *history_entry;
+	gboolean was_playing;
 	gboolean is_new_track = FALSE;
 
 	if (!omp_playlist_current_track)
@@ -223,6 +230,11 @@
 		return;
 	}
 
+	// Get player state so we can continue playback if necessary
+	was_playing = (omp_playback_get_state() == OMP_PLAYBACK_STATE_PLAYING);
+
+try_again:
+
 	// Prepare the history entry - if we don't need it we'll just free it again
 	history_entry = g_new(struct omp_track_history_entry, 1);
 	history_entry->track = omp_playlist_current_track;
@@ -246,6 +258,18 @@
 		// Emit signal to update UI and the like
 		g_signal_emit_by_name(G_OBJECT(omp_main_window), OMP_EVENT_NEXT_TRACK);
 
+		// Load track and start playing if needed
+		if (omp_playlist_load_current_track())
+		{
+			if (was_playing) omp_playback_play();
+
+		} else {
+
+			// Uh-oh, track failed to load - let's find another one, shall we?
+			is_new_track = FALSE;
+			goto try_again;
+		}
+
 	} else {
 
 		// We're not making use of the history entry as the track didn't change
@@ -262,10 +286,8 @@
 {
 	if (omp_playlist_set_next_track())
 	{
-		if (omp_playlist_load_current_track())
-		{
-//			omp_playback_play();
-		}
+		// If we received an eos event we were obviously playing so let's continue doing so
+		omp_playback_play();
 	}
 }
 
@@ -295,8 +317,7 @@
 
 /**
  * Tries to resolve the current track and feed it to gstreamer
- * @return FALSE if current track and all remaining tracks in playlist failed to load, TRUE otherwise
- * @todo Will cause an infinite loop/stack overflow if playlist only consists of tracks that can't be played and player is in shuffle mode
+ * @return FALSE if current track failed to load, TRUE otherwise
  */
 gboolean
 omp_playlist_load_current_track()
@@ -307,7 +328,7 @@
 	// Make sure we got something to handle
 	if (!omp_playlist_current_track)
 	{
-		return;
+		return FALSE;
 	}
 
 	// Resolve playlist entry to make it available for playback
@@ -318,26 +339,9 @@
 	{
 		track_loaded = omp_playback_load_track_from_uri(track_uri);
 		g_free(track_uri);
-		return TRUE;
-
-	} else {
-
-		track_loaded = FALSE;
+		return track_loaded;
 	}
 
-	if (!track_loaded)
-	{
-		// Track not available for playback - move on if possible by trying to
-		// play the next track until we succeed or reach the end of the playlist
-		while (omp_playlist_set_next_track())
-		{
-			if (omp_playlist_load_current_track())
-			{
-				return TRUE;
-			}
-		}
-	}
-
 	return FALSE;
 }
 





More information about the commitlog mailing list