#include <algorithm>
#include <dlog.h>
#include <memory>
+#include <mutex>
#include "face_recognition_adapter.h"
#include "facenet_adapter.h"
using FaceRecognitionTask = ITask<FaceRecognitionInput, FaceRecognitionResult>;
using FacenetTask = ITask<FacenetInput, FacenetOutput>;
+static mutex g_face_recognition_mutex;
+
int mv_face_recognition_create_open(mv_face_recognition_h *handle)
{
if (!handle) {
int mv_face_recognition_destroy_open(mv_face_recognition_h handle)
{
+ lock_guard<mutex> lock(g_face_recognition_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_face_recognition_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
auto face_recognition_task = static_cast<FaceRecognitionTask *>(context->__tasks["face_recognition"]);
auto facenet_task = static_cast<FacenetTask *>(context->__tasks["facenet"]);
- std::lock_guard<std::mutex> lock(context->_mutex);
-
face_recognition_task->configure();
facenet_task->configure();
face_recognition_task->prepare();
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_face_recognition_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
Context *context = static_cast<Context *>(handle);
auto face_recognition_task = static_cast<FaceRecognitionTask *>(context->__tasks["face_recognition"]);
auto facenet_task = static_cast<FacenetTask *>(context->__tasks["facenet"]);
-
- std::lock_guard<std::mutex> lock(context->_mutex);
-
FacenetInput facenet_input = { { source } };
facenet_task->setInput(facenet_input);
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_face_recognition_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
try {
Context *context = static_cast<Context *>(handle);
auto face_recognition_task = static_cast<FaceRecognitionTask *>(context->__tasks["face_recognition"]);
-
- std::lock_guard<std::mutex> lock(context->_mutex);
-
FaceRecognitionInput input = { mode::DELETE };
input.labels.clear();
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_face_recognition_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
Context *context = static_cast<Context *>(handle);
auto face_recognition_task = static_cast<FaceRecognitionTask *>(context->__tasks["face_recognition"]);
auto facenet_task = static_cast<FacenetTask *>(context->__tasks["facenet"]);
-
- std::lock_guard<std::mutex> lock(context->_mutex);
-
FacenetInput facenet_input = { { source } };
facenet_task->setInput(facenet_input);
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_face_recognition_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
Context *context = static_cast<Context *>(handle);
auto face_recognition_task = static_cast<FaceRecognitionTask *>(context->__tasks["face_recognition"]);
- std::lock_guard<std::mutex> lock(context->_mutex);
-
*out_label = face_recognition_task->getOutput().label.c_str();
} catch (const BaseException &e) {
LOGE("%s", e.what());
#include <unistd.h>
#include <string>
#include <algorithm>
+#include <mutex>
using namespace std;
using namespace mediavision::inference;
using namespace mediavision::machine_learning::exception;
using ObjectDetectionTask = ITask<ObjectDetectionInput, ObjectDetectionResult>;
+static mutex g_object_detection_mutex;
+
int mv_object_detection_create_open(mv_object_detection_h *out_handle)
{
if (!out_handle) {
int mv_object_detection_destroy_open(mv_object_detection_h handle)
{
+ lock_guard<mutex> lock(g_object_detection_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
auto context = static_cast<Context *>(handle);
- std::lock_guard<std::mutex> lock(context->_mutex);
-
for (auto &m : context->__tasks)
delete static_cast<ObjectDetectionTask *>(m.second);
int mv_object_detection_set_model_open(mv_object_detection_h handle, const char *model_name, const char *model_file,
const char *meta_file, const char *label_file)
{
+ lock_guard<mutex> lock(g_object_detection_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_object_detection_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
auto context = static_cast<Context *>(handle);
auto task = static_cast<ObjectDetectionTask *>(context->__tasks.at("object_detection"));
- std::lock_guard<std::mutex> lock(context->_mutex);
-
task->create(static_cast<int>(ObjectDetectionTaskType::MOBILENET_V1_SSD));
task->configure();
} catch (const BaseException &e) {
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_object_detection_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
auto context = static_cast<Context *>(handle);
auto task = static_cast<ObjectDetectionTask *>(context->__tasks.at("object_detection"));
- std::lock_guard<std::mutex> lock(context->_mutex);
-
task->prepare();
} catch (const BaseException &e) {
LOGE("%s", e.what());
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_object_detection_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
auto context = static_cast<Context *>(handle);
auto task = static_cast<ObjectDetectionTask *>(context->__tasks.at("object_detection"));
- std::lock_guard<std::mutex> lock(context->_mutex);
-
ObjectDetectionInput input = { source };
task->setInput(input);
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_object_detection_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
auto context = static_cast<Context *>(handle);
auto task = static_cast<ObjectDetectionTask *>(context->__tasks.at("object_detection"));
- std::lock_guard<std::mutex> lock(context->_mutex);
-
ObjectDetectionResult &result = task->getOutput();
*number_of_objects = result.number_of_objects;
*indices = result.indices.data();
{
LOGD("ENTER");
+ lock_guard<mutex> lock(g_object_detection_mutex);
+
if (!handle) {
LOGE("Handle is NULL.");
return MEDIA_VISION_ERROR_INVALID_PARAMETER;
auto context = static_cast<Context *>(handle);
auto task = static_cast<ObjectDetectionTask *>(context->__tasks.at("object_detection"));
- std::lock_guard<std::mutex> lock(context->_mutex);
-
ObjectDetectionResult &result = task->getOutput();
if (result.number_of_objects <= index)