Package updated to version mafw-gst-renderer-0.2.2010.07-2+0m5-1.
[mafwsubrenderer] / libmafw-gst-renderer / mafw-gst-renderer.c
index 6412b13..58d39c4 100644 (file)
@@ -56,6 +56,7 @@
 
 #define GCONF_OSSO_AF "/system/osso/af"
 #define GCONF_BATTERY_COVER_OPEN "/system/osso/af/mmc-cover-open"
+#define GCONF_MAFW_GST_SUBTITLES_RENDERER "/system/mafw/mafw-gst-subtitles-renderer"
 #define HAL_VIDEOOUT_UDI "/org/freedesktop/Hal/devices" \
         "/platform_soc_audio_logicaldev_input"
 
@@ -95,6 +96,16 @@ static void _battery_cover_open_cb(GConfClient *client,
                                   GConfEntry *entry,
                                   MafwGstRenderer *renderer);
 
+static void _autoload_subtitles_changed_cb(GConfClient *client,
+                                          guint cnxn_id,
+                                          GConfEntry *entry,
+                                          MafwGstRenderer *renderer);
+
+static void _subtitle_font_changed_cb(GConfClient *client,
+                                     guint cnxn_id,
+                                     GConfEntry *entry,
+                                     MafwGstRenderer *renderer);
+
 /*----------------------------------------------------------------------------
   Gnome VFS notifications
   ----------------------------------------------------------------------------*/
@@ -164,7 +175,7 @@ static void _connection_init(MafwGstRenderer *renderer);
  * Registers the plugin descriptor making this plugin available to the
  * framework and applications
  */
-G_MODULE_EXPORT MafwPluginDescriptor mafw_gst_renderer_plugin_description = {
+G_MODULE_EXPORT MafwPluginDescriptor mafw_gst_subtitles_renderer_plugin_description = {
        { .name         = MAFW_GST_RENDERER_PLUGIN_NAME },
        .initialize     = mafw_gst_renderer_initialize,
        .deinitialize   = mafw_gst_renderer_deinitialize,
@@ -197,9 +208,8 @@ static void mafw_gst_renderer_class_init(MafwGstRendererClass *klass)
        GObjectClass *gclass = NULL;
        MafwRendererClass *renderer_class = NULL;
        const gchar *preloaded_plugins[] = {"playback", "uridecodebin",
-               "coreelements", "typefindfunctions", "omx", "selector",
-               "autodetect", "pulseaudio", "audioconvert", "audioresample",
-               "xvimagesink", "ffmpegcolorspace", "videoscale", NULL};
+                               "coreelements", "typefindfunctions", "dsp",
+                               "pulseaudio", "xvimagesink", NULL};
        gint i = 0;
        GObject *plugin;
 
@@ -273,7 +283,9 @@ static void mafw_gst_renderer_init(MafwGstRenderer *self)
        g_return_if_fail(renderer != NULL);
 
        mafw_extension_add_property(MAFW_EXTENSION(self), "volume", G_TYPE_UINT);
+#ifdef MAFW_GST_RENDERER_ENABLE_MUTE
        mafw_extension_add_property(MAFW_EXTENSION(self), "mute", G_TYPE_BOOLEAN);
+#endif
        mafw_extension_add_property(MAFW_EXTENSION(self), "xid", G_TYPE_UINT);
        mafw_extension_add_property(MAFW_EXTENSION(self), "error-policy", G_TYPE_UINT);
        MAFW_EXTENSION_SUPPORTS_AUTOPAINT(self);
@@ -347,6 +359,57 @@ static void mafw_gst_renderer_init(MafwGstRenderer *self)
                g_error_free(error);
        }
 
