DSBufferQueueTBMImpl: create IDSBuffer in acquire_buffer 19/241719/1
authorChangyeon Lee <cyeon.lee@samsung.com>
Tue, 4 Aug 2020 05:31:16 +0000 (14:31 +0900)
committerSung-Jin Park <sj76.park@samsung.com>
Thu, 20 Aug 2020 10:05:18 +0000 (19:05 +0900)
tbm_surface of compositor is dequeued in render engine.
so tbm_surface can be acquired even if BufferQueue doesn't dequeue it

Change-Id: I7acbe8dcebebb063bbb977d5402ce96ea2a01a9f

src/DSBuffer/DSBufferQueueTBMImpl.cpp

index c73e199..f0ae5b3 100644 (file)
@@ -104,8 +104,10 @@ std::shared_ptr<IDSBuffer> DSBufferQueueTBMImpl::acquireBuffer()
 
        auto iter= std::find_if(__bufferVector.begin(), __bufferVector.end(), isMatchFunc);
        if (iter == __bufferVector.end()) {
-               DSLOG_ERR("BuffeQueueTBM", "No Buffer in this BufferQueue.");
-               return nullptr;
+               // create a IDSBuffer with tsurface.
+               __bufferVector.push_back(std::make_shared<DSBufferTBMImpl>(__bufferWidth, __bufferWidth, __format, tsurface));
+
+               return __bufferVector.back();
        }
 
        return *iter;
@@ -126,10 +128,10 @@ bool DSBufferQueueTBMImpl::releaseBuffer(std::shared_ptr<IDSBuffer> buffer)
 
 bool DSBufferQueueTBMImpl::canAcquireBuffer(bool wait)
 {
-       if (!tbm_surface_queue_can_acquire(__tqueue, wait)) {
-               DSLOG_ERR("BuffeQueueTBM", "tbm_surface_queue_can_acquire fails.");
+       if (!tbm_surface_queue_can_acquire(__tqueue, wait))
                return false;
-       }
+
+       return true;
 
        return true;
 }