Source tree moved to mafw-gst-subtitles-renderer directory.
[mafwsubrenderer] / mafw-gst-subtitles-renderer / libmafw-gst-renderer / mafw-gst-renderer.h
diff --git a/mafw-gst-subtitles-renderer/libmafw-gst-renderer/mafw-gst-renderer.h b/mafw-gst-subtitles-renderer/libmafw-gst-renderer/mafw-gst-renderer.h
new file mode 100644 (file)
index 0000000..0350e34
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+ * This file is a part of MAFW
+ *
+ * Copyright (C) 2007, 2008, 2009 Nokia Corporation, all rights reserved.
+ *
+ * Contact: Visa Smolander <visa.smolander@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+#ifndef MAFW_GST_RENDERER_H
+#define MAFW_GST_RENDERER_H
+
+#include <glib-object.h>
+#include <libmafw/mafw-renderer.h>
+#include <libmafw/mafw-registry.h>
+#include <gst/gst.h>
+#include <gst/pbutils/pbutils.h>
+#include <libhal.h>
+#include <gconf/gconf-client.h>
+
+#include "mafw-gst-renderer-utils.h"
+#include "mafw-gst-renderer-worker.h"
+#include "mafw-playlist-iterator.h"
+/* Solving the cyclic dependencies */
+typedef struct _MafwGstRenderer MafwGstRenderer;
+typedef struct _MafwGstRendererClass MafwGstRendererClass;
+#include "mafw-gst-renderer-state.h"
+
+#ifdef HAVE_CONIC
+#include <conicconnection.h>
+#endif
+
+typedef enum {
+       MAFW_GST_RENDERER_ERROR_PLUGIN_NOT_FOUND,
+       MAFW_GST_RENDERER_ERROR_VIDEO_CODEC_NOT_SUPPORTED,
+       MAFW_GST_RENDERER_ERROR_AUDIO_CODEC_NOT_SUPPORTED,
+} MafwGstRendererError;
+
+typedef enum {
+       MAFW_GST_RENDERER_MODE_PLAYLIST,
+       MAFW_GST_RENDERER_MODE_STANDALONE,
+} MafwGstRendererPlaybackMode;
+
+typedef enum {
+       MAFW_GST_RENDERER_MOVE_RESULT_OK,
+       MAFW_GST_RENDERER_MOVE_RESULT_NO_PLAYLIST,
+       MAFW_GST_RENDERER_MOVE_RESULT_PLAYLIST_LIMIT,
+       MAFW_GST_RENDERER_MOVE_RESULT_ERROR,
+} MafwGstRendererMovementResult;
+
+typedef enum {
+       MAFW_GST_RENDERER_MOVE_TYPE_INDEX,
+       MAFW_GST_RENDERER_MOVE_TYPE_PREV,
+       MAFW_GST_RENDERER_MOVE_TYPE_NEXT,
+} MafwGstRendererMovementType;
+
+#ifdef HAVE_GDKPIXBUF
+#define MAFW_PROPERTY_GST_RENDERER_CURRENT_FRAME_ON_PAUSE       \
+       "current-frame-on-pause"
+#endif
+
+#define MAFW_PROPERTY_GST_RENDERER_TV_CONNECTED "tv-connected"
+
+/*----------------------------------------------------------------------------
+  GObject type conversion macros
+  ----------------------------------------------------------------------------*/
+
+#define MAFW_TYPE_GST_RENDERER                  \
+        (mafw_gst_renderer_get_type())
+#define MAFW_GST_RENDERER(obj)                                          \
+        (G_TYPE_CHECK_INSTANCE_CAST((obj), MAFW_TYPE_GST_RENDERER, MafwGstRenderer))
+#define MAFW_IS_GST_RENDERER(obj)                                       \
+        (G_TYPE_CHECK_INSTANCE_TYPE((obj), MAFW_TYPE_GST_RENDERER))
+#define MAFW_GST_RENDERER_CLASS(klass)                                  \
+       (G_TYPE_CHECK_CLASS_CAST((klass), MAFW_TYPE_GST_RENDERER, MafwGstRenderer))
+#define MAFW_GST_RENDERER_GET_CLASS(obj)                                \
+       (G_TYPE_INSTANCE_GET_CLASS((obj), MAFW_TYPE_GST_RENDERER,       \
+                                  MafwGstRendererClass))
+#define MAFW_IS_GST_RENDERER_CLASS(klass)                               \
+       (G_TYPE_CHECK_CLASS_TYPE((klass), MAFW_TYPE_GST_RENDERER))
+
+#define MAFW_GST_RENDERER_ERROR (mafw_gst_renderer_error_quark ())
+
+/* Gst renderer plugin name for the plugin descriptor */
+#define MAFW_GST_RENDERER_PLUGIN_NAME "Mafw-Gst-Renderer-Plugin"
+/* Gst renderer name */
+#define MAFW_GST_RENDERER_NAME "Mafw-Gst-Renderer"
+/* Gst renderer UUID */
+#define MAFW_GST_RENDERER_UUID "gstrenderer"
+
+/*----------------------------------------------------------------------------
+  Type definitions
+  ----------------------------------------------------------------------------*/
+
+typedef struct {
+       gchar *object_id;
+       gchar *uri;
+       gchar *title;
+       gchar *artist;
+       gchar *album;
+
+       gint duration;
+       gint position;
+
+       /* Seekability coming from source */
+       SeekabilityType seekability;
+} MafwGstRendererMedia;
+
+struct _MafwGstRendererClass {
+       MafwRendererClass parent;
+};
+
+/*
+ * media:             Current media details
+ * worker:            Worker
+ * registry:          The registry that owns this renderer
+ * media_timer:      Stream timer data
+ * current_state:     The renderer's current state
+ * playlist:          The renderer's playlist
+ * play_index:        A playlist index that is currently playing
+ * seek_pending:      Seek is pending or ongoing
+ * seek_type_pending: Type of the pending seek
+ * seeking_to:        The position of pending seek (milliseconds)
+ * is_stream:         is the URI a stream?
+ * play_failed_count: The number of unably played items from the playlist.
+ * playback_mode:     Playback mode
+ * resume_playlist:   Do we want to resume playlist playback when play_object
+ *                    is finished
+ * states:            State array
+ * error_policy:      error policy
+ * tv_connected:      if TV-out cable is connected
+ */
+struct _MafwGstRenderer{
+       MafwRenderer parent;
+
+       MafwGstRendererMedia *media;
+       MafwGstRendererWorker *worker;
+       MafwRegistry *registry;
+       LibHalContext *hal_ctx;
+       MafwPlayState current_state;
+       MafwPlaylist *playlist;
+       MafwPlaylistIterator *iterator;
+       gboolean seek_pending;
+       GstSeekType seek_type_pending;
+       gint seeking_to;
+       gboolean is_stream;
+        gint update_playcount_id;
+       guint play_failed_count;
+
+       MafwGstRendererPlaybackMode playback_mode;
+       gboolean resume_playlist;
+       MafwGstRendererState **states;
+       MafwRendererErrorPolicy error_policy;
+        gboolean tv_connected;
+
+#ifdef HAVE_CONIC
+       gboolean connected;
+       ConIcConnection *connection;
+#endif
+       GConfClient *gconf_client;
+};
+
+typedef struct {
+        MafwGstRenderer *renderer;
+        GError *error;
+} MafwGstRendererErrorClosure;
+
+G_BEGIN_DECLS
+
+GType mafw_gst_renderer_get_type(void);
+GObject *mafw_gst_renderer_new(MafwRegistry *registry);
+GQuark mafw_gst_renderer_error_quark(void);
+
+/*----------------------------------------------------------------------------
+  Playback
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_play(MafwRenderer *self, MafwRendererPlaybackCB callback,
+                            gpointer user_data);
+void mafw_gst_renderer_play_object(MafwRenderer *self, const gchar *object_id,
+                                   MafwRendererPlaybackCB callback,
+                                   gpointer user_data);
+void mafw_gst_renderer_stop(MafwRenderer *self, MafwRendererPlaybackCB callback,
+                            gpointer user_data);
+void mafw_gst_renderer_pause(MafwRenderer *self, MafwRendererPlaybackCB callback,
+                             gpointer user_data);
+void mafw_gst_renderer_resume(MafwRenderer *self, MafwRendererPlaybackCB callback,
+                              gpointer user_data);
+
+/*----------------------------------------------------------------------------
+  Status
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_get_status(MafwRenderer *self, MafwRendererStatusCB callback,
+                                  gpointer user_data);
+
+/*----------------------------------------------------------------------------
+  Set Media
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_set_object(MafwGstRenderer *self, const gchar *object_id);
+void mafw_gst_renderer_clear_media(MafwGstRenderer *self);
+
+/*----------------------------------------------------------------------------
+  Metadata
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_get_metadata(MafwGstRenderer* self, const gchar* objectid,
+                                    GError **error);
+gboolean mafw_gst_renderer_update_stats(gpointer data);
+
+/*----------------------------------------------------------------------------
+  Playlist
+  ----------------------------------------------------------------------------*/
+
+gboolean mafw_gst_renderer_assign_playlist(MafwRenderer *self,
+                                           MafwPlaylist *playlist,
+                                           GError **error);
+void mafw_gst_renderer_next(MafwRenderer *self, MafwRendererPlaybackCB callback,
+                            gpointer user_data);
+void mafw_gst_renderer_previous(MafwRenderer *self, MafwRendererPlaybackCB callback,
+                                gpointer user_data);
+void mafw_gst_renderer_goto_index(MafwRenderer *self, guint index,
+                                  MafwRendererPlaybackCB callback,
+                                  gpointer user_data);
+MafwGstRendererMovementResult mafw_gst_renderer_move(MafwGstRenderer *renderer,
+                                                     MafwGstRendererMovementType type,
+                                                     guint index,
+                                                     GError **error);
+
+/*----------------------------------------------------------------------------
+  Set media
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_set_media_playlist(MafwGstRenderer* self);
+
+/*----------------------------------------------------------------------------
+  Position
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_set_position(MafwRenderer *self,
+                                    MafwRendererSeekMode mode, gint seconds,
+                                    MafwRendererPositionCB callback,
+                                    gpointer user_data);
+void mafw_gst_renderer_get_position(MafwRenderer *self, MafwRendererPositionCB callback,
+                                    gpointer user_data);
+
+/*----------------------------------------------------------------------------
+  Metadata
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_get_current_metadata(MafwRenderer *self,
+                                           MafwRendererMetadataResultCB callback,
+                                           gpointer user_data);
+
+/*----------------------------------------------------------------------------
+  Local API
+  ----------------------------------------------------------------------------*/
+
+void mafw_gst_renderer_set_state(MafwGstRenderer *self, MafwPlayState state);
+
+gboolean mafw_gst_renderer_manage_error_idle(gpointer data);
+
+void mafw_gst_renderer_manage_error(MafwGstRenderer *self, const GError *error);
+
+void mafw_gst_renderer_set_playback_mode(MafwGstRenderer *self,
+                                         MafwGstRendererPlaybackMode mode);
+
+MafwGstRendererPlaybackMode mafw_gst_renderer_get_playback_mode(
+       MafwGstRenderer *self);
+
+void mafw_gst_renderer_update_source_duration(MafwGstRenderer *renderer,
+                                             gint duration);
+
+G_END_DECLS
+
+#endif
+
+/* vi: set noexpandtab ts=8 sw=8 cino=t0,(0: */