qv4l2: move setFrame out of renderer specific classes
authorOve Brynestad <ovebryne@cisco.com>
Tue, 1 Jul 2014 10:11:29 +0000 (12:11 +0200)
committerHans Verkuil <hans.verkuil@cisco.com>
Fri, 11 Jul 2014 13:27:22 +0000 (15:27 +0200)
Ongoing work to move aspect/crop/scale calculations from individual render
classes to the common capture-win class. Currently different renderers use
slightly different code to calculate the various cropping/scaling/etc. data.
This makes it hard to maintain.

Signed-off-by: Ove Brynestad <ovebryne@cisco.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/qv4l2/capture-win-gl.cpp
utils/qv4l2/capture-win-gl.h
utils/qv4l2/capture-win-qt.cpp
utils/qv4l2/capture-win-qt.h
utils/qv4l2/capture-win.cpp
utils/qv4l2/capture-win.h

index f16cf59..ae056c4 100644 (file)
@@ -52,17 +52,8 @@ void CaptureWinGL::resizeEvent(QResizeEvent *event)
        event->accept();
 }
 
-void CaptureWinGL::setFrame(int width, int height, __u32 format,
-               unsigned char *data, unsigned char *data2, const QString &info)
+void CaptureWinGL::updateFrameInfo()
 {
-        // Set (TODO: move to capture-win)
-        m_frameInfo.frameHeight = height;
-        m_frameInfo.frameWidth  = width;
-        m_frameInfo.format      = format;
-        m_frameInfo.planeData[0] = data;
-        m_frameInfo.planeData[1] = data2;
-        m_frameInfo.info        = info;
-
        // Get/copy (TODO: remove CaptureWinGLEngine and use direct or use pointer)
 #ifdef HAVE_QTGL
        m_videoSurface.setFrame(m_frameInfo.frameWidth, m_frameInfo.frameHeight,
@@ -246,7 +237,7 @@ void CaptureWinGLEngine::setSize(int width, int height)
 
        if (width > 0 && height > 0) {
                setMaximumSize(width, height);
-               resizeGL(width, height);
+               resizeGL(width, height); // TODO: necessary? Always called by resizeEvent()
        }
 }
 
index 29e4605..696b751 100644 (file)
@@ -107,8 +107,6 @@ public:
        CaptureWinGL();
        ~CaptureWinGL();
 
-       void setFrame(int width, int height, __u32 format,
-                     unsigned char *data, unsigned char *data2, const QString &info);
        void stop();
        bool hasNativeFormat(__u32 format);
        static bool isSupported();
@@ -119,6 +117,7 @@ public:
 
 protected:
        void resizeEvent(QResizeEvent *event);
+       void updateFrameInfo();
 
 private:
 #ifdef HAVE_QTGL
index ace7f9e..06fcd6d 100644 (file)
@@ -69,17 +69,8 @@ void CaptureWinQt::resizeEvent(QResizeEvent *event)
        paintFrame();
 }
 
