From a824c2da1a84b4d370c3ef8a4e7a7b66b6978b6b Mon Sep 17 00:00:00 2001 From: Mohammed Hassan Date: Thu, 5 Mar 2015 19:35:11 +0200 Subject: [PATCH] watch for zoom and max-zoom property changes. camerabin can signal a change in those properties and we need to communicate those back to the application --- .../gstreamer/camerabin/camerabinzoom.cpp | 32 ++++++++++++++++++- .../gstreamer/camerabin/camerabinzoom.h | 4 +++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/plugins/gstreamer/camerabin/camerabinzoom.cpp b/src/plugins/gstreamer/camerabin/camerabinzoom.cpp index a25cf68b..372d8459 100644 --- a/src/plugins/gstreamer/camerabin/camerabinzoom.cpp +++ b/src/plugins/gstreamer/camerabin/camerabinzoom.cpp @@ -45,7 +45,9 @@ CameraBinZoom::CameraBinZoom(CameraBinSession *session) , m_requestedOpticalZoom(1.0) , m_requestedDigitalZoom(1.0) { - + GstElement *camerabin = m_session->cameraBin(); + g_signal_connect(G_OBJECT(camerabin), "notify::zoom", G_CALLBACK(updateZoom), this); + g_signal_connect(G_OBJECT(camerabin), "notify::max-zoom", G_CALLBACK(updateMaxZoom), this); } CameraBinZoom::~CameraBinZoom() @@ -108,4 +110,32 @@ void CameraBinZoom::zoomTo(qreal optical, qreal digital) emit currentDigitalZoomChanged(digital); } +void CameraBinZoom::updateZoom(GObject *o, GParamSpec *p, gpointer d) +{ + Q_UNUSED(p); + + gfloat zoomFactor = 1.0; + g_object_get(o, ZOOM_PROPERTY, &zoomFactor, NULL); + + CameraBinZoom *zoom = reinterpret_cast(d); + + QMetaObject::invokeMethod(zoom, "currentDigitalZoomChanged", + Qt::QueuedConnection, + Q_ARG(qreal, zoomFactor)); +} + +void CameraBinZoom::updateMaxZoom(GObject *o, GParamSpec *p, gpointer d) +{ + Q_UNUSED(p); + + gfloat zoomFactor = 1.0; + g_object_get(o, MAX_ZOOM_PROPERTY, &zoomFactor, NULL); + + CameraBinZoom *zoom = reinterpret_cast(d); + + QMetaObject::invokeMethod(zoom, "maximumOpticalZoomChanged", + Qt::QueuedConnection, + Q_ARG(qreal, zoomFactor)); +} + QT_END_NAMESPACE diff --git a/src/plugins/gstreamer/camerabin/camerabinzoom.h b/src/plugins/gstreamer/camerabin/camerabinzoom.h index 061836a4..cdc59349 100644 --- a/src/plugins/gstreamer/camerabin/camerabinzoom.h +++ b/src/plugins/gstreamer/camerabin/camerabinzoom.h @@ -35,6 +35,7 @@ #define CAMERABINZOOMCONTROL_H #include +#include QT_BEGIN_NAMESPACE @@ -58,6 +59,9 @@ public: void zoomTo(qreal optical, qreal digital); private: + static void updateZoom(GObject *o, GParamSpec *p, gpointer d); + static void updateMaxZoom(GObject *o, GParamSpec *p, gpointer d); + CameraBinSession *m_session; qreal m_requestedOpticalZoom; qreal m_requestedDigitalZoom;