Added renderArea property to Camera
authorMohammed Sameer <msameer@foolab.org>
Sat, 15 Dec 2012 19:06:06 +0000 (21:06 +0200)
committerMohammed Sameer <msameer@foolab.org>
Sat, 15 Dec 2012 19:06:06 +0000 (21:06 +0200)
imports/camera.cpp
imports/camera.h
lib/qtcamgraphicsviewfinder.cpp
lib/qtcamgraphicsviewfinder.h
lib/qtcamviewfinderrenderer.h
lib/qtcamviewfinderrenderergeneric.cpp
lib/qtcamviewfinderrenderergeneric.h
lib/qtcamviewfinderrenderermeego.cpp
lib/qtcamviewfinderrenderermeego.h

index 833b580..1b36d73 100644 (file)
@@ -48,8 +48,6 @@
 #include "videomute.h"
 #include "videotorch.h"
 
-// TODO: a viewfinder class that inherits QDeclarativeItem
-
 Camera::Camera(QDeclarativeItem *parent) :
   QDeclarativeItem(parent),
   m_cam(new QtCamera(this)),
@@ -73,7 +71,7 @@ Camera::Camera(QDeclarativeItem *parent) :
   m_videoMute(0),
   m_videoTorch(0) {
 
-  // TODO:
+  QObject::connect(m_vf, SIGNAL(renderAreaChanged()), this, SIGNAL(renderAreaChanged()));
 }
 
 Camera::~Camera() {
@@ -284,6 +282,10 @@ void Camera::setNotifications(Notifications *notifications) {
   }
 }
 
+QRectF Camera::renderArea() const {
+  return m_vf->renderArea();
+}
+
 void Camera::resetCapabilities() {
   QtCamDevice *dev = device();
 
index 13bcb30..60333f7 100644 (file)
@@ -60,6 +60,8 @@ class Camera : public QDeclarativeItem {
   Q_PROPERTY(QString videoSuffix READ videoSuffix CONSTANT);
   Q_PROPERTY(Notifications *notifications READ notifications WRITE setNotifications NOTIFY notificationsChanged);
 
+  Q_PROPERTY(QRectF renderArea READ renderArea NOTIFY renderAreaChanged);
+
   Q_PROPERTY(Zoom *zoom READ zoom NOTIFY zoomChanged);
   Q_PROPERTY(Flash *flash READ flash NOTIFY flashChanged);
   Q_PROPERTY(Scene *scene READ scene NOTIFY sceneChanged);
@@ -132,6 +134,8 @@ public:
   VideoMute *videoMute() const;
   VideoTorch *videoTorch() const;
 
+  QRectF renderArea() const;
+
 signals:
   void deviceCountChanged();
   void deviceIdChanged();
@@ -141,6 +145,7 @@ signals:
   void runningStateChanged();
   void error(const QString& message, int code, const QString& debug);
   void notificationsChanged();
+  void renderAreaChanged();
 
   void zoomChanged();
   void flashChanged();
index f701fb4..2c9b82f 100644 (file)
@@ -38,6 +38,7 @@ public:
 
       renderer->resize(q_ptr->size());
       QObject::connect(renderer, SIGNAL(updateRequested()), q_ptr, SLOT(updateRequested()));
+      QObject::connect(renderer, SIGNAL(renderAreaChanged()), q_ptr, SIGNAL(renderAreaChanged()));
     }
   }
 
@@ -134,3 +135,11 @@ void QtCamGraphicsViewfinder::updateRequested() {
 void QtCamGraphicsViewfinder::stop() {
   d_ptr->resetBackend();
 }
+
+QRectF QtCamGraphicsViewfinder::renderArea() const {
+  if (!d_ptr->renderer) {
+    return QRectF();
+  }
+
+  return d_ptr->renderer->renderArea();
+}
index dbccbc4..25edab1 100644 (file)
@@ -43,6 +43,11 @@ public:
   virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
                     QWidget *widget = 0);
 
+  QRectF renderArea() const;
+
+signals:
+  void renderAreaChanged();
+
 protected:
   void resizeEvent(QGraphicsSceneResizeEvent *event);
 
index 4415862..e7b7b6b 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <QObject>
 #include <gst/gst.h>
+#include <QRectF>
 
 class QtCamConfig;
 class QMetaObject;
@@ -45,11 +46,14 @@ public:
   virtual void reset() = 0;
   virtual GstElement *sinkElement() = 0;
 
+  virtual QRectF renderArea() = 0;
+
 protected:
   QtCamViewfinderRenderer(QtCamConfig *config, QObject *parent = 0);
 
 signals:
   void updateRequested();
+  void renderAreaChanged();
 };
 
 #define QT_CAM_VIEWFINDER_RENDERER(key, klass) \
index 5d78f9e..8b85000 100644 (file)
@@ -126,6 +126,11 @@ GstElement *QtCamViewfinderRendererGeneric::sinkElement() {
   return m_elem;
 }
 
+QRectF QtCamViewfinderRendererGeneric::renderArea() {
+  // TODO: calculate this and emit renderAreaChanged() signal when needed
+  return QRectF();
+}
+
 void QtCamViewfinderRendererGeneric::on_gst_buffer(GstElement *element,
                                                   GstBuffer *buf, GstPad *pad,
                                                   QtCamViewfinderRendererGeneric *q) {
index 9988afd..f16f07c 100644 (file)
@@ -39,6 +39,7 @@ public:
   virtual void resize(const QSizeF& size);
   virtual void reset();
   virtual GstElement *sinkElement();
+  QRectF renderArea();
 
 private:
   static void on_gst_buffer(GstElement *element, GstBuffer *buf, GstPad *pad,
index b3d9866..87bcc9d 100644 (file)
@@ -123,6 +123,8 @@ void QtCamViewfinderRendererMeeGo::resize(const QSizeF& size) {
   // TODO: this will destroy everything
   // but we need a way to reset the viewport and the transformation matrix only.
   m_needsInit = true;
+
+  emit renderAreaChanged();
 }
 
 void QtCamViewfinderRendererMeeGo::reset() {
@@ -341,4 +343,6 @@ void QtCamViewfinderRendererMeeGo::setVideoSize(const QSizeF& size) {
   calculateCoords();
 
   m_needsInit = true;
+
+  emit renderAreaChanged();
 }
index 714ff12..a48d850 100644 (file)
@@ -44,6 +44,8 @@ public:
   virtual void reset();
   virtual GstElement *sinkElement();
 
+  QRectF renderArea();
+
 private slots:
   void setVideoSize(const QSizeF& size);
 
@@ -56,7 +58,6 @@ private:
   void createProgram();
   void paintFrame(QPainter *painter, int frame);
   void calculateCoords();
-  QRectF renderArea();
 
   QtCamConfig *m_conf;
   GstElement *m_sink;