Implemented QtCamEvComp and QtCamVideoTorch
authorMohammed Sameer <msameer@foolab.org>
Sat, 1 Sep 2012 16:19:42 +0000 (19:19 +0300)
committerMohammed Sameer <msameer@foolab.org>
Thu, 6 Sep 2012 16:10:10 +0000 (19:10 +0300)
lib/lib.pro
lib/qtcamdevice.h
lib/qtcamevcomp.cpp [new file with mode: 0644]
lib/qtcamevcomp.h [new file with mode: 0644]
lib/qtcamvideotorch.cpp [new file with mode: 0644]
lib/qtcamvideotorch.h [new file with mode: 0644]

index 9606ccf..2d6b2cf 100644 (file)
@@ -15,14 +15,14 @@ HEADERS += qtcamconfig.h qtcamera.h qtcamscanner.h qtcamdevice.h qtcamviewfinder
            qtcamgraphicsviewfinder.h qtcamviewfinderrenderer.h \
            qtcamviewfinderrenderergeneric.h qtcamimagesettings.h qtcamvideosettings.h \
            qtcamimagemode.h qtcamvideomode.h qtcammetadata.h qtcamcapability.h \
-           qtcamzoom.h qtcamflash.h qtcamscene.h
+           qtcamzoom.h qtcamflash.h qtcamscene.h qtcamevcomp.h qtcamvideotorch.h
 
 SOURCES += qtcamconfig.cpp qtcamera.cpp qtcamscanner.cpp qtcamdevice.cpp qtcamviewfinder.cpp \
            qtcammode.cpp qtcamgstreamermessagehandler.cpp qtcamgstreamermessagelistener.cpp \
            qtcamgraphicsviewfinder.cpp qtcamviewfinderrenderer.cpp \
            qtcamviewfinderrenderergeneric.cpp qtcamimagesettings.cpp qtcamvideosettings.cpp \
            qtcamimagemode.cpp qtcamvideomode.cpp qtcammetadata.cpp qtcamcapability.cpp \
-           qtcamzoom.cpp qtcamflash.cpp qtcamscene.cpp
+           qtcamzoom.cpp qtcamflash.cpp qtcamscene.cpp qtcamevcomp.cpp qtcamvideotorch.cpp
 
 HEADERS += qtcammode_p.h qtcamdevice_p.h qtcamcapability_p.h
 
index 20b153c..64702ac 100644 (file)
@@ -57,6 +57,7 @@ private:
 
   friend class QtCamMetaData;
   friend class QtCamCapability;
+  friend class QtCamVideoTorch;
 
   QtCamDevicePrivate *d_ptr;
 };
