diff options
author | Jeongmo Yang <jm80.yang@samsung.com> | 2016-04-18 22:22:14 +0900 |
---|---|---|
committer | Jeongmo Yang <jm80.yang@samsung.com> | 2016-04-19 15:54:35 +0900 |
commit | 1acfa42261e938204e5353a3b30146368516eadb (patch) | |
tree | 93bc4ca9b177d630eff3674c78c3e2b627f33a1b | |
parent | ffe6cfbeaba1595a135e160336e08eac6c75a78b (diff) | |
download | recorder-1acfa42261e938204e5353a3b30146368516eadb.tar.gz recorder-1acfa42261e938204e5353a3b30146368516eadb.tar.bz2 recorder-1acfa42261e938204e5353a3b30146368516eadb.zip |
[Release version 0.2.24] Update code for video recorder with EVAS surface renderingsubmit/tizen/20160419.063701accepted/tizen/wearable/20160420.042556accepted/tizen/tv/20160420.042527accepted/tizen/mobile/20160420.042513accepted/tizen/ivi/20160420.042612accepted/tizen/common/20160420.140500
Change-Id: I1e81d91da76cd9e01967851b199c601a52786b8b
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
-rw-r--r-- | include/recorder_private.h | 1 | ||||
-rw-r--r-- | packaging/capi-media-recorder.spec | 2 | ||||
-rw-r--r-- | src/recorder.c | 140 |
3 files changed, 121 insertions, 22 deletions
diff --git a/include/recorder_private.h b/include/recorder_private.h index de3cb0e..b6a0d18 100644 --- a/include/recorder_private.h +++ b/include/recorder_private.h @@ -67,6 +67,7 @@ typedef struct _recorder_idle_event_s { typedef struct _recorder_cli_s { intptr_t remote_handle; recorder_cb_info_s *cb_info; + camera_h camera; } recorder_cli_s; typedef struct _camera_cli_s { diff --git a/packaging/capi-media-recorder.spec b/packaging/capi-media-recorder.spec index 625a34f..4a5c739 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.2.23 +Version: 0.2.24 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/recorder.c b/src/recorder.c index 6166237..1f4fcc5 100644 --- a/src/recorder.c +++ b/src/recorder.c @@ -17,6 +17,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <camera_internal.h> #include <recorder.h> #include <sound_manager.h> #include <sound_manager_internal.h> @@ -971,6 +972,7 @@ static int _recorder_create_common(recorder_h *recorder, muse_recorder_type_e ty MUSE_TYPE_INT, "pid", getpid(), 0); } else { + pc->camera = camera; camera_handle = (intptr_t)((camera_cli_s *)camera)->remote_handle; send_msg = muse_core_msg_json_factory_new(MUSE_RECORDER_API_CREATE, MUSE_TYPE_INT, "module", MUSE_RECORDER, @@ -1163,44 +1165,72 @@ int recorder_prepare(recorder_h recorder) LOGD("ret : 0x%x", ret); + if (ret == RECORDER_ERROR_NONE && pc->camera) + camera_start_evas_rendering(pc->camera); + return ret; } int recorder_unprepare(recorder_h recorder) { - if (recorder == NULL) { - LOGE("NULL pointer handle"); - return RECORDER_ERROR_INVALID_PARAMETER; - } int ret = RECORDER_ERROR_NONE; muse_recorder_api_e api = MUSE_RECORDER_API_UNPREPARE; recorder_cli_s *pc = (recorder_cli_s *)recorder; int sock_fd; + camera_state_e camera_state = CAMERA_STATE_NONE; + + if (recorder == NULL) { + LOGE("NULL pointer handle"); + return RECORDER_ERROR_INVALID_PARAMETER; + } + if (pc->cb_info == NULL) { LOGE("INVALID_PARAMETER(0x%08x)", RECORDER_ERROR_INVALID_PARAMETER); return RECORDER_ERROR_INVALID_PARAMETER; } + sock_fd = pc->cb_info->fd; LOGD("ENTER"); + if (pc->camera) { + ret = camera_get_state(pc->camera, &camera_state); + if (ret != CAMERA_ERROR_NONE) { + LOGE("failed to get camera state 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + + if (camera_state == CAMERA_STATE_PREVIEW) { + ret = camera_stop_evas_rendering(pc->camera, false); + if (ret != CAMERA_ERROR_NONE) { + LOGE("camera_stop_evas_rendering failed 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + } + } + muse_recorder_msg_send(api, sock_fd, pc->cb_info, ret); + LOGD("ret : 0x%x", ret); + return ret; } int recorder_start(recorder_h recorder) { - if (recorder == NULL) { - LOGE("NULL pointer handle"); - return RECORDER_ERROR_INVALID_PARAMETER; - } int ret = RECORDER_ERROR_NONE; muse_recorder_api_e api = MUSE_RECORDER_API_START; recorder_cli_s *pc = (recorder_cli_s *)recorder; int sock_fd; + recorder_state_e current_state = RECORDER_STATE_NONE; + + if (recorder == NULL) { + LOGE("NULL pointer handle"); + return RECORDER_ERROR_INVALID_PARAMETER; + } + if (pc->cb_info == NULL) { LOGE("INVALID_PARAMETER(0x%08x)", RECORDER_ERROR_INVALID_PARAMETER); return RECORDER_ERROR_INVALID_PARAMETER; @@ -1209,8 +1239,29 @@ int recorder_start(recorder_h recorder) LOGD("ENTER"); + if (pc->camera) { + ret = recorder_get_state(recorder, ¤t_state); + if (ret != RECORDER_ERROR_NONE) { + LOGE("failed to get current state 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + + if (current_state == RECORDER_STATE_READY) { + ret = camera_stop_evas_rendering(pc->camera, true); + if (ret != CAMERA_ERROR_NONE) { + LOGE("camera_stop_evas_rendering failed 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + } + } + muse_recorder_msg_send(api, sock_fd, pc->cb_info, ret); + + if (pc->camera && current_state == RECORDER_STATE_READY) + camera_start_evas_rendering(pc->camera); + LOGD("ret : 0x%x", ret); + return ret; } @@ -1241,14 +1292,17 @@ int recorder_pause(recorder_h recorder) int recorder_commit(recorder_h recorder) { - if (recorder == NULL) { - LOGE("NULL pointer handle"); - return RECORDER_ERROR_INVALID_PARAMETER; - } int ret = RECORDER_ERROR_NONE; muse_recorder_api_e api = MUSE_RECORDER_API_COMMIT; recorder_cli_s *pc = (recorder_cli_s *)recorder; int sock_fd; + recorder_state_e current_state = RECORDER_STATE_NONE; + + if (recorder == NULL) { + LOGE("NULL pointer handle"); + return RECORDER_ERROR_INVALID_PARAMETER; + } + if (pc->cb_info == NULL) { LOGE("INVALID_PARAMETER(0x%08x)", RECORDER_ERROR_INVALID_PARAMETER); return RECORDER_ERROR_INVALID_PARAMETER; @@ -1257,32 +1311,78 @@ int recorder_commit(recorder_h recorder) LOGD("ENTER"); + if (pc->camera) { + ret = recorder_get_state(recorder, ¤t_state); + if (ret != RECORDER_ERROR_NONE) { + LOGE("failed to get current state 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + + if (current_state >= RECORDER_STATE_RECORDING) { + ret = camera_stop_evas_rendering(pc->camera, true); + if (ret != CAMERA_ERROR_NONE) { + LOGE("camera_stop_evas_rendering failed 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + } + } + muse_recorder_msg_send(api, sock_fd, pc->cb_info, ret); + + if (pc->camera && current_state >= RECORDER_STATE_RECORDING) + camera_start_evas_rendering(pc->camera); + LOGD("ret : 0x%x", ret); + return ret; } int recorder_cancel(recorder_h recorder) { - if (recorder == NULL) { - LOGE("NULL pointer handle"); - return RECORDER_ERROR_INVALID_PARAMETER; - } int ret = RECORDER_ERROR_NONE; muse_recorder_api_e api = MUSE_RECORDER_API_CANCEL; recorder_cli_s *pc = (recorder_cli_s *)recorder; int sock_fd; + recorder_state_e current_state = RECORDER_STATE_NONE; + + if (recorder == NULL) { + LOGE("NULL pointer handle"); + return RECORDER_ERROR_INVALID_PARAMETER; + } + if (pc->cb_info == NULL) { LOGE("INVALID_PARAMETER(0x%08x)", RECORDER_ERROR_INVALID_PARAMETER); return RECORDER_ERROR_INVALID_PARAMETER; } + sock_fd = pc->cb_info->fd; LOGD("ENTER"); + if (pc->camera) { + ret = recorder_get_state(recorder, ¤t_state); + if (ret != RECORDER_ERROR_NONE) { + LOGE("failed to get current state 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + + if (current_state >= RECORDER_STATE_RECORDING) { + ret = camera_stop_evas_rendering(pc->camera, true); + if (ret != CAMERA_ERROR_NONE) { + LOGE("camera_stop_evas_rendering failed 0x%x", ret); + return RECORDER_ERROR_INVALID_OPERATION; + } + } + } + muse_recorder_msg_send(api, sock_fd, pc->cb_info, ret); + + if (pc->camera && current_state >= RECORDER_STATE_RECORDING) + camera_start_evas_rendering(pc->camera); + LOGD("ret : 0x%x", ret); + return ret; } @@ -1470,7 +1570,9 @@ int recorder_get_filename(recorder_h recorder, char **filename) muse_recorder_msg_get_string(get_filename, pc->cb_info->recv_msg); *filename = strdup(get_filename); } - LOGD("ret : 0x%x, filename : %s", ret, *filename); + + LOGD("ret : 0x%x, filename : [%s]", ret, (*filename) ? *filename : "NULL"); + return ret; } @@ -2615,10 +2717,6 @@ int recorder_attr_set_audio_channel(recorder_h recorder, int channel_count) LOGE("NULL pointer handle"); return RECORDER_ERROR_INVALID_PARAMETER; } - if (channel_count < 1) { - LOGE("invalid channel %d", channel_count); - return RECORDER_ERROR_INVALID_PARAMETER; - } int ret = RECORDER_ERROR_NONE; muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_CHANNEL; recorder_cli_s *pc = (recorder_cli_s *)recorder; |