Added qmafw-gst-subtitles-renderer-0.0.55 for Meego Harmattan 1.2
[mafwsubrenderer] / qmafw-gst-subtitles-renderer / src / MafwGstRendererPlugin.cpp
diff --git a/qmafw-gst-subtitles-renderer/src/MafwGstRendererPlugin.cpp b/qmafw-gst-subtitles-renderer/src/MafwGstRendererPlugin.cpp
new file mode 100644 (file)
index 0000000..734ddd9
--- /dev/null
@@ -0,0 +1,145 @@
+/* 
+ * 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 <QObject>
+#include <QtPlugin>
+#include <QDebug>
+#include <QSettings>
+#include <QCoreApplication>
+
+#include <MafwInternalRegistry.h>
+
+#include "MafwGstRendererPlugin.h"
+#include "MafwGstRenderer.h"
+
+#ifdef _VERSION_INFO
+#include "version.h"
+#endif
+
+const QString PLUGIN_NAME = "MafwGstRendererPlugin";
+const QString RENDERER_UUID = "mafw_gst_renderer";
+const QString DBUS_WRAPPER_NAME = "qmafw-dbus-wrapper";
+const QString RENDERER_PLUGIN_CONFIG_FILE = "/usr/share/qmafw/mafw-gst-renderer-plugin.conf";
+
+
+MafwGstRendererPlugin::~MafwGstRendererPlugin()
+{
+    qDebug() << __PRETTY_FUNCTION__;
+    for(int i = 0; i < m_rendererIds.count(); i++)
+    {
+        m_registry->removeExtension(m_rendererIds.at(i));
+    }
+}
+
+void MafwGstRendererPlugin::initialize(MafwInternalRegistry* registry)
+{
+#ifdef _VERSION_INFO
+    qDebug() << "mafw-gst-renderer revision:" << revision;
+    qDebug() << "mafw-gst-renderer library builtime:" << build_time;
+#endif
+
+    Q_ASSERT(registry);
+
+    m_registry = registry;
+
+    QString rendererArrayKey;
+    QString appname = QCoreApplication::applicationName();
+    // appname can contain full path to config file
+    if(appname.endsWith(DBUS_WRAPPER_NAME))
+    {
+        // We are loading out-process renderers from config file
+        rendererArrayKey = "renderers";
+        loadRenderers(rendererArrayKey);
+    }
+    else
+    {
+        // We are loading in-process renderers from config file
+        rendererArrayKey = "in-process-renderers";
+        loadRenderers(rendererArrayKey);
+    }
+
+    // if there are no gst-renderers in config file, we create a "basic" gst-renderer
+    if(m_rendererIds.isEmpty())
+    {
+        MafwGstRenderer *rnd = new MafwGstRenderer(RENDERER_UUID,
+                                                   PLUGIN_NAME,
+                                                   "QMAFW GStreamer Renderer",
+                                                   registry);
+
+        QSettings settings(RENDERER_PLUGIN_CONFIG_FILE, QSettings::NativeFormat);
+
+        if(rnd->initialize(&settings))
+        {
+            m_registry->addRenderer(rnd);
+            m_rendererIds.append(RENDERER_UUID);
+        }
+        else
+        {
+            qCritical() << "Failed to initialize QMAFW GStreamer Renderer";
+            delete rnd;
+        }
+    }
+}
+
+void MafwGstRendererPlugin::loadRenderers(const QString& rendererArrayKey)
+{
+    QSettings settings(RENDERER_PLUGIN_CONFIG_FILE, QSettings::NativeFormat);
+    QString id;
+    QString friendlyname;
+
+    QList<MafwGstRenderer*> rnds;
+
+    // Configuration file contains the array of renderer names and uuids as string.
+    // beginReadArray returns size of the array.
+    int size = settings.beginReadArray(rendererArrayKey);
+    for(int i = 0; i < size; i++)
+    {
+        settings.setArrayIndex(i);
+        id = settings.value("Id").toString();
+        friendlyname = settings.value("FriendlyName").toString();
+        MafwGstRenderer *rnd = new MafwGstRenderer(id,
+                                                   PLUGIN_NAME,
+                                                   friendlyname,
+                                                   m_registry);
+        rnds.append(rnd);
+    }
+    settings.endArray();
+
+    Q_FOREACH( MafwGstRenderer *rnd, rnds )
+    {
+        if(rnd->initialize(&settings))
+        {
+            m_registry->addRenderer(rnd);
+            m_rendererIds.append(rnd->uuid());
+        }
+        else
+        {
+            qCritical() << "Failed to initialize" << rnd->name();
+            delete rnd;
+        }
+    }
+}
+
+QString MafwGstRendererPlugin::name() const
+{
+    return PLUGIN_NAME;
+}
+
+/*****************************************************************************
+ * Plugin export
+ ****************************************************************************/
+Q_EXPORT_PLUGIN2(qmafw-gst-renderer-plugin, MafwGstRendererPlugin)