diff options
author | Jeongmo Yang <jm80.yang@samsung.com> | 2018-05-08 17:19:12 +0900 |
---|---|---|
committer | Jeongmo Yang <jm80.yang@samsung.com> | 2018-05-08 19:58:32 +0900 |
commit | 8c6c6ac5cd41d1a0d55fe5be2ddf64a97d0a7512 (patch) | |
tree | c23565e8e777a3da90ed80624842c143a30e412e | |
parent | 0a2c79fac3c6e890634282c40ac811c1df14d040 (diff) | |
parent | 0a24fe951462c81b7ffca80235179dcb89be9a42 (diff) | |
download | recorder-8c6c6ac5cd41d1a0d55fe5be2ddf64a97d0a7512.tar.gz recorder-8c6c6ac5cd41d1a0d55fe5be2ddf64a97d0a7512.tar.bz2 recorder-8c6c6ac5cd41d1a0d55fe5be2ddf64a97d0a7512.zip |
Merge branch 'tizen' into tizen_line_coverage
Change-Id: I9dae424b54378c86d637e42dfccea92d03389217
-rw-r--r-- | CMakeLists.txt | 2 | ||||
-rw-r--r-- | capi-media-recorder-tool.manifest | 5 | ||||
-rw-r--r-- | doc/recorder_doc.h | 26 | ||||
-rw-r--r-- | include/recorder.h | 4 | ||||
-rw-r--r-- | include/recorder_private.h | 1 | ||||
-rw-r--r-- | packaging/capi-media-recorder.spec | 27 | ||||
-rw-r--r-- | src/recorder.c | 161 | ||||
-rw-r--r-- | test/recorder_test.c | 8 |
8 files changed, 175 insertions, 59 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 257929d..7acb542 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -71,9 +71,7 @@ CONFIGURE_FILE( ) INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) -IF(TIZEN_FEATURE_TESTSUITE) ADD_SUBDIRECTORY(test) -ENDIF(TIZEN_FEATURE_TESTSUITE) IF(UNIX) diff --git a/capi-media-recorder-tool.manifest b/capi-media-recorder-tool.manifest new file mode 100644 index 0000000..a76fdba --- /dev/null +++ b/capi-media-recorder-tool.manifest @@ -0,0 +1,5 @@ +<manifest> + <request> + <domain name="_" /> + </request> +</manifest> diff --git a/doc/recorder_doc.h b/doc/recorder_doc.h index a6d9834..25d08d5 100644 --- a/doc/recorder_doc.h +++ b/doc/recorder_doc.h @@ -58,43 +58,43 @@ * <td> recorder_create_videorecorder()<br>recorder_create_audiorecorder() </td> * <td> NONE </td> * <td> CREATED </td> - * <td> ASYNC </td> + * <td> SYNC </td> * </tr> * <tr> * <td> recorder_destroy() </td> * <td> CREATED </td> * <td> NONE </td> - * <td> ASYNC </td> + * <td> SYNC </td> * </tr> * <tr> * <td> recorder_prepare() </td> * <td> CREATED </td> * <td> READY</td> - * <td> ASYNC </td> + * <td> SYNC </td> * </tr> * <tr> * <td> recorder_unprepare() </td> * <td> READY </td> * <td> CREATED </td> - * <td> ASYNC </td> + * <td> SYNC </td> * </tr> * <tr> * <td> recorder_start() </td> * <td> READY / PAUSED </td> * <td> RECORDING </td> - * <td> ASYNC </td> + * <td> SYNC </td> * </tr> * <tr> * <td> recorder_pause() </td> * <td> RECORDING </td> * <td> PAUSED </td> - * <td> ASYNC </td> + * <td> SYNC </td> * </tr> * <tr> * <td> recorder_cancel() <br>recorder_commit() </td> * <td> RECORDING / PAUSED </td> * <td> READY </td> - * <td> ASYNC </td> + * <td> SYNC </td> * </tr> * </table> * </div> @@ -154,8 +154,8 @@ * * @section CAPI_MEDIA_RECORDER_MODULE_FEATURE Related Features * This API is related with the following features:\n - * - http://tizen.org/feature/camera\n - * - http://tizen.org/feature/microphone + * - http://tizen.org/feature/media.audio_recording\n + * - http://tizen.org/feature/media.video_recording * * It is recommended to design feature related codes in your application for reliability.\n * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n @@ -191,8 +191,8 @@ * * @section CAPI_MEDIA_RECORDER_ATTRIBUTES_MODULE_FEATURE Related Features * This API is related with the following features:\n - * - http://tizen.org/feature/camera\n - * - http://tizen.org/feature/microphone + * - http://tizen.org/feature/media.audio_recording\n + * - http://tizen.org/feature/media.video_recording * * It is recommended to design feature related codes in your application for reliability.\n * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n @@ -219,8 +219,8 @@ * * @section CAPI_MEDIA_RECORDER_CAPABILITY_MODULE_FEATURE Related Features * This API is related with the following features:\n - * - http://tizen.org/feature/camera\n - * - http://tizen.org/feature/microphone + * - http://tizen.org/feature/media.audio_recording\n + * - http://tizen.org/feature/media.video_recording * * It is recommended to design feature related codes in your application for reliability.\n * You can check if a device supports the related features for this API by using @ref CAPI_SYSTEM_SYSTEM_INFO_MODULE, thereby controlling the procedure of your application.\n diff --git a/include/recorder.h b/include/recorder.h index f64c79d..1cda6ad 100644 --- a/include/recorder.h +++ b/include/recorder.h @@ -390,6 +390,8 @@ typedef bool (*recorder_supported_video_encoder_cb)(recorder_video_codec_e codec * #CAMERA_STATE_CAPTURED -> #RECORDER_STATE_READY * @remarks The privilege %http://tizen.org/privilege/recorder is not required since 4.0,\n * but it is required in all earlier versions. + * @remarks Since 4.0, It's related to the following feature: %http://tizen.org/feature/media.video_recording \n + * instead of using %http://tizen.org/feature/microphone * @param[in] camera The handle to the camera * @param[out] recorder A handle to the recorder * @return @c 0 on success, otherwise a negative error value @@ -412,6 +414,8 @@ int recorder_create_videorecorder(camera_h camera, recorder_h *recorder); * @remarks You must release @a recorder using recorder_destroy(). * @remarks The privilege %http://tizen.org/privilege/recorder is not required since 4.0,\n * but it is required in all earlier versions. + * @remarks Since 4.0, It's related to the following feature: %http://tizen.org/feature/media.audio_recording \n + * instead of using %http://tizen.org/feature/microphone * @param[out] recorder A handle to the recorder * @return @c 0 on success, otherwise a negative error value * @retval #RECORDER_ERROR_NONE Successful diff --git a/include/recorder_private.h b/include/recorder_private.h index 9955a9a..1e56eaf 100644 --- a/include/recorder_private.h +++ b/include/recorder_private.h @@ -108,6 +108,7 @@ typedef struct _recorder_cb_info_s { /* user callback */ gpointer user_cb[MUSE_RECORDER_EVENT_TYPE_NUM]; gpointer user_data[MUSE_RECORDER_EVENT_TYPE_NUM]; + GMutex user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_NUM]; /* tbm */ tbm_bufmgr bufmgr; diff --git a/packaging/capi-media-recorder.spec b/packaging/capi-media-recorder.spec index d9a48b2..109cb9d 100644 --- a/packaging/capi-media-recorder.spec +++ b/packaging/capi-media-recorder.spec @@ -1,7 +1,7 @@ Name: capi-media-recorder Summary: A Recorder API -Version: 0.3.5 -Release: 0 +Version: 0.3.9 +Release: 2 Group: Multimedia/API License: Apache-2.0 Source0: %{name}-%{version}.tar.gz @@ -39,18 +39,21 @@ Requires: %{name} = %{version}-%{release} Development related files for a Recorder library in Tizen Native API. +%package tool +Summary: A recorder API testsuite +Requires: %{name} = %{version}-%{release} + +%description tool +Tizen Native recorder API testsuite. + + %prep %setup -q %build MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'` -%cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} \ -%if "%{TIZEN_PRODUCT_TV}" != "1" - -DTIZEN_FEATURE_TESTSUITE=On -%else - -DTIZEN_FEATURE_TESTSUITE=Off -%endif +%cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER} make %{?jobs:-j%jobs} @@ -69,11 +72,13 @@ rm -rf %{buildroot} %manifest capi-media-recorder.manifest %license LICENSE.APLv2 %{_libdir}/libcapi-media-recorder.so.* -%if "%{TIZEN_PRODUCT_TV}" != "1" -%{_bindir}/* -%endif %files devel %{_includedir}/media/recorder.h %{_libdir}/pkgconfig/*.pc %{_libdir}/libcapi-media-recorder.so + +%files tool +%manifest capi-media-recorder-tool.manifest +%license LICENSE.APLv2 +%{_bindir}/* diff --git a/src/recorder.c b/src/recorder.c index 54ec1a6..2433b7b 100644 --- a/src/recorder.c +++ b/src/recorder.c @@ -170,9 +170,17 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re /*LOGD("get recorder msg %s, event %d", recv_msg, event);*/ + g_mutex_lock(&cb_info->user_cb_mutex[event]); + if (cb_info->user_cb[event] == NULL) { - LOGW("user callback for event %d is not set", event); - return; + if (event != MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM && + event != MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM) { + g_mutex_unlock(&cb_info->user_cb_mutex[event]); + LOGW("NULL callback for event %d, return here", event); + return; + } else { + LOGW("NULL callback for event %d, NOT return here", event); + } } switch (event) { @@ -276,25 +284,23 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re break; } - if (!_recorder_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) { - LOGE("tbm key %d import failed", tbm_key); - break; - } + if (cb_info->user_cb[event]) { + if (_recorder_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) { + muse_recorder_msg_get(size, recv_msg); + muse_recorder_msg_get(format, recv_msg); + muse_recorder_msg_get(channel, recv_msg); + muse_recorder_msg_get(timestamp, recv_msg); - muse_recorder_msg_get(size, recv_msg); - muse_recorder_msg_get(format, recv_msg); - muse_recorder_msg_get(channel, recv_msg); - muse_recorder_msg_get(timestamp, recv_msg); - - ((recorder_audio_stream_cb)cb_info->user_cb[event])((void *)bo_handle.ptr, - size, - (audio_sample_type_e)format, - channel, - (unsigned int)timestamp, - cb_info->user_data[event]); + ((recorder_audio_stream_cb)cb_info->user_cb[event])((void *)bo_handle.ptr, + size, (audio_sample_type_e)format, channel, + (unsigned int)timestamp, cb_info->user_data[event]); - /* release imported bo */ - _recorder_release_imported_bo(&bo); + /* release imported bo */ + _recorder_release_imported_bo(&bo); + } else { + LOGE("tbm key %d import failed", tbm_key); + } + } /* return buffer */ send_msg = muse_core_msg_new(MUSE_RECORDER_API_RETURN_BUFFER, @@ -322,19 +328,20 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re break; } - if (!_recorder_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) { - LOGE("tbm key %d import failed", tbm_key); - break; - } + if (cb_info->user_cb[event]) { + if (_recorder_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) { + muse_recorder_msg_get(size, recv_msg); + muse_recorder_msg_get(offset, recv_msg); - muse_recorder_msg_get(size, recv_msg); - muse_recorder_msg_get(offset, recv_msg); + ((recorder_muxed_stream_cb)cb_info->user_cb[event])((void *)bo_handle.ptr, + size, (unsigned long long)offset, cb_info->user_data[event]); - ((recorder_muxed_stream_cb)cb_info->user_cb[event])((void *)bo_handle.ptr, - size, (unsigned long long)offset, cb_info->user_data[event]); - - /* release imported bo */ - _recorder_release_imported_bo(&bo); + /* release imported bo */ + _recorder_release_imported_bo(&bo); + } else { + LOGE("tbm key %d import failed", tbm_key); + } + } /* return buffer */ send_msg = muse_core_msg_new(MUSE_RECORDER_API_RETURN_BUFFER, @@ -428,6 +435,8 @@ static void _recorder_client_user_callback(recorder_cb_info_s *cb_info, char *re } } + g_mutex_unlock(&cb_info->user_cb_mutex[event]); + return; } @@ -505,6 +514,20 @@ static void _recorder_deactivate_idle_event_all(recorder_cb_info_s *cb_info) continue; } + if (g_idle_remove_by_data(rec_idle_event)) { + LOGW("remove idle event %p done", rec_idle_event); + + cb_info->idle_event_list = g_list_remove(cb_info->idle_event_list, (gpointer)rec_idle_event); + + g_mutex_clear(&rec_idle_event->event_mutex); + g_free(rec_idle_event); + rec_idle_event = NULL; + + continue; + } + + LOGW("remove idle event %p failed", rec_idle_event); + if (!g_mutex_trylock(&rec_idle_event->event_mutex)) { LOGW("lock failed, %p event is calling now", rec_idle_event); @@ -1027,6 +1050,11 @@ static void *_recorder_msg_recv_func(gpointer data) 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); @@ -1190,6 +1218,9 @@ static recorder_cb_info_s *_recorder_client_callback_new(gint sockfd) g_mutex_init(&cb_info->idle_event_mutex); g_cond_init(&cb_info->idle_event_cond); + for (i = 0 ; i < MUSE_RECORDER_EVENT_TYPE_NUM ; i++) + g_mutex_init(&cb_info->user_cb_mutex[i]); + /* message handler thread */ if (!__create_msg_handler_thread(&cb_info->msg_handler_info, _RECORDER_MESSAGE_HANDLER_TYPE_GENERAL, "recorder_msg_handler", cb_info)) { @@ -1232,6 +1263,9 @@ ErrorExit: __destroy_msg_handler_thread(&cb_info->audio_stream_cb_info); __destroy_msg_handler_thread(&cb_info->muxed_stream_cb_info); + for (i = 0 ; i < MUSE_RECORDER_EVENT_TYPE_NUM ; i++) + g_mutex_clear(&cb_info->user_cb_mutex[i]); + g_mutex_clear(&cb_info->idle_event_mutex); g_cond_clear(&cb_info->idle_event_cond); @@ -1415,6 +1449,9 @@ static void _recorder_client_callback_destroy(recorder_cb_info_s *cb_info) __destroy_msg_handler_thread(&cb_info->audio_stream_cb_info); __destroy_msg_handler_thread(&cb_info->muxed_stream_cb_info); + for (i = 0 ; i < MUSE_RECORDER_EVENT_TYPE_NUM ; i++) + g_mutex_clear(&cb_info->user_cb_mutex[i]); + g_mutex_clear(&cb_info->idle_event_mutex); g_cond_clear(&cb_info->idle_event_cond); @@ -2307,8 +2344,12 @@ int recorder_set_state_changed_cb(recorder_h recorder, recorder_state_changed_cb _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE]); } LOGD("ret : 0x%x", ret); @@ -2333,8 +2374,12 @@ int recorder_unset_state_changed_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE]); } LOGD("ret : 0x%x", ret); @@ -2359,8 +2404,12 @@ int recorder_set_interrupted_cb(recorder_h recorder, recorder_interrupted_cb cal _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED]); } LOGD("ret : 0x%x", ret); @@ -2385,8 +2434,12 @@ int recorder_unset_interrupted_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPTED]); } LOGD("ret : 0x%x", ret); @@ -2411,8 +2464,12 @@ int recorder_set_interrupt_started_cb(recorder_h recorder, recorder_interrupt_st _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED]); } LOGD("ret : 0x%x", ret); @@ -2437,8 +2494,12 @@ int recorder_unset_interrupt_started_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED]); } LOGD("ret : 0x%x", ret); @@ -2463,8 +2524,12 @@ int recorder_set_audio_stream_cb(recorder_h recorder, recorder_audio_stream_cb c _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM]); } LOGD("ret : 0x%x", ret); @@ -2489,8 +2554,12 @@ int recorder_unset_audio_stream_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM]); } LOGD("ret : 0x%x", ret); @@ -2515,8 +2584,12 @@ int recorder_set_muxed_stream_cb(recorder_h recorder, recorder_muxed_stream_cb c _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM]); } LOGD("ret : 0x%x", ret); @@ -2541,8 +2614,12 @@ int recorder_unset_muxed_stream_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM]); } LOGD("ret : 0x%x", ret); @@ -2567,8 +2644,12 @@ int recorder_set_error_cb(recorder_h recorder, recorder_error_cb callback, void _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_ERROR]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_ERROR] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_ERROR] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_ERROR]); } LOGD("ret : 0x%x", ret); @@ -2593,8 +2674,12 @@ int recorder_unset_error_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_ERROR]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_ERROR] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_ERROR] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_ERROR]); } LOGD("ret : 0x%x", ret); @@ -2619,8 +2704,12 @@ int recorder_set_recording_status_cb(recorder_h recorder, recorder_recording_sta _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS]); } LOGD("ret : 0x%x", ret); @@ -2645,8 +2734,12 @@ int recorder_unset_recording_status_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS]); } LOGD("ret : 0x%x", ret); @@ -2669,8 +2762,12 @@ int recorder_set_recording_limit_reached_cb(recorder_h recorder, recorder_record _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = callback; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = user_data; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED]); } LOGD("ret : 0x%x", ret); @@ -2695,8 +2792,12 @@ int recorder_unset_recording_limit_reached_cb(recorder_h recorder) _recorder_msg_send(api, pc->cb_info, &ret, RECORDER_CB_TIMEOUT); if (ret == RECORDER_ERROR_NONE) { + g_mutex_lock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED]); + pc->cb_info->user_cb[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = NULL; pc->cb_info->user_data[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED] = NULL; + + g_mutex_unlock(&pc->cb_info->user_cb_mutex[MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED]); } LOGD("ret : 0x%x", ret); diff --git a/test/recorder_test.c b/test/recorder_test.c index ce48d36..c3d0bab 100644 --- a/test/recorder_test.c +++ b/test/recorder_test.c @@ -325,7 +325,7 @@ static void _recording_muxed_stream_cb(void *stream, int size, unsigned long lon g_print("\tRECORDING MUXED STREAM CB - %p, size %d, offset %llu\n", stream, size, offset); if (stream && size > 0) { - if (access(TARGET_FILENAME_MUXED_CB, F_OK)) + if (offset == 0) fp = fopen(TARGET_FILENAME_MUXED_CB, "w"); else fp = fopen(TARGET_FILENAME_MUXED_CB, "rb+"); @@ -335,9 +335,11 @@ static void _recording_muxed_stream_cb(void *stream, int size, unsigned long lon g_print("\tback to %llu\n", offset); } - fseeko(fp, (off_t)offset, SEEK_SET); + if (fseeko(fp, (off_t)offset, SEEK_SET) == 0) + fwrite(stream, 1, size, fp); + else + g_print("\nSeek Error : offset %llu\n", offset); - fwrite(stream, 1, size, fp); fclose(fp); fp = NULL; } else { |