From cbc02dddfd8be5be33f55eb81bbf8097e171783f Mon Sep 17 00:00:00 2001
From: Emmanuel Lepage Vallee <emmanuel.lepage@savoirfairelinux.com>
Date: Fri, 10 Apr 2015 11:33:09 -0400
Subject: [PATCH] video: Add color space getter

Refs #70057
---
 src/private/directrenderer.cpp | 36 +++++++++++++++++-----------------
 src/private/directrenderer.h   | 25 ++++++++++++-----------
 src/private/shmrenderer.cpp    |  5 +++++
 src/private/shmrenderer.h      |  3 ++-
 src/video/renderer.h           | 11 +++++++++++
 5 files changed, 50 insertions(+), 30 deletions(-)

diff --git a/src/private/directrenderer.cpp b/src/private/directrenderer.cpp
index 7cd788a5..6fcb1bcb 100644
--- a/src/private/directrenderer.cpp
+++ b/src/private/directrenderer.cpp
@@ -40,17 +40,13 @@ class DirectRendererPrivate : public QObject
    Q_OBJECT
 public:
    DirectRendererPrivate(Video::DirectRenderer* parent);
-
-   //Attributes
-
 private:
-   Video::DirectRenderer* q_ptr;
-
+//    Video::DirectRenderer* q_ptr;
 };
 
 }
 
-Video::DirectRendererPrivate::DirectRendererPrivate(Video::DirectRenderer* parent) : QObject(parent), q_ptr(parent)
+Video::DirectRendererPrivate::DirectRendererPrivate(Video::DirectRenderer* parent) : QObject(parent)/*, q_ptr(parent)*/
 {
 }
 
@@ -67,26 +63,30 @@ Video::DirectRenderer::~DirectRenderer()
 
 void Video::DirectRenderer::startRendering()
 {
-
-    qWarning() << "STARTING RENDERING";
-    Video::Renderer::d_ptr->m_isRendering = true;
-    emit started();
+   qWarning() << "STARTING RENDERING";
+   Video::Renderer::d_ptr->m_isRendering = true;
+   emit started();
 }
 void Video::DirectRenderer::stopRendering ()
 {
-    qWarning() << "STOPPING RENDERING";
-    Video::Renderer::d_ptr->m_isRendering = false;
-    emit stopped();
+   qWarning() << "STOPPING RENDERING";
+   Video::Renderer::d_ptr->m_isRendering = false;
+   emit stopped();
 }
 
 void Video::DirectRenderer::onNewFrame(const QByteArray& frame)
 {
-    if (!isRendering()) {
-       return;
-    }
+   if (!isRendering()) {
+      return;
+   }
 
-    Video::Renderer::d_ptr->m_pFrame = const_cast<char*>(frame.data());
-    emit frameUpdated();
+   Video::Renderer::d_ptr->m_pFrame = const_cast<char*>(frame.data());
+   emit frameUpdated();
+}
+
+Video::Renderer::ColorSpace Video::DirectRenderer::colorSpace() const
+{
+   return Video::Renderer::ColorSpace::RGBA;
 }
 
 #include <directrenderer.moc>
diff --git a/src/private/directrenderer.h b/src/private/directrenderer.h
index a71fb06b..db6a2d99 100644
--- a/src/private/directrenderer.h
+++ b/src/private/directrenderer.h
@@ -42,21 +42,24 @@ class LIB_EXPORT DirectRenderer : public Renderer {
    Q_OBJECT
    #pragma GCC diagnostic pop
 
-   public:
+public:
 
-      //Constructor
-      DirectRenderer (const QByteArray& id, const QSize& res);
-      virtual ~DirectRenderer();
+   //Constructor
+   DirectRenderer (const QByteArray& id, const QSize& res);
+   virtual ~DirectRenderer();
 
-      void onNewFrame(const QByteArray& frame);
+   //Getter
+   virtual ColorSpace colorSpace() const override;
 
-  public Q_SLOTS:
-      virtual void startRendering() override;
-      virtual void stopRendering () override;
+   void onNewFrame(const QByteArray& frame);
 
-  private:
-     QScopedPointer<DirectRendererPrivate> d_ptr;
-     Q_DECLARE_PRIVATE(DirectRenderer)
+public Q_SLOTS:
+   virtual void startRendering() override;
+   virtual void stopRendering () override;
+
+private:
+   QScopedPointer<DirectRendererPrivate> d_ptr;
+   Q_DECLARE_PRIVATE(DirectRenderer)
 
 };
 
diff --git a/src/private/shmrenderer.cpp b/src/private/shmrenderer.cpp
index 1cced05c..32564661 100644
--- a/src/private/shmrenderer.cpp
+++ b/src/private/shmrenderer.cpp
@@ -340,6 +340,11 @@ const QByteArray& ShmRenderer::currentFrame() const
    return Renderer::currentFrame();
 }
 
+Video::Renderer::ColorSpace ShmRenderer::colorSpace() const
+{
+   return Video::Renderer::ColorSpace::BGRA;
+}
+
 /*****************************************************************************
  *                                                                           *
  *                                 Setters                                   *
diff --git a/src/private/shmrenderer.h b/src/private/shmrenderer.h
index f77a31ee..63e042d2 100644
--- a/src/private/shmrenderer.h
+++ b/src/private/shmrenderer.h
@@ -54,8 +54,9 @@ public:
    bool startShm ();
 
    //Getters
-   virtual int   fps() const;
+   int fps() const;
    virtual const QByteArray& currentFrame() const override;
+   virtual ColorSpace        colorSpace  () const override;
 
    //Setters
    void setShmPath(const QString& path);
diff --git a/src/video/renderer.h b/src/video/renderer.h
index 9541d334..a2db70f0 100644
--- a/src/video/renderer.h
+++ b/src/video/renderer.h
@@ -58,6 +58,16 @@ class LIB_EXPORT Renderer : public QObject
    friend class VideoRendererManagerPrivate ;
 
 public:
+
+   /**
+    * Each platform may have its preferred color space. To be able to use a
+    * client on multiple platforms, they need to check the colorspace.
+    */
+   enum class ColorSpace {
+      BGRA , /*!< 32bit BLUE  GREEN RED ALPHA */
+      RGBA , /*!< 32bit ALPHA GREEN RED BLUE  */
+   };
+
    //Constructor
    Renderer (const QByteArray& id,  const QSize& res);
    virtual ~Renderer();
@@ -67,6 +77,7 @@ public:
    virtual const QByteArray& currentFrame    () const;
    virtual QSize             size            () const;
    virtual QMutex*           mutex           () const;
+   virtual ColorSpace        colorSpace      () const = 0;
 
    void setSize(const QSize& size) const;
 
-- 
GitLab