Set viewfinder-filters
authorMohammed Sameer <msameer@foolab.org>
Sat, 22 Dec 2012 00:22:09 +0000 (02:22 +0200)
committerMohammed Sameer <msameer@foolab.org>
Sat, 22 Dec 2012 00:22:09 +0000 (02:22 +0200)
lib/qtcamconfig.cpp
lib/qtcamconfig.h
lib/qtcamdevice.cpp
lib/qtcamdevice_p.h

index 89ffbd3..930909b 100644 (file)
@@ -211,3 +211,7 @@ QString QtCamConfig::videoRecordingEndedSound() const {
 QString QtCamConfig::autoFocusAcquiredSound() const {
   return d_ptr->conf->value("sounds/autoFocusAcquired").toString();
 }
 QString QtCamConfig::autoFocusAcquiredSound() const {
   return d_ptr->conf->value("sounds/autoFocusAcquired").toString();
 }
+
+QStringList QtCamConfig::viewfinderFilters() const {
+  return d_ptr->conf->value("viewfinder-filters/elements").toStringList();
+}
index bdfbc11..48a4b4c 100644 (file)
@@ -26,6 +26,7 @@
 #include <QObject>
 #include "qtcamimagesettings.h"
 #include "qtcamvideosettings.h"
 #include <QObject>
 #include "qtcamimagesettings.h"
 #include "qtcamvideosettings.h"
+#include <QStringList>
 
 #define SCANNER_TYPE_V4L2                     "v4l2"
 #define SCANNER_TYPE_ENUM                     "enum"
 
 #define SCANNER_TYPE_V4L2                     "v4l2"
 #define SCANNER_TYPE_ENUM                     "enum"
@@ -74,6 +75,8 @@ public:
   QString videoRecordingEndedSound() const;
   QString autoFocusAcquiredSound() const;
 
   QString videoRecordingEndedSound() const;
   QString autoFocusAcquiredSound() const;
 
+  QStringList viewfinderFilters() const;
+
 private:
   QtCamConfigPrivate *d_ptr;
 };
 private:
   QtCamConfigPrivate *d_ptr;
 };
index 4aa1c19..bb5becc 100644 (file)
@@ -64,10 +64,11 @@ QtCamDevice::QtCamDevice(QtCamConfig *config, const QString& name,
   g_object_set(d_ptr->cameraBin, "flags", flags, NULL);
 
   d_ptr->setAudioCaptureCaps();
   g_object_set(d_ptr->cameraBin, "flags", flags, NULL);
 
   d_ptr->setAudioCaptureCaps();
+  d_ptr->addViewfinderFilters();
 
   // TODO: audio bitrate
   // TODO: video bitrate
 
   // TODO: audio bitrate
   // TODO: video bitrate
-  // TODO: filters
+
   // TODO: custom properties for jifmux, mp4mux, audio encoder, video encoder, sink & video source
   d_ptr->listener = new QtCamGStreamerMessageListener(gst_element_get_bus(d_ptr->cameraBin),
                                                      d_ptr, this);
   // TODO: custom properties for jifmux, mp4mux, audio encoder, video encoder, sink & video source
   d_ptr->listener = new QtCamGStreamerMessageListener(gst_element_get_bus(d_ptr->cameraBin),
                                                      d_ptr, this);
index 45205c4..2e72654 100644 (file)
@@ -29,6 +29,7 @@
 #include "qtcamviewfinder.h"
 #include "qtcamdevice.h"
 #include "qtcammode.h"
 #include "qtcamviewfinder.h"
 #include "qtcamdevice.h"
 #include "qtcammode.h"
+#include "qtcamanalysisbin.h"
 
 class QtCamGStreamerMessageListener;
 class QtCamMode;
 
 class QtCamGStreamerMessageListener;
 class QtCamMode;
@@ -176,6 +177,10 @@ public:
     }
   }
 
     }
   }
 
+  void addViewfinderFilters() {
+    addElements("viewfinder-filter", conf->viewfinderFilters());
+  }
+
   bool isWrapperReady() {
     if (!wrapperVideoSource) {
       return false;
   bool isWrapperReady() {
     if (!wrapperVideoSource) {
       return false;
@@ -207,6 +212,36 @@ public:
                              Q_ARG(bool, d->q_ptr->isIdle()));
   }
 
                              Q_ARG(bool, d->q_ptr->isIdle()));
   }
 
+  void addElements(const char *prop, const QStringList& elements) {
+    QList<GstElement *> list;
+
+    if (elements.isEmpty()) {
+      return;
+    }
+
+    foreach (const QString& element, elements) {
+      GstElement *elem = gst_element_factory_make(element.toUtf8().constData(), NULL);
+      if (!elem) {
+       qWarning() << "Failed to create element" << element;
+      }
+      else {
+       list << elem;
+      }
+    }
+
+    if (list.isEmpty()) {
+      return;
+    }
+
+    GstElement *bin = qt_cam_analysis_bin_create(list, prop);
+    if (!bin) {
+      qWarning() << "Failed to create bin for" << prop;
+      return;
+    }
+
+    g_object_set(cameraBin, prop, bin, NULL);
+  }
+
 #if 0
   void resetCapabilities() {
     g_object_set(cameraBin, "zoom", 1.0, NULL);
 #if 0
   void resetCapabilities() {
     g_object_set(cameraBin, "zoom", 1.0, NULL);