From fbf77cc60d23eaac02649223267f0fb892472686 Mon Sep 17 00:00:00 2001 From: Mohammed Sameer Date: Sat, 15 Dec 2012 21:06:06 +0200 Subject: [PATCH] Added renderArea property to Camera --- imports/camera.cpp | 8 +++++--- imports/camera.h | 5 +++++ lib/qtcamgraphicsviewfinder.cpp | 9 +++++++++ lib/qtcamgraphicsviewfinder.h | 5 +++++ lib/qtcamviewfinderrenderer.h | 4 ++++ lib/qtcamviewfinderrenderergeneric.cpp | 5 +++++ lib/qtcamviewfinderrenderergeneric.h | 1 + lib/qtcamviewfinderrenderermeego.cpp | 4 ++++ lib/qtcamviewfinderrenderermeego.h | 3 ++- 9 files changed, 40 insertions(+), 4 deletions(-) diff --git a/imports/camera.cpp b/imports/camera.cpp index 833b580..1b36d73 100644 --- a/imports/camera.cpp +++ b/imports/camera.cpp @@ -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(); diff --git a/imports/camera.h b/imports/camera.h index 13bcb30..60333f7 100644 --- a/imports/camera.h +++ b/imports/camera.h @@ -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(); diff --git a/lib/qtcamgraphicsviewfinder.cpp b/lib/qtcamgraphicsviewfinder.cpp index f701fb4..2c9b82f 100644 --- a/lib/qtcamgraphicsviewfinder.cpp +++ b/lib/qtcamgraphicsviewfinder.cpp @@ -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(); +} diff --git a/lib/qtcamgraphicsviewfinder.h b/lib/qtcamgraphicsviewfinder.h index dbccbc4..25edab1 100644 --- a/lib/qtcamgraphicsviewfinder.h +++ b/lib/qtcamgraphicsviewfinder.h @@ -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); diff --git a/lib/qtcamviewfinderrenderer.h b/lib/qtcamviewfinderrenderer.h index 4415862..e7b7b6b 100644 --- a/lib/qtcamviewfinderrenderer.h +++ b/lib/qtcamviewfinderrenderer.h @@ -25,6 +25,7 @@ #include #include +#include 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) \ diff --git a/lib/qtcamviewfinderrenderergeneric.cpp b/lib/qtcamviewfinderrenderergeneric.cpp index 5d78f9e..8b85000 100644 --- a/lib/qtcamviewfinderrenderergeneric.cpp +++ b/lib/qtcamviewfinderrenderergeneric.cpp @@ -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) { diff --git a/lib/qtcamviewfinderrenderergeneric.h b/lib/qtcamviewfinderrenderergeneric.h index 9988afd..f16f07c 100644 --- a/lib/qtcamviewfinderrenderergeneric.h +++ b/lib/qtcamviewfinderrenderergeneric.h @@ -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, diff --git a/lib/qtcamviewfinderrenderermeego.cpp b/lib/qtcamviewfinderrenderermeego.cpp index b3d9866..87bcc9d 100644 --- a/lib/qtcamviewfinderrenderermeego.cpp +++ b/lib/qtcamviewfinderrenderermeego.cpp @@ -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(); } diff --git a/lib/qtcamviewfinderrenderermeego.h b/lib/qtcamviewfinderrenderermeego.h index 714ff12..a48d850 100644 --- a/lib/qtcamviewfinderrenderermeego.h +++ b/lib/qtcamviewfinderrenderermeego.h @@ -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; -- 2.25.1