Created fork of mafw-gst-renderer with subtitles support
[mafwsubrenderer] / libmafw-gst-renderer / mafw-gst-renderer.c
index 6412b13..1e593de 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_SUBTITLE_RENDERER "/system/mafw/mafw-gst-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
   ----------------------------------------------------------------------------*/
@@ -347,6 +358,57 @@ static void mafw_gst_renderer_init(MafwGstRenderer *self)
                g_error_free(error);
        }
 
+       gconf_client_add_dir(renderer->gconf_client,
+                            GCONF_MAFW_GST_SUBTITLE_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_SUBTITLE_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_SUBTITLE_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_SUBTITLE_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_SUBTITLE_RENDERER "/autoload_subtitles");
+
+               gconf_client_notify(renderer->gconf_client,
+                                   GCONF_MAFW_GST_SUBTITLE_RENDERER "/subtitle_encoding");
+
+               gconf_client_notify(renderer->gconf_client,
+                                   GCONF_MAFW_GST_SUBTITLE_RENDERER "/subtitle_font");
+       }
+
        if (gnome_vfs_init()) {
                GnomeVFSVolumeMonitor *monitor = gnome_vfs_get_volume_monitor();
                g_signal_connect(monitor, "volume-pre-unmount", 
@@ -830,6 +892,61 @@ 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_SUBTITLE_RENDERER) + 1;
+
+       value = gconf_entry_get_value(entry);
+       if (value == NULL)
+               return;
+
+       str_value = gconf_value_get_string(value);
+
+       if (strcmp(key, "subtitle_font") == 0) {
+               if (renderer->worker->subtitles.font)
+                       g_free(renderer->worker->subtitles.font);
+
+               renderer->worker->subtitles.font = g_strdup(str_value);
+       } else if (strcmp(key, "subtitle_encoding") == 0) {
+               if (renderer->worker->subtitles.encoding)
+                       g_free(renderer->worker->subtitles.encoding);
+
+               renderer->worker->subtitles.encoding = g_strdup(str_value);
+       } else {
+               g_warning("Wrong %s key, %s", GCONF_MAFW_GST_SUBTITLE_RENDERER, key);
+       }
+}
+
 /*----------------------------------------------------------------------------
   Gnome VFS notifications
   ----------------------------------------------------------------------------*/