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