+       gconf_client_add_dir(renderer->gconf_client,
+                            GCONF_MAFW_GST_SUBTITLES_RENDERER,
+                            GCONF_CLIENT_PRELOAD_ONELEVEL,
+                            &error);
+       if (error) {
+               g_warning("%s", error->message);
+               g_error_free(error);
+               error = NULL;
+       }
+
+       gconf_client_notify_add(renderer->gconf_client,
+                               GCONF_MAFW_GST_SUBTITLES_RENDERER "/autoload_subtitles",
+                               (GConfClientNotifyFunc) _autoload_subtitles_changed_cb,
+                               renderer,
+                               NULL, &error);
+       if (error) {
+               g_warning("%s", error->message);
+               g_error_free(error);
+       }
+
+       gconf_client_notify_add(renderer->gconf_client,
+                               GCONF_MAFW_GST_SUBTITLES_RENDERER "/subtitle_encoding",
+                               (GConfClientNotifyFunc) _subtitle_font_changed_cb,
+                               renderer,
+                               NULL, &error);
+       if (error) {
+               g_warning("%s", error->message);
+               g_error_free(error);
+       }
+
+       gconf_client_notify_add(renderer->gconf_client,
+                               GCONF_MAFW_GST_SUBTITLES_RENDERER "/subtitle_font",
+                               (GConfClientNotifyFunc) _subtitle_font_changed_cb,
+                               renderer,
+                               NULL, &error);
+       if (error) {
+               g_warning("%s", error->message);
+               g_error_free(error);
+       }
+
+       if (self->worker->pipeline) {
+               gconf_client_notify(renderer->gconf_client,
+                                   GCONF_MAFW_GST_SUBTITLES_RENDERER "/autoload_subtitles");
+
+               gconf_client_notify(renderer->gconf_client,
+                                   GCONF_MAFW_GST_SUBTITLES_RENDERER "/subtitle_encoding");
+
+               gconf_client_notify(renderer->gconf_client,
+                                   GCONF_MAFW_GST_SUBTITLES_RENDERER "/subtitle_font");
+       }
+
        if (gnome_vfs_init()) {
                GnomeVFSVolumeMonitor *monitor = gnome_vfs_get_volume_monitor();
                g_signal_connect(monitor, "volume-pre-unmount", 
@@ -830,6 +893,67 @@ static void _battery_cover_open_cb(GConfClient *client,
        }
 }
 
+static void _autoload_subtitles_changed_cb(GConfClient *client,
+                                          guint cnxn_id,
+                                          GConfEntry *entry,
+                                          MafwGstRenderer *renderer)
+{
+       GConfValue *value = NULL;
+       gboolean enabled = FALSE;
+
+       value = gconf_entry_get_value(entry);
+       if (value == NULL)
+               return;
+
+       enabled = gconf_value_get_bool(value);
+
+       if (enabled)
+               renderer->worker->subtitles.enabled = TRUE;
+       else
+               renderer->worker->subtitles.enabled = FALSE;
+}
+
+static void _subtitle_font_changed_cb(GConfClient *client,
+                                     guint cnxn_id,
+                                     GConfEntry *entry,
+                                     MafwGstRenderer *renderer)
+{
+       const gchar *key = NULL;
+       GConfValue *value = NULL;
+       const gchar *str_value = NULL;
+
+       key = gconf_entry_get_key(entry);
+
+       /* Only key without absolute path is required */
+       key += strlen(GCONF_MAFW_GST_SUBTITLES_RENDERER) + 1;
+
+       value = gconf_entry_get_value(entry);
+       if (value)
+               str_value = gconf_value_get_string(value);
+       else
+               str_value = NULL;
+
+       if (strcmp(key, "subtitle_font") == 0) {
+               if (renderer->worker->subtitles.font)
+                       g_free(renderer->worker->subtitles.font);
+
+               if (str_value)
+                       renderer->worker->subtitles.font = g_strdup(str_value);
+               else
+                       renderer->worker->subtitles.font = NULL;
+       } else if (strcmp(key, "subtitle_encoding") == 0) {
+               if (renderer->worker->subtitles.encoding)
+                       g_free(renderer->worker->subtitles.encoding);
+
+               if (str_value)
+                       renderer->worker->subtitles.encoding = g_strdup(str_value);
+               else
+                       renderer->worker->subtitles.encoding = NULL;
+       } else {
+               g_warning("Wrong %s key, %s", GCONF_MAFW_GST_SUBTITLES_RENDERER, key);
+       }
+}
+
 /*----------------------------------------------------------------------------
   Gnome VFS notifications
   ----------------------------------------------------------------------------*/
@@ -2172,6 +2296,11 @@ static void mafw_gst_renderer_set_property(MafwExtension *self,
                        renderer->worker,
                        g_value_get_boolean(value));
        }
+       else if (!strcmp(key, MAFW_PROPERTY_RENDERER_COLORKEY)) {
+               mafw_gst_renderer_worker_set_colorkey(
+                       renderer->worker,
+                       g_value_get_int(value));
+       }
 #ifdef HAVE_GDKPIXBUF
        else if (!strcmp(key,
                         MAFW_PROPERTY_GST_RENDERER_CURRENT_FRAME_ON_PAUSE)) {