diff --git a/lib/qtcamevcomp.cpp b/lib/qtcamevcomp.cpp
new file mode 100644 (file)
index 0000000..bdb26f4
--- /dev/null
@@ -0,0 +1,37 @@
+#include "qtcamevcomp.h"
+#include "qtcamcapability_p.h"
+
+#define EV_COMP_MIN -2.5
+#define EV_COMP_MAX +2.5
+
+QtCamEvComp::QtCamEvComp(QtCamDevice *dev, QObject *parent) :
+  QtCamCapability(new QtCamCapabilityPrivate(dev, QtCamCapability::EvComp, "ev-compensation"),
+                 parent) {
+
+}
+
+QtCamEvComp::~QtCamEvComp() {
+
+}
+
+qreal QtCamEvComp::value() {
+  qreal val = 0.0;
+
+  if (!d_ptr->floatValue(&val)) {
+    return 0.0;
+  }
+
+  return val;
+}
+
+bool QtCamEvComp::setValue(qreal val) {
+  return d_ptr->setFloatValue(val);
+}
+
+qreal QtCamEvComp::minimumValue() {
+  return EV_COMP_MIN;
+}
+
+qreal QtCamEvComp::maximumValue() {
+  return EV_COMP_MAX;
+}
diff --git a/lib/qtcamevcomp.h b/lib/qtcamevcomp.h
new file mode 100644 (file)
index 0000000..e0a2382
--- /dev/null
@@ -0,0 +1,22 @@
+// -*- c++ -*-
+
+#ifndef QT_CAM_EV_COMP_H
+#define QT_CAM_EV_COMP_H
+
+#include "qtcamcapability.h"
+
+class QtCamEvComp : public QtCamCapability {
+  Q_OBJECT
+
+public:
+  QtCamEvComp(QtCamDevice *dev, QObject *parent = 0);
+  ~QtCamEvComp();
+
+  qreal value();
+  bool setValue(qreal val);
+
+  qreal minimumValue();
+  qreal maximumValue();
+};
+
+#endif /* QT_CAM_EV_COMP_H */
diff --git a/lib/qtcamvideotorch.cpp b/lib/qtcamvideotorch.cpp
new file mode 100644 (file)
index 0000000..910eb3a
--- /dev/null
@@ -0,0 +1,56 @@
+#include "qtcamvideotorch.h"
+#include "qtcamdevice.h"
+#include "qtcamdevice_p.h"
+#include <QPointer>
+
+class QtCamVideoTorchPrivate {
+public:
+  static void torch_notify(GObject *gobject, GParamSpec *pspec, QtCamVideoTorch *q) {
+    Q_UNUSED(gobject);
+    Q_UNUSED(pspec);
+
+    QMetaObject::invokeMethod(q, "stateChanged", Qt::QueuedConnection);
+  }
+
+  QPointer<QtCamDevice> dev;
+  gulong handler;
+};
+
+QtCamVideoTorch::QtCamVideoTorch(QtCamDevice *dev, QObject *parent) :
+  QObject(parent), d_ptr(new QtCamVideoTorchPrivate) {
+
+  d_ptr->dev = dev;
+  d_ptr->handler = 0;
+
+  if (d_ptr->dev->d_ptr->videoSource) {
+    d_ptr->handler = g_signal_connect(d_ptr->dev->d_ptr->videoSource,
+                                     "notify::video-torch",
+                                     G_CALLBACK(QtCamVideoTorchPrivate::torch_notify), this);
+  }
+}
+
+QtCamVideoTorch::~QtCamVideoTorch() {
+  if (d_ptr->dev && d_ptr->handler) {
+    g_signal_handler_disconnect(d_ptr->dev->d_ptr->videoSource, d_ptr->handler);
+  }
+
+  delete d_ptr; d_ptr = 0;
+}
+
+void QtCamVideoTorch::setOn(bool on) {
+  gboolean val = on ? TRUE : FALSE;
+
+  if (d_ptr->dev->d_ptr->videoSource) {
+    g_object_set(d_ptr->dev->d_ptr->videoSource, "video-torch", val, NULL);
+  }
+}
+
+bool QtCamVideoTorch::isOn() const {
+  gboolean val = FALSE;
+
+  if (d_ptr->dev->d_ptr->videoSource) {
+    g_object_get(d_ptr->dev->d_ptr->videoSource, "video-torch", &val, NULL);
+  }
+
+  return (val == TRUE);
+}
diff --git a/lib/qtcamvideotorch.h b/lib/qtcamvideotorch.h
new file mode 100644 (file)
index 0000000..231fe78
--- /dev/null
@@ -0,0 +1,28 @@
+// -*- c++ -*-
+
+#ifndef QT_CAM_VIDEO_TORCH_H
+#define QT_CAM_VIDEO_TORCH_H
+
+#include <QObject>
+
+class QtCamDevice;
+class QtCamVideoTorchPrivate;
+
+class QtCamVideoTorch : public QObject {
+  Q_OBJECT
+
+public:
+  QtCamVideoTorch(QtCamDevice *dev, QObject *parent = 0);
+  ~QtCamVideoTorch();
+
+  void setOn(bool on);
+  bool isOn() const;
+
+signals:
+  void stateChanged();
+
+private:
+  QtCamVideoTorchPrivate *d_ptr;
+};
+
+#endif /* QT_CAM_VIDEO_TORCH_H */