r3034 - trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src

abraxa at sita.openmoko.org abraxa at sita.openmoko.org
Mon Sep 24 12:42:57 CEST 2007


Author: abraxa
Date: 2007-09-24 12:42:52 +0200 (Mon, 24 Sep 2007)
New Revision: 3034

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/main.c
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.c
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.h
   trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/playback.c
Log:
Force playbin to use a specific sink again - pulsesink this time
Make gstreamer/PulseAudio's CPU usage drop to sane values by forcing bigger buffers and allowing higher latency
Remove trailing slash from default file browser path for the SD card



Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/main.c	2007-09-22 20:04:08 UTC (rev 3033)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/main.c	2007-09-24 10:42:52 UTC (rev 3034)
@@ -403,7 +403,7 @@
 	omp_session_init();
 	omp_config_init();
 	omp_window_create();
-	if (!omp_playback_init()) return EXIT_FAILURE;
+	omp_playback_init();
 	omp_playlist_init();
 	omp_window_create_pages();
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.c	2007-09-22 20:04:08 UTC (rev 3033)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.c	2007-09-24 10:42:52 UTC (rev 3034)
@@ -51,8 +51,9 @@
 //	FALSE,											// auto_scroll
 	0.0,												// equalizer_gain
 	{0,0,0,0,0,0,0,0,0,0,0},		// EQ bands
-
-TRUE												// show_numbers_in_pl
+	TRUE,												// show_numbers_in_pl
+	500000,											// pulsesink_buffer_time
+	100000											// pulsesink_latency_time
 };
 
 struct _omp_config *omp_config = NULL;			///< Global and persistent configuration data
@@ -162,6 +163,24 @@
 }
 
 /**
+ * Returns the value pulsesink's "buffer-time" property should be set to
+ */
+gulong
+omp_config_get_pulsesink_buffer_time()
+{
+	return omp_config->pulsesink_buffer_time;
+}
+
+/**
+ * Returns the value pulsesink's "latency-time" property should be set to
+ */
+gulong
+omp_config_get_pulsesink_latency_time()
+{
+	return omp_config->pulsesink_latency_time;
+}
+
+/**
  * Fills the session data with sane default values
  */
 void

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.h	2007-09-22 20:04:08 UTC (rev 3033)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/persistent.h	2007-09-24 10:42:52 UTC (rev 3034)
@@ -36,7 +36,7 @@
 #define OMP_EVENT_SESSION_FILE_CHOOSER_PATH_CHANGED "session_file_chooser_path_changed"
 
 // Default path to open in the file chooser
-#define OMP_DEFAULT_FILE_CHOOSER_PATH "/media/card/"
+#define OMP_DEFAULT_FILE_CHOOSER_PATH "/media/card"
 
 // What file to save/load session data to/from? File name is relative to user's home directory
 #define OMP_SESSION_FILE_NAME "/.openmoko-mediaplayer"
@@ -62,6 +62,8 @@
 	gdouble equalizer_gain;						///< Pre-amplification value before audio stream is fed to equalizer [0.0..1.0]
 	gdouble equalizer_bands[11];			///< The gains for each of the equalizer bands [-1.0..1.0]
 	gboolean show_numbers_in_pl;			///< Show numbers in playlist?
+	gulong pulsesink_buffer_time;			///< Value to set pulsesink's buffer-time property to
+	gulong pulsesink_latency_time;		///< Value to set pulsesink's latency-time property to
 };
 
 /// Session-persistent data
@@ -91,6 +93,8 @@
 guint omp_config_get_repeat_mode();
 
 guint omp_config_get_prev_track_treshold();
+gulong omp_config_get_pulsesink_buffer_time();
+gulong omp_config_get_pulsesink_latency_time();
 
 void omp_session_init();
 void omp_session_free();

Modified: trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/playback.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/playback.c	2007-09-22 20:04:08 UTC (rev 3033)
+++ trunk/src/target/OM-2007.2/applications/openmoko-mediaplayer2/src/playback.c	2007-09-24 10:42:52 UTC (rev 3034)
@@ -36,6 +36,9 @@
 /// Our ticket to the gstreamer world
 GstElement *omp_gst_playbin = NULL;
 
+/// gstreamer audio output element
+GstElement *omp_gst_audiosink = NULL;
+
 /// Handle of the UI-updating timeout
 guint omp_playback_ui_timeout = 0;
 
@@ -71,10 +74,7 @@
 	GstBus *bus;
 
 	// Bail if everything is already set up
-	if (omp_gst_playbin)
-	{
-		return TRUE;
-	}
+	if (omp_gst_playbin) return TRUE;
 
 	// Create the signals we'll emit
 	g_signal_new(OMP_EVENT_PLAYBACK_RESET, G_TYPE_OBJECT,
@@ -105,7 +105,17 @@
 		G_SIGNAL_RUN_FIRST, 0, 0, NULL, g_cclosure_marshal_VOID__STRING,
 		G_TYPE_NONE, 1, G_TYPE_STRING);
 
-	// Set up gstreamer pipe and bins
+	// Create audio sink for PulseAudio
+	omp_gst_audiosink = gst_element_factory_make("pulsesink", NULL);
+
+	if (!omp_gst_audiosink)
+	{
+		error_dialog(_("Error: gstreamer failed to create the PulseAudio sink.\nPlease make sure gstreamer and its modules are properly installed (esp. gst-plugin-pulse)."));
+
+		return FALSE;
+	}
+
+	// Set up gstreamer pipe
 	omp_gst_playbin = gst_element_factory_make("playbin", NULL);
 
 	if (!omp_gst_playbin)
@@ -115,6 +125,13 @@
 		return FALSE;
 	}
 
+	// Force playbin to use our own sink
+	g_object_set(G_OBJECT(omp_gst_playbin), "audio-sink", omp_gst_audiosink, NULL);
+
+	// Let's have gstreamer and PulseAudio meet embedded requirements
+	g_object_set(G_OBJECT(omp_gst_audiosink), "buffer-time", omp_config_get_pulsesink_buffer_time(), NULL);
+	g_object_set(G_OBJECT(omp_gst_audiosink), "latency-time", omp_config_get_pulsesink_latency_time(), NULL);
+
 	// Set up message hooks
 	bus = gst_pipeline_get_bus(GST_PIPELINE(omp_gst_playbin));
 
@@ -314,10 +331,7 @@
 	GstFormat format = GST_FORMAT_TIME;
 	gint64 position = 0;
 
-	if (!omp_gst_playbin)
-	{
-		return 0;
-	}
+	if (!omp_gst_playbin) return 0;
 
 	// Return 0 if function returns FALSE, position otherwise
 	return (gst_element_query_position(omp_gst_playbin, &format, &position)) ? (position/1000000) : 0;





More information about the commitlog mailing list