2 * This file is a part of MAFW
4 * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved.
6 * Contact: Visa Smolander <visa.smolander@nokia.com>
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.
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.
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
24 #ifndef MAFW_GST_RENDERER_H
25 #define MAFW_GST_RENDERER_H
27 #include <glib-object.h>
28 #include <libmafw/mafw-renderer.h>
29 #include <libmafw/mafw-registry.h>
31 #include <gst/pbutils/pbutils.h>
33 #include <gconf/gconf-client.h>
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"
44 #include <conicconnection.h>
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;
54 MAFW_GST_RENDERER_MODE_PLAYLIST,
55 MAFW_GST_RENDERER_MODE_STANDALONE,
56 } MafwGstRendererPlaybackMode;
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;
66 MAFW_GST_RENDERER_MOVE_TYPE_INDEX,
67 MAFW_GST_RENDERER_MOVE_TYPE_PREV,
68 MAFW_GST_RENDERER_MOVE_TYPE_NEXT,
69 } MafwGstRendererMovementType;
72 #define MAFW_PROPERTY_GST_RENDERER_CURRENT_FRAME_ON_PAUSE \
73 "current-frame-on-pause"
76 #define MAFW_PROPERTY_GST_RENDERER_TV_CONNECTED "tv-connected"
78 /*----------------------------------------------------------------------------
79 GObject type conversion macros
80 ----------------------------------------------------------------------------*/
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))
96 #define MAFW_GST_RENDERER_ERROR (mafw_gst_renderer_error_quark ())
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"
105 /*----------------------------------------------------------------------------
107 ----------------------------------------------------------------------------*/
119 /* Seekability coming from source */
120 SeekabilityType seekability;
121 } MafwGstRendererMedia;
123 struct _MafwGstRendererClass {
124 MafwRendererClass parent;
128 * media: Current media details
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
143 * states: State array
144 * error_policy: error policy
145 * tv_connected: if TV-out cable is connected
147 struct _MafwGstRenderer{
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;
161 gint update_playcount_id;
162 guint play_failed_count;
164 MafwGstRendererPlaybackMode playback_mode;
165 gboolean resume_playlist;
166 MafwGstRendererState **states;
167 MafwRendererErrorPolicy error_policy;
168 gboolean tv_connected;
172 ConIcConnection *connection;
174 GConfClient *gconf_client;
178 MafwGstRenderer *renderer;
180 } MafwGstRendererErrorClosure;
184 GType mafw_gst_renderer_get_type(void);
185 GObject *mafw_gst_renderer_new(MafwRegistry *registry);
186 GQuark mafw_gst_renderer_error_quark(void);
188 /*----------------------------------------------------------------------------
190 ----------------------------------------------------------------------------*/
192 void mafw_gst_renderer_play(MafwRenderer *self, MafwRendererPlaybackCB callback,
194 void mafw_gst_renderer_play_object(MafwRenderer *self, const gchar *object_id,
195 MafwRendererPlaybackCB callback,
197 void mafw_gst_renderer_stop(MafwRenderer *self, MafwRendererPlaybackCB callback,
199 void mafw_gst_renderer_pause(MafwRenderer *self, MafwRendererPlaybackCB callback,
201 void mafw_gst_renderer_resume(MafwRenderer *self, MafwRendererPlaybackCB callback,
204 /*----------------------------------------------------------------------------
206 ----------------------------------------------------------------------------*/
208 void mafw_gst_renderer_get_status(MafwRenderer *self, MafwRendererStatusCB callback,
211 /*----------------------------------------------------------------------------
213 ----------------------------------------------------------------------------*/
215 void mafw_gst_renderer_set_object(MafwGstRenderer *self, const gchar *object_id);
216 void mafw_gst_renderer_clear_media(MafwGstRenderer *self);
218 /*----------------------------------------------------------------------------
220 ----------------------------------------------------------------------------*/
222 void mafw_gst_renderer_get_metadata(MafwGstRenderer* self, const gchar* objectid,
224 gboolean mafw_gst_renderer_update_stats(gpointer data);
226 /*----------------------------------------------------------------------------
228 ----------------------------------------------------------------------------*/
230 gboolean mafw_gst_renderer_assign_playlist(MafwRenderer *self,
231 MafwPlaylist *playlist,
233 void mafw_gst_renderer_next(MafwRenderer *self, MafwRendererPlaybackCB callback,
235 void mafw_gst_renderer_previous(MafwRenderer *self, MafwRendererPlaybackCB callback,
237 void mafw_gst_renderer_goto_index(MafwRenderer *self, guint index,
238 MafwRendererPlaybackCB callback,
240 MafwGstRendererMovementResult mafw_gst_renderer_move(MafwGstRenderer *renderer,
241 MafwGstRendererMovementType type,
245 /*----------------------------------------------------------------------------
247 ----------------------------------------------------------------------------*/
249 void mafw_gst_renderer_set_media_playlist(MafwGstRenderer* self);
251 /*----------------------------------------------------------------------------
253 ----------------------------------------------------------------------------*/
255 void mafw_gst_renderer_set_position(MafwRenderer *self,
256 MafwRendererSeekMode mode, gint seconds,
257 MafwRendererPositionCB callback,
259 void mafw_gst_renderer_get_position(MafwRenderer *self, MafwRendererPositionCB callback,
262 /*----------------------------------------------------------------------------
264 ----------------------------------------------------------------------------*/
266 void mafw_gst_renderer_get_current_metadata(MafwRenderer *self,
267 MafwRendererMetadataResultCB callback,
270 /*----------------------------------------------------------------------------
272 ----------------------------------------------------------------------------*/
274 void mafw_gst_renderer_set_state(MafwGstRenderer *self, MafwPlayState state);
276 gboolean mafw_gst_renderer_manage_error_idle(gpointer data);
278 void mafw_gst_renderer_manage_error(MafwGstRenderer *self, const GError *error);
280 void mafw_gst_renderer_set_playback_mode(MafwGstRenderer *self,
281 MafwGstRendererPlaybackMode mode);
283 MafwGstRendererPlaybackMode mafw_gst_renderer_get_playback_mode(
284 MafwGstRenderer *self);
286 void mafw_gst_renderer_update_source_duration(MafwGstRenderer *renderer,
293 /* vi: set noexpandtab ts=8 sw=8 cino=t0,(0: */