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