Added NoFaceDetection quirk
[harmattan/cameraplus] / declarative / viewfinder.cpp
index 6c9c36f..841fd14 100644 (file)
@@ -43,6 +43,7 @@ Viewfinder::Viewfinder(QQuickItem *parent) :
   m_renderer(0),
   m_cam(0),
   m_conf(0),
+  m_dev(0),
   m_enabled(true) {
 
 #if defined(QT4)
@@ -92,12 +93,14 @@ void Viewfinder::setCamera(Camera *camera) {
 
   if (m_cam) {
     QObject::disconnect(m_cam, SIGNAL(deviceChanged()), this, SLOT(deviceChanged()));
+    QObject::disconnect(m_cam, SIGNAL(prepareForDeviceChange()), this, SLOT(prepareForDeviceChange()));
   }
 
   m_cam = camera;
 
   if (m_cam) {
     QObject::connect(m_cam, SIGNAL(deviceChanged()), this, SLOT(deviceChanged()));
+    QObject::connect(m_cam, SIGNAL(prepareForDeviceChange()), this, SLOT(prepareForDeviceChange()));
   }
 
   if (isComponentComplete()) {
@@ -219,10 +222,15 @@ void Viewfinder::deviceChanged() {
     return;
   }
 
-  QtCamDevice *dev = m_cam->device();
+  if (m_dev) {
+    qmlInfo(this) << "Cannot set a new device without cleaning up the existing one";
+    abort();
+  }
+
+  m_dev = m_cam->device();
 
-  if (dev) {
-    dev->setViewfinder(this);
+  if (m_dev) {
+    m_dev->setViewfinder(this);
   }
 
   emit renderAreaChanged();
@@ -233,12 +241,6 @@ GstElement *Viewfinder::sinkElement() {
   return m_renderer ? m_renderer->sinkElement() : 0;
 }
 
-bool Viewfinder::setDevice(QtCamDevice *device) {
-  Q_UNUSED(device);
-
-  return true;
-}
-
 void Viewfinder::stop() {
   if (m_renderer) {
     m_renderer->reset();
@@ -250,3 +252,10 @@ void Viewfinder::updateRequested() {
     update();
   }
 }
+
+void Viewfinder::prepareForDeviceChange() {
+  if (m_dev) {
+    m_dev->setViewfinder(0);
+    m_dev = 0;
+  }
+}