+if util.platform == 'maemo':
+ class OssoPlayer(_Player):
+ """
+ A player which uses osso-media-player for playback (Maemo-specific)
+ """
+
+ SERVICE_NAME = "com.nokia.osso_media_server"
+ OBJECT_PATH = "/com/nokia/osso_media_server"
+ AUDIO_INTERFACE_NAME = "com.nokia.osso_media_server.music"
+
+ def __init__(self):
+ self._on_eos = lambda: self.stop()
+ self._state = 'none'
+ self._audio = self._init_dbus()
+ self._init_signals()
+
+ def play_url(self, filetype, uri):
+ self._audio.play_media(uri)
+
+ def playing(self):
+ return self._state == 'playing'
+
+ def play_pause_toggle(self):
+ self.pause() if self.playing() else self.play()
+
+ def play(self):
+ self._audio.play()
+
+ def pause(self):
+ if self.playing():
+ self._audio.pause()
+
+ def stop(self):
+ self._audio.stop()
+
+ def set_eos_callback(self, cb):
+ self._on_eos = cb
+
+
+ def _init_dbus(self):
+ session_bus = dbus.SessionBus()
+ oms_object = session_bus.get_object(self.SERVICE_NAME,
+ self.OBJECT_PATH,
+ introspect = False,
+ follow_name_owner_changes = True)
+ return dbus.Interface(oms_object, self.AUDIO_INTERFACE_NAME)
+
+ def _init_signals(self):
+ error_signals = {
+ "no_media_selected": "No media selected",
+ "file_not_found": "File not found",
+ "type_not_found": "Type not found",
+ "unsupported_type": "Unsupported type",
+ "gstreamer": "GStreamer Error",
+ "dsp": "DSP Error",
+ "device_unavailable": "Device Unavailable",
+ "corrupted_file": "Corrupted File",
+ "out_of_memory": "Out of Memory",
+ "audio_codec_not_supported": "Audio codec not supported"
+ }
+
+ # Connect status signals
+ self._audio.connect_to_signal( "state_changed",
+ self._on_state_changed )
+ self._audio.connect_to_signal( "end_of_stream",
+ lambda x: self._call_eos() )
+
+ # Connect error signals
+ for error, msg in error_signals.iteritems():
+ self._audio.connect_to_signal(error, lambda *x: self._error(msg))
+
+ def _error(self, msg):
+ log.error(msg)
+
+ def _call_eos(self):
+ self._on_eos()
+
+ def _on_state_changed(self, state):
+ states = ("playing", "paused", "stopped")
+ self.__state = state if state in states else 'none'
+
+# PlayerBackend = OssoPlayer
+#else:
+PlayerBackend = GStreamer
+