Imported mafw-gst-renderer_0.1.2009.47-1+0m5
[mafwsubrenderer] / libmafw-gst-renderer / mafw-gst-renderer.h
1 /*
2  * This file is a part of MAFW
3  *
4  * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved.
5  *
6  * Contact: Visa Smolander <visa.smolander@nokia.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public License
10  * as published by the Free Software Foundation; version 2.1 of
11  * the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
21  * 02110-1301 USA
22  *
23  */
24 #ifndef MAFW_GST_RENDERER_H
25 #define MAFW_GST_RENDERER_H
26
27 #include <glib-object.h>
28 #include <libmafw/mafw-renderer.h>
29 #include <libmafw/mafw-registry.h>
30 #include <gst/gst.h>
31 #include <gst/pbutils/pbutils.h>
32 #include <libhal.h>
33 #include <gconf/gconf-client.h>
34
35 #include "mafw-gst-renderer-utils.h"
36 #include "mafw-gst-renderer-worker.h"
37 #include "mafw-playlist-iterator.h"
38 /* Solving the cyclic dependencies */
39 typedef struct _MafwGstRenderer MafwGstRenderer;
40 typedef struct _MafwGstRendererClass MafwGstRendererClass;
41 #include "mafw-gst-renderer-state.h"
42
43 #ifdef HAVE_CONIC
44 #include <conicconnection.h>
45 #endif
46
47 typedef enum {
48         MAFW_GST_RENDERER_ERROR_PLUGIN_NOT_FOUND,
49         MAFW_GST_RENDERER_ERROR_VIDEO_CODEC_NOT_SUPPORTED,
50         MAFW_GST_RENDERER_ERROR_AUDIO_CODEC_NOT_SUPPORTED,
51 } MafwGstRendererError;
52
53 typedef enum {
54         MAFW_GST_RENDERER_MODE_PLAYLIST,
55         MAFW_GST_RENDERER_MODE_STANDALONE,
56 } MafwGstRendererPlaybackMode;
57
58 typedef enum {
59         MAFW_GST_RENDERER_MOVE_RESULT_OK,
60         MAFW_GST_RENDERER_MOVE_RESULT_NO_PLAYLIST,
61         MAFW_GST_RENDERER_MOVE_RESULT_PLAYLIST_LIMIT,
62         MAFW_GST_RENDERER_MOVE_RESULT_ERROR,
63 } MafwGstRendererMovementResult;
64
65 typedef enum {
66         MAFW_GST_RENDERER_MOVE_TYPE_INDEX,
67         MAFW_GST_RENDERER_MOVE_TYPE_PREV,
68         MAFW_GST_RENDERER_MOVE_TYPE_NEXT,
69 } MafwGstRendererMovementType;
70
71 #ifdef HAVE_GDKPIXBUF
72 #define MAFW_PROPERTY_GST_RENDERER_CURRENT_FRAME_ON_PAUSE       \
73         "current-frame-on-pause"
74 #endif
75
76 #define MAFW_PROPERTY_GST_RENDERER_TV_CONNECTED "tv-connected"
77
78 /*----------------------------------------------------------------------------
79   GObject type conversion macros
80   ----------------------------------------------------------------------------*/
81
82 #define MAFW_TYPE_GST_RENDERER                  \
83         (mafw_gst_renderer_get_type())
84 #define MAFW_GST_RENDERER(obj)                                          \
85         (G_TYPE_CHECK_INSTANCE_CAST((obj), MAFW_TYPE_GST_RENDERER, MafwGstRenderer))
86 #define MAFW_IS_GST_RENDERER(obj)                                       \
87         (G_TYPE_CHECK_INSTANCE_TYPE((obj), MAFW_TYPE_GST_RENDERER))
88 #define MAFW_GST_RENDERER_CLASS(klass)                                  \
89         (G_TYPE_CHECK_CLASS_CAST((klass), MAFW_TYPE_GST_RENDERER, MafwGstRenderer))
90 #define MAFW_GST_RENDERER_GET_CLASS(obj)                                \
91         (G_TYPE_INSTANCE_GET_CLASS((obj), MAFW_TYPE_GST_RENDERER,       \
92                                    MafwGstRendererClass))
93 #define MAFW_IS_GST_RENDERER_CLASS(klass)                               \
94         (G_TYPE_CHECK_CLASS_TYPE((klass), MAFW_TYPE_GST_RENDERER))
95
96 #define MAFW_GST_RENDERER_ERROR (mafw_gst_renderer_error_quark ())
97
98 /* Gst renderer plugin name for the plugin descriptor */
99 #define MAFW_GST_RENDERER_PLUGIN_NAME "Mafw-Gst-Renderer-Plugin"
100 /* Gst renderer name */
101 #define MAFW_GST_RENDERER_NAME "Mafw-Gst-Renderer"
102 /* Gst renderer UUID */
103 #define MAFW_GST_RENDERER_UUID "gstrenderer"
104
105 /*----------------------------------------------------------------------------
106   Type definitions
107   ----------------------------------------------------------------------------*/
108
109 typedef struct {
110         gchar *object_id;
111         gchar *uri;
112         gchar *title;
113         gchar *artist;
114         gchar *album;
115
116         gint duration;
117         gint position;
118
119         /* Seekability coming from source */
120         SeekabilityType seekability;
121 } MafwGstRendererMedia;
122
123 struct _MafwGstRendererClass {
124         MafwRendererClass parent;
125 };
126
127 /*
128  * media:             Current media details
129  * worker:            Worker
130  * registry:          The registry that owns this renderer
131  * media_timer:      Stream timer data
132  * current_state:     The renderer's current state
133  * playlist:          The renderer's playlist
134  * play_index:        A playlist index that is currently playing
135  * seek_pending:      Seek is pending or ongoing
136  * seek_type_pending: Type of the pending seek
137  * seeking_to:        The position of pending seek (milliseconds)
138  * is_stream:         is the URI a stream?
139  * play_failed_count: The number of unably played items from the playlist.
140  * playback_mode:     Playback mode
141  * resume_playlist:   Do we want to resume playlist playback when play_object
142  *                    is finished
143  * states:            State array
144  * error_policy:      error policy
145  * tv_connected:      if TV-out cable is connected
146  */
147 struct _MafwGstRenderer{
148         MafwRenderer parent;
149
150         MafwGstRendererMedia *media;
151         MafwGstRendererWorker *worker;
152         MafwRegistry *registry;
153         LibHalContext *hal_ctx;
154         MafwPlayState current_state;
155         MafwPlaylist *playlist;
156         MafwPlaylistIterator *iterator;
157         gboolean seek_pending;
158         GstSeekType seek_type_pending;
159         gint seeking_to;
160         gboolean is_stream;
161         gint update_playcount_id;
162         guint play_failed_count;
163
164         MafwGstRendererPlaybackMode playback_mode;
165         gboolean resume_playlist;
166         MafwGstRendererState **states;
167         MafwRendererErrorPolicy error_policy;
168         gboolean tv_connected;
169
170 #ifdef HAVE_CONIC
171         gboolean connected;
172         ConIcConnection *connection;
173 #endif
174         GConfClient *gconf_client;
175 };
176
177 typedef struct {
178         MafwGstRenderer *renderer;
179         GError *error;
180 } MafwGstRendererErrorClosure;
181
182 G_BEGIN_DECLS
183
184 GType mafw_gst_renderer_get_type(void);
185 GObject *mafw_gst_renderer_new(MafwRegistry *registry);
186 GQuark mafw_gst_renderer_error_quark(void);
187
188 /*----------------------------------------------------------------------------
189   Playback
190   ----------------------------------------------------------------------------*/
191
192 void mafw_gst_renderer_play(MafwRenderer *self, MafwRendererPlaybackCB callback,
193                             gpointer user_data);
194 void mafw_gst_renderer_play_object(MafwRenderer *self, const gchar *object_id,
195                                    MafwRendererPlaybackCB callback,
196                                    gpointer user_data);
197 void mafw_gst_renderer_stop(MafwRenderer *self, MafwRendererPlaybackCB callback,
198                             gpointer user_data);
199 void mafw_gst_renderer_pause(MafwRenderer *self, MafwRendererPlaybackCB callback,
200                              gpointer user_data);
201 void mafw_gst_renderer_resume(MafwRenderer *self, MafwRendererPlaybackCB callback,
202                               gpointer user_data);
203
204 /*----------------------------------------------------------------------------
205   Status
206   ----------------------------------------------------------------------------*/
207
208 void mafw_gst_renderer_get_status(MafwRenderer *self, MafwRendererStatusCB callback,
209                                   gpointer user_data);
210
211 /*----------------------------------------------------------------------------
212   Set Media
213   ----------------------------------------------------------------------------*/
214
215 void mafw_gst_renderer_set_object(MafwGstRenderer *self, const gchar *object_id);
216 void mafw_gst_renderer_clear_media(MafwGstRenderer *self);
217
218 /*----------------------------------------------------------------------------
219   Metadata
220   ----------------------------------------------------------------------------*/
221
222 void mafw_gst_renderer_get_metadata(MafwGstRenderer* self, const gchar* objectid,
223                                     GError **error);
224 gboolean mafw_gst_renderer_update_stats(gpointer data);
225
226 /*----------------------------------------------------------------------------
227   Playlist
228   ----------------------------------------------------------------------------*/
229
230 gboolean mafw_gst_renderer_assign_playlist(MafwRenderer *self,
231                                            MafwPlaylist *playlist,
232                                            GError **error);
233 void mafw_gst_renderer_next(MafwRenderer *self, MafwRendererPlaybackCB callback,
234                             gpointer user_data);
235 void mafw_gst_renderer_previous(MafwRenderer *self, MafwRendererPlaybackCB callback,
236                                 gpointer user_data);
237 void mafw_gst_renderer_goto_index(MafwRenderer *self, guint index,
238                                   MafwRendererPlaybackCB callback,
239                                   gpointer user_data);
240 MafwGstRendererMovementResult mafw_gst_renderer_move(MafwGstRenderer *renderer,
241                                                      MafwGstRendererMovementType type,
242                                                      guint index,
243                                                      GError **error);
244
245 /*----------------------------------------------------------------------------
246   Set media
247   ----------------------------------------------------------------------------*/
248
249 void mafw_gst_renderer_set_media_playlist(MafwGstRenderer* self);
250
251 /*----------------------------------------------------------------------------
252   Position
253   ----------------------------------------------------------------------------*/
254
255 void mafw_gst_renderer_set_position(MafwRenderer *self,
256                                     MafwRendererSeekMode mode, gint seconds,
257                                     MafwRendererPositionCB callback,
258                                     gpointer user_data);
259 void mafw_gst_renderer_get_position(MafwRenderer *self, MafwRendererPositionCB callback,
260                                     gpointer user_data);
261
262 /*----------------------------------------------------------------------------
263   Metadata
264   ----------------------------------------------------------------------------*/
265
266 void mafw_gst_renderer_get_current_metadata(MafwRenderer *self,
267                                             MafwRendererMetadataResultCB callback,
268                                             gpointer user_data);
269
270 /*----------------------------------------------------------------------------
271   Local API
272   ----------------------------------------------------------------------------*/
273
274 void mafw_gst_renderer_set_state(MafwGstRenderer *self, MafwPlayState state);
275
276 gboolean mafw_gst_renderer_manage_error_idle(gpointer data);
277
278 void mafw_gst_renderer_manage_error(MafwGstRenderer *self, const GError *error);
279
280 void mafw_gst_renderer_set_playback_mode(MafwGstRenderer *self,
281                                          MafwGstRendererPlaybackMode mode);
282
283 MafwGstRendererPlaybackMode mafw_gst_renderer_get_playback_mode(
284         MafwGstRenderer *self);
285
286 void mafw_gst_renderer_update_source_duration(MafwGstRenderer *renderer,
287                                               gint duration);
288
289 G_END_DECLS
290
291 #endif
292
293 /* vi: set noexpandtab ts=8 sw=8 cino=t0,(0: */