summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis de Bethencourt <luis@debethencourt.com>2011-05-17 13:14:11 +0200
committerLuis de Bethencourt <luis@debethencourt.com>2011-05-19 12:19:12 +0200
commit95e40b47688936123434087043822c0e98d11f46 (patch)
tree854206823cb4f95ce66e45b0903e749312c6ce83
parent22f28d2f59d07721488a6d8c3aebc3f0ee2ab001 (diff)
dlna: opening and playing media files
Method calls OpenUri, Play and Stop work in a very rudimentary way.
-rw-r--r--data/mpris.xml98
-rw-r--r--src/gst_engine.c31
-rw-r--r--src/gst_engine.h5
-rw-r--r--src/mpris.c19
-rw-r--r--src/mpris.h4
-rw-r--r--src/snappy.c21
6 files changed, 155 insertions, 23 deletions
diff --git a/data/mpris.xml b/data/mpris.xml
new file mode 100644
index 0000000..f80d932
--- /dev/null
+++ b/data/mpris.xml
@@ -0,0 +1,98 @@
+<node>
+ <interface name='org.mpris.MediaPlayer2'>
+ <method name='Raise'/>
+ <method name='Quit'/>
+ <property name='CanQuit' type='b' access='read'/>
+ <property name='CanRaise' type='b' access='read'/>
+ <property name='HasTrackList' type='b' access='read'/>
+ <property name='Identity' type='s' access='read'/>
+ <property name='DesktopEntry' type='s' access='read'/>
+ <property name='SupportedUriSchemes' type='as' access='read'/>
+ <property name='SupportedMimeTypes' type='as' access='read'/>
+ </interface>
+ <interface name='org.mpris.MediaPlayer2.Player'>
+ <method name='Next'/>
+ <method name='Previous'/>
+ <method name='Pause'/>
+ <method name='PlayPause'/>
+ <method name='Stop'/>
+ <method name='Play'/>
+ <method name='Seek'>
+ <arg direction='in' name='Offset' type='x'/>
+ </method>
+ <method name='SetPosition'>
+ <arg direction='in' name='TrackId' type='o'/>
+ <arg direction='in' name='Position' type='x'/>
+ </method>
+ <method name='OpenUri'>
+ <arg direction='in' name='Uri' type='s'/>
+ </method>
+ <signal name='Seeked'>
+ <arg name='Position' type='x'/>
+ </signal>
+ <property name='PlaybackStatus' type='s' access='read'/>
+ <property name='LoopStatus' type='s' access='readwrite'/>
+ <property name='Rate' type='d' access='readwrite'/>
+ <property name='Shuffle' type='b' access='readwrite'/>
+ <property name='Metadata' type='a{sv}' access='read'/>
+ <property name='Volume' type='d' access='readwrite'/>
+ <property name='Position' type='x' access='read'/>
+ <property name='MinimumRate' type='d' access='read'/>
+ <property name='MaximumRate' type='d' access='read'/>
+ <property name='CanGoNext' type='b' access='read'/>
+ <property name='CanGoPrevious' type='b' access='read'/>
+ <property name='CanPlay' type='b' access='read'/>
+ <property name='CanPause' type='b' access='read'/>
+ <property name='CanSeek' type='b' access='read'/>
+ <property name='CanControl' type='b' access='read'/>
+ </interface>
+ <interface name='org.mpris.MediaPlayer2.TrackList'>
+ <method name='GetTracksMetadata'>
+ <arg direction='in' name='TrackIds' type='ao'/>
+ <arg direction='out' name='Metadata' type='aa{sv}'/>
+ </method>
+ <method name='AddTrack'>
+ <arg direction='in' name='Uri' type='s'/>
+ <arg direction='in' name='AfterTrack' type='o'/>
+ <arg direction='in' name='SetAsCurrent' type='b'/>
+ </method>
+ <method name='RemoveTrack'>
+ <arg direction='in' name='TrackId' type='o'/>
+ </method>
+ <method name='GoTo'>
+ <arg direction='in' name='TrackId' type='o'/>
+ </method>
+ <signal name='TrackListReplaced'>
+ <arg name='Tracks' type='ao'/>
+ <arg name='CurrentTrack' type='o'/>
+ </signal>
+ <signal name='TrackAdded'>
+ <arg name='Metadata' type='a{sv}'/>
+ <arg name='AfterTrack' type='o'/>
+ </signal>
+ <signal name='TrackRemoved'>
+ <arg name='TrackId' type='o'/>
+ </signal>
+ <signal name='TrackMetadataChanged'>
+ <arg name='TrackId' type='o'/>
+ <arg name='Metadata' type='a{sv}'/>
+ </signal>
+ <property name='Tracks' type='ao' access='read'/>
+ <property name='CanEditTracks' type='b' access='read'/>
+ </interface>
+ <interface name='org.mpris.MediaPlayer2.Playlists'>
+ <method name='ActivatePlaylist'>
+ <arg direction='in' name='PlaylistId' type='o'/>
+ </method>
+ <method name='GetPlaylists'>
+ <arg direction='in' name='Index' type='u'/>
+ <arg direction='in' name='MaxCount' type='u'/>
+ <arg direction='in' name='Order' type='s'/>
+ <arg direction='in' name='ReverseOrder' type='b'/>
+ <arg direction='out' type='a(oss)'/>
+ </method>
+ <property name='PlaylistCount' type='u' access='read'/>
+ <property name='Orderings' type='as' access='read'/>
+ <property name='ActivePlaylist' type='(b(oss))' access='read'/>
+ </interface>
+</node>
diff --git a/src/gst_engine.c b/src/gst_engine.c
index 4771528..f31a4ae 100644
--- a/src/gst_engine.c
+++ b/src/gst_engine.c
@@ -400,6 +400,37 @@ engine_load_uri (GstEngine * engine, gchar * uri)
}
gboolean
+engine_open_uri (GstEngine * engine, gchar * uri)
+{
+ g_print ("opennning uriii! %s \n", uri);
+
+ g_object_set (G_OBJECT (engine->player), "uri", uri, NULL);
+ gst_element_set_state (engine->player, GST_STATE_READY);
+
+ return TRUE;
+}
+
+gboolean
+engine_play (GstEngine * engine)
+{
+ g_print ("Plaaayingg\n");
+
+ gst_element_set_state (engine->player, GST_STATE_PLAYING);
+
+ return TRUE;
+}
+
+gboolean
+engine_stop (GstEngine * engine)
+{
+ g_print ("Stopping\n");
+
+ gst_element_set_state (engine->player, GST_STATE_READY);
+
+ return TRUE;
+}
+
+gboolean
frame_stepping (GstEngine * engine, gboolean foward)
{
gboolean ok;
diff --git a/src/gst_engine.h b/src/gst_engine.h
index 5fb291e..8449799 100644
--- a/src/gst_engine.h
+++ b/src/gst_engine.h
@@ -23,6 +23,8 @@
#ifndef __GST_ENGINE_H__
#define __GST_ENGINE_H__
+#include <gst/gst.h>
+
G_BEGIN_DECLS
typedef struct _GstEngine GstEngine;
@@ -51,6 +53,9 @@ gboolean at_the_eos (GstEngine * engine);
gboolean bus_call (GstBus * bus, GstMessage * msg, gpointer data);
gboolean engine_init (GstEngine * engine, GstElement * sink);
gboolean engine_load_uri (GstEngine * engine, gchar * uri);
+gboolean engine_open_uri (GstEngine * engine, gchar * uri);
+gboolean engine_play (GstEngine * engine);
+gboolean engine_stop (GstEngine * engine);
gboolean frame_stepping (GstEngine * engine, gboolean foward);
gchar **get_recently_played ();
GstState get_state (GstEngine * engine);
diff --git a/src/mpris.c b/src/mpris.c
index a8ee94e..0559954 100644
--- a/src/mpris.c
+++ b/src/mpris.c
@@ -238,9 +238,9 @@ my_object_change_uri (SnappyMP * myobj, gchar * uri)
myobj->uri = uri;
g_print ("changing uri: %s\n", uri);
- g_object_notify (G_OBJECT (myobj), "uri");
- g_signal_emit (myobj, mediaplayer_signals[OPEN_URI], 0);
g_object_set (G_OBJECT (myobj), "uri", uri, NULL);
+
+ engine_open_uri (myobj->engine, uri);
}
static void
@@ -292,30 +292,21 @@ handle_method_call (GDBusConnection * connection,
if (g_strcmp0 (method_name, "OpenUri") == 0) {
gchar *uri;
- g_print ("name: %s\n", myobj->name);
-
g_variant_get (parameters, "(s)", &uri);
my_object_change_uri (myobj, uri);
g_dbus_method_invocation_return_value (invocation, NULL);
} else if (g_strcmp0 (method_name, "Next") == 0) {
- g_print ("next\n");
/// ToDo: next track call
- g_print ("name: %s\n", myobj->name);
-
handle_result (invocation, ret, error);
} else if (g_strcmp0 (method_name, "Play") == 0) {
- // send play signal
-
- g_print ("name: %s\n", myobj->name);
+ engine_play (myobj->engine);
handle_result (invocation, ret, error);
} else if (g_strcmp0 (method_name, "Stop") == 0) {
- // send stop signal
-
- g_print ("name: %s\n", myobj->name);
+ engine_stop (myobj->engine);
handle_result (invocation, ret, error);
}
@@ -332,7 +323,7 @@ handle_get_property (GDBusConnection * connection,
GVariant *ret;
SnappyMP *myobj = user_data;
- g_print ("handle_get_property: %s\n", property_name);
+ // g_print ("handle_get_property: %s\n", property_name);
ret = NULL;
if (g_strcmp0 (property_name, "Name") == 0) {
diff --git a/src/mpris.h b/src/mpris.h
index 98f19b9..dd290b7 100644
--- a/src/mpris.h
+++ b/src/mpris.h
@@ -26,6 +26,8 @@
#include <gio/gio.h>
#include <glib-object.h>
+#include "gst_engine.h"
+
G_BEGIN_DECLS
#define MPRIS_BUS_NAME_PREFIX "org.mpris.MediaPlayer2"
@@ -70,6 +72,8 @@ struct _SnappyMP
gint64 last_elapsed;
gchar *uri;
+
+ GstEngine *engine;
};
struct _SnappyMPClass
diff --git a/src/snappy.c b/src/snappy.c
index 39251f7..c110f7b 100644
--- a/src/snappy.c
+++ b/src/snappy.c
@@ -1,8 +1,8 @@
/*
- * snappy - 0.1
+ * snappy - 0.2 beta
*
* Copyright (C) 2011 Collabora Multimedia Ltd.
- * <luis.debethencourt@collabora.co.uk>
+ * <luis.debethencourt@collabora.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@
* USA
*/
-#define VERSION "0.1"
+#define VERSION "0.2 beta"
#include <stdlib.h>
#include <unistd.h>
@@ -29,8 +29,8 @@
#include <clutter-gst/clutter-gst.h>
#include "user_interface.h"
-#include "gst_engine.h"
#include "mpris.h"
+#include "gst_engine.h"
#include "utils.h"
void
@@ -160,14 +160,16 @@ main (int argc, char *argv[])
config_load ();
// User Interface
- ui = g_new0 (UserInterface, 1);
+ ui = g_new (UserInterface, 1);
ui->fullscreen = fullscreen;
video_texture = clutter_texture_new ();
clutter_gst_init (&argc, &argv);
// Gstreamer
- engine = g_new0 (GstEngine, 1);
+ engine = g_new (GstEngine, 1);
+ engine->media_width = -1;
+ engine->media_height = -1;
ui->engine = engine;
sink = clutter_gst_video_sink_new (CLUTTER_TEXTURE (video_texture));
@@ -192,10 +194,11 @@ main (int argc, char *argv[])
change_state (engine, "Paused");
change_state (engine, "Playing");
- mp_obj = g_new0 (SnappyMP, 1);
+ mp_obj = g_new (SnappyMP, 1);
+ mp_obj->engine = engine;
load_mpris (mp_obj);
- g_signal_connect (mp_obj, "open-uri",
- G_CALLBACK (open_uri_callback), engine);
+ // g_signal_connect (mp_obj, "open-uri",
+ // G_CALLBACK (open_uri_callback), engine);
clutter_main ();