Don't reuse file names
[harmattan/cameraplus] / lib / qtcamdevice.cpp
index a8430dc..38da29b 100644 (file)
@@ -1,7 +1,7 @@
 /*!
  * This file is part of CameraPlus.
  *
- * Copyright (C) 2012 Mohammed Sameer <msameer@foolab.org>
+ * Copyright (C) 2012-2013 Mohammed Sameer <msameer@foolab.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -31,6 +31,7 @@
 #include "qtcamnotifications.h"
 #include "gst/gstcopy.h"
 #include "qtcampropertysetter.h"
+#include "qtcamanalysisbin.h"
 
 QtCamDevice::QtCamDevice(QtCamConfig *config, const QString& name,
                         const QVariant& id, QObject *parent) :
@@ -56,7 +57,15 @@ QtCamDevice::QtCamDevice(QtCamConfig *config, const QString& name,
   d_ptr->propertySetter = new QtCamPropertySetter(d_ptr);
 
   d_ptr->createAndAddElement(d_ptr->conf->audioSource(), "audio-source", "QtCameraAudioSrc");
-  d_ptr->createAndAddVideoSource();
+  if (!d_ptr->conf->wrapperVideoSource().isEmpty() &&
+      !d_ptr->conf->wrapperVideoSourceProperty().isEmpty()) {
+    d_ptr->createAndAddVideoSourceAndWrapper();
+  }
+  else {
+    d_ptr->createAndAddVideoSource();
+  }
+
+  d_ptr->setDevicePoperty();
 
   int flags =
     0x00000001 /* no-audio-conversion - Do not use audio conversion elements */
@@ -67,7 +76,19 @@ QtCamDevice::QtCamDevice(QtCamConfig *config, const QString& name,
   g_object_set(d_ptr->cameraBin, "flags", flags, NULL);
 
   d_ptr->setAudioCaptureCaps();
-  d_ptr->addViewfinderFilters();
+
+  QStringList viewfinderFilters = d_ptr->conf->viewfinderFilters();
+  if (!viewfinderFilters.isEmpty()) {
+    d_ptr->viewfinderFilters =
+      QtCamAnalysisBin::create(viewfinderFilters, "QtCamViewfinderFilters");
+
+    if (!d_ptr->viewfinderFilters) {
+      qWarning() << "Failed to create viewfinder filters";
+    }
+    else {
+      g_object_set(d_ptr->cameraBin, "viewfinder-filter", d_ptr->viewfinderFilters->bin(), NULL);
+    }
+  }
 
   d_ptr->listener = new QtCamGStreamerMessageListener(gst_element_get_bus(d_ptr->cameraBin),
                                                      d_ptr, this);
@@ -81,8 +102,14 @@ QtCamDevice::QtCamDevice(QtCamConfig *config, const QString& name,
   g_signal_connect(d_ptr->cameraBin, "notify::idle",
                   G_CALLBACK(QtCamDevicePrivate::on_idle_changed), d_ptr);
 
-  g_signal_connect(d_ptr->wrapperVideoSource, "notify::ready-for-capture",
-                  G_CALLBACK(QtCamDevicePrivate::on_ready_for_capture_changed), d_ptr);
+  if (d_ptr->wrapperVideoSource) {
+    g_signal_connect(d_ptr->wrapperVideoSource, "notify::ready-for-capture",
+                    G_CALLBACK(QtCamDevicePrivate::on_ready_for_capture_changed), d_ptr);
+  }
+  else {
+    g_signal_connect(d_ptr->videoSource, "notify::ready-for-capture",
+                    G_CALLBACK(QtCamDevicePrivate::on_ready_for_capture_changed), d_ptr);
+  }
 
   d_ptr->image = new QtCamImageMode(d_ptr, this);
   d_ptr->video = new QtCamVideoMode(d_ptr, this);
@@ -101,6 +128,8 @@ QtCamDevice::~QtCamDevice() {
 
   delete d_ptr->propertySetter;
 
+  delete d_ptr->viewfinderFilters;
+
   if (d_ptr->cameraBin) {
     gst_object_unref(d_ptr->cameraBin);
   }
@@ -119,20 +148,18 @@ bool QtCamDevice::setViewfinder(QtCamViewfinder *viewfinder) {
   }
 
   if (!viewfinder) {
-    qWarning() << "QtCamDevice: viewfinder cannot be unset.";
-    return false;
-  }
+    if (d_ptr->cameraBin) {
+      g_object_set(d_ptr->cameraBin, "viewfinder-sink", NULL, NULL);
+    }
 
-  if (d_ptr->viewfinder) {
-    qWarning() << "QtCamDevice: viewfinder cannot be replaced.";
-    return false;
-  }
+    d_ptr->sink = 0;
 
-  if (!viewfinder->setDevice(this)) {
-    return false;
+    d_ptr->viewfinder = 0;
+    return true;
   }
 
   d_ptr->viewfinder = viewfinder;
+  d_ptr->sink = 0;
 
   return true;
 }