--- /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 <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)