mv3d: get the latest in mDfsAsyncQueue 06/284806/2
authorTae-Young Chung <ty83.chung@samsung.com>
Mon, 28 Nov 2022 04:54:52 +0000 (13:54 +0900)
committerTae-Young Chung <ty83.chung@samsung.com>
Mon, 28 Nov 2022 07:06:43 +0000 (16:06 +0900)
[Issue type] update

This commit is manually patched from https://review.tizen.org/gerrit/#/c/platform/core/api/mediavision/+/284241/
to avoid conflict.

Change-Id: Ic402b8d08b2967810401ff29e685ec5aad0891c2
Signed-off-by: Tae-Young Chung <ty83.chung@samsung.com>
mv_3d/3d/src/Mv3d.cpp

index 4bbee8c..813044c 100644 (file)
@@ -70,6 +70,13 @@ namespace mv3d
                }
 
                if (mDfsAsyncQueue) {
+                       gpointer base = nullptr;
+                       while ((base = g_async_queue_try_pop(mDfsAsyncQueue))) {
+                               auto pItem = static_cast<std::shared_ptr<DfsInputData> *>(base);
+                               auto item = std::move(*pItem);
+                               delete pItem;
+                               item.reset();
+                       }
                        g_async_queue_unref(mDfsAsyncQueue);
                }
 
@@ -403,6 +410,18 @@ namespace mv3d
        {
                Mv3d *handle = static_cast<Mv3d*>(data);
                while(handle->mDfsIsLive) {
+                       auto queueLength = static_cast<int>(g_async_queue_length(handle->mDfsAsyncQueue));
+                       if (queueLength < 0)
+                               continue;
+
+                       for (int itemIndex = 0; itemIndex < queueLength; itemIndex++) {
+                               gpointer base = g_async_queue_try_pop(handle->mDfsAsyncQueue);
+                               auto pItem = static_cast<std::shared_ptr<DfsInputData> *>(base);
+                               auto item = std::move(*pItem);
+                               delete pItem;
+                               item.reset();
+                       }
+
                        gpointer base = g_async_queue_try_pop(handle->mDfsAsyncQueue);
                        if (!base) {
                                continue;