summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeongmo Yang <jm80.yang@samsung.com>2019-02-21 11:44:49 +0900
committerJeongmo Yang <jm80.yang@samsung.com>2019-02-21 11:44:49 +0900
commit3ff979bdfe58498af6687b54a4774e10e98489d4 (patch)
tree334b032f23f1820dd7b3a91c55fddc3d95326f4c
parentc1a23c9c1df517e427bb60bc1ae9c8978c59c696 (diff)
parent668721eb4c29e012c35afa5eda5900c40a9542d1 (diff)
downloadrecorder-tizen_line_coverage.tar.gz
recorder-tizen_line_coverage.tar.bz2
recorder-tizen_line_coverage.zip
Merge branch 'tizen' into tizen_line_coveragetizen_line_coverage
Change-Id: I5d8a6cb7ea12f4921a019dbfeb7f098cb184f722 Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
-rw-r--r--include/recorder_private.h1
-rw-r--r--packaging/capi-media-recorder.spec2
-rw-r--r--src/recorder.c201
3 files changed, 74 insertions, 130 deletions
diff --git a/include/recorder_private.h b/include/recorder_private.h
index 388b5a7..1c308e6 100644
--- a/include/recorder_private.h
+++ b/include/recorder_private.h
@@ -123,6 +123,7 @@ typedef struct _recorder_message_s {
muse_recorder_api_e api;
muse_recorder_event_e event;
muse_recorder_event_class_e event_class;
+ int tfd;
} recorder_message_s;
typedef struct _recorder_idle_event_s {
diff --git a/packaging/capi-media-recorder.spec b/packaging/capi-media-recorder.spec
index d7fc9eb..115626f 100644
--- a/packaging/capi-media-recorder.spec
+++ b/packaging/capi-media-recorder.spec
@@ -1,6 +1,6 @@
Name: capi-media-recorder
Summary: A Recorder API
-Version: 0.3.15
+Version: 0.3.17
Release: 0
Group: Multimedia/API
License: Apache-2.0
diff --git a/src/recorder.c b/src/recorder.c
index a575ec5..cc5ea19 100644
--- a/src/recorder.c
+++ b/src/recorder.c
@@ -36,6 +36,7 @@
#undef LOG_TAG
#endif
#define LOG_TAG "TIZEN_N_RECORDER"
+#define MODULE_NAME "recorder"
/* for device changed callback */
static GMutex g_rec_dev_state_changed_cb_lock;
@@ -116,20 +117,20 @@ _DONE:
}
-static int _recorder_import_tbm_key(tbm_bufmgr bufmgr, unsigned int tbm_key, tbm_bo *bo, tbm_bo_handle *bo_handle)
+static int _recorder_import_tbm_fd(tbm_bufmgr bufmgr, int fd, tbm_bo *bo, tbm_bo_handle *bo_handle)
{
tbm_bo tmp_bo = NULL;
tbm_bo_handle tmp_bo_handle = {NULL, };
- if (bufmgr == NULL || bo == NULL || bo_handle == NULL || tbm_key == 0) {
- LOGE("invalid parameter - bufmgr %p, bo %p, bo_handle %p, key %d",
- bufmgr, bo, bo_handle, tbm_key);
+ if (bufmgr == NULL || bo == NULL || bo_handle == NULL || fd < 0) {
+ LOGE("invalid parameter - bufmgr %p, bo %p, bo_handle %p, fd %d",
+ bufmgr, bo, bo_handle, fd);
return false;
}
- tmp_bo = tbm_bo_import(bufmgr, tbm_key);
+ tmp_bo = tbm_bo_import_fd(bufmgr, (tbm_fd)fd);
if (tmp_bo == NULL) {
- LOGE("bo import failed - bufmgr %p, key %d", bufmgr, tbm_key);
+ LOGE("bo import failed - bufmgr %p, fd %d", bufmgr, fd);
return false;
}
@@ -162,7 +163,7 @@ static void _recorder_release_imported_bo(tbm_bo *bo)
return;
}
-static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *recv_msg, muse_recorder_event_e event)
+static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *recv_msg, muse_recorder_event_e event, int tfd)
{
if (recv_msg == NULL || event >= MUSE_RECORDER_EVENT_TYPE_NUM) {
LOGE("invalid parameter - recorder msg %p, event %d", recv_msg, event);
@@ -258,7 +259,7 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re
break;
case MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM:
{
- int tbm_key = 0;
+ int audio_fd = -1;
int size = 0;
int format = 0;
int channel = 0;
@@ -267,14 +268,15 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re
tbm_bo_handle bo_handle = {.ptr = NULL};
char *send_msg = NULL;
- muse_recorder_msg_get(tbm_key, recv_msg);
- if (tbm_key == 0) {
- LOGE("invalid key");
+ if (tfd < 0) {
+ LOGE("invalid fd %d", tfd);
break;
}
+ muse_recorder_msg_get(audio_fd, recv_msg);
+
if (cb_info->user_cb[event]) {
- if (_recorder_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) {
+ if (_recorder_import_tbm_fd(cb_info->bufmgr, tfd, &bo, &bo_handle)) {
muse_recorder_msg_get(size, recv_msg);
muse_recorder_msg_get(format, recv_msg);
muse_recorder_msg_get(channel, recv_msg);
@@ -287,23 +289,32 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re
/* release imported bo */
_recorder_release_imported_bo(&bo);
} else {
- LOGE("tbm key %d import failed", tbm_key);
+ LOGE("tbm fd %d import failed", tfd);
}
}
/* return buffer */
send_msg = muse_core_msg_new(MUSE_RECORDER_API_RETURN_BUFFER,
- MUSE_TYPE_INT, "tbm_key", tbm_key, NULL);
+ MUSE_TYPE_INT, "ret_fd", audio_fd, NULL);
- if (muse_core_msg_send(cb_info->fd, send_msg) <= 0)
- LOGE("sending message failed");
+ if (send_msg) {
+ if (muse_core_msg_send(cb_info->fd, send_msg) <= 0)
+ LOGE("sending message failed");
- muse_core_msg_free(send_msg);
+ muse_core_msg_free(send_msg);
+ send_msg = NULL;
+ } else {
+ LOGE("failed to create send msg for fd %d", audio_fd);
+ }
+
+ /* close imported fd */
+ close(tfd);
+ tfd = -1;
break;
}
case MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM:
{
- int tbm_key = 0;
+ int muxed_fd = -1;
int size = 0;
int64_t offset = 0;
@@ -311,14 +322,15 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re
tbm_bo_handle bo_handle = {.ptr = NULL};
char *send_msg = NULL;
- muse_recorder_msg_get(tbm_key, recv_msg);
- if (tbm_key == 0) {
- LOGE("invalid key");
+ if (tfd < 0) {
+ LOGE("invalid fd %d", tfd);
break;
}
+ muse_recorder_msg_get(muxed_fd, recv_msg);
+
if (cb_info->user_cb[event]) {
- if (_recorder_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) {
+ if (_recorder_import_tbm_fd(cb_info->bufmgr, tfd, &bo, &bo_handle)) {
muse_recorder_msg_get(size, recv_msg);
muse_recorder_msg_get(offset, recv_msg);
@@ -328,13 +340,13 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re
/* release imported bo */
_recorder_release_imported_bo(&bo);
} else {
- LOGE("tbm key %d import failed", tbm_key);
+ LOGE("tbm fd %d import failed", tfd);
}
}
/* return buffer */
send_msg = muse_core_msg_new(MUSE_RECORDER_API_RETURN_BUFFER,
- MUSE_TYPE_INT, "tbm_key", tbm_key, NULL);
+ MUSE_TYPE_INT, "ret_fd", muxed_fd, NULL);
if (send_msg) {
if (muse_core_msg_send(cb_info->fd, send_msg) <= 0)
LOGE("sending message failed");
@@ -342,8 +354,12 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re
muse_core_msg_free(send_msg);
send_msg = NULL;
} else {
- LOGE("failed to create send msg for key %d", tbm_key);
+ LOGE("failed to create send msg for fd %d", tfd);
}
+
+ /* close imported fd */
+ close(tfd);
+ tfd = -1;
break;
}
//LCOV_EXCL_START
@@ -450,7 +466,7 @@ static gboolean _recorder_idle_event_callback(gpointer data)
g_mutex_unlock(&g_rec_idle_event_lock);
/* user callback */
- _recorder_client_user_callback(cb_info, rec_idle_event->recv_msg, rec_idle_event->event);
+ _recorder_client_user_callback(cb_info, rec_idle_event->recv_msg, rec_idle_event->event, -1);
IDLE_EVENT_CALLBACK_DONE:
/* release event */
@@ -516,7 +532,7 @@ static void _recorder_deactivate_idle_event_all(recorder_cb_info_s *cb_info)
}
-static void __recorder_add_msg_to_queue(recorder_cb_info_s *cb_info, int api, int event, int event_class, char *msg)
+static void __recorder_add_msg_to_queue(recorder_cb_info_s *cb_info, int api, int event, int event_class, char *msg, int tfd)
{
recorder_message_s *rec_msg = NULL;
recorder_msg_handler_info_s *msg_handler_info = NULL;
@@ -535,6 +551,7 @@ static void __recorder_add_msg_to_queue(recorder_cb_info_s *cb_info, int api, in
rec_msg->api = api;
rec_msg->event = event;
rec_msg->event_class = event_class;
+ rec_msg->tfd = tfd;
strncpy(rec_msg->recv_msg, msg, sizeof(rec_msg->recv_msg) - 1);
@@ -693,7 +710,7 @@ static void __recorder_get_api_operation(int api, recorder_cb_info_s *cb_info, c
}
-static void __recorder_process_msg(recorder_cb_info_s *cb_info, char *msg)
+static void __recorder_process_msg(recorder_cb_info_s *cb_info, char *msg, int tfd)
{
int ret = RECORDER_ERROR_NONE;
int api = -1;
@@ -773,7 +790,7 @@ static void __recorder_process_msg(recorder_cb_info_s *cb_info, char *msg)
g_mutex_unlock(&cb_info->api_mutex[api]);
} else if (api_class == MUSE_RECORDER_API_CLASS_THREAD_SUB || api == MUSE_RECORDER_CB_EVENT) {
- __recorder_add_msg_to_queue(cb_info, api, event, event_class, msg);
+ __recorder_add_msg_to_queue(cb_info, api, event, event_class, msg, tfd);
} else {
LOGW("unknown recorder api %d and api_class %d", api, api_class);
}
@@ -849,7 +866,7 @@ static void *_recorder_msg_handler_func(gpointer data)
} else if (api == MUSE_RECORDER_CB_EVENT) {
switch (rec_msg->event_class) {
case MUSE_RECORDER_EVENT_CLASS_THREAD_SUB:
- _recorder_client_user_callback(cb_info, rec_msg->recv_msg, rec_msg->event);
+ _recorder_client_user_callback(cb_info, rec_msg->recv_msg, rec_msg->event, rec_msg->tfd);
break;
case MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN:
rec_idle_event = g_new0(recorder_idle_event_s, 1);
@@ -911,14 +928,8 @@ static void *_recorder_msg_handler_func(gpointer data)
static void *_recorder_msg_recv_func(gpointer data)
{
int recv_length = 0;
- int single_length = 0;
- int remained_length = 0;
+ int tfd[MUSE_NUM_FD] = {-1, -1, -1, -1};
char *recv_msg = NULL;
- char *single_msg = NULL;
- char *remained_msg = NULL;
- int num_msg = 0;
- int cur_pos = 0;
- int prev_pos = 0;
recorder_cb_info_s *cb_info = (recorder_cb_info_s *)data;
if (cb_info == NULL) {
@@ -928,16 +939,13 @@ static void *_recorder_msg_recv_func(gpointer data)
LOGD("start");
- single_msg = (char *)malloc(sizeof(char) * MUSE_RECORDER_MSG_MAX_LENGTH);
- if (single_msg == NULL) {
- LOGE("single_msg malloc failed");
- goto CB_HANDLER_EXIT;
- }
-
recv_msg = cb_info->recv_msg;
while (g_atomic_int_get(&cb_info->msg_recv_running)) {
- recv_length = muse_core_msg_recv(cb_info->fd, recv_msg, MUSE_MSG_MAX_LENGTH);
+ /* tfd[0] is only used. */
+ tfd[0] = -1;
+
+ recv_length = muse_core_msg_recv_fd(cb_info->fd, recv_msg, MUSE_MSG_MAX_LENGTH, tfd);
if (recv_length <= 0) {
//LCOV_EXCL_START
cb_info->is_server_connected = FALSE;
@@ -948,79 +956,9 @@ static void *_recorder_msg_recv_func(gpointer data)
recv_msg[recv_length] = '\0';
- cur_pos = 0;
- prev_pos = 0;
- num_msg = 0;
-
/*LOGD("recv msg : %s, length : %d", recv_msg, recv_length);*/
- /* Need to split the combined entering msgs */
- for (cur_pos = 0; cur_pos < recv_length; cur_pos++) {
- if (recv_msg[cur_pos] == '}') {
- single_length = cur_pos - prev_pos + 1;
-
- if (single_length < MUSE_RECORDER_MSG_MAX_LENGTH) {
- /* check remained msg */
- if (remained_length > 0) {
-//LCOV_EXCL_START
- if (remained_msg) {
- strncpy(single_msg, remained_msg, remained_length);
- strncpy(single_msg + remained_length, recv_msg + prev_pos, single_length);
- single_msg[remained_length + single_length] = '\0';
-
- free(remained_msg);
- remained_msg = NULL;
- } else {
- strncpy(single_msg, recv_msg + prev_pos, single_length);
- single_msg[single_length] = '\0';
- LOGE("lost msg [%s], skip...", single_msg);
- }
-
- remained_length = 0;
-//LCOV_EXCL_STOP
- } else {
- strncpy(single_msg, recv_msg + prev_pos, single_length);
- single_msg[single_length] = '\0';
- }
-
- if (single_msg[0] == '{') {
- num_msg++;
- /*LOGD("splitted msg : [%s], Index : %d", single_msg, num_msg);*/
- __recorder_process_msg(cb_info, single_msg);
- } else {
- LOGE("invalid msg [%s]", single_msg);
- }
- } else {
- LOGE("too long message [len %d] skip...", single_length);
- }
-
- prev_pos = cur_pos + 1;
- }
- }
-
- /* check incompleted message */
- if (recv_msg[recv_length - 1] != '}') {
-//LCOV_EXCL_START
- remained_length = recv_length - prev_pos;
-
- LOGW("incompleted message [len %d]", remained_length);
-
- if (remained_msg) {
- free(remained_msg);
- remained_msg = NULL;
- }
-
- remained_msg = (char *)malloc(remained_length + 1);
- if (remained_msg) {
- strncpy(remained_msg, recv_msg + prev_pos, remained_length);
- remained_msg[remained_length] = '\0';
- } else {
- LOGE("failed to alloc for remained msg");
- }
-//LCOV_EXCL_STOP
- } else {
- remained_length = 0;
- }
+ __recorder_process_msg(cb_info, recv_msg, tfd[0]);
}
LOGD("client cb exit - server connected %d", cb_info->is_server_connected);
@@ -1044,7 +982,8 @@ static void *_recorder_msg_recv_func(gpointer data)
MUSE_RECORDER_CB_EVENT,
MUSE_RECORDER_EVENT_TYPE_ERROR,
MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN,
- error_msg);
+ error_msg,
+ -1);
muse_core_msg_free(error_msg);
error_msg = NULL;
@@ -1054,16 +993,6 @@ static void *_recorder_msg_recv_func(gpointer data)
}
CB_HANDLER_EXIT:
- if (single_msg) {
- free(single_msg);
- single_msg = NULL;
- }
-
- if (remained_msg) {
- free(remained_msg);
- remained_msg = NULL;
- }
-
return NULL;
}
@@ -1472,6 +1401,7 @@ static int _recorder_create_common(recorder_h *recorder, muse_recorder_type_e ty
int ret = RECORDER_ERROR_NONE;
int destroy_ret = RECORDER_ERROR_NONE;
int sock_fd = -1;
+ int module_index = -1;
int send_ret = 0;
char *send_msg = NULL;
char *root_directory = NULL;
@@ -1514,9 +1444,15 @@ static int _recorder_create_common(recorder_h *recorder, muse_recorder_type_e ty
//LCOV_EXCL_STOP
}
+ if (muse_client_get_module_index(MODULE_NAME, &module_index) != MM_ERROR_NONE) {
+ LOGE("muse client get module index failed");
+ ret = RECORDER_ERROR_INVALID_OPERATION;
+ goto _ERR_RECORDER_EXIT;
+ }
+
if (type == MUSE_RECORDER_TYPE_AUDIO) {
send_msg = muse_core_msg_new(MUSE_RECORDER_API_CREATE,
- MUSE_TYPE_INT, "module", MUSE_RECORDER,
+ MUSE_TYPE_INT, "module", module_index,
MUSE_TYPE_INT, PARAM_RECORDER_TYPE, MUSE_RECORDER_TYPE_AUDIO,
MUSE_TYPE_INT, "pid", getpid(),
NULL);
@@ -1524,7 +1460,7 @@ static int _recorder_create_common(recorder_h *recorder, muse_recorder_type_e ty
pc->camera = camera;
camera_handle = (intptr_t)((camera_cli_s *)camera)->remote_handle;
send_msg = muse_core_msg_new(MUSE_RECORDER_API_CREATE,
- MUSE_TYPE_INT, "module", MUSE_RECORDER,
+ MUSE_TYPE_INT, "module", module_index,
MUSE_TYPE_INT, PARAM_RECORDER_TYPE, MUSE_RECORDER_TYPE_VIDEO,
MUSE_TYPE_INT, "pid", getpid(),
MUSE_TYPE_POINTER, "camera_handle", camera_handle,
@@ -3458,6 +3394,7 @@ int recorder_get_device_state(recorder_type_e type, recorder_device_state_e *sta
{
int ret = RECORDER_ERROR_NONE;
int sock_fd = -1;
+ int module_index = -1;
int get_device_state = 0;
char *send_msg = NULL;
char recv_msg[MUSE_RECORDER_MSG_MAX_LENGTH] = {'\0',};
@@ -3478,8 +3415,14 @@ int recorder_get_device_state(recorder_type_e type, recorder_device_state_e *sta
//LCOV_EXCL_STOP
}
+ if (muse_client_get_module_index(MODULE_NAME, &module_index) != MM_ERROR_NONE) {
+ LOGE("muse client get module index failed");
+ ret = RECORDER_ERROR_INVALID_OPERATION;
+ goto _GET_DEVICE_STATE_EXIT;
+ }
+
send_msg = muse_core_msg_new(MUSE_RECORDER_API_GET_DEVICE_STATE,
- MUSE_TYPE_INT, "module", MUSE_RECORDER,
+ MUSE_TYPE_INT, "module", module_index,
MUSE_TYPE_INT, PARAM_RECORDER_TYPE, type,
NULL);
if (!send_msg) {