-void CaptureWinQt::setFrame(int width, int height, __u32 format,
-               unsigned char *data, unsigned char *data2, const QString &info)
+void CaptureWinQt::updateFrameInfo()
 {
-        // Set (TODO: move to capture-win)
-        m_frameInfo.frameHeight = height;
-        m_frameInfo.frameWidth  = width;
-        m_frameInfo.format      = format;
-        m_frameInfo.planeData[0] = data;
-        m_frameInfo.planeData[1] = data2;
-        m_frameInfo.info        = info;
-
        // Get/copy (TODO: use direct?)
        m_data = m_frameInfo.planeData[0];
 
index f389be5..c867654 100644 (file)
@@ -42,9 +42,6 @@ public:
        CaptureWinQt();
        ~CaptureWinQt();
 
-       void setFrame(int width, int height, __u32 format,
-                     unsigned char *data, unsigned char *data2, const QString &info);
-
        void stop();
        bool hasNativeFormat(__u32 format);
        static bool isSupported() { return true; }
@@ -55,6 +52,7 @@ public:
 
 protected:
        void resizeEvent(QResizeEvent *event);
+       void updateFrameInfo();
 
 private:
        bool findNativeFormat(__u32 format, QImage::Format &dstFmt);
index c13c458..0d6861b 100644 (file)
@@ -34,8 +34,8 @@ double CaptureWin::m_pixelAspectRatio = 1.0;
 CropMethod CaptureWin::m_cropMethod = QV4L2_CROP_NONE;
 
 CaptureWin::CaptureWin() :
-       m_curWidth(-1),
-       m_curHeight(-1)
+       m_curWinWidth(-1),
+       m_curWinHeight(-1)
 {
        setWindowTitle("V4L2 Capture");
        m_hotkeyClose = new QShortcut(Qt::CTRL+Qt::Key_W, this);
@@ -60,6 +60,19 @@ CaptureWin::~CaptureWin()
        delete m_hotkeyScaleReset;
 }
 
+void CaptureWin::setFrame(int width, int height, __u32 format,
+               unsigned char *data, unsigned char *data2, const QString &info)
+{
+        m_frameInfo.frameHeight = height;
+        m_frameInfo.frameWidth  = width;
+        m_frameInfo.format      = format;
+        m_frameInfo.planeData[0] = data;
+        m_frameInfo.planeData[1] = data2;
+        m_frameInfo.info        = info;
+
+       updateFrameInfo();
+}
+
 void CaptureWin::buildWindow(QWidget *videoSurface)
 {
        int l, t, r, b;
@@ -77,10 +90,10 @@ void CaptureWin::resetSize()
                showNormal();
 
         // Force resize even if no size change
-       int w = m_curWidth;
-       int h = m_curHeight;
-       m_curWidth = -1;
-       m_curHeight = -1;
+       int w = m_curWinWidth;
+       int h = m_curWinHeight;
+       m_curWinWidth = -1;
+       m_curWinHeight = -1;
        resize(w, h);
 }
 
@@ -162,7 +175,7 @@ void CaptureWin::enableScaling(bool enable)
 {
        if (!enable) {
                QSize margins = getMargins();
-               QWidget::setMinimumSize(m_curWidth + margins.width(), m_curHeight + margins.height());
+               QWidget::setMinimumSize(m_curWinWidth + margins.width(), m_curWinHeight + margins.height());
        } else {
                QWidget::setMinimumSize(MIN_WIN_SIZE_WIDTH, MIN_WIN_SIZE_HEIGHT);
        }
@@ -177,11 +190,11 @@ void CaptureWin::resize(int width, int height)
 
        // Dont resize window if the frame size is the same in
        // the event the window has been paused when beeing resized.
-       if (width == m_curWidth && height == m_curHeight)
+       if (width == m_curWinWidth && height == m_curWinHeight)
                return;
 
-       m_curWidth = width;
-       m_curHeight = height;
+       m_curWinWidth = width;
+       m_curWinHeight = height;
 
        QSize margins = getMargins();
        h = margins.height() - cropHeight(width, height) * 2 + actualFrameHeight(height);
index 4678363..3a56601 100644 (file)
@@ -76,8 +76,8 @@ public:
         * @param data The frame data.
         * @param info A string containing capture information.
         */
-       virtual void setFrame(int width, int height, __u32 format,
-                             unsigned char *data, unsigned char *data2, const QString &info) = 0;
+       void setFrame(int width, int height, __u32 format,
+                     unsigned char *data, unsigned char *data2, const QString &info);
 
        /**
         * @brief Called when the capture stream is stopped.
@@ -186,6 +186,13 @@ protected:
        struct frameInfoStruct m_frameInfo;
 
        /**
+        * @brief Update frame information to renderer.
+        *
+        * @note Must be implemented by derived render dependent classes.
+        */
+       virtual void updateFrameInfo() = 0;
+
+       /**
         * @brief Determines if scaling is to be applied to video frame.
         */
        static bool m_enableScaling;
@@ -198,7 +205,7 @@ private:
        static CropMethod m_cropMethod;
        QShortcut *m_hotkeyClose;
        QShortcut *m_hotkeyScaleReset;
-       int m_curWidth;
-       int m_curHeight;
+       int m_curWinWidth;
+       int m_curWinHeight;
 };
 #endif