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},
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)
__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()
{
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);
}
}
#define __DS_BUFFER_QUEUE_TBM_IMPL_H_
#include "IDSBufferQueue.h"
+#include "DSSignal.h"
#include <tbm_surface_queue.h>
#include <vector>
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;
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;
};
}
#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;
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;
};
}