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
#include <algorithm>
-using namespace std;
using namespace tizen_media_transporter;
MediaSourceBinAudioTest::MediaSourceBinAudioTest(bundle* params)
#include <algorithm>
-using namespace std;
using namespace tizen_media_transporter;
MediaSourceBinCamera::MediaSourceBinCamera(bundle* params)
#include <algorithm>
#include <sstream>
-using namespace std;
using namespace tizen_media_transporter;
MediaSourceBinMic::MediaSourceBinMic(bundle* params)
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)
#include <algorithm>
-using namespace std;
using namespace tizen_media_transporter;
MediaSourceBinVideoTest::MediaSourceBinVideoTest(bundle* params)
*/
#include <chrono>
+#include <future>
#include <thread>
#include <mutex>
-#include <condition_variable>
#include <dlog.h>
#include <glib.h>
#include <mtpr.h>
#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;
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 {
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);
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));
}
#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;
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 {
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);
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));
}