--- /dev/null
+/*
+ * This file is part of QMAFW
+ *
+ * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights
+ * reserved.
+ *
+ * Contact: Visa Smolander <visa.smolander@nokia.com>
+ *
+ * This software, including documentation, is protected by copyright controlled
+ * by Nokia Corporation. All rights are reserved. Copying, including
+ * reproducing, storing, adapting or translating, any or all of this material
+ * requires the prior written consent of Nokia Corporation. This material also
+ * contains confidential information which may not be disclosed to others
+ * without the prior written consent of Nokia.
+ *
+ */
+
+#include <string.h> //memset
+#include "mafw-gst-renderer-worker.h"
+#include "mafw-gst-renderer-utils.h"
+
+GError* global_error = 0;
+gint global_position = 0;
+gint global_worker_audio_destination = -1;
+gint global_worker_video_destination = -1;
+gchar *global_worker_uri = 0;
+gint global_worker_stop_called = 0;
+gint global_worker_seek_request = 0;
+GSList *global_worker_destinations = NULL;
+guint global_ready_timeout = 99999;
+
+guint m_volume;
+gboolean m_mute;
+gboolean m_current_frame_on_pause;
+gboolean m_force_aspect_ratio;
+gfloat m_playback_speed = 1;
+XID m_xid;
+
+render_rectangle m_render_rectangle;
+configuration *current_worker_conf;
+
+
+gboolean global_worker_playing = FALSE;
+
+#define UNUSED(x) (void)(x)
+
+void mafw_gst_renderer_worker_set_volume(MafwGstRendererWorker *worker,
+ guint volume)
+{
+ UNUSED(worker);
+ m_volume = volume;
+}
+
+guint mafw_gst_renderer_worker_get_volume(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return m_volume;
+}
+
+void mafw_gst_renderer_worker_set_mute(MafwGstRendererWorker *worker,
+ gboolean mute)
+{
+ UNUSED(worker);
+ m_mute = mute;
+}
+
+gboolean mafw_gst_renderer_worker_get_mute(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return m_mute;
+}
+
+gint64 mafw_gst_renderer_worker_get_last_known_duration(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return 10;
+}
+
+const char* mafw_gst_renderer_worker_get_uri(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return global_worker_uri;
+}
+
+gboolean mafw_gst_renderer_worker_get_seekable(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return TRUE;
+}
+
+void _free_configuration(configuration *config)
+{
+ if( !config )
+ {
+ return;
+ }
+
+ if( config->asink )
+ {
+ g_free(config->asink);
+ }
+ if( config->vsink )
+ {
+ g_free(config->vsink);
+ }
+
+ g_free(config);
+}
+
+void mafw_gst_renderer_worker_set_current_frame_on_pause(
+ MafwGstRendererWorker *worker,
+ gboolean current_frame_on_pause)
+{
+ UNUSED(worker);
+ m_current_frame_on_pause = current_frame_on_pause;
+}
+
+gboolean mafw_gst_renderer_worker_get_current_frame_on_pause(
+ MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return m_current_frame_on_pause;
+}
+
+void mafw_gst_renderer_worker_set_position(MafwGstRendererWorker *worker,
+ GstSeekType seek_type,
+ gint position, GError **error)
+{
+ UNUSED(worker);
+ UNUSED(seek_type);
+ global_worker_seek_request = position;
+ *error = global_error;
+}
+
+gint mafw_gst_renderer_worker_get_position(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return global_position;
+}
+
+void mafw_gst_renderer_worker_set_xid(MafwGstRendererWorker *worker, XID xid)
+{
+ UNUSED(worker);
+ m_xid = xid;
+}
+
+gboolean mafw_gst_renderer_worker_get_streaming(MafwGstRendererWorker *worker)
+{
+ return uri_is_stream(global_worker_uri);
+}
+
+XID mafw_gst_renderer_worker_get_xid(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return m_xid;
+}
+
+
+void mafw_gst_renderer_worker_set_render_rectangle(MafwGstRendererWorker *worker, render_rectangle *rect)
+{
+ UNUSED(worker);
+ m_render_rectangle.x = rect->x;
+ m_render_rectangle.y = rect->y;
+ m_render_rectangle.width = rect->width;
+ m_render_rectangle.height = rect->height;
+}
+
+const render_rectangle* mafw_gst_renderer_worker_get_render_rectangle(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return &m_render_rectangle;
+}
+
+
+gboolean mafw_gst_renderer_worker_get_autopaint(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return TRUE;
+}
+
+void mafw_gst_renderer_worker_set_ready_timeout(MafwGstRendererWorker *worker,
+ guint seconds)
+{
+ UNUSED(worker);
+ global_ready_timeout = seconds;
+}
+
+void mafw_gst_renderer_worker_set_autopaint(MafwGstRendererWorker *worker,
+ gboolean autopaint)
+{
+ UNUSED(worker);
+ UNUSED(autopaint);
+}
+
+gint mafw_gst_renderer_worker_get_colorkey(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return 1;
+}
+
+void mafw_gst_renderer_worker_play(MafwGstRendererWorker *worker,
+ const gchar *uri)
+{
+ UNUSED(worker);
+ UNUSED(uri);
+ global_worker_playing = TRUE;
+ g_free(global_worker_uri);
+ global_worker_uri = g_strdup(uri);
+ worker->notify_play_handler(worker, worker->owner);
+}
+
+void mafw_gst_renderer_worker_stop(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ global_worker_playing = FALSE;
+ ++global_worker_stop_called;
+
+ g_free(global_worker_uri);
+ global_worker_uri = NULL;
+}
+
+void mafw_gst_renderer_worker_pause(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ global_worker_playing = FALSE;
+ worker->notify_pause_handler(worker, worker->owner);
+}
+
+void mafw_gst_renderer_worker_pause_at(MafwGstRendererWorker *worker, guint position)
+{
+ UNUSED(worker);
+ UNUSED(position);
+}
+
+void mafw_gst_renderer_worker_resume(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+}
+
+MafwGstRendererWorker *mafw_gst_renderer_worker_new(gpointer owner)
+{
+ MafwGstRendererWorker *newWorker = g_new0(MafwGstRendererWorker, 1);
+ newWorker->owner = owner;
+ newWorker->config = g_new0(configuration, 1);
+ return newWorker;
+}
+
+void mafw_gst_renderer_worker_exit(MafwGstRendererWorker *worker)
+{
+ if( worker )
+ {
+ _free_configuration(worker->config);
+ worker->config = NULL;
+ }
+}
+
+gboolean mafw_gst_renderer_worker_set_playback_speed(MafwGstRendererWorker *worker, gfloat speed)
+{
+ UNUSED(worker);
+
+ if(!global_worker_playing)
+ {
+ return FALSE;
+ }
+
+ m_playback_speed = speed;
+
+ GValue v;
+ memset(&v, 0, sizeof(GValue));
+ g_value_init(&v, G_TYPE_FLOAT);
+ g_value_set_float(&v, m_playback_speed);
+
+ worker->notify_property_handler(worker, worker->owner, WORKER_PROPERTY_PLAYBACK_SPEED, &v);
+ g_value_unset(&v);
+
+ return TRUE;
+}
+
+gfloat mafw_gst_renderer_worker_get_playback_speed(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return m_playback_speed;
+}
+
+void mafw_gst_renderer_worker_set_force_aspect_ratio(MafwGstRendererWorker *worker, gboolean force)
+{
+ UNUSED(worker);
+ m_force_aspect_ratio = force;
+}
+
+gboolean mafw_gst_renderer_worker_get_force_aspect_ratio(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+ return m_force_aspect_ratio;
+}
+
+void mafw_gst_renderer_worker_notify_media_destination(MafwGstRendererWorker *worker,
+ GSList *destination)
+{
+ UNUSED(worker);
+ g_slist_free(global_worker_destinations);
+ global_worker_destinations = g_slist_copy(destination);
+}
+
+configuration* mafw_gst_renderer_worker_create_default_configuration(MafwGstRendererWorker *worker)
+{
+ configuration *config = g_malloc0(sizeof(configuration));
+ config->asink = g_strdup("pulsesink");
+ config->vsink = g_strdup("omapxvsink");
+ config->flags = 67;
+ config->buffer_time = 300000;
+ config->latency_time = 100000;
+
+ /* timers */
+ config->milliseconds_to_pause_frame = 1000;
+ config->seconds_to_pause_to_ready = 3;
+
+ /* dhmmixer */
+ config->use_dhmmixer = TRUE;
+
+ config->mobile_surround_music.state = 0;
+ config->mobile_surround_music.room = 2;
+ config->mobile_surround_music.color = 2;
+ config->mobile_surround_video.state = 0;
+ config->mobile_surround_video.room = 2;
+ config->mobile_surround_video.color = 2;
+
+ return config;
+}
+
+void mafw_gst_renderer_worker_set_configuration(MafwGstRendererWorker *worker, configuration *config)
+{
+ if( worker->config )
+ {
+ _free_configuration(worker->config);
+ }
+ worker->config = config;
+ current_worker_conf = config;
+}
+
+void set_dolby_music_property(MafwGstRendererWorker *worker, guint prop)
+{
+ worker->config->mobile_surround_music.state = prop;
+}
+
+void set_dolby_music_sound_property(MafwGstRendererWorker *worker, gint prop, gboolean isRoomProperty)
+{
+ if (isRoomProperty)
+ {
+ worker->config->mobile_surround_music.room = prop;
+ }
+ else
+ {
+ worker->config->mobile_surround_music.color = prop;
+ }
+}
+
+void set_dolby_video_property(MafwGstRendererWorker *worker, guint prop)
+{
+ worker->config->mobile_surround_video.state = prop;
+}
+
+void set_dolby_video_sound_property(MafwGstRendererWorker *worker, gint prop, gboolean isRoomProperty)
+{
+ if (isRoomProperty)
+ {
+ worker->config->mobile_surround_video.room = prop;
+ }
+ else
+ {
+ worker->config->mobile_surround_video.color = prop;
+ }
+}
+
+gint64 mafw_gst_renderer_worker_get_duration(MafwGstRendererWorker *worker)
+{
+ UNUSED(worker);
+
+ return 0;
+}