[1.0.4][ut] use future/promise instead of conditional variable 43/281343/5
authorSeungbae Shin <seungbae.shin@samsung.com>
Thu, 15 Sep 2022 12:05:10 +0000 (21:05 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Wed, 28 Sep 2022 00:23:34 +0000 (09:23 +0900)
reduces global variables as well as avoiding of spurious wake-ups

In addition, using namespace std also removed.

Change-Id: I8426a3f14f78d50a085bf4bd08fc0699c7583c92

packaging/capi-media-transporter.spec
src/MediaSourceBinAudioTest.cpp
src/MediaSourceBinCamera.cpp
src/MediaSourceBinMic.cpp
src/MediaSourceBinVideoTest.cpp
unittest/ut_base.hpp
unittest/ut_rist_receiver.cpp
unittest/ut_srt_receiver.cpp

index 3f42f7a..7db5624 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-transporter
 Summary:    A Media Transporter library in Tizen Native API
-Version:    1.0.3
+Version:    1.0.4
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 6ef211a..af465f4 100644 (file)
@@ -23,7 +23,6 @@
 
 #include <algorithm>
 
-using namespace std;
 using namespace tizen_media_transporter;
 
 MediaSourceBinAudioTest::MediaSourceBinAudioTest(bundle* params)
index e7a3e50..7e40802 100644 (file)
@@ -24,7 +24,6 @@
 
 #include <algorithm>
 
-using namespace std;
 using namespace tizen_media_transporter;
 
 MediaSourceBinCamera::MediaSourceBinCamera(bundle* params)
index d5fa83e..1ff8745 100644 (file)
@@ -27,7 +27,6 @@
 #include <algorithm>
 #include <sstream>
 
-using namespace std;
 using namespace tizen_media_transporter;
 
 MediaSourceBinMic::MediaSourceBinMic(bundle* params)
@@ -128,7 +127,7 @@ void MediaSourceBinMic::setSoundStreamInfo(sound_stream_info_h streamInfo)
        LOG_INFO("stream_info[%p, type:%s, index:%d, aec_ref_device_id:%d]",
                streamInfo, stream_type, stream_index, aec_ref_device_id);
 
-       ostringstream stringStream;
+       std::ostringstream stringStream;
        stringStream << "props," << PA_PROP_MEDIA_ROLE << "=" <<
                stream_type << ", " << PA_PROP_MEDIA_PARENT_ID << "=" << stream_index;
        if (aec_ref_device_id != SOUND_MANAGER_STREAM_NO_REFERENCE_DEVICE)
index 2dee436..e8cc8b0 100644 (file)
@@ -23,7 +23,6 @@
 
 #include <algorithm>
 
-using namespace std;
 using namespace tizen_media_transporter;
 
 MediaSourceBinVideoTest::MediaSourceBinVideoTest(bundle* params)
index 32320f5..d96f785 100644 (file)
@@ -15,9 +15,9 @@
  */
 
 #include <chrono>
+#include <future>
 #include <thread>
 #include <mutex>
-#include <condition_variable>
 #include <dlog.h>
 #include <glib.h>
 #include <mtpr.h>
index b3e1939..db04e41 100644 (file)
@@ -18,9 +18,8 @@
 #include "ut_base.hpp"
 
 static GMainLoop* mainloop;
-static std::mutex dataLock;
-static std::condition_variable dataCV;
-static bool packetReceived;
+
+using namespace std::chrono_literals;
 
 static void* _run_rist_sender(void* ptr) {
        mtpr_h mtpr;
@@ -47,25 +46,22 @@ static void* _run_rist_sender(void* ptr) {
 static void dataPacketCb(mtpr_h mtpr, mtpr_media_type_e type,
                                                unsigned int id, media_packet_h packet, void *user_data) {
        LOGD("callback is invoked. type: %d, id: %d", type, id);
-       std::unique_lock<std::mutex> lock(dataLock);
-
-       packetReceived = true;
 
-       lock.unlock();
-       dataCV.notify_all();
+       auto p = static_cast<std::promise<bool>*>(user_data);
+       assert(p);
+       p->set_value(true);
 }
 
-static void waitDataPacket() {
-       std::unique_lock<std::mutex> lock(dataLock);
-       LOGD("start] wait video data");
-       if (dataCV.wait_for(lock, std::chrono::seconds(1),
-                       []{ return packetReceived; })) {
-           LOGD("finish waiting for packet received");
-       } else {
-           LOGW("1s timed out for packet receiving");
+static bool waitDataPacket(std::future<bool>& f) {
+       LOGI("start waiting for packet arrival...");
+
+       if (f.wait_for(1s) != std::future_status::ready) {
+               LOGW("timeout(1s)!!!");
+               return false;
        }
-       LOGD("stop] wait video data");
-       lock.unlock();
+
+       LOGI("ready to get the result!");
+       return f.get();
 }
 
 class MediaTransporterTestRistReceiverWithSender : public MediaTransporterTestBase {
@@ -76,7 +72,6 @@ public:
        void SetUp() override {
                LOGD("Enter");
                start_rist_sender();
-               packetReceived = false;
 
                int ret = mtpr_create(MTPR_CONNECTION_TYPE_RIST_RECEIVER, &_mtpr);
                ASSERT_EQ(ret, MTPR_ERROR_NONE);
@@ -420,12 +415,13 @@ TEST_F(MediaTransporterTestRistReceiverWithSender, start_p)
        ret = mtpr_set_receiver_address(_mtpr, _receiverPath.c_str());
        ASSERT_EQ(ret, MTPR_ERROR_NONE);
 
-       ret = mtpr_set_video_packet_cb(_mtpr, dataPacketCb, _mtpr);
+       std::promise<bool> p;
+       std::future<bool> f = p.get_future();
+       ret = mtpr_set_video_packet_cb(_mtpr, dataPacketCb, &p);
        ASSERT_EQ(ret, MTPR_ERROR_NONE);
 
        ret = mtpr_start(_mtpr);
        ASSERT_EQ(ret, MTPR_ERROR_NONE);
 
-       waitDataPacket();
-       ASSERT_TRUE(packetReceived);
+       ASSERT_TRUE(waitDataPacket(f));
 }
index 1d3bbf3..214cd65 100644 (file)
@@ -18,9 +18,8 @@
 #include "ut_base.hpp"
 
 static GMainLoop* mainloop;
-static std::mutex dataLock;
-static std::condition_variable dataCV;
-static bool packetReceived;
+
+using namespace std::chrono_literals;
 
 static void* _run_srt_sender(void* ptr) {
        mtpr_h mtpr;
@@ -47,25 +46,22 @@ static void* _run_srt_sender(void* ptr) {
 static void dataPacketCb(mtpr_h mtpr, mtpr_media_type_e type,
                                                unsigned int id, media_packet_h packet, void *user_data) {
        LOGD("callback is invoked. type: %d, id: %d", type, id);
-       std::unique_lock<std::mutex> lock(dataLock);
-
-       packetReceived = true;
 
-       lock.unlock();
-       dataCV.notify_all();
+       auto p = static_cast<std::promise<bool>*>(user_data);
+       assert(p);
+       p->set_value(true);
 }
 
-static void waitDataPacket() {
-       std::unique_lock<std::mutex> lock(dataLock);
-       LOGD("start] wait video data");
-       if (dataCV.wait_for(lock, std::chrono::seconds(1),
-                       []{ return packetReceived; })) {
-           LOGD("finish waiting for packet received");
-       } else {
-           LOGW("1s timed out for packet receiving");
+static bool waitDataPacket(std::future<bool>& f) {
+       LOGI("start waiting for packet arrival...");
+
+       if (f.wait_for(1s) != std::future_status::ready) {
+               LOGW("timeout(1s)!!!");
+               return false;
        }
-       LOGD("stop] wait video data");
-       lock.unlock();
+
+       LOGI("ready to get the result!");
+       return f.get();
 }
 
 class MediaTransporterTestSrtReceiverWithSender : public MediaTransporterTestBase {
@@ -76,7 +72,6 @@ public:
        void SetUp() override {
                LOGD("Enter");
                start_srt_sender();
-               packetReceived = false;
 
                int ret = mtpr_create(MTPR_CONNECTION_TYPE_SRT_RECEIVER, &_mtpr);
                ASSERT_EQ(ret, MTPR_ERROR_NONE);
@@ -584,12 +579,13 @@ TEST_F(MediaTransporterTestSrtReceiverWithSender, start_p)
        ret = mtpr_set_sender_address(_mtpr, _senderPath.c_str());
        ASSERT_EQ(ret, MTPR_ERROR_NONE);
 
-       ret = mtpr_set_video_packet_cb(_mtpr, dataPacketCb, _mtpr);
+       std::promise<bool> p;
+       std::future<bool> f = p.get_future();
+       ret = mtpr_set_video_packet_cb(_mtpr, dataPacketCb, &p);
        ASSERT_EQ(ret, MTPR_ERROR_NONE);
 
        ret = mtpr_start(_mtpr);
        ASSERT_EQ(ret, MTPR_ERROR_NONE);
 
-       waitDataPacket();
-       ASSERT_TRUE(packetReceived);
+       ASSERT_TRUE(waitDataPacket(f));
 }