2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <sys/types.h>
21 #include <sys/socket.h>
24 #include "muse_recorder.h"
25 #include "muse_recorder_msg.h"
26 #include <muse_server.h>
27 #include <muse_camera_internal.h>
32 #include "legacy_recorder_internal.h"
37 #define LOG_TAG "MUSED_RECORDER"
40 #define AUDIO_RECORDING_FEATURE_NAME "http://tizen.org/feature/media.audio_recording"
41 #define VIDEO_RECORDING_FEATURE_NAME "http://tizen.org/feature/media.video_recording"
42 #define CAMERA_PRIVILEGE_NAME "http://tizen.org/privilege/camera"
43 #define RECORDER_PRIVILEGE_NAME "http://tizen.org/privilege/recorder"
44 #define RECORDER_DEVICE_STATE_KEY_AUDIO "device_state_recorder_audio"
45 #define RECORDER_DEVICE_STATE_KEY_VIDEO "device_state_recorder_video"
47 #define recorder_return_if_fail(expr) \
50 LOGE("failed [%s]", #expr); \
55 #define recorder_return_val_if_fail(expr, val) \
58 LOGE("failed [%s]", #expr); \
63 #define recorder_send_msg_return_err_if_fail(expr, ret, err) \
67 LOGE("failed [%s]", #expr); \
68 muse_recorder_msg_return(api, class, _ret, module); \
73 static GMutex g_recorder_device_state_lock;
77 * @brief The structure type for the exported bo data.
82 } muse_recorder_export_data;
88 } muse_recorder_data_list;
91 * @brief The structure type for the muse recorder.
94 recorder_h recorder_handle;
97 muse_recorder_data_list recorder_data;
98 muse_camera_data_list camera_data;
99 bool video_encode_decision;
100 muse_recorder_type_e type;
101 muse_camera_handle_s *muse_camera;
102 } muse_recorder_handle_s;
105 void _recorder_disp_recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
107 muse_module_h module = (muse_module_h)user_data;
109 recorder_return_if_fail(module);
111 muse_recorder_msg_event1(MUSE_RECORDER_CB_EVENT,
112 MUSE_RECORDER_EVENT_TYPE_RECORDING_LIMITED,
113 MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN,
120 void _recorder_disp_recording_status_cb(unsigned long long elapsed_time, unsigned long long file_size, void *user_data)
122 muse_module_h module = (muse_module_h)user_data;
123 int64_t cb_elapsed_time = (int64_t)elapsed_time;
124 int64_t cb_file_size = (int64_t)file_size;
126 recorder_return_if_fail(module);
128 muse_recorder_msg_event2(MUSE_RECORDER_CB_EVENT,
129 MUSE_RECORDER_EVENT_TYPE_RECORDING_STATUS,
130 MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN,
132 INT64, cb_elapsed_time,
133 INT64, cb_file_size);
138 void _recorder_disp_state_changed_cb(recorder_state_e previous, recorder_state_e current, bool by_policy, void *user_data)
140 muse_module_h module = (muse_module_h)user_data;
141 muse_recorder_handle_s *muse_recorder = NULL;
142 char value_key[KEY_LENGTH] = {'\0',};
144 int device_recording = 0;
145 int device_paused = 0;
146 int device_status = -1;
147 int vconf_state_recorder = VCONFKEY_RECORDER_STATE_NULL;
148 int vconf_state_camera = VCONFKEY_CAMERA_STATE_PREVIEW;
149 recorder_device_state_e current_state = RECORDER_DEVICE_STATE_IDLE;
150 static recorder_device_state_e device_state[MUSE_RECORDER_TYPE_NUM] = {
151 RECORDER_DEVICE_STATE_IDLE, /* 0:MUSE_RECORDER_TYPE_AUDIO */
152 RECORDER_DEVICE_STATE_IDLE /* 1:MUSE_RECORDER_TYPE_VIDEO */
155 recorder_return_if_fail(module);
157 muse_recorder_msg_event3(MUSE_RECORDER_CB_EVENT,
158 MUSE_RECORDER_EVENT_TYPE_STATE_CHANGE,
159 MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN,
165 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
167 recorder_return_if_fail(muse_recorder);
169 g_mutex_lock(&g_recorder_device_state_lock);
172 if (muse_recorder->type == MUSE_RECORDER_TYPE_AUDIO)
173 snprintf(value_key, KEY_LENGTH, "%s", RECORDER_DEVICE_STATE_KEY_AUDIO);
175 snprintf(value_key, KEY_LENGTH, "%s", RECORDER_DEVICE_STATE_KEY_VIDEO);
177 /* get current status */
178 muse_server_module_get_value(module, value_key, &device_status);
179 device_recording = device_status >> 16;
180 device_paused = 0x0000ffff & device_status;
182 LOGD("get [%s] 0x%8x", value_key, device_status);
184 LOGD("previous RECORDING %d, PAUSED %d", device_recording, device_paused);
187 if (current == RECORDER_STATE_RECORDING)
189 else if (current == RECORDER_STATE_PAUSED)
192 if (previous == RECORDER_STATE_RECORDING)
194 else if (previous == RECORDER_STATE_PAUSED)
197 LOGD("current RECORDING %d, PAUSED %d", device_recording, device_paused);
199 /* make new status */
200 device_status = device_recording << 16 | device_paused;
202 LOGD("set [%s] 0x%8x", value_key, device_status);
204 muse_server_module_set_value(module, value_key, device_status);
206 /* check whether emit signal or not */
207 if (device_recording > 0) {
208 current_state = RECORDER_DEVICE_STATE_RECORDING;
209 vconf_state_recorder = VCONFKEY_RECORDER_STATE_RECORDING;
210 vconf_state_camera = VCONFKEY_CAMERA_STATE_RECORDING;
211 } else if (device_paused > 0) {
212 current_state = RECORDER_DEVICE_STATE_PAUSED;
213 vconf_state_recorder = VCONFKEY_RECORDER_STATE_RECORDING_PAUSE;
214 vconf_state_camera = VCONFKEY_CAMERA_STATE_RECORDING_PAUSE;
217 if (current_state != device_state[muse_recorder->type]) {
218 LOGD("old %d -> new %d", device_state[muse_recorder->type], current_state);
220 emit_value = muse_recorder->type << 16 | current_state;
221 device_state[muse_recorder->type] = current_state;
224 if (emit_value != -1) {
225 LOGD("recorder devce state change signal [0x%08x], vconf state : %d",
226 emit_value, vconf_state_recorder);
228 legacy_recorder_emit_signal(muse_recorder->recorder_handle,
229 MM_CAMCORDER_DBUS_OBJECT,
230 MM_CAMCORDER_DBUS_INTERFACE_RECORDER,
231 MM_CAMCORDER_DBUS_SIGNAL_STATE_CHANGED,
234 vconf_set_int(VCONFKEY_RECORDER_STATE, vconf_state_recorder);
236 if (muse_recorder->type == MUSE_RECORDER_TYPE_VIDEO) {
237 LOGD("Update vconf camera device state also : %d", vconf_state_camera);
238 vconf_set_int(VCONFKEY_CAMERA_STATE, vconf_state_camera);
242 g_mutex_unlock(&g_recorder_device_state_lock);
248 void _recorder_disp_interrupted_cb(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *user_data)
250 muse_module_h module = (muse_module_h)user_data;
252 recorder_return_if_fail(module);
254 muse_recorder_msg_event3(MUSE_RECORDER_CB_EVENT,
255 MUSE_RECORDER_EVENT_TYPE_INTERRUPTED,
256 MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN,
265 void _recorder_disp_interrupt_started_cb(recorder_policy_e policy, recorder_state_e state, void *user_data)
267 muse_module_h module = (muse_module_h)user_data;
269 recorder_return_if_fail(module);
271 muse_recorder_msg_event2(MUSE_RECORDER_CB_EVENT,
272 MUSE_RECORDER_EVENT_TYPE_INTERRUPT_STARTED,
273 MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN,
281 void _recorder_disp_error_cb(recorder_error_e error, recorder_state_e current_state, void *user_data)
283 muse_module_h module = (muse_module_h)user_data;
285 recorder_return_if_fail(module);
287 muse_recorder_msg_event2(MUSE_RECORDER_CB_EVENT,
288 MUSE_RECORDER_EVENT_TYPE_ERROR,
289 MUSE_RECORDER_EVENT_CLASS_THREAD_MAIN,
298 void _recorder_disp_audio_stream_cb(void* stream, int size, recorder_sample_type_e format, int channel, unsigned int timestamp, void *user_data)
300 muse_module_h module = (muse_module_h)user_data;
301 muse_recorder_handle_s *muse_recorder = NULL;
302 muse_recorder_export_data *export_data = NULL;
304 tbm_fd tfd[MUSE_NUM_FD] = {-1, -1, -1, -1};
306 tbm_bo_handle bo_handle = {.ptr = NULL};
308 recorder_return_if_fail(module && stream);
310 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
312 recorder_return_if_fail(muse_recorder);
314 export_data = g_new0(muse_recorder_export_data, 1);
319 bo = tbm_bo_alloc(muse_recorder->bufmgr, size, TBM_BO_DEFAULT);
321 LOGE("bo alloc failed : bufmgr %p, size %d", muse_recorder->bufmgr, size);
325 bo_handle = tbm_bo_map(bo, TBM_DEVICE_CPU, TBM_OPTION_READ | TBM_OPTION_WRITE);
326 if (bo_handle.ptr == NULL) {
327 LOGE("bo map Error!");
331 memcpy(bo_handle.ptr, stream, size);
335 audio_fd = tbm_bo_export_fd(bo);
337 LOGE("export bo ERROR");
343 export_data->fd = audio_fd;
344 export_data->bo = bo;
346 /* add bo info to list */
347 g_mutex_lock(&muse_recorder->recorder_data.lock);
348 muse_recorder->recorder_data.list = g_list_append(muse_recorder->recorder_data.list, (gpointer)export_data);
349 g_mutex_unlock(&muse_recorder->recorder_data.lock);
352 muse_recorder_msg_event5_fd(MUSE_RECORDER_CB_EVENT,
353 MUSE_RECORDER_EVENT_TYPE_AUDIO_STREAM,
354 MUSE_RECORDER_EVENT_CLASS_THREAD_SUB,
371 void _recorder_disp_muxed_stream_cb(void* stream, int size, unsigned long long offset, void *user_data)
373 muse_module_h module = (muse_module_h)user_data;
374 muse_recorder_handle_s *muse_recorder = NULL;
375 muse_recorder_export_data *export_data = NULL;
377 tbm_fd tfd[MUSE_NUM_FD] = {-1, -1, -1, -1};
379 tbm_bo_handle bo_handle = {.ptr = NULL};
381 recorder_return_if_fail(module && stream);
383 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
385 recorder_return_if_fail(muse_recorder);
387 export_data = g_new0(muse_recorder_export_data, 1);
392 bo = tbm_bo_alloc(muse_recorder->bufmgr, size, TBM_BO_DEFAULT);
394 LOGE("bo alloc failed : bufmgr %p, size %d", muse_recorder->bufmgr, size);
395 goto _MUXED_STREAM_CB_ERROR;
398 bo_handle = tbm_bo_map(bo, TBM_DEVICE_CPU, TBM_OPTION_READ | TBM_OPTION_WRITE);
399 if (!bo_handle.ptr) {
400 LOGE("bo map Error!");
401 goto _MUXED_STREAM_CB_ERROR;
404 memcpy(bo_handle.ptr, stream, size);
408 muxed_fd = tbm_bo_export_fd(bo);
410 LOGE("export bo ERROR");
411 goto _MUXED_STREAM_CB_ERROR;
416 export_data->fd = muxed_fd;
417 export_data->bo = bo;
419 /* add bo info to list */
420 g_mutex_lock(&muse_recorder->recorder_data.lock);
421 muse_recorder->recorder_data.list = g_list_append(muse_recorder->recorder_data.list, (gpointer)export_data);
422 g_mutex_unlock(&muse_recorder->recorder_data.lock);
425 muse_recorder_msg_event3_fd(MUSE_RECORDER_CB_EVENT,
426 MUSE_RECORDER_EVENT_TYPE_MUXED_STREAM,
427 MUSE_RECORDER_EVENT_CLASS_THREAD_SUB,
436 _MUXED_STREAM_CB_ERROR:
450 bool _recorder_disp_video_encode_decision_cb(void *stream, void *user_data)
453 char *send_message = NULL;
454 muse_recorder_handle_s *muse_recorder = NULL;
455 muse_camera_export_data *export_data = NULL;
456 muse_module_h module = (muse_module_h)user_data;
457 tbm_fd tfd[MUSE_NUM_FD] = {-1, -1, -1, -1};
462 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
464 recorder_return_val_if_fail(muse_recorder, true);
466 export_data = camera_export_data_new_from_stream(stream, muse_recorder->bufmgr, tfd);
468 LOGE("export_data failed");
472 /* add bo info to list */
473 g_mutex_lock(&muse_recorder->camera_data.lock);
475 muse_recorder->camera_data.list = g_list_append(muse_recorder->camera_data.list, (gpointer)export_data);
478 muse_recorder->video_encode_decision = true;
481 send_message = muse_core_msg_new(MUSE_RECORDER_CB_EVENT,
482 MUSE_TYPE_INT, PARAM_EVENT, MUSE_RECORDER_EVENT_TYPE_VIDEO_ENCODE_DECISION,
483 MUSE_TYPE_INT, PARAM_EVENT_CLASS, MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
484 MUSE_TYPE_INT, "video_fd", tfd[0],
485 MUSE_TYPE_INT, "num_buffer_fd", export_data->num_buffer_fd,
488 send_ret = muse_core_msg_send_fd(muse_server_module_get_msg_fd(module), (int *)tfd, send_message);
490 muse_core_msg_free(send_message);
492 end_time = g_get_monotonic_time() + G_TIME_SPAN_SECOND;
493 if (!g_cond_wait_until(&muse_recorder->camera_data.cond, &muse_recorder->camera_data.lock, end_time))
494 LOGW("video encode decision callback return message timeout");
496 g_mutex_unlock(&muse_recorder->camera_data.lock);
498 /*LOGD("returned video_encode_decision %d", muse_recorder->video_encode_decision);*/
500 return muse_recorder->video_encode_decision;
503 bool _recorder_disp_foreach_supported_video_resolution_cb(int width, int height, void *user_data)
505 muse_module_h module = (muse_module_h)user_data;
507 recorder_return_val_if_fail(module, false);
509 muse_recorder_msg_event2(MUSE_RECORDER_CB_EVENT,
510 MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_RESOLUTION,
511 MUSE_RECORDER_EVENT_CLASS_THREAD_SUB,
519 bool _recorder_disp_foreach_supported_file_format_cb(recorder_file_format_e format, void *user_data)
521 muse_module_h module = (muse_module_h)user_data;
523 recorder_return_val_if_fail(module, false);
525 muse_recorder_msg_event1(MUSE_RECORDER_CB_EVENT,
526 MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_FILE_FORMAT,
527 MUSE_RECORDER_EVENT_CLASS_THREAD_SUB,
534 bool _recorder_disp_foreach_supported_audio_encoder_cb(recorder_audio_codec_e codec, void *user_data)
536 muse_module_h module = (muse_module_h)user_data;
538 recorder_return_val_if_fail(module, false);
540 muse_recorder_msg_event1(MUSE_RECORDER_CB_EVENT,
541 MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_AUDIO_ENCODER,
542 MUSE_RECORDER_EVENT_CLASS_THREAD_SUB,
549 bool _recorder_disp_foreach_supported_video_encoder_cb(recorder_video_codec_e codec, void *user_data)
551 muse_module_h module = (muse_module_h)user_data;
553 recorder_return_val_if_fail(module, false);
555 muse_recorder_msg_event1(MUSE_RECORDER_CB_EVENT,
556 MUSE_RECORDER_EVENT_TYPE_FOREACH_SUPPORTED_VIDEO_ENCODER,
557 MUSE_RECORDER_EVENT_CLASS_THREAD_SUB,
565 static void _recorder_export_data_free(gpointer data)
567 muse_recorder_export_data *export_data = (muse_recorder_export_data *)data;
572 /*LOGD("fd[%d], bo[%p]", export_data->fd, export_data->bo);*/
575 if (export_data->bo) {
576 tbm_bo_unref(export_data->bo);
577 export_data->bo = NULL;
579 LOGW("bo for fd[%d] is NULL", export_data->fd);
582 /* close exported fd */
583 if (export_data->fd > -1) {
584 /*LOGD("close export_data->fd %d", export_data->fd);*/
585 close(export_data->fd);
586 export_data->fd = -1;
593 static int _recorder_export_data_compare(gconstpointer data, gconstpointer fd_to_find)
595 /*LOGD("%d : %d", ((muse_recorder_export_data *)data)->fd, GPOINTER_TO_INT(fd_to_find));*/
596 return (((muse_recorder_export_data *)data)->fd != GPOINTER_TO_INT(fd_to_find));
600 static gboolean _recorder_remove_export_data(muse_recorder_data_list *recorder_data, tbm_fd fd)
602 GList *found_item = NULL;
604 recorder_return_val_if_fail(recorder_data, FALSE);
605 recorder_return_val_if_fail(fd >= -1, FALSE); /* -1 means "Remove all". */
607 g_mutex_lock(&recorder_data->lock);
610 g_list_free_full(recorder_data->list, _recorder_export_data_free);
611 recorder_data->list = NULL;
613 found_item = g_list_find_custom(recorder_data->list,
614 GINT_TO_POINTER(fd), _recorder_export_data_compare);
616 LOGE("could not find data for fd[%d]", fd);
617 g_mutex_unlock(&recorder_data->lock);
621 recorder_data->list = g_list_remove_link(recorder_data->list, found_item);
622 g_list_free_full(found_item, _recorder_export_data_free);
625 g_mutex_unlock(&recorder_data->lock);
631 bool _recorder_check_supported_feature(int type)
633 bool feature_supported = false;
634 const char *feature_name = NULL;
636 recorder_return_val_if_fail(type == MUSE_RECORDER_TYPE_AUDIO || type == MUSE_RECORDER_TYPE_VIDEO, false);
638 if (type == MUSE_RECORDER_TYPE_AUDIO)
639 feature_name = AUDIO_RECORDING_FEATURE_NAME;
641 feature_name = VIDEO_RECORDING_FEATURE_NAME;
643 if (muse_server_get_platform_info(feature_name, &feature_supported) != MM_ERROR_NONE)
644 LOGE("failed to get platform info for [%s]", feature_name);
646 LOGD("[%s] -> %d", feature_name, feature_supported);
648 return feature_supported;
652 int recorder_dispatcher_create(muse_module_h module)
654 int ret = RECORDER_ERROR_NONE;
655 int recorder_type = MUSE_RECORDER_TYPE_AUDIO;
657 void *gdbus_connection = NULL;
658 muse_recorder_api_e api = MUSE_RECORDER_API_CREATE;
659 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
660 intptr_t camera_handle = 0;
661 muse_recorder_handle_s *muse_recorder = NULL;
664 muse_recorder_msg_get(recorder_type, muse_server_module_get_msg(module));
666 LOGD("Enter - type %d", recorder_type);
669 muse_recorder = g_new0(muse_recorder_handle_s, 1);
671 muse_recorder->type = recorder_type;
672 g_mutex_init(&muse_recorder->recorder_data.lock);
673 g_cond_init(&muse_recorder->recorder_data.cond);
674 g_mutex_init(&muse_recorder->camera_data.lock);
675 g_cond_init(&muse_recorder->camera_data.cond);
677 if (muse_server_ipc_get_bufmgr(&muse_recorder->bufmgr) != MM_ERROR_NONE ||
678 muse_server_ipc_get_gdbus_connection((GDBusConnection **)&gdbus_connection) != MM_ERROR_NONE) {
679 LOGE("tbm bufmgr or gdbus connection failed %p %p", muse_recorder->bufmgr, gdbus_connection);
680 ret = RECORDER_ERROR_INVALID_OPERATION;
684 if (recorder_type == MUSE_RECORDER_TYPE_VIDEO) {
685 muse_recorder_msg_get_pointer(camera_handle, muse_server_module_get_msg(module));
686 if (camera_handle == 0) {
688 ret = RECORDER_ERROR_INVALID_PARAMETER;
692 muse_recorder->muse_camera = (muse_camera_handle_s *)camera_handle;
694 ret = legacy_recorder_create_videorecorder(muse_recorder->muse_camera->camera_handle,
695 &muse_recorder->recorder_handle);
697 LOGD("video type, camera handle : %p", muse_recorder->muse_camera->camera_handle);
698 } else if (recorder_type == MUSE_RECORDER_TYPE_AUDIO) {
699 muse_recorder_msg_get(pid, muse_server_module_get_msg(module));
701 LOGD("audio type - pid %d", pid);
703 ret = legacy_recorder_create_audiorecorder(&muse_recorder->recorder_handle);
704 if (ret != RECORDER_ERROR_NONE) {
705 LOGE("create audio recorder failed");
709 ret = legacy_recorder_set_client_pid(muse_recorder->recorder_handle, pid);
710 ret |= legacy_recorder_set_gdbus_connection(muse_recorder->recorder_handle, gdbus_connection);
712 LOGE("unknown type %d", recorder_type);
713 ret = RECORDER_ERROR_INVALID_OPERATION;
716 if (ret != RECORDER_ERROR_NONE)
719 /* recording feature check */
720 if (!_recorder_check_supported_feature(recorder_type)) {
721 LOGE("feature NOT SUPPORTED, BUT INI FILE FOR RECORDER IS EXISTED. RECOMMEND TO REMOVE IT.");
722 ret = RECORDER_ERROR_NOT_SUPPORTED;
726 ret = legacy_recorder_set_state_changed_cb(muse_recorder->recorder_handle,
727 (recorder_state_changed_cb)_recorder_disp_state_changed_cb,
729 if (ret != RECORDER_ERROR_NONE)
732 LOGD("recorder handle : %p, module : %p", muse_recorder, module);
734 handle = (intptr_t)muse_recorder->recorder_handle;
735 muse_server_ipc_set_handle(module, (intptr_t)muse_recorder);
736 muse_recorder_msg_return1(api, class, ret, module, POINTER, handle);
738 return MUSE_RECORDER_ERROR_NONE;
741 if (muse_recorder->recorder_handle) {
742 legacy_recorder_destroy(muse_recorder->recorder_handle);
743 muse_recorder->recorder_handle = NULL;
746 g_cond_init(&muse_recorder->camera_data.cond);
747 g_mutex_init(&muse_recorder->camera_data.lock);
748 g_cond_init(&muse_recorder->recorder_data.cond);
749 g_mutex_init(&muse_recorder->recorder_data.lock);
751 g_free(muse_recorder);
753 LOGE("error 0x%x", ret);
755 muse_recorder_msg_return(api, class, ret, module);
757 return MUSE_RECORDER_ERROR_INVALID;
761 int recorder_dispatcher_destroy(muse_module_h module)
763 int ret = RECORDER_ERROR_NONE;
764 muse_recorder_handle_s *muse_recorder = NULL;
765 muse_recorder_api_e api = MUSE_RECORDER_API_DESTROY;
766 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
768 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
770 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
772 ret = legacy_recorder_destroy(muse_recorder->recorder_handle);
773 if (ret == RECORDER_ERROR_NONE) {
774 if (muse_recorder->recorder_data.list)
775 _recorder_remove_export_data(&muse_recorder->recorder_data, -1);
776 if (muse_recorder->camera_data.list) {
777 /* camera_remove_export_data() should not be called if no camera data,
778 otherwise it will be crashed because libmuse-recorder.so does not have dependency
779 to libmuse-camera.so which has camera_remove_export_data().
780 libmuse-camera.so will be loaded when camera_data is used. */
781 camera_remove_export_data(&muse_recorder->camera_data, -1);
784 g_cond_clear(&muse_recorder->camera_data.cond);
785 g_mutex_clear(&muse_recorder->camera_data.lock);
786 g_cond_clear(&muse_recorder->recorder_data.cond);
787 g_mutex_clear(&muse_recorder->recorder_data.lock);
789 muse_recorder->bufmgr = NULL;
791 g_free(muse_recorder);
793 LOGE("recorder destroy failed 0x%x", ret);
796 muse_recorder_msg_return(api, class, ret, module);
798 if (ret == RECORDER_ERROR_NONE)
799 return MUSE_RECORDER_ERROR_NONE;
801 return MUSE_RECORDER_ERROR_INVALID;
804 int recorder_dispatcher_get_state(muse_module_h module)
806 int ret = RECORDER_ERROR_NONE;
807 muse_recorder_api_e api = MUSE_RECORDER_API_GET_STATE;
808 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
809 recorder_state_e get_state = RECORDER_STATE_NONE;
810 muse_recorder_handle_s *muse_recorder = NULL;
812 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
814 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
816 ret = legacy_recorder_get_state(muse_recorder->recorder_handle, &get_state);
818 muse_recorder_msg_return1(api, class, ret, module, INT, get_state);
820 return MUSE_RECORDER_ERROR_NONE;
823 int recorder_dispatcher_prepare(muse_module_h module)
825 int ret = RECORDER_ERROR_NONE;
827 muse_recorder_api_e api = MUSE_RECORDER_API_PREPARE;
828 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
829 muse_recorder_handle_s *muse_recorder = NULL;
831 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
833 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
835 if (muse_recorder->type == MUSE_RECORDER_TYPE_VIDEO) {
836 client_fd = muse_server_module_get_msg_fd(module);
838 ret = RECORDER_ERROR_INVALID_OPERATION;
839 LOGE("failed to get fd %d", client_fd);
840 muse_recorder_msg_return(api, class, ret, module);
841 return MUSE_RECORDER_ERROR_INVALID;
844 /* public privilege for camera */
845 if (!muse_server_security_check_cynara(client_fd, CAMERA_PRIVILEGE_NAME)) {
846 ret = RECORDER_ERROR_PERMISSION_DENIED;
847 LOGE("privilege[%s] failed 0x%x", CAMERA_PRIVILEGE_NAME, ret);
848 muse_recorder_msg_return(api, class, ret, module);
849 return MUSE_RECORDER_ERROR_INVALID;
852 /* platform privilege for camera */
853 if (muse_recorder->muse_camera && muse_recorder->muse_camera->platform_privilege &&
854 !muse_server_security_check_cynara(client_fd, muse_recorder->muse_camera->platform_privilege)) {
855 ret = RECORDER_ERROR_PERMISSION_DENIED;
856 LOGE("privilege[%s] failed 0x%x", muse_recorder->muse_camera->platform_privilege, ret);
857 muse_recorder_msg_return(api, class, ret, module);
858 return MUSE_RECORDER_ERROR_INVALID;
862 ret = legacy_recorder_prepare(muse_recorder->recorder_handle);
864 muse_recorder_msg_return(api, class, ret, module);
866 return MUSE_RECORDER_ERROR_NONE;
869 int recorder_dispatcher_unprepare(muse_module_h module)
871 int ret = RECORDER_ERROR_NONE;
872 muse_recorder_api_e api = MUSE_RECORDER_API_UNPREPARE;
873 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
874 muse_recorder_handle_s *muse_recorder = NULL;
876 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
878 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
880 ret = legacy_recorder_unprepare(muse_recorder->recorder_handle);
882 muse_recorder_msg_return(api, class, ret, module);
884 return MUSE_RECORDER_ERROR_NONE;
887 int recorder_dispatcher_start(muse_module_h module)
889 int ret = RECORDER_ERROR_NONE;
891 muse_recorder_api_e api = MUSE_RECORDER_API_START;
892 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
893 muse_recorder_handle_s *muse_recorder = NULL;
895 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
897 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
899 /* privilege check */
900 client_fd = muse_server_module_get_msg_fd(module);
903 ret = RECORDER_ERROR_INVALID_OPERATION;
904 LOGE("failed to get fd %d", client_fd);
905 muse_recorder_msg_return(api, class, ret, module);
906 return MUSE_RECORDER_ERROR_INVALID;
910 if (!muse_server_security_check_cynara(client_fd, RECORDER_PRIVILEGE_NAME)) {
912 LOGE("security(recorder) check failed");
913 ret = RECORDER_ERROR_PERMISSION_DENIED;
914 muse_recorder_msg_return(api, class, ret, module);
915 return MUSE_RECORDER_ERROR_INVALID;
919 ret = legacy_recorder_start(muse_recorder->recorder_handle);
921 muse_recorder_msg_return(api, class, ret, module);
923 return MUSE_RECORDER_ERROR_NONE;
926 int recorder_dispatcher_pause(muse_module_h module)
928 int ret = RECORDER_ERROR_NONE;
929 muse_recorder_api_e api = MUSE_RECORDER_API_PAUSE;
930 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
931 muse_recorder_handle_s *muse_recorder = NULL;
933 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
935 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
937 ret = legacy_recorder_pause(muse_recorder->recorder_handle);
939 muse_recorder_msg_return(api, class, ret, module);
941 return MUSE_RECORDER_ERROR_NONE;
944 int recorder_dispatcher_commit(muse_module_h module)
946 int ret = RECORDER_ERROR_NONE;
947 muse_recorder_api_e api = MUSE_RECORDER_API_COMMIT;
948 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
949 muse_recorder_handle_s *muse_recorder = NULL;
951 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
953 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
955 ret = legacy_recorder_commit(muse_recorder->recorder_handle);
957 muse_recorder_msg_return(api, class, ret, module);
959 return MUSE_RECORDER_ERROR_NONE;
962 int recorder_dispatcher_cancel(muse_module_h module)
964 int ret = RECORDER_ERROR_NONE;
965 muse_recorder_api_e api = MUSE_RECORDER_API_CANCEL;
966 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
967 muse_recorder_handle_s *muse_recorder = NULL;
969 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
971 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
973 ret = legacy_recorder_cancel(muse_recorder->recorder_handle);
975 muse_recorder_msg_return(api, class, ret, module);
977 return MUSE_RECORDER_ERROR_NONE;
980 int recorder_dispatcher_set_video_resolution(muse_module_h module)
982 int ret = RECORDER_ERROR_NONE;
985 muse_recorder_api_e api = MUSE_RECORDER_API_SET_VIDEO_RESOLUTION;
986 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
987 muse_recorder_handle_s *muse_recorder = NULL;
989 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
991 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
993 muse_recorder_msg_get(width, muse_server_module_get_msg(module));
994 muse_recorder_msg_get(height, muse_server_module_get_msg(module));
996 ret = legacy_recorder_set_video_resolution(muse_recorder->recorder_handle, width, height);
998 muse_recorder_msg_return(api, class, ret, module);
1000 return MUSE_RECORDER_ERROR_NONE;
1003 int recorder_dispatcher_get_video_resolution(muse_module_h module)
1005 int ret = RECORDER_ERROR_NONE;
1008 muse_recorder_api_e api = MUSE_RECORDER_API_GET_VIDEO_RESOLUTION;
1009 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1010 muse_recorder_handle_s *muse_recorder = NULL;
1012 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1014 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1016 ret = legacy_recorder_get_video_resolution(muse_recorder->recorder_handle, &get_width, &get_height);
1018 muse_recorder_msg_return2(api, class, ret, module,
1022 return MUSE_RECORDER_ERROR_NONE;
1025 int recorder_dispatcher_foreach_supported_video_resolution(muse_module_h module)
1027 int ret = RECORDER_ERROR_NONE;
1028 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_RESOLUTION;
1029 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1030 muse_recorder_handle_s *muse_recorder = NULL;
1032 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1034 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1036 ret = legacy_recorder_foreach_supported_video_resolution(muse_recorder->recorder_handle,
1037 (recorder_supported_video_resolution_cb)_recorder_disp_foreach_supported_video_resolution_cb,
1040 muse_recorder_msg_return(api, class, ret, module);
1042 return MUSE_RECORDER_ERROR_NONE;
1045 int recorder_dispatcher_get_audio_level(muse_module_h module)
1047 int ret = RECORDER_ERROR_NONE;
1048 double get_level = 0;
1049 muse_recorder_api_e api = MUSE_RECORDER_API_GET_AUDIO_LEVEL;
1050 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1051 muse_recorder_handle_s *muse_recorder = NULL;
1053 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1055 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1057 ret = legacy_recorder_get_audio_level(muse_recorder->recorder_handle, &get_level);
1059 muse_recorder_msg_return1(api, class, ret, module, DOUBLE, get_level);
1061 return MUSE_RECORDER_ERROR_NONE;
1064 int recorder_dispatcher_set_filename(muse_module_h module)
1066 int ret = RECORDER_ERROR_NONE;
1067 char set_filename[MUSE_RECORDER_MSG_MAX_LENGTH] = {0,};
1068 muse_recorder_api_e api = MUSE_RECORDER_API_SET_FILENAME;
1069 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1070 muse_recorder_handle_s *muse_recorder = NULL;
1072 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1074 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1076 muse_recorder_msg_get_string(set_filename, muse_server_module_get_msg(module));
1078 ret = legacy_recorder_set_filename(muse_recorder->recorder_handle, set_filename);
1080 muse_recorder_msg_return(api, class, ret, module);
1082 return MUSE_RECORDER_ERROR_NONE;
1085 int recorder_dispatcher_get_filename(muse_module_h module)
1087 int ret = RECORDER_ERROR_NONE;
1088 char *get_filename = NULL;
1089 muse_recorder_api_e api = MUSE_RECORDER_API_GET_FILENAME;
1090 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1091 muse_recorder_handle_s *muse_recorder = NULL;
1093 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1095 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1097 ret = legacy_recorder_get_filename(muse_recorder->recorder_handle, &get_filename);
1098 if (ret == RECORDER_ERROR_NONE && get_filename)
1099 muse_recorder_msg_return1(api, class, ret, module, STRING, get_filename);
1101 muse_recorder_msg_return(api, class, ret, module);
1105 get_filename = NULL;
1108 return MUSE_RECORDER_ERROR_NONE;
1111 int recorder_dispatcher_set_file_format(muse_module_h module)
1113 int ret = RECORDER_ERROR_NONE;
1114 recorder_file_format_e set_format = RECORDER_FILE_FORMAT_3GP;
1115 muse_recorder_api_e api = MUSE_RECORDER_API_SET_FILE_FORMAT;
1116 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1117 muse_recorder_handle_s *muse_recorder = NULL;
1119 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1121 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1123 muse_recorder_msg_get(set_format, muse_server_module_get_msg(module));
1125 ret = legacy_recorder_set_file_format(muse_recorder->recorder_handle, set_format);
1127 muse_recorder_msg_return(api, class, ret, module);
1129 return MUSE_RECORDER_ERROR_NONE;
1132 int recorder_dispatcher_get_file_format(muse_module_h module)
1134 int ret = RECORDER_ERROR_NONE;
1135 recorder_file_format_e get_format = RECORDER_FILE_FORMAT_3GP;
1136 muse_recorder_api_e api = MUSE_RECORDER_API_GET_FILE_FORMAT;
1137 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1138 muse_recorder_handle_s *muse_recorder = NULL;
1140 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1142 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1144 ret = legacy_recorder_get_file_format(muse_recorder->recorder_handle, &get_format);
1146 muse_recorder_msg_return1(api, class, ret, module, INT, get_format);
1148 return MUSE_RECORDER_ERROR_NONE;
1151 int recorder_dispatcher_set_state_changed_cb(muse_module_h module)
1153 int ret = RECORDER_ERROR_NONE;
1154 muse_recorder_api_e api = MUSE_RECORDER_API_SET_STATE_CHANGED_CB;
1155 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1159 muse_recorder_msg_return(api, class, ret, module);
1161 return MUSE_RECORDER_ERROR_NONE;
1164 int recorder_dispatcher_unset_state_changed_cb(muse_module_h module)
1166 int ret = RECORDER_ERROR_NONE;
1167 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_STATE_CHANGED_CB;
1168 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1172 muse_recorder_msg_return(api, class, ret, module);
1174 return MUSE_RECORDER_ERROR_NONE;
1177 int recorder_dispatcher_set_interrupted_cb(muse_module_h module)
1179 int ret = RECORDER_ERROR_NONE;
1180 muse_recorder_api_e api = MUSE_RECORDER_API_SET_INTERRUPTED_CB;
1181 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1182 muse_recorder_handle_s *muse_recorder = NULL;
1184 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1186 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1188 ret = legacy_recorder_set_interrupted_cb(muse_recorder->recorder_handle,
1189 (recorder_interrupted_cb)_recorder_disp_interrupted_cb,
1192 muse_recorder_msg_return(api, class, ret, module);
1194 return MUSE_RECORDER_ERROR_NONE;
1197 int recorder_dispatcher_unset_interrupted_cb(muse_module_h module)
1199 int ret = RECORDER_ERROR_NONE;
1200 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_INTERRUPTED_CB;
1201 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1202 muse_recorder_handle_s *muse_recorder = NULL;
1204 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1206 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1208 ret = legacy_recorder_unset_interrupted_cb(muse_recorder->recorder_handle);
1210 muse_recorder_msg_return(api, class, ret, module);
1212 return MUSE_RECORDER_ERROR_NONE;
1215 int recorder_dispatcher_set_interrupt_started_cb(muse_module_h module)
1217 int ret = RECORDER_ERROR_NONE;
1218 muse_recorder_api_e api = MUSE_RECORDER_API_SET_INTERRUPT_STARTED_CB;
1219 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1220 muse_recorder_handle_s *muse_recorder = NULL;
1222 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1224 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1226 ret = legacy_recorder_set_interrupt_started_cb(muse_recorder->recorder_handle,
1227 (recorder_interrupt_started_cb)_recorder_disp_interrupt_started_cb,
1230 muse_recorder_msg_return(api, class, ret, module);
1232 return MUSE_RECORDER_ERROR_NONE;
1235 int recorder_dispatcher_unset_interrupt_started_cb(muse_module_h module)
1237 int ret = RECORDER_ERROR_NONE;
1238 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_INTERRUPT_STARTED_CB;
1239 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1240 muse_recorder_handle_s *muse_recorder = NULL;
1242 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1244 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1246 ret = legacy_recorder_unset_interrupt_started_cb(muse_recorder->recorder_handle);
1248 muse_recorder_msg_return(api, class, ret, module);
1250 return MUSE_RECORDER_ERROR_NONE;
1253 int recorder_dispatcher_set_audio_stream_cb(muse_module_h module)
1255 int ret = RECORDER_ERROR_NONE;
1256 muse_recorder_api_e api = MUSE_RECORDER_API_SET_AUDIO_STREAM_CB;
1257 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1258 muse_recorder_handle_s *muse_recorder = NULL;
1260 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1262 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1264 ret = legacy_recorder_set_audio_stream_cb(muse_recorder->recorder_handle,
1265 (recorder_audio_stream_cb)_recorder_disp_audio_stream_cb, (void *)module);
1267 muse_recorder_msg_return(api, class, ret, module);
1269 return MUSE_RECORDER_ERROR_NONE;
1272 int recorder_dispatcher_unset_audio_stream_cb(muse_module_h module)
1274 int ret = RECORDER_ERROR_NONE;
1275 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_AUDIO_STREAM_CB;
1276 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1277 muse_recorder_handle_s *muse_recorder = NULL;
1279 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1281 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1283 ret = legacy_recorder_unset_audio_stream_cb(muse_recorder->recorder_handle);
1285 muse_recorder_msg_return(api, class, ret, module);
1287 return MUSE_RECORDER_ERROR_NONE;
1290 int recorder_dispatcher_set_error_cb(muse_module_h module)
1292 int ret = RECORDER_ERROR_NONE;
1293 muse_recorder_api_e api = MUSE_RECORDER_API_SET_ERROR_CB;
1294 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1295 muse_recorder_handle_s *muse_recorder = NULL;
1297 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1299 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1301 ret = legacy_recorder_set_error_cb(muse_recorder->recorder_handle,
1302 (recorder_error_cb)_recorder_disp_error_cb,
1305 muse_recorder_msg_return(api, class, ret, module);
1307 return MUSE_RECORDER_ERROR_NONE;
1310 int recorder_dispatcher_unset_error_cb(muse_module_h module)
1312 int ret = RECORDER_ERROR_NONE;
1313 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_ERROR_CB;
1314 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1315 muse_recorder_handle_s *muse_recorder = NULL;
1317 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1319 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1321 ret = legacy_recorder_unset_error_cb(muse_recorder->recorder_handle);
1323 muse_recorder_msg_return(api, class, ret, module);
1325 return MUSE_RECORDER_ERROR_NONE;
1328 int recorder_dispatcher_set_recording_status_cb(muse_module_h module)
1330 int ret = RECORDER_ERROR_NONE;
1331 muse_recorder_api_e api = MUSE_RECORDER_API_SET_RECORDING_STATUS_CB;
1332 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1333 muse_recorder_handle_s *muse_recorder = NULL;
1335 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1337 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1339 ret = legacy_recorder_set_recording_status_cb(muse_recorder->recorder_handle,
1340 (recorder_recording_status_cb)_recorder_disp_recording_status_cb,
1343 muse_recorder_msg_return(api, class, ret, module);
1345 return MUSE_RECORDER_ERROR_NONE;
1348 int recorder_dispatcher_unset_recording_status_cb(muse_module_h module)
1350 int ret = RECORDER_ERROR_NONE;
1351 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_RECORDING_STATUS_CB;
1352 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1353 muse_recorder_handle_s *muse_recorder = NULL;
1355 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1357 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1359 ret = legacy_recorder_unset_recording_status_cb(muse_recorder->recorder_handle);
1361 muse_recorder_msg_return(api, class, ret, module);
1363 return MUSE_RECORDER_ERROR_NONE;
1366 int recorder_dispatcher_set_recording_limit_reached_cb(muse_module_h module)
1368 int ret = RECORDER_ERROR_NONE;
1369 muse_recorder_api_e api = MUSE_RECORDER_API_SET_RECORDING_LIMIT_REACHED_CB;
1370 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1371 muse_recorder_handle_s *muse_recorder = NULL;
1373 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1375 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1377 ret = legacy_recorder_set_recording_limit_reached_cb(muse_recorder->recorder_handle,
1378 (recorder_recording_limit_reached_cb)_recorder_disp_recording_limit_reached_cb,
1381 muse_recorder_msg_return(api, class, ret, module);
1383 return MUSE_RECORDER_ERROR_NONE;
1386 int recorder_dispatcher_unset_recording_limit_reached_cb(muse_module_h module)
1388 int ret = RECORDER_ERROR_NONE;
1389 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_RECORDING_LIMIT_REACHED_CB;
1390 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1391 muse_recorder_handle_s *muse_recorder = NULL;
1393 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1395 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1397 ret = legacy_recorder_unset_recording_limit_reached_cb(muse_recorder->recorder_handle);
1399 muse_recorder_msg_return(api, class, ret, module);
1401 return MUSE_RECORDER_ERROR_NONE;
1404 int recorder_dispatcher_foreach_supported_file_format(muse_module_h module)
1406 int ret = RECORDER_ERROR_NONE;
1407 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT;
1408 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1409 muse_recorder_handle_s *muse_recorder = NULL;
1411 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1413 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1415 ret = legacy_recorder_foreach_supported_file_format(muse_recorder->recorder_handle,
1416 (recorder_supported_file_format_cb)_recorder_disp_foreach_supported_file_format_cb,
1421 muse_recorder_msg_return(api, class, ret, module);
1423 return MUSE_RECORDER_ERROR_NONE;
1427 int recorder_dispatcher_foreach_supported_file_format_by_audio_encoder(muse_module_h module)
1429 int ret = RECORDER_ERROR_NONE;
1430 int audio_codec = RECORDER_AUDIO_CODEC_DISABLE;
1431 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT_BY_AUDIO_ENCORDER;
1432 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1433 muse_recorder_handle_s *muse_recorder = NULL;
1435 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1437 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1439 muse_recorder_msg_get(audio_codec, muse_server_module_get_msg(module));
1441 ret = legacy_recorder_foreach_supported_file_format(muse_recorder->recorder_handle,
1442 (recorder_supported_file_format_cb)_recorder_disp_foreach_supported_file_format_cb,
1443 MMCAM_AUDIO_ENCODER,
1447 muse_recorder_msg_return(api, class, ret, module);
1449 return MUSE_RECORDER_ERROR_NONE;
1452 int recorder_dispatcher_foreach_supported_file_format_by_video_encoder(muse_module_h module)
1454 int ret = RECORDER_ERROR_NONE;
1455 int video_codec = -1;
1456 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT_BY_VIDEO_ENCORDER;
1457 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1458 muse_recorder_handle_s *muse_recorder = NULL;
1460 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1462 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1464 muse_recorder_msg_get(video_codec, muse_server_module_get_msg(module));
1466 ret = legacy_recorder_foreach_supported_file_format(muse_recorder->recorder_handle,
1467 (recorder_supported_file_format_cb)_recorder_disp_foreach_supported_file_format_cb,
1468 MMCAM_VIDEO_ENCODER,
1472 muse_recorder_msg_return(api, class, ret, module);
1474 return MUSE_RECORDER_ERROR_NONE;
1478 int recorder_dispatcher_attr_set_size_limit(muse_module_h module)
1480 int ret = RECORDER_ERROR_NONE;
1482 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_SIZE_LIMIT;
1483 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1484 muse_recorder_handle_s *muse_recorder = NULL;
1486 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1488 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1490 muse_recorder_msg_get(kbyte, muse_server_module_get_msg(module));
1492 ret = legacy_recorder_attr_set_size_limit(muse_recorder->recorder_handle, kbyte);
1494 muse_recorder_msg_return(api, class, ret, module);
1496 return MUSE_RECORDER_ERROR_NONE;
1499 int recorder_dispatcher_attr_set_time_limit(muse_module_h module)
1501 int ret = RECORDER_ERROR_NONE;
1503 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_TIME_LIMIT;
1504 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1505 muse_recorder_handle_s *muse_recorder = NULL;
1507 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1509 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1511 muse_recorder_msg_get(second, muse_server_module_get_msg(module));
1513 ret = legacy_recorder_attr_set_time_limit(muse_recorder->recorder_handle, second);
1515 muse_recorder_msg_return(api, class, ret, module);
1517 return MUSE_RECORDER_ERROR_NONE;
1520 int recorder_dispatcher_attr_set_audio_device(muse_module_h module)
1522 int ret = RECORDER_ERROR_NONE;
1523 recorder_audio_device_e set_device = RECORDER_AUDIO_DEVICE_MIC;
1524 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_DEVICE;
1525 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1526 muse_recorder_handle_s *muse_recorder = NULL;
1528 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1530 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1532 muse_recorder_msg_get(set_device, muse_server_module_get_msg(module));
1534 ret = legacy_recorder_attr_set_audio_device(muse_recorder->recorder_handle, set_device);
1536 muse_recorder_msg_return(api, class, ret, module);
1538 return MUSE_RECORDER_ERROR_NONE;
1541 int recorder_dispatcher_set_audio_encoder(muse_module_h module)
1543 int ret = RECORDER_ERROR_NONE;
1544 recorder_audio_codec_e set_codec = RECORDER_AUDIO_CODEC_AMR;
1545 muse_recorder_api_e api = MUSE_RECORDER_API_SET_AUDIO_ENCODER;
1546 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1547 muse_recorder_handle_s *muse_recorder = NULL;
1549 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1551 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1553 muse_recorder_msg_get(set_codec, muse_server_module_get_msg(module));
1555 ret = legacy_recorder_set_audio_encoder(muse_recorder->recorder_handle, set_codec);
1557 muse_recorder_msg_return(api, class, ret, module);
1559 return MUSE_RECORDER_ERROR_NONE;
1562 int recorder_dispatcher_get_audio_encoder(muse_module_h module)
1564 int ret = RECORDER_ERROR_NONE;
1565 recorder_audio_codec_e get_codec = RECORDER_AUDIO_CODEC_AMR;
1566 muse_recorder_api_e api = MUSE_RECORDER_API_GET_AUDIO_ENCODER;
1567 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1568 muse_recorder_handle_s *muse_recorder = NULL;
1570 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1572 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1574 ret = legacy_recorder_get_audio_encoder(muse_recorder->recorder_handle, &get_codec);
1576 muse_recorder_msg_return1(api, class, ret, module, INT, get_codec);
1578 return MUSE_RECORDER_ERROR_NONE;
1581 int recorder_dispatcher_set_video_encoder(muse_module_h module)
1583 int ret = RECORDER_ERROR_NONE;
1584 recorder_video_codec_e set_codec = RECORDER_VIDEO_CODEC_MPEG4;
1585 muse_recorder_api_e api = MUSE_RECORDER_API_SET_VIDEO_ENCODER;
1586 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1587 muse_recorder_handle_s *muse_recorder = NULL;
1589 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1591 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1593 muse_recorder_msg_get(set_codec, muse_server_module_get_msg(module));
1595 ret = legacy_recorder_set_video_encoder(muse_recorder->recorder_handle, set_codec);
1597 muse_recorder_msg_return(api, class, ret, module);
1599 return MUSE_RECORDER_ERROR_NONE;
1602 int recorder_dispatcher_get_video_encoder(muse_module_h module)
1604 int ret = RECORDER_ERROR_NONE;
1605 recorder_video_codec_e get_codec = RECORDER_VIDEO_CODEC_MPEG4;
1606 muse_recorder_api_e api = MUSE_RECORDER_API_GET_VIDEO_ENCODER;
1607 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1608 muse_recorder_handle_s *muse_recorder = NULL;
1610 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1612 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1614 ret = legacy_recorder_get_video_encoder(muse_recorder->recorder_handle, &get_codec);
1616 muse_recorder_msg_return1(api, class, ret, module, INT, get_codec);
1618 return MUSE_RECORDER_ERROR_NONE;
1621 int recorder_dispatcher_attr_set_audio_samplerate(muse_module_h module)
1623 int ret = RECORDER_ERROR_NONE;
1625 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_SAMPLERATE;
1626 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1627 muse_recorder_handle_s *muse_recorder = NULL;
1629 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1631 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1633 muse_recorder_msg_get(samplerate, muse_server_module_get_msg(module));
1635 ret = legacy_recorder_attr_set_audio_samplerate(muse_recorder->recorder_handle, samplerate);
1637 muse_recorder_msg_return(api, class, ret, module);
1639 return MUSE_RECORDER_ERROR_NONE;
1642 int recorder_dispatcher_attr_set_audio_encoder_bitrate(muse_module_h module)
1644 int ret = RECORDER_ERROR_NONE;
1646 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_ENCODER_BITRATE;
1647 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1648 muse_recorder_handle_s *muse_recorder = NULL;
1650 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1652 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1654 muse_recorder_msg_get(bitrate, muse_server_module_get_msg(module));
1656 ret = legacy_recorder_attr_set_audio_encoder_bitrate(muse_recorder->recorder_handle, bitrate);
1658 muse_recorder_msg_return(api, class, ret, module);
1660 return MUSE_RECORDER_ERROR_NONE;
1663 int recorder_dispatcher_attr_set_video_encoder_bitrate(muse_module_h module)
1665 int ret = RECORDER_ERROR_NONE;
1667 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_VIDEO_ENCODER_BITRATE;
1668 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1669 muse_recorder_handle_s *muse_recorder = NULL;
1671 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1673 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1675 muse_recorder_msg_get(bitrate, muse_server_module_get_msg(module));
1677 ret = legacy_recorder_attr_set_video_encoder_bitrate(muse_recorder->recorder_handle, bitrate);
1679 muse_recorder_msg_return(api, class, ret, module);
1681 return MUSE_RECORDER_ERROR_NONE;
1684 int recorder_dispatcher_attr_get_size_limit(muse_module_h module)
1686 int ret = RECORDER_ERROR_NONE;
1688 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_SIZE_LIMIT;
1689 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1690 muse_recorder_handle_s *muse_recorder = NULL;
1692 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1694 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1696 ret = legacy_recorder_attr_get_size_limit(muse_recorder->recorder_handle, &get_kbyte);
1698 muse_recorder_msg_return1(api, class, ret, module, INT, get_kbyte);
1700 return MUSE_RECORDER_ERROR_NONE;
1703 int recorder_dispatcher_attr_get_time_limit(muse_module_h module)
1705 int ret = RECORDER_ERROR_NONE;
1707 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_TIME_LIMIT;
1708 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1709 muse_recorder_handle_s *muse_recorder = NULL;
1711 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1713 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1715 ret = legacy_recorder_attr_get_time_limit(muse_recorder->recorder_handle, &get_second);
1717 muse_recorder_msg_return1(api, class, ret, module, INT, get_second);
1719 return MUSE_RECORDER_ERROR_NONE;
1722 int recorder_dispatcher_attr_get_audio_device(muse_module_h module)
1724 int ret = RECORDER_ERROR_NONE;
1725 recorder_audio_device_e get_device = RECORDER_AUDIO_DEVICE_MIC;
1726 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_DEVICE;
1727 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1728 muse_recorder_handle_s *muse_recorder = NULL;
1730 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1732 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1734 ret = legacy_recorder_attr_get_audio_device(muse_recorder->recorder_handle, &get_device);
1736 muse_recorder_msg_return1(api, class, ret, module, INT, get_device);
1738 return MUSE_RECORDER_ERROR_NONE;
1741 int recorder_dispatcher_attr_get_audio_samplerate(muse_module_h module)
1743 int ret = RECORDER_ERROR_NONE;
1744 int get_samplerate = 0;
1745 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_SAMPLERATE;
1746 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1747 muse_recorder_handle_s *muse_recorder = NULL;
1749 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1751 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1753 ret = legacy_recorder_attr_get_audio_samplerate(muse_recorder->recorder_handle, &get_samplerate);
1755 muse_recorder_msg_return1(api, class, ret, module, INT, get_samplerate);
1757 return MUSE_RECORDER_ERROR_NONE;
1760 int recorder_dispatcher_attr_get_audio_encoder_bitrate(muse_module_h module)
1762 int ret = RECORDER_ERROR_NONE;
1763 int get_bitrate = 0;
1764 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_ENCODER_BITRATE;
1765 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1766 muse_recorder_handle_s *muse_recorder = NULL;
1768 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1770 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1772 ret = legacy_recorder_attr_get_audio_encoder_bitrate(muse_recorder->recorder_handle, &get_bitrate);
1774 muse_recorder_msg_return1(api, class, ret, module, INT, get_bitrate);
1776 return MUSE_RECORDER_ERROR_NONE;
1779 int recorder_dispatcher_attr_get_video_encoder_bitrate(muse_module_h module)
1781 int ret = RECORDER_ERROR_NONE;
1782 int get_bitrate = 0;
1783 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_VIDEO_ENCODER_BITRATE;
1784 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1785 muse_recorder_handle_s *muse_recorder = NULL;
1787 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1789 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1791 ret = legacy_recorder_attr_get_video_encoder_bitrate(muse_recorder->recorder_handle, &get_bitrate);
1793 muse_recorder_msg_return1(api, class, ret, module, INT, get_bitrate);
1795 return MUSE_RECORDER_ERROR_NONE;
1798 int recorder_dispatcher_foreach_supported_audio_encoder(muse_module_h module)
1800 int ret = RECORDER_ERROR_NONE;
1801 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_AUDIO_ENCODER;
1802 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1803 muse_recorder_handle_s *muse_recorder = NULL;
1805 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1807 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1809 ret = legacy_recorder_foreach_supported_audio_encoder(muse_recorder->recorder_handle,
1810 (recorder_supported_audio_encoder_cb)_recorder_disp_foreach_supported_audio_encoder_cb,
1815 muse_recorder_msg_return(api, class, ret, module);
1817 return MUSE_RECORDER_ERROR_NONE;
1821 int recorder_dispatcher_foreach_supported_audio_encoder_by_file_format(muse_module_h module)
1823 int ret = RECORDER_ERROR_NONE;
1824 int file_format = -1;
1825 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_AUDIO_ENCODER_BY_FILE_FORMAT;
1826 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1827 muse_recorder_handle_s *muse_recorder = NULL;
1829 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1831 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1833 muse_recorder_msg_get(file_format, muse_server_module_get_msg(module));
1835 ret = legacy_recorder_foreach_supported_audio_encoder(muse_recorder->recorder_handle,
1836 (recorder_supported_audio_encoder_cb)_recorder_disp_foreach_supported_audio_encoder_cb,
1837 MMCAM_AUDIO_ENCODER,
1841 muse_recorder_msg_return(api, class, ret, module);
1843 return MUSE_RECORDER_ERROR_NONE;
1847 int recorder_dispatcher_foreach_supported_video_encoder(muse_module_h module)
1849 int ret = RECORDER_ERROR_NONE;
1850 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_ENCODER;
1851 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1852 muse_recorder_handle_s *muse_recorder = NULL;
1854 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1856 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1858 ret = legacy_recorder_foreach_supported_video_encoder(muse_recorder->recorder_handle,
1859 (recorder_supported_video_encoder_cb)_recorder_disp_foreach_supported_video_encoder_cb,
1864 muse_recorder_msg_return(api, class, ret, module);
1866 return MUSE_RECORDER_ERROR_NONE;
1870 int recorder_dispatcher_foreach_supported_video_encoder_by_file_format(muse_module_h module)
1872 int ret = RECORDER_ERROR_NONE;
1873 int file_format = -1;
1874 muse_recorder_api_e api = MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_ENCODER_BY_FILE_FORMAT;
1875 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_THREAD_SUB;
1876 muse_recorder_handle_s *muse_recorder = NULL;
1878 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1880 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1882 muse_recorder_msg_get(file_format, muse_server_module_get_msg(module));
1884 ret = legacy_recorder_foreach_supported_video_encoder(muse_recorder->recorder_handle,
1885 (recorder_supported_video_encoder_cb)_recorder_disp_foreach_supported_video_encoder_cb,
1886 MMCAM_VIDEO_ENCODER,
1890 muse_recorder_msg_return(api, class, ret, module);
1892 return MUSE_RECORDER_ERROR_NONE;
1896 int recorder_dispatcher_attr_set_mute(muse_module_h module)
1898 int ret = RECORDER_ERROR_NONE;
1900 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_MUTE;
1901 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1902 muse_recorder_handle_s *muse_recorder = NULL;
1904 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1906 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1908 muse_recorder_msg_get(set_enable, muse_server_module_get_msg(module));
1910 ret = legacy_recorder_attr_set_mute(muse_recorder->recorder_handle, (bool)set_enable);
1912 muse_recorder_msg_return(api, class, ret, module);
1914 return MUSE_RECORDER_ERROR_NONE;
1917 int recorder_dispatcher_attr_is_muted(muse_module_h module)
1919 int ret = RECORDER_ERROR_NONE;
1920 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_IS_MUTED;
1921 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1922 muse_recorder_handle_s *muse_recorder = NULL;
1924 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1926 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1928 ret = legacy_recorder_attr_is_muted(muse_recorder->recorder_handle);
1930 muse_recorder_msg_return(api, class, ret, module);
1932 return MUSE_RECORDER_ERROR_NONE;
1935 int recorder_dispatcher_attr_set_recording_motion_rate(muse_module_h module)
1937 int ret = RECORDER_ERROR_NONE;
1939 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_RECORDING_MOTION_RATE;
1940 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1941 muse_recorder_handle_s *muse_recorder = NULL;
1943 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1945 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1947 muse_recorder_msg_get_double(rate, muse_server_module_get_msg(module));
1949 ret = legacy_recorder_attr_set_recording_motion_rate(muse_recorder->recorder_handle, rate);
1951 muse_recorder_msg_return(api, class, ret, module);
1953 return MUSE_RECORDER_ERROR_NONE;
1956 int recorder_dispatcher_attr_get_recording_motion_rate(muse_module_h module)
1958 int ret = RECORDER_ERROR_NONE;
1959 double get_rate = 1.0;
1960 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_RECORDING_MOTION_RATE;
1961 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1962 muse_recorder_handle_s *muse_recorder = NULL;
1964 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1966 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1968 ret = legacy_recorder_attr_get_recording_motion_rate(muse_recorder->recorder_handle, &get_rate);
1970 LOGD("get rate %lf", get_rate);
1972 muse_recorder_msg_return1(api, class, ret, module, DOUBLE, get_rate);
1974 return MUSE_RECORDER_ERROR_NONE;
1977 int recorder_dispatcher_attr_set_audio_channel(muse_module_h module)
1979 int ret = RECORDER_ERROR_NONE;
1980 int channel_count = 0;
1981 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_AUDIO_CHANNEL;
1982 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
1983 muse_recorder_handle_s *muse_recorder = NULL;
1985 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
1987 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
1989 muse_recorder_msg_get(channel_count, muse_server_module_get_msg(module));
1991 ret = legacy_recorder_attr_set_audio_channel(muse_recorder->recorder_handle, channel_count);
1993 muse_recorder_msg_return(api, class, ret, module);
1995 return MUSE_RECORDER_ERROR_NONE;
1998 int recorder_dispatcher_attr_get_audio_channel(muse_module_h module)
2000 int ret = RECORDER_ERROR_NONE;
2001 int get_channel_count = 0;
2002 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_AUDIO_CHANNEL;
2003 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2004 muse_recorder_handle_s *muse_recorder = NULL;
2006 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2008 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2010 ret = legacy_recorder_attr_get_audio_channel(muse_recorder->recorder_handle, &get_channel_count);
2012 muse_recorder_msg_return1(api, class, ret, module, INT, get_channel_count);
2014 return MUSE_RECORDER_ERROR_NONE;
2017 int recorder_dispatcher_attr_set_orientation_tag(muse_module_h module)
2019 int ret = RECORDER_ERROR_NONE;
2020 recorder_rotation_e set_orientation = RECORDER_ROTATION_NONE;
2021 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_ORIENTATION_TAG;
2022 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2023 muse_recorder_handle_s *muse_recorder = NULL;
2025 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2027 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2029 muse_recorder_msg_get(set_orientation, muse_server_module_get_msg(module));
2031 ret = legacy_recorder_attr_set_orientation_tag(muse_recorder->recorder_handle, set_orientation);
2033 muse_recorder_msg_return(api, class, ret, module);
2035 return MUSE_RECORDER_ERROR_NONE;
2038 int recorder_dispatcher_attr_get_orientation_tag(muse_module_h module)
2040 int ret = RECORDER_ERROR_NONE;
2041 recorder_rotation_e get_orientation = RECORDER_ROTATION_NONE;
2042 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_GET_ORIENTATION_TAG;
2043 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2044 muse_recorder_handle_s *muse_recorder = NULL;
2046 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2048 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2050 ret = legacy_recorder_attr_get_orientation_tag(muse_recorder->recorder_handle, &get_orientation);
2052 muse_recorder_msg_return1(api, class, ret, module, INT, get_orientation);
2054 return MUSE_RECORDER_ERROR_NONE;
2057 int recorder_dispatcher_attr_set_root_directory(muse_module_h module)
2059 int ret = RECORDER_ERROR_NONE;
2060 char root_directory[MUSE_RECORDER_MSG_MAX_LENGTH] = {0,};
2061 muse_recorder_api_e api = MUSE_RECORDER_API_ATTR_SET_ROOT_DIRECTORY;
2062 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2063 muse_recorder_handle_s *muse_recorder = NULL;
2065 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2067 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2069 muse_recorder_msg_get_string(root_directory, muse_server_module_get_msg(module));
2071 ret = legacy_recorder_attr_set_root_directory(muse_recorder->recorder_handle, root_directory);
2073 muse_recorder_msg_return(api, class, ret, module);
2075 return MUSE_RECORDER_ERROR_NONE;
2078 int recorder_dispatcher_return_buffer(muse_module_h module)
2081 int video_encode_decision = 1;
2082 muse_recorder_buffer_type_e buffer_type = MUSE_RECORDER_BUFFER_TYPE_AUDIO_STREAM;
2083 muse_recorder_handle_s *muse_recorder = NULL;
2085 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2087 recorder_return_val_if_fail(muse_recorder, MUSE_RECORDER_ERROR_NONE);
2089 muse_recorder_msg_get(ret_fd, muse_server_module_get_msg(module));
2090 muse_recorder_msg_get(buffer_type, muse_server_module_get_msg(module));
2092 /*LOGD("handle[%p] buffer type[%d] ret_fd[%d]", muse_recorder, buffer_type, ret_fd);*/
2094 if (buffer_type == MUSE_RECORDER_BUFFER_TYPE_VIDEO_ENCODE_DECISION) {
2095 /* get decision and send signal */
2096 muse_recorder_msg_get(video_encode_decision, muse_server_module_get_msg(module));
2098 g_mutex_lock(&muse_recorder->camera_data.lock);
2099 muse_recorder->video_encode_decision = (bool)video_encode_decision;
2100 /*LOGD("video_encode_decision[%d]", video_encode_decision);*/
2101 g_cond_signal(&muse_recorder->camera_data.cond);
2102 g_mutex_unlock(&muse_recorder->camera_data.lock);
2104 if (!camera_remove_export_data(&muse_recorder->camera_data, (tbm_fd)ret_fd))
2105 LOGE("remove export data for video encode decision failed. fd[%d]", ret_fd);
2107 if (!_recorder_remove_export_data(&muse_recorder->recorder_data, (tbm_fd)ret_fd))
2108 LOGE("remove export data failed. buffer type[%d] fd[%d]", buffer_type, ret_fd);
2111 return MUSE_RECORDER_ERROR_NONE;
2115 int recorder_dispatcher_set_sound_stream_info(muse_module_h module)
2117 int ret = RECORDER_ERROR_NONE;
2118 char stream_type[MUSE_RECORDER_MSG_MAX_LENGTH] = {0,};
2119 int stream_index = 0;
2120 muse_recorder_api_e api = MUSE_RECORDER_API_SET_SOUND_STREAM_INFO;
2121 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2122 muse_recorder_handle_s *muse_recorder = NULL;
2124 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2126 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2128 muse_recorder_msg_get_string(stream_type, muse_server_module_get_msg(module));
2129 muse_recorder_msg_get(stream_index, muse_server_module_get_msg(module));
2131 ret = legacy_recorder_set_sound_stream_info(muse_recorder->recorder_handle, stream_type, stream_index);
2133 muse_recorder_msg_return(api, class, ret, module);
2135 return MUSE_RECORDER_ERROR_NONE;
2139 int recorder_dispatcher_get_device_state(muse_module_h module)
2141 int ret = RECORDER_ERROR_NONE;
2142 int device_state = 0;
2143 int device_recording = 0;
2144 int device_paused = 0;
2145 recorder_type_e recorder_type = RECORDER_TYPE_AUDIO;
2146 recorder_device_state_e get_device_state = RECORDER_DEVICE_STATE_IDLE;
2147 muse_recorder_api_e api = MUSE_RECORDER_API_GET_DEVICE_STATE;
2148 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2150 muse_recorder_msg_get(recorder_type, muse_server_module_get_msg(module));
2152 if (recorder_type > RECORDER_TYPE_VIDEO) {
2153 LOGE("invalid type %d", recorder_type);
2154 ret = RECORDER_ERROR_INVALID_PARAMETER;
2155 muse_recorder_msg_return(api, class, ret, module);
2156 return MUSE_RECORDER_ERROR_NONE;
2159 /* recording feature check */
2160 if (!_recorder_check_supported_feature(recorder_type)) {
2162 LOGE("feature not supported");
2163 ret = RECORDER_ERROR_NOT_SUPPORTED;
2164 muse_recorder_msg_return(api, class, ret, module);
2165 return MUSE_RECORDER_ERROR_NONE;
2169 if (recorder_type == RECORDER_TYPE_AUDIO)
2170 muse_server_module_get_value(module, RECORDER_DEVICE_STATE_KEY_AUDIO, &device_state);
2172 muse_server_module_get_value(module, RECORDER_DEVICE_STATE_KEY_VIDEO, &device_state);
2174 device_recording = device_state >> 16;
2175 device_paused = 0x0000ffff & device_state;
2177 LOGD("device recording %d, paused %d", device_recording, device_paused);
2179 if (device_recording > 0)
2180 get_device_state = RECORDER_DEVICE_STATE_RECORDING;
2181 else if (device_paused > 0)
2182 get_device_state = RECORDER_DEVICE_STATE_PAUSED;
2184 LOGD("device[%d] state : %d", recorder_type, get_device_state);
2186 muse_recorder_msg_return1(api, class, ret, module, INT, get_device_state);
2188 return MUSE_RECORDER_ERROR_NONE;
2192 int recorder_dispatcher_set_muxed_stream_cb(muse_module_h module)
2194 int ret = RECORDER_ERROR_NONE;
2195 muse_recorder_api_e api = MUSE_RECORDER_API_SET_MUXED_STREAM_CB;
2196 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2197 muse_recorder_handle_s *muse_recorder = NULL;
2199 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2201 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2203 ret = legacy_recorder_set_muxed_stream_cb(muse_recorder->recorder_handle,
2204 (recorder_muxed_stream_cb)_recorder_disp_muxed_stream_cb, (void *)module);
2206 muse_recorder_msg_return(api, class, ret, module);
2208 return MUSE_RECORDER_ERROR_NONE;
2212 int recorder_dispatcher_unset_muxed_stream_cb(muse_module_h module)
2214 int ret = RECORDER_ERROR_NONE;
2215 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_MUXED_STREAM_CB;
2216 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2217 muse_recorder_handle_s *muse_recorder = NULL;
2219 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2221 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2223 ret = legacy_recorder_unset_muxed_stream_cb(muse_recorder->recorder_handle);
2225 muse_recorder_msg_return(api, class, ret, module);
2227 return MUSE_RECORDER_ERROR_NONE;
2231 int recorder_dispatcher_set_video_encode_decision_cb(muse_module_h module)
2233 int ret = RECORDER_ERROR_NONE;
2234 muse_recorder_api_e api = MUSE_RECORDER_API_SET_VIDEO_ENCODE_DECISION_CB;
2235 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2236 muse_recorder_handle_s *muse_recorder = NULL;
2238 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2240 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2242 ret = legacy_recorder_set_video_encode_decision_cb(muse_recorder->recorder_handle,
2243 (recorder_video_encode_decision_cb)_recorder_disp_video_encode_decision_cb, (void *)module);
2245 muse_recorder_msg_return(api, class, ret, module);
2247 return MUSE_RECORDER_ERROR_NONE;
2251 int recorder_dispatcher_unset_video_encode_decision_cb(muse_module_h module)
2253 int ret = RECORDER_ERROR_NONE;
2254 muse_recorder_api_e api = MUSE_RECORDER_API_UNSET_VIDEO_ENCODE_DECISION_CB;
2255 muse_recorder_api_class_e class = MUSE_RECORDER_API_CLASS_IMMEDIATE;
2256 muse_recorder_handle_s *muse_recorder = NULL;
2258 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2260 recorder_send_msg_return_err_if_fail(muse_recorder, RECORDER_ERROR_INVALID_OPERATION, MUSE_RECORDER_ERROR_NONE);
2262 ret = legacy_recorder_unset_video_encode_decision_cb(muse_recorder->recorder_handle);
2264 muse_recorder_msg_return(api, class, ret, module);
2266 return MUSE_RECORDER_ERROR_NONE;
2270 int (*dispatcher[MUSE_RECORDER_API_MAX]) (muse_module_h module) = {
2271 recorder_dispatcher_create, /* MUSE_RECORDER_API_CREATE */
2272 recorder_dispatcher_destroy, /* MUSE_RECORDER_API_DESTROY */
2273 recorder_dispatcher_get_state, /* MUSE_RECORDER_API_GET_STATE */
2274 recorder_dispatcher_prepare, /* MUSE_RECORDER_API_PREPARE */
2275 recorder_dispatcher_unprepare, /* MUSE_RECORDER_API_UNPREPARE */
2276 recorder_dispatcher_start, /* MUSE_RECORDER_API_START */
2277 recorder_dispatcher_pause, /* MUSE_RECORDER_API_PAUSE */
2278 recorder_dispatcher_commit, /* MUSE_RECORDER_API_COMMIT */
2279 recorder_dispatcher_cancel, /* MUSE_RECORDER_API_CANCEL */
2280 recorder_dispatcher_set_video_resolution, /* MUSE_RECORDER_API_SET_VIDEO_RESOLUTION */
2281 recorder_dispatcher_get_video_resolution, /* MUSE_RECORDER_API_GET_VIDEO_RESOLUTION */
2282 recorder_dispatcher_foreach_supported_video_resolution, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_RESOLUTION */
2283 recorder_dispatcher_get_audio_level, /* MUSE_RECORDER_API_GET_AUDIO_LEVEL */
2284 recorder_dispatcher_set_filename, /* MUSE_RECORDER_API_SET_FILENAME */
2285 recorder_dispatcher_get_filename, /* MUSE_RECORDER_API_GET_FILENAME */
2286 recorder_dispatcher_set_file_format, /* MUSE_RECORDER_API_SET_FILE_FORMAT */
2287 recorder_dispatcher_get_file_format, /* MUSE_RECORDER_API_GET_FILE_FORMAT */
2288 recorder_dispatcher_set_state_changed_cb, /* MUSE_RECORDER_API_SET_STATE_CHANGED_CB */
2289 recorder_dispatcher_unset_state_changed_cb, /* MUSE_RECORDER_API_UNSET_STATE_CHANGED_CB */
2290 recorder_dispatcher_set_interrupted_cb, /* MUSE_RECORDER_API_SET_INTERRUPTED_CB */
2291 recorder_dispatcher_unset_interrupted_cb, /* MUSE_RECORDER_API_UNSET_INTERRUPTED_CB */
2292 recorder_dispatcher_set_audio_stream_cb, /* MUSE_RECORDER_API_SET_AUDIO_STREAM_CB */
2293 recorder_dispatcher_unset_audio_stream_cb, /* MUSE_RECORDER_API_UNSET_AUDIO_STREAM_CB */
2294 recorder_dispatcher_set_error_cb, /* MUSE_RECORDER_API_SET_ERROR_CB */
2295 recorder_dispatcher_unset_error_cb, /* MUSE_RECORDER_API_UNSET_ERROR_CB */
2296 recorder_dispatcher_set_recording_status_cb, /* MUSE_RECORDER_API_SET_RECORDING_STATUS_CB */
2297 recorder_dispatcher_unset_recording_status_cb, /* MUSE_RECORDER_API_UNSET_RECORDING_STATUS_CB */
2298 recorder_dispatcher_set_recording_limit_reached_cb, /* MUSE_RECORDER_API_SET_RECORDING_LIMIT_RECHEAD_CB */
2299 recorder_dispatcher_unset_recording_limit_reached_cb, /* MUSE_RECORDER_API_UNSET_RECORDING_LIMIT_RECHEAD_CB */
2300 recorder_dispatcher_foreach_supported_file_format, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT */
2301 recorder_dispatcher_foreach_supported_file_format_by_audio_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT_BY_AUDIO_ENCORDER */
2302 recorder_dispatcher_foreach_supported_file_format_by_video_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_FILE_FORMAT_BY_VIDEO_ENCORDER */
2303 recorder_dispatcher_attr_set_size_limit, /* MUSE_RECORDER_API_ATTR_SET_SIZE_LIMIT */
2304 recorder_dispatcher_attr_set_time_limit, /* MUSE_RECORDER_API_ATTR_SET_TIME_LIMIT */
2305 recorder_dispatcher_attr_set_audio_device, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_DEVICE */
2306 recorder_dispatcher_set_audio_encoder, /* MUSE_RECORDER_API_SET_AUDIO_ENCODER */
2307 recorder_dispatcher_get_audio_encoder, /* MUSE_RECORDER_API_GET_AUDIO_ENCODER */
2308 recorder_dispatcher_set_video_encoder, /* MUSE_RECORDER_API_SET_VIDEO_ENCODER */
2309 recorder_dispatcher_get_video_encoder, /* MUSE_RECORDER_API_GET_VIDEO_ENCODER */
2310 recorder_dispatcher_attr_set_audio_samplerate, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_SAMPLERATE */
2311 recorder_dispatcher_attr_set_audio_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_ENCODER_BITRATE */
2312 recorder_dispatcher_attr_set_video_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_SET_VIDEO_ENCODER_BITRATE */
2313 recorder_dispatcher_attr_get_size_limit, /* MUSE_RECORDER_API_ATTR_GET_SIZE_LIMIT */
2314 recorder_dispatcher_attr_get_time_limit, /* MUSE_RECORDER_API_ATTR_GET_TIME_LIMIT */
2315 recorder_dispatcher_attr_get_audio_device, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_DEVICE */
2316 recorder_dispatcher_attr_get_audio_samplerate, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_SAMPLERATE */
2317 recorder_dispatcher_attr_get_audio_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_ENCODER_BITRATE */
2318 recorder_dispatcher_attr_get_video_encoder_bitrate, /* MUSE_RECORDER_API_ATTR_GET_VIDEO_ENCODER_BITRATE */
2319 recorder_dispatcher_foreach_supported_audio_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_AUDIO_ENCODER */
2320 recorder_dispatcher_foreach_supported_audio_encoder_by_file_format, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_AUDIO_ENCODER_BY_FILE_FORMAT */
2321 recorder_dispatcher_foreach_supported_video_encoder, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_ENCODER */
2322 recorder_dispatcher_foreach_supported_video_encoder_by_file_format, /* MUSE_RECORDER_API_FOREACH_SUPPORTED_VIDEO_ENCODER_BY_FILE_FORMAT */
2323 recorder_dispatcher_attr_set_mute, /* MUSE_RECORDER_API_ATTR_SET_MUTE */
2324 recorder_dispatcher_attr_is_muted, /* MUSE_RECORDER_API_ATTR_IS_MUTED */
2325 recorder_dispatcher_attr_set_recording_motion_rate, /* MUSE_RECORDER_API_ATTR_SET_RECORDING_MOTION_RATE */
2326 recorder_dispatcher_attr_get_recording_motion_rate, /* MUSE_RECORDER_API_ATTR_GET_RECORDING_MOTION_RATE */
2327 recorder_dispatcher_attr_set_audio_channel, /* MUSE_RECORDER_API_ATTR_SET_AUDIO_CHANNEL */
2328 recorder_dispatcher_attr_get_audio_channel, /* MUSE_RECORDER_API_ATTR_GET_AUDIO_CHANNEL */
2329 recorder_dispatcher_attr_set_orientation_tag, /* MUSE_RECORDER_API_ATTR_SET_ORIENTATION_TAG */
2330 recorder_dispatcher_attr_get_orientation_tag, /* MUSE_RECORDER_API_ATTR_GET_ORIENTATION_TAG */
2331 recorder_dispatcher_attr_set_root_directory, /* MUSE_RECORDER_API_ATTR_SET_ROOT_DIRECTORY */
2332 recorder_dispatcher_return_buffer, /* MUSE_RECORDER_API_RETURN_BUFFER */
2333 recorder_dispatcher_set_sound_stream_info, /* MUSE_RECORDER_API_SET_SOUND_STREAM_INFO */
2334 recorder_dispatcher_get_device_state, /* MUSE_RECORDER_API_GET_DEVICE_STATE */
2335 recorder_dispatcher_set_muxed_stream_cb, /* MUSE_RECORDER_API_SET_MUXED_STREAM_CB */
2336 recorder_dispatcher_unset_muxed_stream_cb, /* MUSE_RECORDER_API_UNSET_MUXED_STREAM_CB */
2337 recorder_dispatcher_set_interrupt_started_cb, /* MUSE_RECORDER_API_SET_INTERRUPT_STARTED_CB */
2338 recorder_dispatcher_unset_interrupt_started_cb, /* MUSE_RECORDER_API_UNSET_INTERRUPT_STARTED_CB */
2339 recorder_dispatcher_set_video_encode_decision_cb, /* MUSE_RECORDER_API_SET_VIDEO_ENCODE_DECISION_CB */
2340 recorder_dispatcher_unset_video_encode_decision_cb /* MUSE_RECORDER_API_UNSET_VIDEO_ENCODE_DECISION_CB */
2344 /******************/
2345 /* cmd dispatcher */
2346 /******************/
2348 static int recorder_cmd_dispatcher_initialize(muse_module_h module)
2352 GstPlugin *plugin = NULL;
2354 const char *load_list[] = {
2355 LIBDIR"/gstreamer-1.0/libgstencodebin.so",
2358 item_count = sizeof(load_list) / sizeof(load_list[0]);
2360 LOGD("item count %d", item_count);
2362 for (i = 0 ; i < item_count ; i++) {
2363 plugin = gst_plugin_load_file(load_list[i], NULL);
2365 LOGD("%s loaded", load_list[i]);
2366 gst_object_unref(plugin);
2369 LOGW("failed to load %s", load_list[i]);
2375 return MUSE_RECORDER_ERROR_NONE;
2379 static int recorder_cmd_dispatcher_shutdown(muse_module_h module)
2381 int ret = RECORDER_ERROR_NONE;
2382 recorder_state_e state = RECORDER_STATE_NONE;
2383 muse_recorder_handle_s *muse_recorder = NULL;
2385 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2387 recorder_return_val_if_fail(muse_recorder, MUSE_RECORDER_ERROR_NONE);
2389 legacy_recorder_get_state(muse_recorder->recorder_handle, &state);
2391 LOGW("shutdown handle %p [state:%d]", muse_recorder->recorder_handle, state);
2394 case RECORDER_STATE_PAUSED:
2395 case RECORDER_STATE_RECORDING:
2396 ret = legacy_recorder_commit(muse_recorder->recorder_handle);
2397 if (ret != RECORDER_ERROR_NONE) {
2398 LOGE("commit failed. cancel...");
2399 legacy_recorder_cancel(muse_recorder->recorder_handle);
2402 case RECORDER_STATE_READY:
2403 legacy_recorder_unprepare(muse_recorder->recorder_handle);
2405 case RECORDER_STATE_CREATED:
2406 ret = legacy_recorder_destroy(muse_recorder->recorder_handle);
2407 if (ret == RECORDER_ERROR_NONE) {
2408 if (muse_recorder->recorder_data.list)
2409 _recorder_remove_export_data(&muse_recorder->recorder_data, -1);
2410 if (muse_recorder->camera_data.list)
2411 camera_remove_export_data(&muse_recorder->camera_data, -1);
2413 g_cond_clear(&muse_recorder->camera_data.cond);
2414 g_mutex_clear(&muse_recorder->camera_data.lock);
2415 g_cond_clear(&muse_recorder->recorder_data.cond);
2416 g_mutex_clear(&muse_recorder->recorder_data.lock);
2418 muse_recorder->bufmgr = NULL;
2420 free(muse_recorder);
2421 muse_recorder = NULL;
2423 LOGE("shutdown failed");
2432 return MUSE_RECORDER_ERROR_NONE;
2436 static int recorder_cmd_external_storage_state_changed(muse_module_h module)
2438 int ret = RECORDER_ERROR_NONE;
2439 int storage_state = 0;
2440 muse_recorder_handle_s *muse_recorder = NULL;
2442 muse_recorder = (muse_recorder_handle_s *)muse_server_ipc_get_handle(module);
2444 recorder_return_val_if_fail(muse_recorder, MUSE_RECORDER_ERROR_NONE);
2446 storage_state = (int)(long)muse_server_get_user_data(module);
2448 LOGW("storage state %d", storage_state);
2450 ret = legacy_recorder_manage_external_storage_state(muse_recorder->recorder_handle, storage_state);
2452 LOGW("done : 0x%x", ret);
2454 return MUSE_RECORDER_ERROR_NONE;
2459 int (*cmd_dispatcher[MUSE_MODULE_COMMAND_MAX])(muse_module_h module) = {
2460 recorder_cmd_dispatcher_initialize, /* MUSE_MODULE_COMMAND_INITIALIZE */
2461 recorder_cmd_dispatcher_shutdown, /* MUSE_MODULE_COMMAND_SHUTDOWN */
2462 NULL, /* MUSE_MODULE_COMMAND_DEBUG_INFO_DUMP */
2463 NULL, /* MUSE_MODULE_COMMAND_CREATE_SERVER_ACK */
2464 NULL, /* MUSE_MODULE_COMMAND_RESOURCE_NOT_AVAILABLE */
2465 recorder_cmd_external_storage_state_changed /* MUSE_MODULE_COMMAND_EXTERNAL_STORAGE_STATE_CHANGED */