DSBuffer: add registerCallbackAcquirable function 07/242007/1
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 20 Aug 2020 23:23:54 +0000 (08:23 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Fri, 21 Aug 2020 10:06:35 +0000 (19:06 +0900)
call a callback function when the DSBufferQueue can aquire

Change-Id: I89672b5c7f6b160c1198b52c76e3c2013edcf803

src/DSBuffer/DSBufferQueueTBMImpl.cpp
src/DSBuffer/DSBufferQueueTBMImpl.h
src/DSBuffer/IDSBufferQueue.h

index eed20ff..4640d3a 100644 (file)
@@ -29,6 +29,9 @@
 namespace display_server
 {
 
+// the static variables.
+DSSignal<void *> DSBufferQueueTBMImpl::__aquirableSignal;
+
 DSBufferQueueTBMImpl::DSBufferQueueTBMImpl(int slotSize, int bufferWidth, int bufferHeight, IDSBuffer::Format format)
        : __slotSize{slotSize},
          __bufferWidth{bufferWidth},
@@ -39,6 +42,8 @@ DSBufferQueueTBMImpl::DSBufferQueueTBMImpl(int slotSize, int bufferWidth, int bu
        if (!__tqueue) {
                DSLOG_ERR("DSBufferTBM", "tbm_surface_queue_create fails.");
        }
+
+       tbm_surface_queue_add_acquirable_cb(__tqueue, __onAquireable, this);
 }
 
 DSBufferQueueTBMImpl::DSBufferQueueTBMImpl(tbm_surface_queue_h tqueue)
@@ -47,7 +52,9 @@ DSBufferQueueTBMImpl::DSBufferQueueTBMImpl(tbm_surface_queue_h tqueue)
          __bufferHeight{tbm_surface_queue_get_height(tqueue)},
          __format{DSBufferTBMImpl::getBufferFormat(tbm_surface_queue_get_format(tqueue))},
          __tqueue{tqueue}
-{}
+{
+       tbm_surface_queue_add_acquirable_cb(__tqueue, __onAquireable, this);
+}
 
 DSBufferQueueTBMImpl::~DSBufferQueueTBMImpl()
 {
@@ -155,8 +162,16 @@ bool DSBufferQueueTBMImpl::canAcquireBuffer(bool wait)
                return false;
 
        return true;
+}
 
-       return true;
+void DSBufferQueueTBMImpl::registerCallbackAcquirable(DSObject *slot, std::function<void(void *)> func)
+{
+       __aquirableSignal.connect(slot, func);
+}
+
+void DSBufferQueueTBMImpl::__onAquireable(tbm_surface_queue_h surface_queue, void *data)
+{
+       __aquirableSignal.emit(data);
 }
 
 }
index 27b8165..f74a94e 100644 (file)
@@ -25,6 +25,7 @@
 #define __DS_BUFFER_QUEUE_TBM_IMPL_H_
 
 #include "IDSBufferQueue.h"
+#include "DSSignal.h"
 #include <tbm_surface_queue.h>
 #include <vector>
 
@@ -48,6 +49,7 @@ public:
        bool                       releaseBuffer(std::shared_ptr<IDSBuffer> buffer) override;
 
        bool                       canAcquireBuffer(bool wait) override;
+       void                       registerCallbackAcquirable(DSObject *slot, std::function<void(void *)> func) override;
 
 private:
        int __slotSize;
@@ -56,6 +58,9 @@ private:
        IDSBuffer::Format __format;
        tbm_surface_queue_h __tqueue;
        std::vector<std::shared_ptr<IDSBuffer>> __bufferVector;
+
+       static void __onAquireable(tbm_surface_queue_h surface_queue, void *data);
+       static DSSignal<void *> __aquirableSignal;
 };
 
 }
index 5a8a4a0..80ade8b 100644 (file)
 #define __I_DS_BUFFER_QUEUE_H__
 
 #include "IDSBuffer.h"
+#include "DSObject.h"
 
 namespace display_server
 {
 
-class IDSBufferQueue
+class IDSBufferQueue : public DSObject
 {
 public:
        virtual ~IDSBufferQueue() = default;
@@ -43,6 +44,7 @@ public:
        virtual bool                       releaseBuffer(std::shared_ptr<IDSBuffer> ) = 0;
 
        virtual bool                       canAcquireBuffer(bool wait) = 0;
+       virtual void                       registerCallbackAcquirable(DSObject *slot, std::function<void(void *)> func) = 0;
 };
 
 }