2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
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.
18 #include <X11/keysymdef.h>
24 #include <syspopup_caller.h>
28 #include "edc_string.h"
29 #include "cam_sound.h"
32 #include "cam_error.h"
33 #include "cam_config.h"
36 #include "cam_devman.h"
37 #include "cam_popup.h"
39 #include "cam_common_edc_callback.h"
40 #include "cam_indicator_edc_callback.h"
41 #include "cam_recording_edc_callback.h"
42 #include "cam_toolbar_edc_callback.h"
43 #include "cam_zoom_edc_callback.h"
44 #include "camera_utils.h"
46 #include "cam_ui_effect_utils.h"
47 #include "cam_ui_rotate_utils.h"
49 #include "cam_menu_composer.h"
50 #include "cam_device_capacity.h"
53 #ifdef ENABLE_CAPTURE_ANIMATION
54 #include "cam_animation.h"
57 #define ZSL_MAX_REL (1280*720) /* 1m wide */
58 #define FOCUS_FOCUSED_TIME_OUT 3
59 #define FOCUS_FAILED_TIME_OUT 2
60 #define THUMBNAIL_UPDATE_WAIT_TIME (100*1000)
64 /* #define ZSL_5M_TEST (2560*1920) */
68 static CamAppData *cam_handle = NULL;
69 static struct appdata *app_handle = NULL;
71 /* static Ecore_Idler *spy_rotation_idler=NULL; */
73 #define TEMP_SAVE_PATH "/tmp/temp_image.jpg" /* not used maybe... */
74 #define SELF_SHOT_TEMP_SAVE_PATH "/tmp/self_temp_shot.jpg"
76 #define LONG_PRESS_INTERVAL 0.5 /* sec */
78 #define INAGE_FILE_NAME "IMAGE"
79 #define VIDEO_FILE_NAME "VIDEO"
80 #define TEMP_FILE_NAME ".camera_result"
81 #define IMAGE_FILE_EXTENSION ".jpg"
82 #define VIDEO_FILE_EXTENSION ".3gp"
84 #define SHUTTER_W_RATIO 0.1
85 #define SHUTTER_H_RATIO 0.34
86 #define SCREEN_RATIO 1.0
87 #define AUTO_CLOSE_COUNT 10
88 /* #define CAMAPP_SIG_HANDLING */
90 /* #define ENABLE_CHECK_CAM_STATUS //provent camera hang, */
92 #ifdef ENABLE_CHECK_CAM_STATUS
93 #define CAM_CHECK_STATUS_INTERVAL_TIME 10
94 #ifndef CAMAPP_SIG_HANDLING
95 #define CAMAPP_SIG_HANDLING
100 static int cam_app_start_rotate(struct appdata *ad, bool bInitial);
101 static void cam_app_get_win_size(struct appdata *ad);
102 #ifdef ENABLE_CHECK_CAM_STATUS
103 static void cam_app_check_status();
106 #ifndef DISABLE_TOOLBAR_TOGGLE
107 static Eina_Bool _cam_app_toolbar_toggle_timer(void *data);
110 static gboolean cam_power_key_press(void *data);
111 static gboolean cam_app_return_ext_app(void *data, const char *r_file_path);
113 /* vconf changed cb */
114 static void cam_app_battery_update_cb(keynode_t *key, void *data);
115 static void cam_app_battery_status_cb(keynode_t *key, void *data);
116 static void cam_mmc_state_change_cb(keynode_t *key, void *data);
117 static void cam_idle_lockstate_change_cb(keynode_t *key, void *data);
118 static void cam_usb_state_change_cb(keynode_t *key, void *data);
119 static void cam_torchlight_update_cb(keynode_t *key, void *data);
121 void cam_app_preview_start_coordinate(CamVideoRectangle src,
122 CamVideoRectangle dst,
123 CamVideoRectangle *result);
124 void cam_app_timeout_notice_response_cb(void *data, Evas_Object *obj, void *event_info);
125 static void cam_app_capture_error_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
126 Eina_Bool cam_app_launch_after_preview_began(void *data);
128 static void cam_app_auto_close_popup_response_cancel_cb(void *data, Evas_Object *obj, void *event_info);
129 static void cam_app_auto_close_popup_response_ok_cb(void *data, Evas_Object *obj, void *event_info);
130 static void cam_app_timer_update_count(void *data);
133 /* video streamming */
134 static gboolean video_stream_skip_flag = false;
136 /* thumbnail image check count */
137 static int g_thumbnail_image_check_count = 0;
140 gboolean g_blocking_popup = false;
142 void cam_app_set_blocking_popup()
144 g_blocking_popup = true;
147 void cam_app_free_blocking_popup()
149 g_blocking_popup = false;
152 gboolean cam_app_check_blocking_popup()
154 return !g_blocking_popup;
157 struct noti_callback {
159 void (*noti_func) (keynode_t *, void *);
162 #define CAMERA_NOTI_MAX 7
163 struct noti_callback notis[CAMERA_NOTI_MAX] = {
164 {VCONFKEY_SYSMAN_BATTERY_CAPACITY, *cam_app_battery_update_cb},
165 {VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW, *cam_app_battery_update_cb},
166 {VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, *cam_app_battery_status_cb},
167 {VCONFKEY_SYSMAN_MMC_STATUS, *cam_mmc_state_change_cb},
168 {VCONFKEY_IDLE_LOCK_STATE, *cam_idle_lockstate_change_cb},
169 {VCONFKEY_SYSMAN_USB_STATUS, *cam_usb_state_change_cb},
170 {VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT, *cam_torchlight_update_cb}
173 #ifdef CAMAPP_SIG_HANDLING
175 static struct sigaction cam_app_act;
176 static struct sigaction cam_app_act_old;
178 static void cam_app_register_sigsegv(void);
179 static void cam_app_sigsegv_handler(int signal_no, siginfo_t *info,
183 static void cam_app_pipe_handler(void *data, void *buffer, unsigned int nbyte);
184 static int cam_app_state_manager(int previous, int current, gboolean by_asm);
185 static void cam_app_close_ug(void *data);
186 Eina_Bool __ug_destory_postprocessing(void *data);
189 static gboolean cam_app_timeout_checker_update();
190 static Eina_Bool cam_app_timeout_checker_cb(void *data);
192 gdouble _get_current_time(void)
195 gettimeofday(&tv, NULL);
196 return (gdouble) tv.tv_sec + (gdouble) tv.tv_usec / 1E6;
198 void cam_app_zoom_warring_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
201 evas_object_del(obj);
205 void cam_app_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
208 evas_object_del(obj);
213 void cam_app_snapshot_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
215 struct appdata *ad = data;
216 cam_retm_if(ad == NULL, "appdata is NULL");
219 evas_object_del(obj);
222 ad->is_showing_snapshot_popup = FALSE;
223 DEBUG_TRACE("ad->is_showing_snapshot_popup = FALSE");
226 static Eina_Bool cam_delay_popup(void *data)
229 cam_app_notice_popup(data,_("IDS_CAM_POP_UNABLE_TO_START_CAMERA_DURING_CALL"),
230 cam_app_timeout_notice_response_cb);
234 static void cam_add_longpress_key_timer(void *data)
236 struct appdata *ad = (struct appdata *)data;
237 cam_retm_if(ad == NULL, "appdata is NULL");
238 if (!ad->longpress_timer) {
239 ad->longpress_timer =
240 ecore_timer_add(LONG_PRESS_INTERVAL, cam_volume_key_press, ad);
244 static void cam_del_longpress_key_timer(void *data)
246 struct appdata *ad = (struct appdata *)data;
247 cam_retm_if(ad == NULL, "appdata is NULL");
248 if (ad->longpress_timer) {
249 ecore_timer_del(ad->longpress_timer);
250 ad->longpress_timer = 0;
254 Eina_Bool _message_popup_destroy_and_exit(void *data)
256 Evas_Object *obj = (Evas_Object *)data;
257 cam_popup_remove(obj);
260 return ECORE_CALLBACK_CANCEL;
263 Eina_Bool cam_app_real_exit(void *data)
265 struct appdata *ad = (struct appdata *)data;
267 debug_fenter(LOG_UI);
268 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
270 if (ad->timeout_checker) {
271 ecore_timer_del(ad->timeout_checker);
272 ad->timeout_checker = NULL;
275 cam_app_key_event_deinit(ad);
282 void cam_win_transparent_set(void *data)
284 struct appdata *ad = (struct appdata *)data;
285 cam_ret_if(ad == NULL);
289 int width =0, height=0;
290 evas_object_geometry_get(ad->win_main, NULL, NULL, &height, &width);
291 evas = evas_object_evas_get(ad->win_main);
292 rect = evas_object_rectangle_add(evas);
293 evas_object_color_set(rect, 0, 0, 0, 0);
294 evas_object_render_op_set(rect, EVAS_RENDER_COPY);
295 if (width >= height) {
296 evas_object_resize(rect, width, width);
298 evas_object_resize(rect, height, height);
300 evas_object_show(rect);
303 void cam_set_orient_value(void *data)
305 struct appdata *ad = (struct appdata *)data;
306 cam_retm_if(ad == NULL, "appdata is NULL");
307 int orient_value = 0;
309 CamAppData *camapp = ad->camapp_handle;
310 if (camapp->shooting_mode == CAM_SELF_MODE) {
311 switch (ad->rot_current) {
312 case APPCORE_RM_PORTRAIT_NORMAL:
314 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
315 ad->rot_current, orient_value);
317 case APPCORE_RM_PORTRAIT_REVERSE:
319 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
320 ad->rot_current, orient_value);
322 case APPCORE_RM_LANDSCAPE_NORMAL:
324 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
325 ad->rot_current, orient_value);
327 case APPCORE_RM_LANDSCAPE_REVERSE:
329 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
330 ad->rot_current, orient_value);
337 switch (ad->rot_current) {
338 case APP_DEVICE_ORIENTATION_0:
340 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
341 ad->rot_current, orient_value);
343 case APP_DEVICE_ORIENTATION_180:
345 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
346 ad->rot_current, orient_value);
348 case APP_DEVICE_ORIENTATION_90:
350 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
351 ad->rot_current, orient_value);
353 case APP_DEVICE_ORIENTATION_270:
355 DEBUG_TRACE("rot_cuttent=%d orient_value=%d\n",
356 ad->rot_current, orient_value);
362 /*orient_value = CAMERA_ATTR_TAG_ORIENTATION_TOP_LEFT;*/
364 if (cam_mm_set_tag_img_orient(orient_value))
365 DEBUG_TRACE("set image orient succeed %d", orient_value);
367 DEBUG_TRACE("set image orient failed %d", orient_value);
371 int cam_noti_init(void *data)
373 struct appdata *ad = (struct appdata *)data;
376 debug_fenter(LOG_UI);
378 cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
382 for (i = 0; i < CAMERA_NOTI_MAX; i++) {
384 vconf_notify_key_changed(notis[i].setting_key,
385 notis[i].noti_func, ad)) {
386 cam_critical(LOG_SYS,
387 "vconf_notify_key_changed() failed. count=%d ",
394 int cam_noti_deinit(void *data)
397 struct appdata *ad = (struct appdata *)data;
399 debug_fenter(LOG_SYS);
401 cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
406 for (i = 0; i < CAMERA_NOTI_MAX; i++) {
407 vconf_ignore_key_changed(notis[i].setting_key,
414 void *cam_appdata_get(void)
422 static void cam_app_get_win_size(struct appdata *ad)
426 cam_ret_if(ad == NULL || ad->win_main == NULL);
427 evas_object_geometry_get(ad->win_main, NULL, NULL, &(ad->win_height),
430 cam_debug(LOG_UI, "main window ----- win_width, win_height: [%d, %d]",
431 ad->win_width, ad->win_height);
434 int cam_appdata_init(void *data)
436 struct appdata *ad = (struct appdata *)data;
437 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
442 ad->main_pipe = ecore_pipe_add(cam_app_pipe_handler, ad);
443 ad->rot_current = app_get_device_orientation();
444 ad->rot_previous = ad->rot_current;
446 cam_app_get_win_size(ad);
448 CAM_TA_ACUM_ITEM_BEGIN(" cam_handle_create", 0);
449 if (!cam_handle_create(data)) {
450 cam_critical(LOG_CAM, "cam_handle_create failed");
453 CAM_TA_ACUM_ITEM_END(" cam_handle_create", 0);
455 ad->last_camera_zoom_mode = 1;
460 int cam_appdata_fini(void *data)
462 struct appdata *ad = (struct appdata *)data;
464 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
466 cam_layout_del_all(ad);
468 if (ad->imageviewer_service) {
469 service_destroy(ad->imageviewer_service);
470 ad->imageviewer_service = NULL;
472 if (ad->timeout_checker) {
473 ecore_timer_del(ad->timeout_checker);
474 ad->timeout_checker = NULL;
477 ecore_event_handler_del(ad->key_down);
481 ecore_event_handler_del(ad->key_up);
485 ecore_event_handler_del(ad->mouse_up);
488 if (ad->mouse_down) {
489 ecore_event_handler_del(ad->mouse_down);
490 ad->mouse_down = NULL;
492 if (ad->recording_commit) {
493 ecore_idler_del(ad->recording_commit);
494 ad->recording_commit = NULL;
496 if (ad->still_captured_idle) {
497 ecore_idler_del(ad->still_captured_idle);
498 ad->still_captured_idle = NULL;
500 if (ad->capture_idle) {
501 ecore_idler_del(ad->capture_idle);
502 ad->capture_idle = NULL;
504 /* Remove Idle handler of capture callback. wh01.cho@samsung.com. 2010-12-15. */
505 if (ad->capture_cb_list) {
506 cam_utils_remove_idler_all(ad);
508 if (ad->auto_shot_idle) {
509 ecore_idler_del(ad->auto_shot_idle);
510 ad->auto_shot_idle = NULL;
512 if (ad->update_thumbnail_idler) {
513 ecore_idler_del(ad->update_thumbnail_idler);
514 ad->update_thumbnail_idler = NULL;
516 if (ad->timer_timer) {
517 ecore_timer_del(ad->timer_timer);
518 ad->timer_timer = NULL;
520 if (ad->timeout_checker) {
521 ecore_timer_del(ad->timeout_checker);
522 ad->timeout_checker = NULL;
524 if (ad->rec_icon_updater) {
525 ecore_timer_del(ad->rec_icon_updater);
526 ad->rec_icon_updater = NULL;
528 if (ad->rec_time_updater) {
529 ecore_timer_del(ad->rec_time_updater);
530 ad->rec_time_updater = NULL;
532 if( ad->setting_menu_composer != NULL){
533 cam_compose_free(ad->setting_menu_composer);
535 if (ad->camapp_handle) {
539 if (ad->exe_args->caller) {
540 free(ad->exe_args->caller);
541 ad->exe_args->caller = NULL;
546 #ifdef USE_FILE_REG_THREAD
548 if (ad->file_reg_thread) {
549 pthread_join(ad->file_reg_thread, NULL);
552 if (ad->file_reg_queue) {
553 while (!g_queue_is_empty(ad->file_reg_queue)) {
554 char *filename = NULL;
555 filename = g_queue_pop_head(ad->file_reg_queue);
557 cam_critical(LOG_FILE, "[%s] didn't processed",
560 if (!strcmp(REG_THREAD_EXIT, filename)) {
563 __cam_single_shot_reg_file(filename);
565 cam_debug(LOG_FILE, " register done.");
568 g_queue_free(ad->file_reg_queue);
569 ad->file_reg_queue = NULL;
574 ecore_pipe_del(ad->main_pipe);
575 ad->main_pipe = NULL;
577 /* init global handle */
583 CamAppData *cam_handle_get(void)
591 gboolean cam_app_init(void *data)
593 struct appdata *ad = (struct appdata *)data;
594 GError *error = NULL;
596 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
598 CAM_TA_ACUM_ITEM_BEGIN(" cam_appdata_init", 0);
599 if (!cam_appdata_init(ad)) {
600 cam_critical(LOG_CAM, "cam_appdata_init failed");
603 CAM_TA_ACUM_ITEM_END(" cam_appdata_init", 0);
605 cam_retvm_if(ad->camapp_handle == NULL, FALSE, "camapp_handle is NULL");
607 CAM_TA_ACUM_ITEM_BEGIN(" cam_config_init", 0);
608 if (!cam_config_init(&error)) {
609 cam_critical(LOG_SYS, "cam_config_init failed");
611 cam_critical(LOG_SYS, "cam_config_init error [%s]",
618 CAM_TA_ACUM_ITEM_END(" cam_config_init", 0);
620 CAM_TA_ACUM_ITEM_BEGIN(" cam_noti_init", 0);
621 if (EXIT_FAILURE == cam_noti_init(ad)) {
622 cam_critical(LOG_CAM, "cam_noti_init failed");
624 CAM_TA_ACUM_ITEM_END(" cam_noti_init", 0);
626 CAM_TA_ACUM_ITEM_BEGIN(" cam_file_init", 0);
627 if (!cam_file_init(&error)) {
628 cam_critical(LOG_FILE, "cam_file_init failed");
630 cam_critical(LOG_FILE, "cam_file_init error [%s]",
637 CAM_TA_ACUM_ITEM_END(" cam_file_init", 0);
638 CAM_TA_ACUM_ITEM_BEGIN(" cam_sound_init", 0);
639 if (!cam_sound_init(&error)) {
640 cam_critical(LOG_SND, "cam_sound_init failed");
642 cam_critical(LOG_SND, "cam_sound_init error [%s]",
649 CAM_TA_ACUM_ITEM_END(" cam_sound_init", 0);
651 #ifdef USE_FILE_REG_THREAD
652 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_create_file_register_thread", 0);
653 if (!cam_app_create_file_register_thread(ad)) {
654 cam_critical(LOG_SYS,
655 " cam_app_create_file_register_thread failed");
658 CAM_TA_ACUM_ITEM_END(" cam_app_create_file_register_thread", 0);
661 #ifdef CAMAPP_SIG_HANDLING
662 /* register singal handler */
663 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_create_file_register_thread", 0);
664 cam_app_register_sigsegv();
665 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_create_file_register_thread", 0);
669 CAM_TA_ACUM_ITEM_BEGIN(" cam_devman_init", 0);
670 if (!cam_devman_init(ad)) {
671 cam_critical(LOG_SYS, " cam_devman_init failed");
674 CAM_TA_ACUM_ITEM_END(" cam_devman_init", 0);
677 if(media_content_connect() == MEDIA_CONTENT_ERROR_NONE) {
678 DEBUG_TRACE("connection is success");
680 cam_critical(LOG_SYS, " media_content_connect failed");
691 gboolean cam_app_start(void *data)
693 CAM_TA_ACUM_ITEM_BEGIN("#########cam_app_start", 0);
695 struct appdata *ad = (struct appdata *)data;
696 CamAppData *camapp = NULL;
697 /*int session_type;*/
699 debug_fenter(LOG_CAM);
701 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
702 camapp = ad->camapp_handle;
703 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
705 /*init guideline value*/
706 #ifdef GUIDE_LINE_ENALBE
707 camapp->guideline = FALSE;
710 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_create", 0);
711 if (cam_mm_is_created() == FALSE) {
712 if (!cam_mm_create(CAM_DEVICE_MEGA, camapp->camera_mode)) {
713 cam_critical(LOG_MM, "cam_mm_create failed");
714 cam_app_notice_popup(ad, "UNABLE TO LAUNCH CAMERA", cam_app_timeout_notice_response_cb);
718 CAM_TA_ACUM_ITEM_END(" cam_mm_create", 0);
720 CAM_TA_ACUM_ITEM_BEGIN(" cam_callback_init", 0);
721 if (!cam_callback_init(ad)) {
722 cam_critical(LOG_CAM, "cam_init_mm_callback failed");
723 cam_app_notice_popup(ad, "UNABLE TO START PREVIEW", cam_app_timeout_notice_response_cb);
726 CAM_TA_ACUM_ITEM_END(" cam_callback_init", 0);
728 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_init_attribute", 0);
729 if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
730 cam_critical(LOG_MM, "cam_app_init_attribute failed");
733 CAM_TA_ACUM_ITEM_END(" cam_app_init_attribute", 0);
735 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0);
738 * TODO: this func dealt with efl ui api, but cam_app_start is called in thread.
739 * We should consider it carefully.
741 cam_continuous_af_start(ad);
742 if (!cam_app_preview_start(ad)) {
743 if (ad->is_calling == CAMERA_ERROR_SOUND_POLICY ||ad->is_calling == RECORDER_ERROR_SOUND_POLICY) {
744 DEBUG_TRACE(" MM CAMCARORDER ERROR\n");
745 cam_app_black_screen_show(ad, 2);
746 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
750 cam_critical(LOG_MM, "cam_app_preview_start failed");
751 cam_app_notice_popup(ad, "UNABLE TO START PREVIEW", cam_app_timeout_notice_response_cb);
754 CAM_TA_ACUM_ITEM_END(" cam_app_preview_start", 0);
756 if(!cam_key_grab_init(ad))
757 DEBUG_TRACE("cam_key_grab_init fail");
758 cam_app_key_event_init(ad);
759 cam_app_timeout_checker_init(ad);
761 #ifdef ENABLE_CHECK_CAM_STATUS
762 alarm(CAM_CHECK_STATUS_INTERVAL_TIME); /* start alarm */
764 CAM_TA_ACUM_ITEM_END("#########cam_app_start", 0);
769 gboolean cam_app_pause(void *data)
771 DEBUG_TRACE("#############cam_app_pause - START #############\n");
772 struct appdata *ad = (struct appdata *)data;
773 CamAppData *camapp = NULL;
774 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
775 camapp = ad->camapp_handle;
776 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
779 mm_state = cam_mm_get_state();
781 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
782 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
783 DEBUG_TRACE(" contact is paused ");
785 service_create(&reply);
786 service_add_extra_data(reply, "camera_end", "1");
787 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_CANCELED);
788 service_destroy(reply);
792 if ((mm_state == RECORDER_STATE_RECORDING
793 || mm_state == RECORDER_STATE_PAUSED)
794 &&(camapp->camera_mode == CAM_CAMCORDER_MODE)) {
795 int shutter_sound_state = 0;
796 /* get current sound */
797 cam_mm_get_shutter_sound(&shutter_sound_state);
798 /* disable shutter sound */
799 cam_mm_set_shutter_sound(FALSE);
801 cam_video_record_stop(ad);
802 /*restore shutter sound */
803 cam_mm_set_shutter_sound(shutter_sound_state);
804 } else if (mm_state == CAMERA_STATE_CAPTURING
805 && (camapp->camera_mode == CAM_CAMERA_MODE)) {
806 cam_mm_capture_stop(TRUE, CAM_CAMERA_MODE);
809 if (ad->imageviewer_ug) { /* image viewer is running and camera app is fous out */
810 ad->foucs_out_from_quickview = TRUE;
812 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
813 if (!cam_app_preview_stop()) {
814 cam_critical(LOG_MM, "cam_app_preview_stop fail");
816 CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
818 cam_app_key_event_deinit(ad);
819 if (!cam_key_grab_deinit(ad)) {
820 DEBUG_TRACE("cam_key_grab_deinit fail");
823 cam_app_timeout_checker_init(ad);
825 DEBUG_TRACE("#############cam_app_pause - END #############\n");
829 gboolean cam_app_resume(void *data)
831 struct appdata *ad = (struct appdata *)data;
832 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
834 CamAppData *camapp = NULL;
835 camapp = ad->camapp_handle;
836 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
839 debug_fenter(LOG_CAM);
841 if (!cam_condition_check_to_start_camera(ad)) {
842 cam_critical(LOG_CAM, "cannot start camera");
843 return ECORE_CALLBACK_CANCEL;
846 cam_app_timeout_checker_init(ad);
848 if (ad->imageviewer_ug == NULL) { /* home key destory imageviewer_ug */
849 elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
850 cam_state = cam_mm_get_state();
851 cam_app_get_preview_offset_coordinate(ad);
853 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0);
854 if (!cam_app_preview_start(ad)) {
855 if (ad->is_calling == CAMERA_ERROR_SOUND_POLICY || ad->is_calling == RECORDER_ERROR_SOUND_POLICY) {
856 DEBUG_TRACE(" MM CAMCARORDER ERROR\n");
857 cam_app_black_screen_show(ad, 2);
858 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
862 cam_critical(LOG_MM, "cam_app_preview_start failed");
863 cam_app_notice_popup(ad,
864 "PREVIEW START FAILED !!",
865 cam_app_timeout_notice_response_cb);
868 CAM_TA_ACUM_ITEM_END(" cam_app_preview_start", 0);
871 CAM_TA_ACUM_ITEM_BEGIN(" cam_key_grab_init", 0);
873 if (!ad->imageviewer_ug) {
874 if (!cam_key_grab_init(ad))
875 DEBUG_TRACE("cam_key_grab_init fail");
876 CAM_TA_ACUM_ITEM_END(" cam_key_grab_init", 0);
877 cam_app_key_event_init(ad);
879 #ifdef ENABLE_CHECK_CAM_STATUS
880 alarm(CAM_CHECK_STATUS_INTERVAL_TIME); /* start alarm */
886 Eina_Bool cam_app_stop(void *data)
888 struct appdata *ad = (struct appdata *)data;
889 CamAppData *camapp = NULL;
891 char *filename = NULL;
892 debug_fenter(LOG_CAM);
893 cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
895 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_stop", 0);
897 camapp = ad->camapp_handle;
898 cam_retvm_if(camapp == NULL, EXIT_FAILURE, "camapp_handle is NULL");
900 /* return aul result path */
901 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
902 if (ad->exe_args == NULL) {
903 DEBUG_TRACE("ad->exe_args is NULL");
906 if (ad->path_in_return) {
907 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
908 DEBUG_TRACE("contacts -not need sending result");
910 if (ad->appcore_state != CAM_APPCORE_PAUSE_STATE) {
911 if (camapp->filename != NULL) {
912 filename = strdup(camapp->filename);
913 cam_app_return_ext_app(ad, filename);
918 cam_app_return_ext_app(ad, filename);
922 if (ad->imageviewer_ug) {
923 cam_app_close_ug(ad);
926 cam_popup_remove_all();
927 cam_toolbar_destroy(ad);
928 cam_app_clear_engine_data(ad, true);
930 if (ad->timer_activated) {
931 ad->timer_activated = false;
933 DEL_EVAS_OBJECT(ad->timer_icon_edje);
934 REMOVE_TIMER(ad->timer_timer);
936 REMOVE_TIMER(ad->toolbar_toggle_timer);
937 cam_app_timeout_checker_remove();
938 if (ad->auto_close_timer) {
939 ecore_timer_del(ad->auto_close_timer);
940 ad->auto_close_timer = NULL;
943 if (EXIT_FAILURE == cam_noti_deinit(ad)) {
944 cam_critical(LOG_UI, "cam_noti_deinit failed");
947 cam_app_key_event_deinit(ad);
948 if(!cam_key_grab_deinit(ad))
949 DEBUG_TRACE("cam_key_grab_deinit fail");
951 /* destory camcorder */
952 if (cam_mm_is_created()) {
954 state = cam_mm_get_state();
955 if (camapp->camera_mode == CAM_CAMERA_MODE) {
957 case CAMERA_STATE_NONE:
958 case CAMERA_STATE_CREATED:
960 case CAMERA_STATE_PREVIEW:
962 case CAMERA_STATE_CAPTURING:
963 cam_mm_capture_stop(TRUE, CAM_CAMERA_MODE);
965 case CAMERA_STATE_CAPTURED:
968 /*g_assert_not_reached();*/
971 }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
973 case RECORDER_STATE_NONE:
974 case RECORDER_STATE_CREATED:
976 case RECORDER_STATE_READY:
978 case RECORDER_STATE_RECORDING:
979 case RECORDER_STATE_PAUSED:
980 cam_video_record_stop(ad);
983 /*g_assert_not_reached();*/
988 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
989 if (!cam_app_preview_stop()) {
990 cam_critical(LOG_MM, "cam_app_preview_stop faild");
992 CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
993 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_destory", 0);
994 if (!cam_mm_destory()) {
995 cam_critical(LOG_MM, "cam_mm_destory faild");
997 CAM_TA_ACUM_ITEM_END(" cam_mm_destory", 0);
1001 ad->toolbar_hided = FALSE;
1002 cam_app_toggle_indicator(ad, FALSE);
1003 cam_app_toggle_toolbar(ad, FALSE);
1005 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
1006 cam_app_destroy_progressbar(ad);
1007 cam_utils_remove_idler_all(ad);
1009 if (filename != NULL) {
1014 CAM_TA_ACUM_ITEM_END(" cam_app_stop", 0);
1016 CAM_TA_ACUM_ITEM_SHOW_RESULT_TO(CAM_TA_SHOW_FILE);
1019 return EXIT_SUCCESS;
1023 gboolean cam_app_quit(void *data)
1025 struct appdata *ad = (struct appdata *)data;
1026 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1028 if (cam_mm_is_created()) {
1029 /*TODO: new logic will be add for save file while camera process is killed*/
1032 state = cam_mm_get_state();
1033 if (ad->camapp_handle) {
1034 if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE) {
1036 case RECORDER_STATE_NONE:
1037 case RECORDER_STATE_CREATED:
1039 case RECORDER_STATE_READY:
1041 case RECORDER_STATE_RECORDING:
1042 case RECORDER_STATE_PAUSED:
1043 cam_video_record_stop(ad);
1046 /*g_assert_not_reached();*/
1052 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
1053 if (!cam_app_preview_stop()) {
1054 cam_critical(LOG_MM, "cam_app_preview_stop failed");
1056 CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
1058 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_destory", 0);
1059 if (!cam_mm_destory()) {
1060 cam_critical(LOG_MM, "cam_mm_destory failed");
1062 CAM_TA_ACUM_ITEM_END(" cam_mm_destory", 0);
1065 cam_devman_deinit();
1068 if (EXIT_FAILURE == cam_noti_deinit(ad)) {
1069 cam_critical(LOG_UI, "cam_noti_deinit failed");
1071 /* crear data & engine */
1072 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_clear_engine_data", 0);
1073 cam_app_clear_engine_data(data, true);
1074 CAM_TA_ACUM_ITEM_END(" cam_app_clear_engine_data", 0);
1075 CAM_TA_ACUM_ITEM_BEGIN(" cam_file_finalize", 0);
1076 cam_file_finalize();
1077 CAM_TA_ACUM_ITEM_END(" cam_file_finalize", 0);
1078 CAM_TA_ACUM_ITEM_BEGIN(" cam_sound_finalize", 0);
1079 cam_sound_finalize();
1080 CAM_TA_ACUM_ITEM_END(" cam_sound_finalize", 0);
1082 CAM_TA_ACUM_ITEM_BEGIN(" cam_config_finalize", 0);
1083 cam_config_finalize();
1084 CAM_TA_ACUM_ITEM_END(" cam_config_finalize", 0);
1086 /* disconnect media content */
1087 CAM_TA_ACUM_ITEM_BEGIN(" media_content_disconnect", 0);
1089 if(media_content_disconnect() == MEDIA_CONTENT_ERROR_NONE) {
1090 DEBUG_TRACE("dis connection is success");
1092 cam_critical(LOG_SYS, " media_content_disconnect failed");
1095 CAM_TA_ACUM_ITEM_END(" media_content_disconnect", 0);
1097 /* cam_handle_free(ad); */
1098 cam_appdata_fini(ad);
1103 gboolean cam_app_preview_start(void *data)
1105 CAM_TA_ACUM_ITEM_BEGIN("----cam_app_preview_start", 0);
1107 ("------------------------------START---------------------------------");
1109 struct appdata *ad = (struct appdata *)data;
1110 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1111 CamAppData *camapp = ad->camapp_handle;
1112 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
1114 int state = cam_mm_get_state();
1115 DEBUG_TRACE("state: %d ", state);
1117 if (state < CAMERA_STATE_NONE || state < RECORDER_STATE_NONE)
1120 if (camapp->camera_mode == CAM_CAMERA_MODE) {
1122 case CAMERA_STATE_CREATED:
1123 case CAMERA_STATE_CAPTURED:
1125 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_preview_start", 0);
1126 if (!cam_mm_preview_start(camapp->camera_mode)) {
1127 cam_critical(LOG_MM, "cam_mm_preview_start failed");
1130 CAM_TA_ACUM_ITEM_END(" cam_mm_preview_start", 0);
1133 case CAMERA_STATE_CAPTURING:
1135 if (cam_mm_capture_stop(FALSE, camapp->camera_mode) == FALSE) {
1136 cam_critical(LOG_MM, "cam_mm_capture_stop failed");
1144 }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
1146 case RECORDER_STATE_CREATED:
1147 case RECORDER_STATE_PAUSED:
1149 if (!cam_mm_preview_start(camapp->camera_mode)) {
1150 cam_critical(LOG_MM, "cam_mm_preview_start failed");
1161 CAM_TA_ACUM_ITEM_END("----cam_app_preview_start", 0);
1165 gboolean cam_app_preview_stop(void)
1167 struct appdata *ad = (struct appdata *)cam_appdata_get();
1170 CamAppData *camapp = ad->camapp_handle;
1173 if (!cam_mm_preview_stop(camapp->camera_mode)) {
1174 cam_critical(LOG_MM, "cam_mm_preview_stop failed");
1181 _main_layout_click_cb(void *data, Evas_Object *obj, void *event_info)
1183 struct appdata *ad = (struct appdata *)data;
1188 unload_zoom_edje(ad);
1190 if (ad->setting_ctxpopup || ad->toolbar_popup) {
1191 /* destroy toolbar popup and setting popup */
1192 ad->show_menu = FALSE;
1193 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
1194 cam_toolbar_and_setting_popup_del(ad);
1195 if (ad->shot_mode_guide_popup)
1196 toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode);
1197 } else if (ad->toolbar_show_setting_popup == TRUE) {
1198 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
1199 ad->show_menu = FALSE;
1200 toolbar_hide_setting_popup(ad);
1201 if (ad->toolbar_show_edit_shortcuts_popup == TRUE) {
1202 toolbar_destroy_shortcuts_popup(ad);
1203 ad->toolbar_show_edit_shortcuts_popup = FALSE;
1205 } else if (ad->toolbar_show_edit_shortcuts_popup == TRUE) {
1206 toolbar_destroy_shortcuts_popup(ad);
1207 ad->toolbar_show_edit_shortcuts_popup = FALSE;
1209 if (ad->camapp_handle->enable_touch_af == TRUE) {
1210 REMOVE_TIMER(ad->continuous_af_timer);
1211 cam_camera_touch_af_press(ad);
1218 static void cam_app_timer_icon_rotate(void *data)
1220 struct appdata *ad = (struct appdata *)data;
1221 cam_retm_if(ad == NULL, "appdata is NULL");
1223 DEL_EVAS_OBJECT(ad->timer_icon_edje);
1224 cam_app_timer_update_count(ad);
1227 static int cam_app_start_rotate(struct appdata *ad, bool bInitial)
1229 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
1231 cam_debug(LOG_UI, "rotated : %d, window rotation angle=%d", ad->rot_current); /*, elm_win_rotation_get(ad->win_main)); */
1236 switch (ad->rot_current) {
1237 case APP_DEVICE_ORIENTATION_0:
1238 ad->camcorder_rotate = CAMERA_ROTATION_90;
1239 ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT;
1243 case APP_DEVICE_ORIENTATION_180:
1244 ad->camcorder_rotate = CAMERA_ROTATION_270;
1245 ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT_INVERSE;
1249 case APP_DEVICE_ORIENTATION_270:
1250 ad->camcorder_rotate = CAMERA_ROTATION_NONE;
1251 ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE;
1255 case APP_DEVICE_ORIENTATION_90:
1256 ad->camcorder_rotate = CAMERA_ROTATION_180;
1257 ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE;
1265 ad->angle_pre = ad->angle;
1268 ////////////////////////////////////////////////////////////////////////////
1269 if (ad->toolbar_edj_file) {
1270 free(ad->toolbar_edj_file);
1271 ad->toolbar_edj_file = NULL;
1273 /*ad->angle = 270;*/
1274 switch (ad->angle) {
1276 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
1279 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_EDJ_NAME);
1282 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_INVERSE_EDJ_NAME);
1285 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_INVERSE_EDJ_NAME);
1288 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
1293 elm_win_rotation_with_resize_set(ad->win_main, ad->angle);
1295 /* cam_app_get_win_size(ad); */
1296 cam_app_get_preview_offset_coordinate(ad);
1299 if (ad->toolbar_edje)
1300 cam_toolbar_rotate(ad);
1302 if (ad->indicator_edje)
1303 cam_indicator_rotate(ad);
1305 if (ad->recording_edje)
1306 cam_recording_rotate(ad);
1308 if (ad->timer_icon_edje)
1309 cam_app_timer_icon_rotate(ad);
1311 if (ad->zoom_edje) {
1312 unload_zoom_edje(ad);
1316 #ifdef GUIDE_LINE_ENALBE
1317 if (ad->guideline_edje)
1318 settings_guideline_refresh(ad);
1325 gboolean cam_layout_init(void *data)
1327 DEBUG_TRACE("START");
1329 struct appdata *ad = (struct appdata *)data;
1330 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1332 if (ad->win_main == NULL) {
1333 cam_critical(LOG_UI, "win_main is NULL");
1337 elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
1339 cam_app_start_rotate(ad, TRUE);
1340 DEBUG_TRACE("ad->angle = %d", ad->angle);
1341 /*elm_win_rotation_with_resize_set(ad->win_main, 270);*/
1342 cam_app_get_preview_offset_coordinate(ad);
1343 elm_theme_extension_add(NULL, CAM_SETTING_POPUP_STYLE_EDJ_NAME);
1344 elm_theme_extension_add(NULL, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME);
1345 elm_theme_extension_add(NULL, CAM_SLIDER_STYLE_EDJ_NAME);
1347 CAM_TA_ACUM_ITEM_BEGIN(" layout_main load", 0);
1348 if (ad->layout_main == NULL) {
1350 cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME,
1352 if (ad->layout_main == NULL) {
1353 CAM_TA_ACUM_ITEM_END(" layout_main load", 0);
1354 cam_critical(LOG_UI, "layout_main load failed ");
1358 #ifndef CAMERA_MACHINE_I686
1359 evas_object_smart_callback_del(_EDJ(ad->layout_main),
1361 _main_layout_click_cb);
1363 evas_object_smart_callback_add(_EDJ(ad->layout_main),
1365 _main_layout_click_cb, ad);
1367 define_mouse_callback(_EDJ(ad->layout_main),
1368 _EDJ(ad->layout_main));
1371 CAM_TA_ACUM_ITEM_END(" layout_main load", 0);
1373 cam_app_focus_guide_create(ad);
1375 CAM_TA_ACUM_ITEM_BEGIN(" load_toolbar_edje", 0);
1376 if (cam_toolbar_create(ad)) {
1377 CAM_TA_ACUM_ITEM_END(" load_toolbar_edje", 0);
1378 cam_critical(LOG_UI, " load_toolbar_edje failed ");
1381 CAM_TA_ACUM_ITEM_END(" load_toolbar_edje", 0);
1383 #ifndef DISABLE_INDICATOR
1384 CAM_TA_ACUM_ITEM_BEGIN(" cam_indicator_create", 0);
1385 if (ad->indicator_edje) {
1386 evas_object_hide(ad->indicator_edje);
1387 cam_indicator_destory(ad);
1389 if (cam_indicator_create(ad)) {
1390 CAM_TA_ACUM_ITEM_END(" cam_indicator_create", 0);
1391 cam_critical(LOG_UI, "cam_indicator_create failed ");
1394 CAM_TA_ACUM_ITEM_END(" cam_indicator_create", 0);
1397 cam_app_update_quickview_icon(ad);
1404 gboolean cam_handle_create(void *data)
1406 CAM_TA_ACUM_ITEM_BEGIN("------cam_handle_create", 0);
1407 struct appdata *ad = (struct appdata *)data;
1408 CamAppData *camapp = NULL;
1410 debug_fenter(LOG_CAM);
1411 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1413 if (ad->camapp_handle && cam_handle) {
1414 cam_handle_free(ad);
1417 camapp = (CamAppData *)malloc(sizeof(CamAppData));
1418 cam_retv_if(camapp == NULL, FALSE);
1419 memset(camapp, 0x00, sizeof(CamAppData));
1421 cam_handle = camapp;
1422 ad->camapp_handle = camapp;
1423 CAM_TA_ACUM_ITEM_END("------cam_handle_create", 0);
1428 gboolean cam_handle_free(void *data)
1430 struct appdata *ad = (struct appdata *)data;
1431 CamAppData *camapp = NULL;
1433 debug_fenter(LOG_CAM);
1434 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1435 camapp = ad->camapp_handle;
1436 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
1440 if (camapp && cam_handle) {
1441 if (camapp->battery_ani_timer) {
1442 ecore_timer_del(camapp->battery_ani_timer);
1443 camapp->battery_ani_timer = NULL;
1446 if (camapp->filename) {
1447 free(camapp->filename);
1448 camapp->filename = NULL;
1451 if (camapp->thumbnail_name) {
1452 free(camapp->thumbnail_name);
1453 camapp->thumbnail_name = NULL;
1461 ad->camapp_handle = NULL;
1468 gboolean cam_toolbar_menu_config_init(void *data, int mode) {
1469 struct appdata *ad = (struct appdata *)data;
1470 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1471 ad->toolbar_1_type = cam_config_get_int( PROP_TOOLBAR_1_TYPE_NAME, CAM_MENU_EMPTY);
1472 ad->toolbar_2_type = cam_config_get_int( PROP_TOOLBAR_2_TYPE_NAME, CAM_MENU_EMPTY);
1473 ad->toolbar_3_type = cam_config_get_int( PROP_TOOLBAR_3_TYPE_NAME, CAM_MENU_EMPTY);
1474 ad->toolbar_4_type = cam_config_get_int( PROP_TOOLBAR_4_TYPE_NAME, CAM_MENU_EMPTY);
1475 DEBUG_TRACE("ad->toolbar_1_type= %d", ad->toolbar_1_type);
1476 DEBUG_TRACE("ad->toolbar_2_type= %d", ad->toolbar_2_type);
1477 DEBUG_TRACE("ad->toolbar_3_type= %d", ad->toolbar_3_type);
1478 DEBUG_TRACE("ad->toolbar_4_type= %d", ad->toolbar_4_type);
1483 gboolean cam_toolbar_menu_config_update(void *data)
1485 struct appdata *ad = (struct appdata *)data;
1486 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1493 toolbar_1_type = cam_config_get_int( PROP_TOOLBAR_1_TYPE_NAME, CAM_MENU_EMPTY);
1494 toolbar_2_type = cam_config_get_int( PROP_TOOLBAR_2_TYPE_NAME, CAM_MENU_EMPTY);
1495 toolbar_3_type = cam_config_get_int( PROP_TOOLBAR_3_TYPE_NAME, CAM_MENU_EMPTY);
1496 toolbar_4_type = cam_config_get_int( PROP_TOOLBAR_4_TYPE_NAME, CAM_MENU_EMPTY);
1498 if (toolbar_1_type != ad->toolbar_1_type)
1499 cam_config_set_int(PROP_TOOLBAR_1_TYPE_NAME, ad->toolbar_1_type);
1500 if (toolbar_2_type != ad->toolbar_2_type)
1501 cam_config_set_int(PROP_TOOLBAR_2_TYPE_NAME, ad->toolbar_2_type);
1502 if (toolbar_3_type != ad->toolbar_3_type)
1503 cam_config_set_int(PROP_TOOLBAR_3_TYPE_NAME, ad->toolbar_3_type);
1504 if (toolbar_4_type != ad->toolbar_4_type)
1505 cam_config_set_int(PROP_TOOLBAR_4_TYPE_NAME, ad->toolbar_4_type);
1511 gboolean cam_handle_init(void *data, int mode)
1513 struct appdata *ad = data;
1514 CamAppData *camapp = NULL;
1517 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1519 camapp = ad->camapp_handle;
1520 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
1522 cam_info(LOG_UI, "mode : %d ", mode);
1523 camapp->camera_mode = mode;
1525 cam_info(LOG_UI, "camera_mode = %d ", camapp->camera_mode);
1527 cam_config_set_int_by_type(CAM_CONFIG_TYPE_COMMON, PROP_MODE_NAME, mode);
1529 cam_app_set_config_group(camapp->camera_mode);
1531 #ifdef USE_CAM_STORAGE_SETTING
1532 camapp->storage = cam_config_get_int( PROP_STORAGE_NAME, CAM_STORAGE_INTERNAL);
1534 vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_CAMERA_INT, &(camapp->storage));
1537 /* use shot mode as default value */
1538 camapp->recording_mode = RECMODE_DEFAULT;
1539 camapp->shooting_mode = SHOTMODE_DEFAULT;
1541 camapp->af_mode = AF_DEFAULT;
1543 if (camapp->camera_mode == CAM_CAMERA_MODE) {
1544 camapp->flash = cam_config_get_int(PROP_FLASH_NAME, FLASH_DEFAULT);
1546 camapp->flash = cam_config_get_int(PROP_FLASH_NAME, REC_FLASH_DEFAULT);
1549 #ifdef GUIDE_LINE_ENALBE
1550 camapp->guideline = cam_config_get_boolean(PROP_GUIDELINE_NAME, GUIDE_LINE_DEFAULT);
1551 DEBUG_TRACE("camapp->guideline = %d" ,camapp->guideline);
1554 camapp->effect = EFFECT_DEFAULT;
1556 if (camapp->camera_mode == CAM_CAMERA_MODE)
1557 DEBUG_TRACE("default resolution will be got from FW API");
1559 camapp->resolution = cam_config_get_int(PROP_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
1561 camapp->image_quality = cam_config_get_int(PROP_IMAGE_QUALITY_NAME, QUALITY_DEFAULT);
1562 camapp->video_quality = cam_config_get_int(PROP_VIDEO_QUALITY_NAME, QUALITY_DEFAULT);
1563 camapp->audio_recording = AUDIOREC_DEFAULT;
1564 camapp->review = cam_config_get_boolean(PROP_REVIEW_NAME, FALSE);
1566 camapp->battery_level = cam_utils_get_battery_level();
1567 charging = cam_utils_get_charging_status();
1569 camapp->battery_charging = charging;
1571 camapp->battery_charging = 0;
1573 #ifdef USE_CAMERA_APP_SHUTTER_SOUND
1574 camapp->shutter_sound =
1575 cam_config_get_int(PROP_SHUTTER_SOUND_NAME, SHUTTER_SOUND_DEFAULT);
1578 cam_mm_set_shutter_sound(SOUND_DEFAULT);
1579 camapp->shutter_sound = SHUTTER_SOUND_DEFAULT; /* on */
1581 /* below item had been saved in ini file */
1582 camapp->zoom_mode = 1;
1583 camapp->image_count = IMAGE_COUNT_DEFAULT;
1584 camapp->size_limit_type = CAM_MM_SIZE_LIMIT_TYPE_BYTE;
1585 camapp->size_limit = REC_SIZE_LIMIT_DEFAULT;
1586 camapp->timer = TIMER_DEFAULT;
1587 camapp->fps = FPS_DEFAULT;
1589 camapp->enable_touch_af = TRUE;
1590 camapp->key_lock = FALSE;
1592 /*init toolbar menu config */
1593 cam_toolbar_menu_config_init((void*)ad, mode);
1598 gboolean cam_handle_value_set(void *data, int type, const GValue *value)
1600 struct appdata *ad = (struct appdata *)data;
1601 CamAppData *camapp = NULL;
1603 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1604 camapp = ad->camapp_handle;
1605 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
1607 cam_debug(LOG_CAM, "type : %d", type);
1613 gint tempval = g_value_get_int(value);
1615 current = camapp->camera_mode;
1616 if (!cam_mode_change(ad, tempval)) {
1617 cam_critical(LOG_CAM,
1618 "MODE CHANGE IS FAILED by MIDDLE WARE");
1619 cam_app_notice_popup(data,
1620 "MODE CHANGE FAILED !!",
1621 cam_app_timeout_notice_response_cb);
1626 case PROP_SHOT_MODE:
1628 gint tempval = g_value_get_int(value);
1629 gint cur_mode = camapp->shooting_mode;
1631 camapp->shooting_mode = tempval;
1633 if (!cam_shooting_mode_change(ad)) {
1634 cam_critical(LOG_UI, "shot mode set fail");
1635 camapp->shooting_mode = cur_mode;
1638 printf(" ##### %s %d tempval = %d\n", __FUNCTION__,
1640 cam_config_set_int(PROP_SHOT_MODE_NAME, tempval);
1641 cam_app_focus_guide_update(ad);
1646 gint tempval = g_value_get_int(value);
1647 /* set recording mode */
1648 camapp->recording_mode = tempval;
1649 cam_config_set_int(PROP_REC_MODE_NAME, tempval);
1651 if (!cam_recording_mode_change(ad, tempval)) {
1652 cam_critical(LOG_UI, "rec mode change fail - mode[%d]", tempval);
1658 case PROP_RESOLUTION:
1660 gint tempval = g_value_get_int(value);
1661 /* int af_x,af_y; */
1664 ("*******************************************************");
1665 DEBUG_TRACE("value set : PROP_RESOLUTION setting");
1666 DEBUG_TRACE(" tempval = %d ", tempval);
1668 ("CAM_RESOLUTION_W = %d ,CAM_RESOLUTION_H=%d ",
1669 CAM_RESOLUTION_W(tempval),
1670 CAM_RESOLUTION_H(tempval));
1672 ("*******************************************************");
1675 cam_critical(LOG_FILE, "1111111111");
1677 if (!cam_app_reset_resolution(ad, CAM_RESOLUTION_W(tempval), CAM_RESOLUTION_H(tempval))) {
1678 cam_warning(LOG_UI, "resolution set fail");
1681 #ifdef GUIDE_LINE_ENALBE
1682 settings_guideline_refresh(ad);
1684 camapp->resolution = tempval;
1685 cam_critical(LOG_FILE, " camapp->resolution %d", camapp->resolution);
1687 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
1688 cam_app_set_video_quality(ad, camapp->video_quality);
1689 /* cam_mm_set_video_quality(camapp->recording_mode, camapp->video_quality); */
1692 if ((camapp->camera_mode == CAM_CAMERA_MODE
1693 && camapp->shooting_mode == CAM_SINGLE_MODE)
1694 || (camapp->camera_mode == CAM_CAMCORDER_MODE
1695 && camapp->recording_mode == CAM_RECORD_NORMAL)) {
1697 "resolution saved : [%d]x[%d]",
1698 CAM_RESOLUTION_W(tempval),
1699 CAM_RESOLUTION_H(tempval));
1700 cam_config_set_int(PROP_RESOLUTION_NAME,
1703 cam_app_get_preview_offset_coordinate(ad);
1704 ad->remained_count = cam_system_get_still_count_by_resolution(ad);
1708 { /* fps may not set it alone */
1709 gint tempval = g_value_get_int(value);
1711 if (!cam_mm_set_fps(tempval)) {
1712 cam_warning(LOG_UI, "fps set fail");
1715 camapp->fps = tempval;
1720 gint tempval = g_value_get_int(value);
1721 if (!cam_mm_set_effect(tempval)) {
1722 cam_warning(LOG_UI, "effect set fail : %d",
1726 camapp->effect = tempval;
1727 cam_config_set_int(PROP_EFFECT_NAME, tempval);
1732 gint tempval = g_value_get_int(value);
1733 gint oldval = cam_config_get_int(PROP_AF_NAME, CAM_FOCUS_AUTO);
1735 if ((tempval == CAM_FOCUS_AUTO)
1736 || (tempval == CAM_FOCUS_MACRO)) {
1737 if (!cam_mm_set_focus_mode(tempval)) {
1738 cam_warning(LOG_UI, "af mode set fail");
1743 cam_warning(LOG_UI, "unknow af mode : %d",
1747 camapp->af_mode = tempval;
1748 cam_app_focus_guide_update(ad);
1749 if (camapp->camera_mode == CAM_CAMERA_MODE
1750 && camapp->shooting_mode == CAM_SINGLE_MODE) {
1751 cam_config_set_int(PROP_AF_NAME, tempval);
1757 gint tempval = g_value_get_int(value);
1758 if (!cam_mm_set_flash(tempval)) {
1759 cam_warning(LOG_UI, "flash set fail");
1762 camapp->flash = tempval;
1763 /*fix me ,why only when in camera single mode ,
1764 save the FLASH setting value to config file*/
1765 if ((camapp->camera_mode == CAM_CAMERA_MODE
1766 && camapp->shooting_mode == CAM_SINGLE_MODE)
1767 || camapp->camera_mode == CAM_CAMCORDER_MODE) {
1768 cam_config_set_int(PROP_FLASH_NAME, tempval);
1774 gint tempval = g_value_get_int(value);
1776 camapp->timer = tempval;
1779 case PROP_IMAGE_QUALITY:
1781 gint tempval = g_value_get_int(value);
1782 if (!cam_mm_set_image_enc_quality(tempval)) {
1784 "image quality[%d] set fail",
1789 camapp->image_quality = tempval;
1790 cam_config_set_int(PROP_IMAGE_QUALITY_NAME, tempval);
1793 case PROP_VIDEO_QUALITY:
1795 gint tempval = g_value_get_int(value);
1796 if (!cam_app_set_video_quality(ad, tempval)) {
1798 "video quality[%d] set fail",
1803 camapp->video_quality = tempval;
1804 cam_config_set_int(PROP_VIDEO_QUALITY_NAME, tempval);
1807 case PROP_AUDIO_REC:
1809 gboolean tempval = g_value_get_boolean(value);
1810 if (!cam_mm_set_audio_recording(tempval)) {
1811 cam_warning(LOG_UI, "audio_recording set fail");
1814 camapp->audio_recording = tempval;
1815 cam_config_set_boolean(PROP_AUDIO_REC_NAME, tempval);
1819 case PROP_AUDIO_QUALITY:
1821 gint tempval = g_value_get_int(value);
1822 /* set audio quality */
1823 camapp->audio_quality = tempval;
1824 cam_config_set_int(PROP_AUDIO_QUALITY_NAME, tempval);
1827 case PROP_BATTERY_CHARG:
1829 gint tempval_charging = g_value_get_int(value);
1831 DEBUG_TRACE("charging = %d", tempval_charging);
1832 camapp->battery_charging = tempval_charging;
1833 camapp->battery_level = cam_utils_get_battery_level();
1834 indicator_update_battery(ad, camapp->battery_level);
1837 case PROP_BATTERY_LEVEL:
1839 gint tempval = g_value_get_int(value);
1840 camapp->battery_charging = cam_utils_get_charging_status();
1841 camapp->battery_level = tempval;
1842 indicator_update_battery(ad, camapp->battery_level);
1848 gint tempval = g_value_get_int(value);
1849 if (!cam_mm_set_zoom(tempval)) {
1850 cam_warning(LOG_UI, "zoom set fail");
1853 camapp->zoom = tempval;
1858 gint tempval = g_value_get_int(value);
1860 camapp->storage = tempval;
1861 cam_config_set_int(PROP_STORAGE_NAME, tempval);
1864 case PROP_GUIDELINE:
1866 gboolean tempval = g_value_get_boolean(value);
1868 camapp->guideline = tempval;
1869 cam_config_set_boolean(PROP_GUIDELINE_NAME, tempval);
1874 gboolean tempval = g_value_get_boolean(value);
1875 camapp->review = tempval;
1876 cam_config_set_boolean(PROP_REVIEW_NAME, tempval);
1879 case PROP_IMAGE_COUNT:
1881 gint tempval = g_value_get_int(value);
1882 if (!cam_mm_set_image_count(tempval)) {
1883 cam_warning(LOG_UI, "image_count set fail");
1886 camapp->image_count = tempval;
1889 case PROP_SHUTTER_SOUND:
1891 gint tempval = g_value_get_int(value);
1892 camapp->shutter_sound = tempval;
1893 cam_config_set_int(PROP_SHUTTER_SOUND_NAME, tempval);
1896 case PROP_SIZE_LIMIT:
1898 gint tempval = g_value_get_int(value);
1899 if (!cam_app_set_size_limit
1900 (tempval, camapp->size_limit_type)) {
1901 cam_warning(LOG_UI, "size_limit set fail");
1904 camapp->size_limit = tempval;
1907 case PROP_SIZE_LIMIT_TYPE:
1909 gint tempval = g_value_get_int(value);
1910 camapp->size_limit_type = tempval;
1915 guint tempval = g_value_get_uint(value);
1916 camapp->rec_elapsed = tempval;
1919 case PROP_REC_FILE_SIZE:
1921 guint tempval = g_value_get_uint(value);
1922 camapp->rec_filesize = tempval;
1926 cam_warning(LOG_UI, "unknow type :%d ", type);
1930 /* indicator should be updated here!!! */
1931 /* change_indicator_mode_icons(ad); */
1935 gboolean cam_mode_change(void *data, int to_mode)
1937 struct appdata *ad = (struct appdata *)data;
1938 cam_retv_if(ad == NULL, FALSE);
1939 CamAppData *camapp = ad->camapp_handle;
1940 cam_retv_if(camapp == NULL, FALSE);
1943 debug_fenter(LOG_UI);
1945 cam_elm_cache_flush();
1947 evas_object_hide(ad->timer_icon_edje);
1948 REMOVE_TIMER(ad->timer_timer);
1949 ad->timer_activated = false;
1950 DEL_EVAS_OBJECT(ad->timer_icon_edje);
1951 #ifdef GUIDE_LINE_ENALBE
1952 DEL_EVAS_OBJECT(ad->guideline_edje);
1953 camapp->guideline = FALSE;
1955 cam_app_timeout_checker_remove();
1956 /* draw to_mode icon in preview area */
1957 #ifdef USE_CAMERA_APP_SHUTTER_SOUND
1958 if (ad->play_rec_sound != 0)
1961 /*cam_app_black_screen_show(ad, to_mode);*/
1963 if (cam_mm_get_state() == CAMERA_STATE_CAPTURING
1964 && (camapp->camera_mode == CAM_CAMERA_MODE)) {
1965 cam_mm_capture_stop(true, CAM_CAMERA_MODE);
1968 /* stop preview and destory mmfw handle */
1969 if (!cam_app_preview_stop()) {
1970 cam_critical(LOG_MM, "cam_app_preview_stop faild");
1971 goto MODE_CHANGE_FAILED;
1975 if (!cam_mm_destory()) {
1976 cam_critical(LOG_MM, "cam_mm_destory faild");
1977 cam_app_notice_popup(data,
1978 "cam_mm_destory faild BY MIDDLE WARE",
1979 cam_app_timeout_notice_response_cb);
1983 if (to_mode == CAM_CAMERA_MODE) {
1984 DEBUG_TRACE("session_type :SOUND_SESSION_TYPE_SHARE");
1985 session_type = SOUND_SESSION_TYPE_SHARE;
1987 DEBUG_TRACE("session_type :SOUND_SESSION_TYPE_EXCLUSIVE");
1988 session_type = SOUND_SESSION_TYPE_EXCLUSIVE;
1990 if (!cam_mm_session_init(session_type)) {
1991 cam_critical(LOG_MM, "cam_mm_session_init faild");
1992 goto MODE_CHANGE_FAILED;
1995 if (!cam_mm_create(CAM_DEVICE_MEGA, to_mode)) {
1996 cam_critical(LOG_MM, "cam_mm_create failed");
1997 goto MODE_CHANGE_FAILED;
2000 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
2001 cam_utils_remove_idler_all(ad);
2003 if (to_mode == CAM_CAMCORDER_MODE) {
2004 ad->last_camera_zoom_mode = camapp->zoom_mode;
2007 if (!cam_handle_create(ad)) {
2008 cam_critical(LOG_CAM, "cam_handle_create faild");
2009 goto MODE_CHANGE_FAILED;
2013 if (!cam_handle_init(ad, to_mode)) {
2014 cam_critical(LOG_CAM, "cam_handle_init faild");
2015 goto MODE_CHANGE_FAILED;
2019 else if (to_mode == CAM_CAMERA_MODE) {
2020 camapp->zoom_mode = ad->last_camera_zoom_mode;
2022 if (!cam_callback_init(ad)) {
2023 cam_critical(LOG_MM, "cam_init_mm_callback failed");
2024 goto MODE_CHANGE_FAILED;
2027 DEBUG_TRACE("camera mode = %d", to_mode);
2028 if (!cam_app_init_attribute(ad, to_mode)) {
2029 cam_critical(LOG_MM, "cam_app_init_attribute failed");
2030 // goto MODE_CHANGE_FAILED;
2033 cam_app_get_preview_offset_coordinate(ad);
2035 cam_continuous_af_start(ad);
2036 if (!cam_app_preview_start(ad)) {
2037 cam_critical(LOG_MM, "cam_app_preview_start failed");
2038 goto MODE_CHANGE_FAILED;
2041 cam_app_timeout_checker_init(ad);
2044 /*update toolbar shortcuts*/
2045 cam_toolbar_destroy(ad);
2046 cam_toolbar_create(ad);
2047 cam_app_update_quickview_icon((void *)ad);
2052 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2056 gboolean cam_recording_mode_change(void *data, int rec_mode)
2058 struct appdata *ad = (struct appdata *)data;
2059 CamAppData *camapp = NULL;
2060 CamDeviceType device_type = CAM_DEVICE_MEGA;
2061 GValue value = { 0 };
2063 gboolean cam_reset = FALSE;
2065 debug_fenter(LOG_CAM);
2067 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2068 camapp = ad->camapp_handle;
2069 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2071 cam_app_timeout_checker_remove();
2073 g_value_init(&value, G_TYPE_INT);
2075 cam_mm_get_video_device(&video_dev);
2076 if (((camapp->recording_mode == CAM_RECORD_SELF || camapp->recording_mode == CAM_RECORD_SELF_MMS )&& video_dev == CAM_DEVICE_MEGA)
2077 || ((camapp->recording_mode != CAM_RECORD_SELF || camapp->recording_mode == CAM_RECORD_SELF_MMS) && video_dev == CAM_DEVICE_VGA)) {
2079 /* stop preview and destory mmfw handle */
2081 if (!cam_app_preview_stop()) {
2082 cam_critical(LOG_MM, "cam_app_preview_stop faild");
2085 if (!cam_mm_destory()) {
2086 cam_critical(LOG_MM, "cam_mm_destory faild");
2089 if (camapp->recording_mode == CAM_RECORD_SELF ||camapp->recording_mode == CAM_RECORD_SELF_MMS ) {
2090 device_type = CAM_DEVICE_VGA;
2092 device_type = CAM_DEVICE_MEGA;
2095 if (!cam_mm_create(device_type, camapp->camera_mode)) {
2096 cam_critical(LOG_MM, "cam_mm_create failed");
2097 cam_app_notice_popup(ad, "cam_app_preview_start failed", cam_app_timeout_notice_response_cb);
2100 cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
2101 DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
2104 if (!cam_app_preview_stop()) {
2105 cam_critical(LOG_MM, "cam_app_preview_stop faild");
2110 ad->camapp_handle->enable_touch_af = TRUE;
2112 if(rec_mode == CAM_RECORD_SELF) {
2114 ad->camapp_handle->enable_touch_af = FALSE;
2115 g_value_set_int(&value, FPS_SLOW);
2116 if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
2117 cam_critical(LOG_UI, "fps set fail");
2121 g_value_set_int(&value, CAM_RESOLUTION_VGA);
2122 if (!cam_handle_value_set(ad, PROP_RESOLUTION, &value)) {
2123 cam_critical(LOG_UI, "resolution set fail");
2127 g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
2128 if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
2129 cam_critical(LOG_UI, "size limit set fail");
2133 if (!cam_mm_reset_recording_motion_fps()) {
2134 cam_critical(LOG_UI,
2135 "slow motion fps set fail");
2138 camapp->recording_mode = CAM_RECORD_SELF;
2139 } else if (rec_mode == CAM_RECORD_MMS ||rec_mode == CAM_RECORD_SELF_MMS ) {
2140 g_value_set_int(&value, FPS_SLOW);
2141 if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
2142 cam_critical(LOG_UI, "fps set fail");
2146 g_value_set_int(&value, CAM_RESOLUTION_QCIF);
2147 if (!cam_handle_value_set(ad, PROP_RESOLUTION, &value)) {
2148 cam_critical(LOG_UI, "resolution set fail");
2152 g_value_set_int(&value, CAM_REC_MMS_MAX_SIZE);
2153 if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
2154 cam_critical(LOG_UI, "size limit set fail");
2158 if (!cam_mm_reset_recording_motion_fps()) {
2159 cam_critical(LOG_UI,
2160 "slow motion fps set fail");
2163 if (rec_mode == CAM_RECORD_MMS)
2164 camapp->recording_mode = CAM_RECORD_MMS;
2166 camapp->recording_mode = CAM_RECORD_SELF_MMS;
2170 cam_config_get_int(PROP_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
2172 g_value_set_int(&value, FPS_DEFAULT);
2173 if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
2174 cam_critical(LOG_UI, "fps set fail");
2178 g_value_set_int(&value, resolution_n);
2179 if (!cam_handle_value_set(ad, PROP_RESOLUTION, &value)) {
2180 cam_critical(LOG_UI, "resolution set fail");
2184 g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
2185 if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
2186 cam_critical(LOG_UI, "size limit set fail");
2190 if (!cam_mm_reset_recording_motion_fps()) {
2191 cam_critical(LOG_UI,
2192 "slow motion fps set fail");
2195 camapp->recording_mode = CAM_RECORD_NORMAL;
2199 if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
2200 cam_critical(LOG_MM, "cam_app_init_attribute failed");
2204 if (!cam_app_set_recording_mode(ad, rec_mode)) {
2205 DEBUG_TRACE("cam_app_set_recording_mode failed");
2210 cam_app_get_preview_offset_coordinate(ad);
2212 if (!cam_callback_init(ad)) {
2213 cam_critical(LOG_MM, "cam_init_mm_callback failed");
2214 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2218 cam_continuous_af_start(ad);
2219 if (!cam_app_preview_start(ad)) {
2220 cam_critical(LOG_MM, "cam_app_preview_start failed");
2221 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2225 cam_app_timeout_checker_init(ad);
2231 static gboolean cam_app_set_capture_format_shooting_mode(int mode)
2234 case CAM_SINGLE_MODE:
2236 if (!cam_mm_set_capture_format(CAMERA_PIXEL_FORMAT_JPEG))
2244 "\n################# shooting mode set return success : %d\n",
2250 static void cam_shooting_mode_reset(void *data)
2255 gboolean cam_shooting_mode_change(void *data)
2257 struct appdata *ad = (struct appdata *)data;
2258 CamAppData *camapp = NULL;
2259 CamDeviceType device_type = CAM_DEVICE_MEGA;
2260 GValue value = { 0 };
2262 gboolean cam_reset = FALSE;
2264 debug_fenter(LOG_CAM);
2266 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2267 camapp = ad->camapp_handle;
2268 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2270 cam_elm_cache_flush();
2272 cam_app_stop_video_stream();
2273 cam_app_timeout_checker_remove();
2274 cam_shooting_mode_reset(ad);
2275 cam_mm_get_video_device(&video_dev);
2277 if ((camapp->shooting_mode == CAM_SELF_MODE && video_dev == CAM_DEVICE_MEGA)
2278 || (camapp->shooting_mode != CAM_SELF_MODE && video_dev == CAM_DEVICE_VGA)) {
2279 /* stop preview and destory mmfw handle */
2281 if (!cam_app_preview_stop()) {
2282 cam_critical(LOG_MM, "cam_app_preview_stop faild");
2285 if (!cam_mm_destory()) {
2286 cam_critical(LOG_MM, "cam_mm_destory faild");
2289 if (camapp->shooting_mode == CAM_SELF_MODE) {
2290 device_type = CAM_DEVICE_VGA;
2292 device_type = CAM_DEVICE_MEGA;
2294 DEBUG_TRACE("device_type = %d" ,device_type);
2295 if (!cam_mm_create(device_type, camapp->camera_mode)) {
2296 cam_critical(LOG_MM, "cam_mm_create failed");
2297 cam_app_notice_popup(ad, "cam_app_preview_start faild ", cam_app_timeout_notice_response_cb);
2300 cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
2301 DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
2303 cam_continuous_af_start(ad);
2306 g_value_init(&value, G_TYPE_INT);
2308 cam_debug(LOG_CAM, "Shooting mode = %d ", camapp->shooting_mode);
2310 if (ad->shot_mode_guide_popup)
2311 toolbar_shot_guide_popup_destory(ad);
2313 switch (camapp->shooting_mode) {
2314 case CAM_SINGLE_MODE:
2316 int resolution = 0, flash = 0, auto_focus = 0;
2317 resolution = cam_config_get_int(PROP_RESOLUTION_NAME, IMAGE_RESOLUTION_DEFAULT);
2319 cam_config_get_int(PROP_FLASH_NAME, FLASH_DEFAULT);
2321 cam_config_get_int(PROP_AF_NAME, AF_DEFAULT);
2322 /* set resolution */
2323 g_value_set_int(&value, resolution);
2324 cam_handle_value_set(ad, PROP_RESOLUTION, &value);
2327 g_value_set_int(&value, flash);
2328 cam_handle_value_set(ad, PROP_FLASH, &value);
2330 /* set auto focus */
2331 g_value_set_int(&value, auto_focus);
2332 cam_handle_value_set(ad, PROP_AF_MODE, &value);
2334 /* set capture count */
2335 g_value_set_int(&value, IMAGE_COUNT_DEFAULT);
2336 cam_handle_value_set(ad, PROP_IMAGE_COUNT, &value);
2341 /* set resolution */
2342 g_value_set_int(&value, CAM_RESOLUTION_VGA);
2343 cam_handle_value_set(ad, PROP_RESOLUTION, &value);
2346 g_value_set_int(&value, CAM_FLASH_OFF);
2347 cam_handle_value_set(ad, PROP_FLASH, &value);
2349 /* set auto focus */
2350 g_value_set_int(&value, CAM_FOCUS_AUTO);
2351 cam_handle_value_set(ad, PROP_AF_MODE, &value);
2353 /* set capture count */
2354 g_value_set_int(&value, IMAGE_COUNT_DEFAULT);
2355 cam_handle_value_set(ad, PROP_IMAGE_COUNT, &value);
2362 if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
2363 cam_critical(LOG_MM, "cam_app_init_attribute failed");
2366 /* cam_app_set_source_format_shooting_mode(camapp->shooting_mode); */
2367 cam_app_set_capture_format_shooting_mode(camapp->shooting_mode);
2370 cam_app_get_preview_offset_coordinate(ad);
2372 if (!cam_callback_init(ad)) {
2373 cam_critical(LOG_MM, "cam_init_mm_callback failed");
2374 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2378 if (!cam_app_preview_start(ad)) {
2379 cam_critical(LOG_MM, "cam_app_preview_start failed");
2380 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2383 cam_app_timeout_checker_init(ad);
2387 gboolean __cam_single_shot_reg_file(char *file_path)
2389 GError *error = NULL;
2392 DEBUG_TRACE("register file : %s", file_path);
2394 if (!cam_file_register(file_path, &error)) {
2395 cam_critical(LOG_FILE, "cam_file_register fail");
2396 if (error != NULL) {
2397 if (error->message != NULL) {
2398 cam_critical(LOG_FILE,
2399 "cam_file_register error [%s]",
2402 cam_critical(LOG_FILE,
2403 "cam_file_register error but error message is NULL");
2405 g_error_free(error);
2410 cam_warning(LOG_FILE, " file path is NULL...");
2418 static void cam_app_timer_update_count(void *data)
2420 struct appdata *ad = (struct appdata *)data;
2421 char count_string[3] = "";
2423 cam_retm_if(ad == NULL, "appdata is NULL");
2425 cam_debug(LOG_UI, "timer count ... [ %d ]", ad->timer_count);
2427 if (ad->timer_icon_edje == NULL) {
2428 switch (ad->target_direction) {
2429 case CAM_TARGET_DIRECTION_LANDSCAPE:
2430 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
2431 ad->timer_icon_edje = cam_app_load_edj(ad->win_main, CAM_UTILS_EDJ_NAME, "timer_icon_landscape");
2433 case CAM_TARGET_DIRECTION_PORTRAIT:
2434 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
2435 ad->timer_icon_edje = cam_app_load_edj(ad->win_main, CAM_UTILS_EDJ_NAME, "timer_icon_portrait");
2438 DEBUG_TRACE("Invalid direction type!!!");
2441 cam_ret_if(ad->timer_icon_edje == NULL);
2444 snprintf(count_string, sizeof(count_string), "%d", ad->timer_count);
2446 edje_object_part_text_set(_EDJ(ad->timer_icon_edje), "text", count_string);
2448 evas_object_show(ad->timer_icon_edje);
2453 static Eina_Bool cam_app_timer_cb(void *data)
2455 struct appdata *ad = (struct appdata *)data;
2456 cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
2458 CamAppData *camapp = NULL;
2460 camapp = ad->camapp_handle;
2461 if (camapp == NULL) {
2462 cam_critical(LOG_UI, "camapp_handle is NULL");
2463 ad->timer_timer = NULL;
2464 return ECORE_CALLBACK_CANCEL;
2467 ad->timer_count = ad->timer_count - 1;
2469 if (ad->timer_count > 0) {
2470 cam_debug(LOG_UI, "timer continue ... ");
2471 cam_app_timer_update_count(ad);
2472 if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF)
2473 cam_sound_play(CAM_SOUND_EFFECT_TICK, ad);
2474 return ECORE_CALLBACK_RENEW;
2476 cam_debug(LOG_UI, "timer terminated ...");
2478 ad->timer_activated = false;
2480 if (ad->timer_icon_edje != NULL) {
2481 evas_object_del(ad->timer_icon_edje);
2482 ad->timer_icon_edje = NULL;
2485 cam_toolbar_update(ad);
2487 if (camapp->camera_mode == CAM_CAMERA_MODE) {
2488 cam_set_orient_value(ad);
2489 cam_image_capture_start(ad);
2491 cam_video_record_start(ad);
2494 ad->timer_timer = NULL;
2495 return ECORE_CALLBACK_CANCEL;
2499 static void cam_app_start_timer(void *data)
2501 struct appdata *ad = (struct appdata *)data;
2503 cam_retm_if(ad == NULL, "appdata is NULL");
2505 ad->timer_activated = true;
2507 switch (ad->camapp_handle->timer) {
2508 case CAM_SETTINGS_TIMER_2SEC:
2509 ad->timer_count = 2;
2511 case CAM_SETTINGS_TIMER_5SEC:
2512 ad->timer_count = 5;
2514 case CAM_SETTINGS_TIMER_10SEC:
2515 ad->timer_count = 10;
2518 case CAM_SETTINGS_TIMER_OFF:
2520 CAM_UI_LOG("can not reach here");
2524 cam_toolbar_update(ad);
2526 cam_app_timer_update_count(ad);
2528 if (ad->timer_timer != NULL) {
2529 ecore_timer_del(ad->timer_timer);
2530 ad->timer_timer = NULL;
2533 ad->timer_timer = ecore_timer_add(1.0, cam_app_timer_cb, ad);
2536 void cam_app_cancel_timer(void *data)
2538 struct appdata *ad = (struct appdata *)data;
2540 ad->timer_activated = FALSE;
2542 REMOVE_TIMER(ad->timer_timer);
2543 DEL_EVAS_OBJECT(ad->timer_icon_edje);
2545 cam_toolbar_update(ad);
2548 static void _popup_cancel_cb(void *data, Evas_Object *obj, void *event_info)
2550 /* cam_app_free_blocking_popup(); */
2551 Evas_Object *notify = (Evas_Object *)data;
2552 cam_popup_remove(notify);
2553 /* evas_object_del(notify); */
2556 gboolean cam_image_capture_start(void *data)
2558 struct appdata *ad = (struct appdata *)data;
2559 CamAppData *camapp = NULL;
2561 gboolean ret = TRUE;
2563 debug_fenter(LOG_UI);
2565 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2566 camapp = ad->camapp_handle;
2567 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2568 CAM_TA_ACUM_ITEM_BEGIN(" cam_image_capture_start", 0);
2570 remain = cam_system_get_still_count_by_resolution(ad);
2572 cam_set_orient_value(ad);
2574 switch (camapp->shooting_mode) {
2576 case CAM_SINGLE_MODE:
2577 ret = cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad);
2578 #ifdef USE_CAMERA_APP_SHUTTER_SOUND
2579 cam_sound_play(camapp->shutter_sound, ad);
2580 #ifdef ENABLE_CAPTURE_ANIMATION
2581 cam_app_shutter_screen_show(ad);
2587 ret = cam_mm_capture_start(camapp->capture_cb, camapp->capture_completed_cb, (void*)ad); /*capture on recoring */
2591 CAM_TA_ACUM_ITEM_END(" cam_image_capture_start", 0);
2592 CAM_TA_ACUM_ITEM_BEGIN(" capture_start to capturecallback", 0);
2596 static gboolean cam_image_capture_stop(void *data)
2598 struct appdata *ad = (struct appdata *)data;
2599 CamAppData *camapp = NULL;
2601 debug_fenter(LOG_UI);
2602 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2603 camapp = ad->camapp_handle;
2604 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2609 Eina_Bool cam_image_capture_handle_idler(void *itm)
2611 CamIdlerItem *item = (CamIdlerItem *) itm;
2612 struct appdata *ad = NULL;
2613 cam_retvm_if(!item, ECORE_CALLBACK_CANCEL, "CamIdlerItem is NULL");
2615 ad = (struct appdata *)item->data;
2616 cam_retvm_if(!ad, ECORE_CALLBACK_CANCEL, "appdata is NULL");
2618 cam_info(LOG_UI, "call idler[ %p] ", item->idler);
2619 ad->capture_cb_list = g_list_remove(ad->capture_cb_list, item->idler);
2621 ecore_idler_del(item->idler);
2627 #ifdef ENABLE_CAPTURE_ANIMATION
2628 __cam_save_captured_file(ad);
2631 return cam_image_capture_handle(ad);
2633 Eina_Bool cam_capture_on_recording_handle(void *data)
2635 struct appdata *ad = (struct appdata *)data;
2636 cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
2637 CamAppData *camapp = NULL;
2638 camapp = ad->camapp_handle;
2639 cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL,
2640 "camapp_handle is NULL");
2641 gboolean preview_skip = FALSE;
2643 char popup_str[256] = { 0 };
2646 if (camapp->filename) {
2647 #ifdef USE_FILE_REG_THREAD
2649 "#########camapp->filename=%s",
2651 CAM_TA_ACUM_ITEM_BEGIN
2652 (" send signal to register thread",
2654 g_queue_push_tail(ad->file_reg_queue,
2656 (camapp->filename));
2657 pthread_cond_signal(&ad->file_reg_cond);
2658 CAM_TA_ACUM_ITEM_END(" send signal to register thread", 0);
2660 __cam_single_shot_reg_file(camapp->filename);
2663 cam_app_notice_popup(ad,
2664 "Your storage have trouble ",
2665 cam_app_popup_response_cb);
2667 if (!cam_mm_capture_stop (preview_skip, CAM_CAMERA_MODE)) {
2668 cam_critical(LOG_MM, " cam_mm_capture_stop error ");
2670 str = strrchr(camapp->filename, '/');
2671 snprintf(popup_str, sizeof(popup_str), "%s %s", (str+1), _("IDS_CAM_POP_SAVED"));
2672 cam_app_snapshot_popup(ad, popup_str, cam_app_snapshot_popup_response_cb);
2674 return ECORE_CALLBACK_CANCEL;
2677 Eina_Bool cam_image_capture_handle(void *data)
2679 struct appdata *ad = (struct appdata *)data;
2680 CamAppData *camapp = NULL;
2681 /* gboolean last_capture = FALSE; */
2682 gboolean bClosedEyesFoundFlag = FALSE;
2683 gboolean preview_skip = FALSE;
2685 debug_fenter(LOG_UI);
2687 cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
2688 camapp = ad->camapp_handle;
2689 cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL,
2690 "camapp_handle is NULL");
2692 CAM_TA_ACUM_ITEM_END(" captured message to cam_image_capture_handle",
2694 CAM_TA_ACUM_ITEM_BEGIN(" cam_image_capture_handle", 0);
2696 switch (camapp->shooting_mode) {
2697 case CAM_SINGLE_MODE:
2700 cam_app_destroy_progressbar(ad);
2702 if (!bClosedEyesFoundFlag) {
2703 if (camapp->review) {
2704 if (camapp->filename) {
2705 __cam_single_shot_reg_file
2707 /* run media browser. */
2708 cam_app_black_screen_show(ad, -1); /* after capture , to hide preview screen , The hide is in preview_start */
2710 cam_app_notice_popup(ad,
2711 "Your storage have trouble ",
2712 cam_app_popup_response_cb);
2714 if (!cam_mm_capture_stop(TRUE, camapp->camera_mode)) {
2715 cam_critical(LOG_MM, "cam_mm_capture_stop error ");
2717 /* del mouse down event - image viewer bug */
2718 cam_app_mouse_event_deinit(ad);
2719 if (!cam_app_run_image_viewer_ug
2720 (ad, camapp->filename)) {
2721 cam_app_mouse_event_init(ad);
2722 return ECORE_CALLBACK_CANCEL;
2725 if (camapp->filename) {
2726 #ifdef USE_FILE_REG_THREAD
2728 "#########camapp->filename=%s",
2730 CAM_TA_ACUM_ITEM_BEGIN
2731 (" send signal to register thread",
2733 g_queue_push_tail(ad->file_reg_queue,
2735 (camapp->filename));
2736 pthread_cond_signal(&ad->file_reg_cond);
2737 CAM_TA_ACUM_ITEM_END(" send signal to register thread", 0);
2738 cam_app_update_thumbnail();
2741 __cam_single_shot_reg_file(camapp->filename);
2744 cam_app_notice_popup(ad,
2745 "Your storage have trouble ",
2746 cam_app_popup_response_cb);
2749 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
2750 if(!((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "gallery") == 0))) {
2751 preview_skip = TRUE;
2755 if (!cam_mm_capture_stop (preview_skip, camapp->camera_mode)) {
2756 cam_critical(LOG_MM,"cam_mm_capture_stop error ");
2758 CAM_TA_ACUM_ITEM_BEGIN
2759 (" capture stop to preview", 0);
2761 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
2762 if (ad->appcore_state == CAM_APPCORE_PAUSE_STATE) {
2764 return ECORE_CALLBACK_CANCEL;
2766 /* view image select page */
2767 if(!((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "gallery") == 0))) {
2768 cam_app_mouse_event_deinit(ad);
2769 if (!cam_app_run_image_viewer_ug(ad, camapp->filename)) {
2770 cam_app_mouse_event_init(ad);
2771 return ECORE_CALLBACK_CANCEL;
2778 cam_app_toggle_indicator(ad, ad->toolbar_hided);
2779 cam_app_toggle_toolbar(ad, ad->toolbar_hided);
2780 cam_app_get_preview_offset_coordinate(ad);
2785 cam_debug(LOG_UI, " Not matched shooting mode [%d]",
2786 camapp->shooting_mode);
2789 ad->remained_count--;
2790 CAM_TA_ACUM_ITEM_END(" cam_image_capture_handle", 0);
2792 return ECORE_CALLBACK_CANCEL;
2795 gboolean cam_camera_touch_af_press(void *data)
2797 struct appdata *ad = (struct appdata *)data;
2798 CamAppData *camapp = NULL;
2799 debug_fenter(LOG_UI);
2800 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2801 camapp = ad->camapp_handle;
2802 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2803 camapp->focus_mode = 0;
2804 if (ad->af_outside == TRUE) {
2805 DEBUG_TRACE("########## out if af area !!");
2808 if (CAM_CAMERA_MODE == camapp->camera_mode) {
2809 camapp->focus_mode = CAM_FOCUS_MODE_TOUCH_AUTO;
2812 camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS;
2815 cam_app_draw_af_box(ad);
2816 evas_object_show(ad->focus_edje);
2817 cam_ui_effect_utils_set_zoom_effect(ad->focus_edje,
2818 CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE,
2819 CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE,
2820 CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION);
2822 if (!ad->camapp_handle->key_lock) {
2823 ad->camapp_handle->key_lock = TRUE;
2824 if (!cam_camera_key_half_press(ad)) {
2825 DEBUG_TRACE("cam_camera_key_half_press failed");
2828 ad->camapp_handle->key_lock = FALSE;
2834 gboolean cam_camera_key_half_press(void *data)
2836 struct appdata *ad = (struct appdata *)data;
2837 CamAppData *camapp = NULL;
2839 debug_fenter(LOG_UI);
2840 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2841 camapp = ad->camapp_handle;
2842 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2844 REMOVE_TIMER(ad->toolbar_toggle_timer);
2845 #ifndef CAMERA_MACHINE_I686
2846 if (camapp->camera_mode == CAM_CAMERA_MODE
2847 && camapp->shooting_mode != CAM_SELF_MODE)
2849 if (camapp->camera_mode == CAM_CAMERA_MODE
2850 && camapp->shooting_mode != CAM_SELF_MODE
2854 if (camapp->camera_mode == CAM_CAMERA_MODE) {
2855 camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
2856 cam_app_focus_guide_update(ad);
2858 if (!cam_mm_set_af_area(ad->af_x, ad->af_y, ad->camera_focus_w, ad->camera_focus_h)) {
2859 DEBUG_TRACE("cam_mm_set_af_area failed");
2862 DEBUG_TRACE("focus mode = %d", camapp->focus_mode);
2863 if (!cam_mm_start_focusing(camapp->focus_mode)) {
2864 cam_critical(LOG_MM, " cam_mm_start_focusing error " );
2872 gboolean cam_camera_key_half_release(void *data)
2874 struct appdata *ad = (struct appdata *)data;
2875 CamAppData *camapp = NULL;
2877 debug_fenter(LOG_UI);
2879 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2880 camapp = ad->camapp_handle;
2881 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2882 #ifndef CAMERA_MACHINE_I686
2883 if (camapp->camera_mode == CAM_CAMERA_MODE
2884 && camapp->shooting_mode != CAM_SELF_MODE)
2886 if (camapp->camera_mode == CAM_CAMERA_MODE
2887 && camapp->shooting_mode != CAM_SELF_MODE
2891 camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
2892 cam_app_focus_guide_update(ad);
2898 gboolean cam_camera_key_press(void *data)
2900 struct appdata *ad = (struct appdata *)data;
2901 CamAppData *camapp = NULL;
2904 debug_fenter(LOG_UI);
2906 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2907 if (ad->is_rotating)
2908 return FALSE;/*note: now is rotating*/
2909 camapp = ad->camapp_handle;
2910 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2911 CAM_TA_ACUM_ITEM_BEGIN(" cam_camera_key_press", 0);
2913 if (camapp->camera_mode == CAM_CAMERA_MODE) {
2914 state = cam_mm_get_state();
2915 cam_debug(LOG_UI, " state = %d", state);
2917 case CAMERA_STATE_PREVIEW:
2918 case CAMERA_STATE_CAPTURED:
2919 cam_app_toggle_indicator(ad, TRUE);
2920 cam_app_toggle_toolbar(ad, TRUE);
2921 if (ad->timer_activated) {
2922 CAM_UI_LOG("timer activated!");
2923 } else if (camapp->timer >
2924 CAM_SETTINGS_TIMER_OFF) {
2925 CAM_UI_LOG("timer start");
2926 cam_app_start_timer(ad);
2927 } else if (!cam_image_capture_start(ad)) {
2932 case CAMERA_STATE_CAPTURING:
2933 cam_debug(LOG_UI, "capturing state");
2936 case CAMERA_STATE_NONE:
2937 case CAMERA_STATE_CREATED:
2945 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
2946 state = cam_mm_get_state();
2947 cam_debug(LOG_UI, " state = %d", state);
2949 case RECORDER_STATE_READY:
2951 if (ad->timer_activated) {
2952 CAM_UI_LOG("timer activated!");
2953 } else if (camapp->timer >
2954 CAM_SETTINGS_TIMER_OFF) {
2955 CAM_UI_LOG("timer start");
2956 cam_app_start_timer(ad);
2957 } else if (!cam_video_record_start(ad)) {
2962 case RECORDER_STATE_RECORDING:
2964 camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
2965 if (!cam_video_record_stop(ad)) {
2971 case RECORDER_STATE_NONE:
2972 case RECORDER_STATE_CREATED:
2973 case RECORDER_STATE_PAUSED:
2982 cam_critical(LOG_MM, "Unknow camera mode");
2985 CAM_TA_ACUM_ITEM_END(" cam_camera_key_press", 0);
2989 gboolean cam_camera_key_release(void *data)
2991 struct appdata *ad = (struct appdata *)data;
2992 CamAppData *camapp = NULL;
2995 debug_fenter(LOG_UI);
2997 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2998 camapp = ad->camapp_handle;
2999 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
3001 if (camapp->camera_mode == CAM_CAMERA_MODE) {
3003 state = cam_mm_get_state();
3004 cam_debug(LOG_UI, " state = %d", state);
3006 case CAMERA_STATE_CAPTURING:
3007 if (!cam_image_capture_stop(ad)) {
3012 case CAMERA_STATE_PREVIEW:
3013 case CAMERA_STATE_CREATED:
3014 case CAMERA_STATE_NONE:
3015 case CAMERA_STATE_CAPTURED:
3023 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
3025 state = cam_mm_get_state();
3027 case MM_CAMCORDER_STATE_PREPARE:
3028 if (!cam_video_record_start(ad)) {
3032 case MM_CAMCORDER_STATE_RECORDING:
3033 if (!cam_video_record_stop(ad)) {
3038 case MM_CAMCORDER_STATE_NONE:
3039 case MM_CAMCORDER_STATE_NULL:
3040 case MM_CAMCORDER_STATE_READY:
3041 case MM_CAMCORDER_STATE_CAPTURING:
3042 case MM_CAMCORDER_STATE_PAUSED:
3052 cam_critical(LOG_MM, "Unknow camera mode");
3059 Eina_Bool cam_continuous_af_start(void *data)
3062 struct appdata *ad = (struct appdata *)data;
3063 cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
3065 CamAppData *camapp = NULL;
3066 camapp = ad->camapp_handle;
3067 cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL, "camapp_handle is NULL");
3069 DEBUG_TRACE("cam_continuous_af_start");
3072 ad->af_x = (ad->win_width / 2) - ad->preview_offset_x;
3073 ad->af_y = (ad->win_height / 2) - ad->preview_offset_y;
3075 ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
3076 ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
3078 ad->touch_lcd_x = (ad->win_height / 2);
3079 ad->touch_lcd_y = (ad->win_width / 2);
3081 cam_app_draw_af_box(ad);
3082 camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
3083 cam_app_focus_guide_update(ad);
3085 evas_object_show(ad->focus_edje);
3087 camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS;
3089 /* cam_mm_set_af_area include init focusing */
3090 DEBUG_TRACE("start continuous AF");
3091 if (cam_mm_set_af_area(ad->af_x, ad->af_y, ad->camera_focus_w, ad->camera_focus_h)) {
3092 DEBUG_TRACE("cam_mm_set_af_area success!");
3093 /*focus guide update*/
3095 DEBUG_TRACE("cam_mm_set_af_area error!");
3097 if (!cam_mm_start_focusing(camapp->focus_mode)) {
3098 cam_critical(LOG_MM, "cam_mm_start_focusing error");
3100 return ECORE_CALLBACK_CANCEL;
3103 Eina_Bool cam_volume_key_press(void *data)
3105 struct appdata *ad = (struct appdata *)data;
3106 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3108 CamAppData *camapp = NULL;
3109 camapp = ad->camapp_handle;
3110 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
3112 if (ad->cancel_key_press == TRUE)
3113 return ECORE_CALLBACK_CANCEL;
3116 gboolean up_key = ad->up_key;
3117 debug_fenter(LOG_UI);
3119 state = cam_mm_get_state();
3120 cam_debug(LOG_UI, " state = %d", state);
3121 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
3123 case RECORDER_STATE_RECORDING:
3124 case RECORDER_STATE_PAUSED:
3125 case RECORDER_STATE_READY:
3127 if (!camapp->zoom_lock) {
3128 zoom_in(ad, up_key);
3132 case RECORDER_STATE_NONE:
3133 case RECORDER_STATE_CREATED:
3138 } else if(camapp->camera_mode == CAM_CAMERA_MODE) {
3140 case CAMERA_STATE_PREVIEW:
3141 case CAMERA_STATE_CAPTURED:
3143 if (!camapp->zoom_lock) {
3144 zoom_in(ad, up_key);
3148 case CAMERA_STATE_NONE:
3149 case CAMERA_STATE_CREATED:
3150 case CAMERA_STATE_CAPTURING:
3158 return ECORE_CALLBACK_RENEW;
3161 static gboolean cam_power_key_press(void *data)
3163 struct appdata *ad = (struct appdata *)data;
3164 CamAppData *camapp = NULL;
3166 #ifdef ENABLE_CAM_POWER_CONTROL
3167 power_lock_state(POWER_STATE_SCREEN_OFF, 0);
3170 debug_fenter(LOG_UI);
3172 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3173 camapp = ad->camapp_handle;
3174 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
3176 if (ad->mm_state < CAMERA_STATE_PREVIEW) {
3178 } else if (ad->mm_state == CAMERA_STATE_PREVIEW) {
3180 } else if (ad->mm_state > CAMERA_STATE_PREVIEW) {
3181 if (camapp->camera_mode == CAM_CAMERA_MODE) {
3182 DEBUG_TRACE("camera mode");
3184 camapp->rec_stop_type = CAM_REC_STOP_POWER_KEY;
3185 if (!cam_video_record_stop(ad)) {
3186 DEBUG_TRACE("record stop fail");
3193 #ifdef ENABLE_CAM_POWER_CONTROL
3194 power_unlock_state(POWER_STATE_SCREEN_OFF);
3200 static gboolean __cam_end_key_grab_init(void *data)
3202 struct appdata *ad = (struct appdata *)data;
3203 Ecore_X_Display *disp = NULL;
3205 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3206 cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
3208 disp = ecore_x_display_get();
3209 cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
3211 if (utilx_grab_key(disp, ad->main_xid, KEY_END, SHARED_GRAB) == -1) {
3212 cam_critical(LOG_SYS, "%s key grap fail", KEY_END);
3218 gboolean cam_key_grab_init(void *data)
3220 struct appdata *ad = (struct appdata *)data;
3221 Ecore_X_Display *disp = NULL;
3223 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3224 cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
3231 DEBUG_TRACE("key_grab_init############################");
3233 ad->cancel_key_press = FALSE;
3235 disp = ecore_x_display_get();
3236 cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
3239 if (utilx_grab_key(disp, ad->main_xid, KEY_VOLUMEUP, TOP_POSITION_GRAB) != success) {
3240 cam_critical(LOG_SYS, "%s key grap fail", KEY_VOLUMEUP);
3243 if (utilx_grab_key(disp, ad->main_xid, KEY_VOLUMEDOWN, TOP_POSITION_GRAB) != success) {
3244 cam_critical(LOG_SYS, "%s key grap fail", KEY_VOLUMEDOWN);
3248 if (utilx_grab_key(disp, ad->main_xid, KEY_CAMERA, TOP_POSITION_GRAB) != success) {
3249 cam_critical(LOG_SYS, "%s key grap fail", KEY_CAMERA);
3252 if (utilx_grab_key(disp, ad->main_xid, KEY_CONFIG, TOP_POSITION_GRAB) != success) {
3253 cam_critical(LOG_SYS, "%s key grap fail", KEY_CONFIG);
3257 if (utilx_grab_key(disp, ad->main_xid, KEY_POWER, SHARED_GRAB) != success) {
3258 cam_critical(LOG_SYS, "%s key grap fail", KEY_POWER);
3263 if (utilx_grab_key(disp, ad->main_xid, KEY_SEND, SHARED_GRAB) != success) {
3264 cam_critical(LOG_SYS, "%s key grap fail", KEY_SEND);
3267 if (utilx_grab_key(disp, ad->main_xid, KEY_END, SHARED_GRAB) != success) {
3268 cam_critical(LOG_SYS, "%s key grap fail", KEY_END);
3272 ad->isGrabed = TRUE;
3276 gboolean cam_key_grab_deinit(void *data)
3278 struct appdata *ad = (struct appdata *)data;
3279 Ecore_X_Display *disp = NULL;
3283 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3284 cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
3288 DEBUG_TRACE("key_grab_deinit############################");
3290 disp = ecore_x_display_get();
3291 cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
3294 if (utilx_ungrab_key(disp, ad->main_xid, KEY_VOLUMEUP) != success){
3295 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_VOLUMEUP);
3298 if (utilx_ungrab_key(disp, ad->main_xid, KEY_VOLUMEDOWN) != success){
3299 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_VOLUMEDOWN);
3304 if (utilx_ungrab_key(disp, ad->main_xid, KEY_CAMERA) != success){
3305 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_CAMERA);
3309 if (utilx_ungrab_key(disp, ad->main_xid, KEY_CONFIG) != success){
3310 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_CONFIG);
3315 if (utilx_ungrab_key(disp, ad->main_xid, KEY_POWER) != success){
3316 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_POWER);
3319 if (utilx_ungrab_key(disp, ad->main_xid, KEY_PAUSE) != success){
3320 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_PAUSE);
3325 if (utilx_ungrab_key(disp, ad->main_xid, KEY_SEND) != success){
3326 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_SEND);
3329 if (utilx_ungrab_key(disp, ad->main_xid, KEY_SELECT) != success){
3330 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_SELECT);
3333 if (utilx_ungrab_key(disp, ad->main_xid, KEY_END) != success){
3334 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_END);
3338 ad->isGrabed = FALSE;
3342 gboolean cam_app_mouse_event_init(void *data)
3344 struct appdata *ad = (struct appdata *)data;
3346 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3349 #if ENABLE_MOUSE_CONTROL
3350 if (ad->mouse_down == NULL) {
3352 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
3353 cam_mouse_button_down, ad);
3356 if (ad->mouse_up == NULL) {
3358 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
3359 cam_mouse_button_up, ad);
3363 if (ad->mouse_move == NULL) {
3365 ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
3366 cam_mouse_move, ad);
3374 gboolean cam_app_mouse_event_deinit(void *data)
3376 struct appdata *ad = (struct appdata *)data;
3378 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3381 if (ad->mouse_down) {
3382 ecore_event_handler_del(ad->mouse_down);
3383 ad->mouse_down = NULL;
3386 ecore_event_handler_del(ad->mouse_up);
3387 ad->mouse_up = NULL;
3389 if (ad->mouse_move) {
3390 ecore_event_handler_del(ad->mouse_move);
3391 ad->mouse_move = NULL;
3397 gboolean cam_app_key_event_init(void *data)
3399 struct appdata *ad = (struct appdata *)data;
3401 DEBUG_TRACE("cam_app_key_event_init");
3404 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3407 if (ad->key_down == NULL) {
3409 ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
3410 cam_hard_key_down, ad);
3412 if (ad->key_up == NULL) {
3414 ecore_event_handler_add(ECORE_EVENT_KEY_UP, cam_hard_key_up,
3417 #if ENABLE_MOUSE_CONTROL
3418 if (ad->mouse_down == NULL) {
3420 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
3421 cam_mouse_button_down, ad);
3424 if (ad->mouse_up == NULL) {
3426 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
3427 cam_mouse_button_up, ad);
3431 if (ad->mouse_move == NULL) {
3433 ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
3434 cam_mouse_move, ad);
3442 gboolean cam_app_key_event_deinit(void *data)
3444 struct appdata *ad = (struct appdata *)data;
3446 DEBUG_TRACE("cam_app_key_event_deinit");
3449 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3453 ecore_event_handler_del(ad->key_down);
3454 ad->key_down = NULL;
3457 ecore_event_handler_del(ad->key_up);
3460 if (ad->mouse_down) {
3461 ecore_event_handler_del(ad->mouse_down);
3462 ad->mouse_down = NULL;
3465 ecore_event_handler_del(ad->mouse_up);
3466 ad->mouse_up = NULL;
3468 if (ad->mouse_move) {
3469 ecore_event_handler_del(ad->mouse_move);
3470 ad->mouse_move = NULL;
3476 Eina_Bool cam_hard_key_down(void *data, int type, void *event_info)
3478 struct appdata *ad = (struct appdata *)data;
3479 CamAppData *camapp = NULL;
3482 Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info;
3484 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
3486 cam_debug(LOG_UI, "Key name : %s", kd->keyname);
3488 camapp = ad->camapp_handle;
3489 cam_retvm_if(camapp == NULL, -1, "camapp_handle is NULL");
3491 ad->show_menu = FALSE;
3492 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3493 cam_toolbar_and_setting_popup_del(ad);
3495 cam_app_timeout_checker_update();
3497 /* Camera key Press */
3498 if (0 == strcmp(kd->keyname, KEY_CANCEL)) {
3499 ad->cancel_key_press = TRUE;
3501 if (0 == strcmp(kd->keyname, KEY_CONFIG)) { /* camera key - full */
3502 if (!camapp->key_lock) {
3503 camapp->key_lock = TRUE;
3504 CAM_TA_ACUM_ITEM_BEGIN("Total capture time", 0);
3505 CAM_TA_ACUM_ITEM_BEGIN
3506 (" camera key to capture start", 0);
3507 if (!cam_camera_key_press(ad)) {
3509 "cam_camera_key_press failed");
3511 camapp->key_lock = FALSE;
3514 /* Camera key HALF press */
3515 else if (0 == strcmp(kd->keyname, KEY_CAMERA)) { /* camera key - half */
3516 if (!camapp->key_lock) {
3517 camapp->key_lock = TRUE;
3518 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3519 ad->show_menu = FALSE;
3520 cam_toolbar_and_setting_popup_del(ad);
3522 if (!cam_camera_key_half_press(ad)) {
3524 "cam_camera_key_half_press failed");
3526 camapp->key_lock = FALSE;
3528 } else if (0 == strcmp(kd->keyname, KEY_VOLUMEUP)) {
3529 if (!camapp->key_lock) {
3530 camapp->key_lock = TRUE;
3532 cam_add_longpress_key_timer(ad);
3533 camapp->key_lock = FALSE;
3535 } else if (0 == strcmp(kd->keyname, KEY_VOLUMEDOWN)) {
3536 if (!camapp->key_lock) {
3537 camapp->key_lock = TRUE;
3539 cam_add_longpress_key_timer(ad);
3540 camapp->key_lock = FALSE;
3542 } else if (0 == strcmp(kd->keyname, KEY_SELECT)) {
3544 } else if ((0 == strcmp(kd->keyname, KEY_SELECT))
3545 && ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
3546 if (!camapp->key_lock) {
3547 camapp->key_lock = TRUE;
3550 #ifdef ENABLE_CAM_POWER_CONTROL
3551 else if (0 == strcmp(kd->keyname, KEY_POWER)) {
3552 if (!camapp->key_lock) {
3553 camapp->key_lock = TRUE;
3554 power_unlock_state(POWER_STATE_NORMAL);
3555 cam_power_key_press(ad);
3556 camapp->key_lock = FALSE;
3564 Eina_Bool cam_hard_key_up(void *data, int type, void *event_info)
3566 struct appdata *ad = (struct appdata *)data;
3567 CamAppData *camapp = NULL;
3569 Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info;
3570 cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
3572 cam_debug(LOG_UI, "Key name : %s", kd->keyname);
3574 camapp = ad->camapp_handle;
3575 cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL);
3577 cam_app_timeout_checker_update();
3579 if (0 == strcmp(kd->keyname, KEY_CANCEL)) {
3580 ad->cancel_key_press = FALSE;
3583 if(ad->cancel_key_press == TRUE) {
3584 if (ad->longpress_timer) { /*volume key long press */
3585 cam_del_longpress_key_timer(ad);
3586 cam_volume_key_press(ad);
3592 if (0 == strcmp(kd->keyname, KEY_CONFIG)) { /* camera key - full */
3593 if (!camapp->key_lock) {
3594 camapp->key_lock = TRUE;
3595 if (!cam_camera_key_release(ad)) {
3597 "cam_camera_key_release failed");
3599 camapp->key_lock = FALSE;
3601 } else if (0 == strcmp(kd->keyname, KEY_CAMERA)) { /* camera key - half */
3602 if (!camapp->key_lock) {
3603 camapp->key_lock = TRUE;
3604 if (!cam_camera_key_half_release(ad)) {
3606 "cam_camera_key_release failed");
3608 camapp->key_lock = FALSE;
3610 } else if (0 == strcmp(kd->keyname, KEY_VOLUMEUP)
3611 || 0 == strcmp(kd->keyname, KEY_VOLUMEDOWN)) {
3612 if (!camapp->key_lock) {
3613 camapp->key_lock = TRUE;
3614 cam_del_longpress_key_timer(ad);
3615 cam_volume_key_press(ad);
3616 camapp->key_lock = FALSE;
3618 } else if (0 == strcmp(kd->keyname, KEY_END)
3619 || 0 == strcmp(kd->keyname, KEY_SELECT)) {
3621 DEBUG_TRACE("camapp->key_lock = %d", camapp->key_lock);
3622 if (!camapp->key_lock) {
3623 camapp->key_lock = TRUE;
3625 if ( ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
3628 mm_state = cam_mm_get_state();
3629 ad->appcore_state = CAM_APPCORE_PAUSE_STATE;
3630 if (mm_state < CAMERA_STATE_CAPTURING) {
3636 if (ad->imageviewer_ug) {
3637 DEBUG_TRACE("destory imageviewer");
3638 cam_app_close_ug(ad);
3639 cam_app_start_rotate(ad, false);
3640 cam_app_key_event_deinit(ad);
3641 if(!cam_key_grab_deinit(ad))
3642 DEBUG_TRACE("cam_key_grab_deinit fail");
3643 ad->foucs_out_from_quickview = FALSE;
3645 if ((ad->mm_state == RECORDER_STATE_RECORDING
3646 || ad->mm_state == RECORDER_STATE_PAUSED)
3647 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
3648 camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
3649 ad->recording_commit = ecore_idler_add(cam_video_idler_record_stop, ad);
3650 camapp->key_lock = FALSE;
3652 } else if (ad->mm_state == CAMERA_STATE_CAPTURING
3653 &&camapp->camera_mode == CAM_CAMERA_MODE) {
3654 camapp->key_lock = FALSE;
3656 } else if ((ad->mm_state == RECORDER_STATE_READY
3657 &&camapp->camera_mode == CAM_CAMERA_MODE)
3658 ||(ad->mm_state == CAMERA_STATE_PREVIEW
3659 &&camapp->camera_mode == CAM_CAMCORDER_MODE)) {
3662 if (0 == strcmp(kd->keyname, KEY_END)) {
3663 cam_debug(LOG_UI, " Key up : END Key");
3664 /*cam_app_exit(ad);*/
3665 /*camapp->key_lock = FALSE;*/
3667 camapp->key_lock = FALSE;
3670 cam_debug(LOG_UI, "key lock status = %d",
3678 /*note: focus edje zoom in*/
3679 static void __cam_app_set_focus_zoom_in_effect(void *data)
3681 struct appdata *ad = (struct appdata *)data;
3682 cam_retm_if(ad == NULL, "appdata is NULL");
3684 if (ad->camapp_handle->enable_touch_af == TRUE) {
3685 REMOVE_TIMER(ad->continuous_af_timer);
3686 cam_camera_touch_af_press(ad);
3688 cam_app_draw_af_box(ad);
3689 evas_object_show(ad->focus_edje);
3690 cam_ui_effect_utils_set_zoom_effect(ad->focus_edje,
3691 CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE,
3692 CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE,
3693 CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION);
3697 /*note: focus edje zoom out*/
3698 static void __cam_app_set_focus_zoom_out_effect(void *data)
3700 struct appdata *ad = (struct appdata *)data;
3701 cam_retm_if(ad == NULL, "appdata is NULL");
3703 if (ad->camapp_handle->enable_touch_af == TRUE) {
3704 REMOVE_TIMER(ad->continuous_af_timer);
3705 cam_camera_touch_af_press(ad);
3707 cam_app_draw_af_box(ad);
3708 evas_object_show(ad->focus_edje);
3709 cam_ui_effect_utils_set_zoom_effect(ad->focus_edje,
3710 CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE,
3711 CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE,
3712 CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION);
3716 #if ENABLE_MOUSE_CONTROL
3717 Eina_Bool cam_mouse_button_down(void *data, int type, void *event_info)
3719 struct appdata *ad = (struct appdata *)data;
3720 cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
3721 CamAppData *camapp = ad->camapp_handle;
3722 cam_retvm_if(camapp == NULL, EINA_FALSE, "camapp_handle is NULL");
3725 || ad->setting_ctxpopup
3726 || (ad->toolbar_show_setting_popup == TRUE)
3727 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) {
3728 cam_debug(LOG_UI, "ignore touch event");
3729 ad->af_outside = TRUE;
3732 int toolbar_width = TOOLBAR_W;
3734 Ecore_Event_Mouse_Button *md = (Ecore_Event_Mouse_Button *) event_info;
3735 cam_debug(LOG_UI, "mouse button down[%d, %d]", md->root.x, md->root.y);
3737 ad->touch_lcd_x = md->root.x; /* LCD x */
3738 ad->touch_lcd_y = md->root.y; /* LCD y */
3740 ad->af_outside = FALSE;
3743 if (ad->touch_lcd_y < toolbar_width
3744 || ad->touch_lcd_y > (ad->win_width - toolbar_width)) {
3745 ad->af_outside = TRUE;
3747 ad->af_x = ad->touch_lcd_y - ad->preview_offset_x;
3750 if (ad->touch_lcd_x < ad->preview_offset_y
3751 || ad->touch_lcd_x > (ad->preview_h + ad->preview_offset_y)) {
3752 ad->af_outside = TRUE;
3754 ad->af_y = ad->preview_h - ad->touch_lcd_x;
3757 ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
3758 ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
3760 ("*************************************************************************************");
3761 DEBUG_TRACE("touched lcd x,y=[%d,%d] af x,y=[%d,%d]\n", ad->touch_lcd_x,
3762 ad->touch_lcd_y, ad->af_x, ad->af_y);
3764 ("*************************************************************************************");
3765 if (ad->af_outside == FALSE) {
3766 __cam_app_set_focus_zoom_in_effect((void *)ad);
3768 cam_app_timeout_checker_update();
3769 cam_setting_toolbar_execution_time_checker_update(ad);
3774 Eina_Bool cam_mouse_button_up(void *data, int type, void *event_info)
3776 struct appdata *ad = (struct appdata *)data;
3777 CamAppData *camapp = NULL;
3780 || ad->setting_ctxpopup
3781 || (ad->toolbar_show_setting_popup == TRUE)
3782 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) {
3783 cam_debug(LOG_UI, "ignore touch event");
3784 ad->af_outside = TRUE;
3788 Ecore_Event_Mouse_Button *md = (Ecore_Event_Mouse_Button *) event_info;
3789 if (ad->shutter_move == TRUE) {
3792 double shutter_h_ratio = SHUTTER_H_RATIO;
3793 double shutter_w_ratio = SHUTTER_W_RATIO;
3794 double screen_ratio = SCREEN_RATIO;
3796 y_gap = (double)md->root.y /(double)ad->win_width;
3797 x_gap = (double)md->root.x /(double)ad->win_height;
3799 if (x_gap > (screen_ratio -shutter_h_ratio) || x_gap < shutter_h_ratio) {
3800 if (!cam_camera_key_half_release(ad)) {
3801 DEBUG_TRACE("cam_camera_key_half_release");
3803 } else if (ad->angle == 90 ||ad->angle == 180) {
3804 if (y_gap > shutter_w_ratio) {
3805 if (!cam_camera_key_half_release(ad)) {
3806 DEBUG_TRACE("cam_camera_key_half_release");
3810 if (y_gap < screen_ratio -shutter_w_ratio) {
3811 if (!cam_camera_key_half_release(ad)) {
3812 DEBUG_TRACE("cam_camera_key_half_release");
3818 cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
3819 cam_debug(LOG_UI, "mouse button up[%d, %d]", md->root.x, md->root.y);
3820 if (ad->af_outside == FALSE) {
3821 __cam_app_set_focus_zoom_out_effect((void *)ad);
3823 camapp = ad->camapp_handle;
3824 if (camapp == NULL) {
3825 cam_warning(LOG_UI, "camapp_handle is NULL, maybe not created");
3831 Eina_Bool cam_mouse_move(void *data, int type, void *event_info)
3833 struct appdata *ad = (struct appdata *)data;
3834 CamAppData *camapp = NULL;
3836 Ecore_Event_Mouse_Move *md = (Ecore_Event_Mouse_Move *) event_info;
3838 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
3839 cam_debug(LOG_UI, "mouse move[%d, %d]", md->root.x, md->root.y);
3840 cam_debug(LOG_UI, "mouse move angle[%lf]", md->multi.angle);
3841 cam_debug(LOG_UI, "mouse move pressure[%lf]", md->multi.pressure);
3842 camapp = ad->camapp_handle;
3843 if (camapp == NULL) {
3844 cam_warning(LOG_UI, "camapp_handle is NULL, maybe not created");
3847 cam_app_timeout_checker_update();
3853 void cam_app_set_config_group(gint mode)
3855 cam_debug(LOG_UI, "mode : %d", mode);
3857 if (mode == CAM_CAMERA_MODE) {
3858 cam_config_set_group_name(CAM_CONFIG_TYPE_PREVIEW, "still");
3860 cam_config_set_group_name(CAM_CONFIG_TYPE_PREVIEW, "video");
3863 debug_fleave(LOG_UI);
3868 int cam_app_get_latest_mode(void)
3870 cam_config_set_group_name(CAM_CONFIG_TYPE_COMMON, "common");
3872 cam_config_get_int_by_type(CAM_CONFIG_TYPE_COMMON, "mode",
3875 debug_msg(LOG_UI, "last mode:%d", last_mode);
3879 const gchar *cam_app_get_target_path(void)
3881 CamAppData *camapp = NULL;
3883 camapp = cam_handle_get();
3887 const gchar *default_path = NULL;
3888 switch (camapp->storage) {
3889 case CAM_STORAGE_INTERNAL:
3891 (camapp->camera_mode == CAM_CAMCORDER_MODE) ?
3892 cam_file_get_internal_video_path() :
3893 cam_file_get_internal_image_path();
3895 case CAM_STORAGE_EXTERNAL:
3897 (camapp->camera_mode == CAM_CAMCORDER_MODE) ?
3898 cam_file_get_external_video_path() :
3899 cam_file_get_external_image_path();
3902 cam_critical(LOG_UI, "Unknow storage type : %d",
3907 cam_debug(LOG_UI, "target path : [%s]", default_path);
3908 return default_path;
3910 cam_critical(LOG_UI, "camapp handle is NULL");
3915 gchar *cam_app_get_last_filename(void)
3917 CamAppData *camapp = NULL;
3918 gchar *last_file_path = NULL;
3919 struct appdata *ad = (struct appdata *)cam_appdata_get();
3920 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3922 camapp = cam_handle_get();
3923 cam_retvm_if(camapp == NULL, NULL, "cam_handle is NULL");
3925 last_file_path = cam_file_get_last_file_path(ad, cam_app_get_target_path());
3927 if (last_file_path) {
3928 cam_debug(LOG_UI, "last_file_path : %s", last_file_path);
3930 cam_critical(LOG_UI, "last_file_path is NULL");
3933 return last_file_path;
3936 gchar *cam_app_get_next_filename(void)
3939 CamAppData *camapp = NULL;
3940 gchar *new_filename = NULL;
3941 struct appdata *ad = (struct appdata *)cam_appdata_get();
3942 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3944 camapp = cam_handle_get();
3945 cam_retvm_if(camapp == NULL, NULL, "cam_handle is NULL");
3947 mm_state = cam_mm_get_state();
3949 if (mm_state == RECORDER_STATE_RECORDING
3950 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
3951 new_filename = cam_file_get_next_filename(cam_app_get_target_path(), INAGE_FILE_NAME, IMAGE_FILE_EXTENSION);
3953 new_filename = cam_file_get_next_filename(cam_app_get_target_path(),
3954 (camapp->camera_mode ==
3958 (camapp->camera_mode ==
3960 IMAGE_FILE_EXTENSION :
3961 VIDEO_FILE_EXTENSION);
3965 cam_debug(LOG_UI, "next filename : %s", new_filename);
3967 cam_critical(LOG_UI, "new_filename is NULL");
3970 return new_filename;
3973 static void __cam_preview_cb(void *stream_buffer, int buffer_size, int width,
3974 int height, camera_pixel_format_e format, void *user_data)
3977 cam_retm_if(user_data == NULL, "data is null");
3978 struct appdata *ad = (struct appdata *)user_data;
3980 CamAppData *camapp = ad->camapp_handle;
3981 cam_retm_if(camapp == NULL, "camapp is null");
3985 static void __cam_state_change_cb(camera_state_e previous, camera_state_e current,
3986 bool by_policy, void *user_data)
3988 struct appdata *ad = NULL;
3989 CamAppData *camapp = NULL;
3990 ad = (struct appdata *)user_data;
3991 cam_retm_if(ad == NULL, "camapp is null");
3992 camapp = ad->camapp_handle;
3993 cam_retm_if(camapp == NULL, "camapp is null");
3994 DEBUG_TRACE("current= %d, previous = %d, ad->enable_mode_change = %d",
3995 current, previous, ad->enable_mode_change);
3996 if (current == CAMERA_STATE_PREVIEW) {
3997 ad->enable_mode_change = TRUE;
3999 ad->enable_mode_change = FALSE;
4001 DEBUG_TRACE("current= %d, previous = %d, ad->enable_mode_change = %d",
4002 current, previous, ad->enable_mode_change);
4003 cam_app_state_manager(previous, current, by_policy);
4007 static void __cam_focus_cb(camera_focus_state_e state, void *user_data) {
4009 struct appdata *ad = NULL;
4010 CamAppData *camapp = NULL;
4012 ad = (struct appdata *)user_data;
4013 cam_retm_if(ad == NULL, "appdata is NULL");
4016 * TODO: perhaps we have to consider: in thread, we should not use any efl api.
4018 * try not to operation the global evas object in asynchronous
4019 * callback or thread. Some bs perhaps caused by this.
4022 /*note: while rotating, return. */
4023 if (ad->is_rotating) return;/*note: while rotating, return. */
4024 camapp = ad->camapp_handle;
4025 cam_retm_if(camapp == NULL, "camapp is NULL");
4028 cam_debug(LOG_MM, " Focus state changed to [%d]", state);
4030 if(ad->appcore_state == CAM_APPCORE_PAUSE_STATE)
4033 if (camapp->camera_mode == CAM_CAMERA_MODE) {
4034 camapp->focus_state = state ;
4035 cam_app_focus_guide_update(ad);
4037 camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
4040 case CAMERA_FOCUS_STATE_ONGOING:
4042 case CAMERA_FOCUS_STATE_FOCUSED:
4043 if (ad->mm_state < CAMERA_STATE_CAPTURING) {
4044 if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF
4045 && camapp->camera_mode == CAM_CAMERA_MODE )
4046 cam_sound_play (CAM_SOUND_EFFECT_AF_OK, ad);
4048 if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO){
4049 REMOVE_TIMER(ad->continuous_af_timer);
4050 DEBUG_TRACE("start caf");
4051 cam_app_focus_guide_create(ad);
4052 cam_app_focus_guide_update(ad);
4053 ad->continuous_af_timer= ecore_timer_add(FOCUS_FOCUSED_TIME_OUT, cam_continuous_af_start, ad);
4057 case CAMERA_FOCUS_STATE_FAILED:
4058 if (ad->mm_state < CAMERA_STATE_CAPTURING) {
4059 if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF
4060 && camapp->camera_mode == CAM_CAMERA_MODE)
4061 cam_sound_play (CAM_SOUND_EFFECT_AF_FAIL, ad);
4063 if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) {
4064 REMOVE_TIMER(ad->continuous_af_timer);
4065 DEBUG_TRACE("start caf");
4066 cam_app_focus_guide_create(ad);
4067 cam_app_focus_guide_update(ad);
4068 ad->continuous_af_timer= ecore_timer_add(FOCUS_FAILED_TIME_OUT, cam_continuous_af_start, ad);
4079 static void __cam_capture_cb(camera_image_data_s* image,
4080 camera_image_data_s* postview,
4081 camera_image_data_s* thumbnail,
4084 struct appdata *ad = (struct appdata *)user_data;
4085 cam_retm_if(ad == NULL, "appdata is NULL");
4086 CamAppData *camapp = NULL;
4087 camapp = ad->camapp_handle;
4088 cam_retm_if(camapp == NULL, "camapp is NULL");
4090 gchar *filename = NULL;
4092 if ((image->format == CAMERA_PIXEL_FORMAT_YUYV)
4093 || (image->format == CAMERA_PIXEL_FORMAT_NV12)) {
4095 "got raw data - format [%d] data [%p], length [%d], width [%d], height [%d]",
4096 image->format, image->data, image->size, image->width,
4099 /* MMImageJpegEncodeToFile(filename, src->data, src->width,src->height, src->format, 90); */
4100 } else if (image->format == CAMERA_PIXEL_FORMAT_JPEG) {
4102 "got JPEG data - data [%p], length [%d], width [%d], height [%d]",
4103 image->data, image->size, image->width, image->height);
4106 filename = cam_app_get_next_filename();
4107 if (filename == NULL) {
4108 cam_critical(LOG_SYS, " Get next filename FAILED");
4112 fp = fopen(filename, "w+");
4114 cam_critical(LOG_SYS, "FileOPEN error!!");
4117 cam_debug(LOG_SYS, "FileOPEN success");
4118 if (fwrite(image->data, image->size, 1, fp) != 1) {
4119 cam_critical(LOG_SYS, "File write error!!");
4123 /*fsync(fp->_fileno);*/
4124 /*block for increasing formance of shot-to-shot */
4125 cam_debug(LOG_SYS, "File write success");
4128 if (camapp->filename)
4129 free(camapp->filename);
4130 camapp->filename = strdup(filename);
4136 static void __cam_capture_completed_cb(void *user_data)
4138 /* camera_error_e e;*/
4140 struct appdata *ad = NULL;
4141 CamAppData *camapp = NULL;
4143 ad = (struct appdata *)user_data;
4144 camapp = ad->camapp_handle;
4146 if (camapp->camera_mode == CAM_CAMERA_MODE) {
4147 #ifndef ENABLE_CAPTURE_ANIMATION
4149 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
4150 CamIdlerItem *item = NULL;
4151 item = (CamIdlerItem *)
4152 g_malloc(sizeof(CamIdlerItem));
4157 item->data = user_data;
4158 item->idler = ecore_idler_add(cam_image_capture_handle_idler, item);
4161 ad->capture_cb_list = g_list_append(ad->capture_cb_list, item->idler);
4163 cam_info(LOG_UI, "image capture idler add : %p ", item->idler);
4167 if (!cam_app_preview_start(ad)) {
4168 cam_critical(LOG_MM, "cam_app_preview_start failed");
4169 cam_app_notice_popup(ad, "cam_app_preview_start faild ",
4170 cam_app_timeout_notice_response_cb);
4173 }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
4175 DEBUG_TRACE("MM_MESSAGE_CAMCORDER_VIDEO_SNAPSHOT_CAPTURED");
4176 ecore_idler_add(cam_capture_on_recording_handle, ad);
4180 static void __cam_interrupted_cb(camera_policy_e policy, camera_state_e previous, camera_state_e current, void *data)
4182 struct appdata *ad = (struct appdata *)data;
4183 CamAppData *camapp = NULL;
4184 cam_retm_if(ad == NULL, "appdata is NULL");
4185 camapp = ad->camapp_handle;
4186 cam_retm_if(camapp == NULL, "cam_handle is NULL");
4187 DEBUG_TRACE("policy is [%d]",policy);
4189 case CAMERA_POLICY_SOUND:
4191 cam_app_black_screen_show(ad, 2);
4192 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
4195 case CAMERA_POLICY_SECURITY:
4196 cam_app_mdm_syspopup(ad);
4203 static void __rec_interrupted_cb(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *data)
4205 struct appdata *ad = (struct appdata *)data;
4206 CamAppData *camapp = NULL;
4207 cam_retm_if(ad == NULL, "appdata is NULL");
4208 camapp = ad->camapp_handle;
4209 cam_retm_if(camapp == NULL, "cam_handle is NULL");
4210 DEBUG_TRACE("policy is [%d]",policy);
4213 case RECORDER_POLICY_SOUND:
4215 cam_app_black_screen_show(ad, 2);
4216 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
4219 case RECORDER_POLICY_SECURITY:
4220 cam_app_mdm_syspopup(ad);
4227 static void __cam_error_cb(int error, camera_state_e current_state, void *user_data)
4229 struct appdata *ad = NULL;
4230 CamAppData *camapp = NULL;
4232 ad = (struct appdata *)user_data;
4233 cam_retm_if(ad == NULL, "appdata is NULL");
4234 camapp = ad->camapp_handle;
4235 cam_retm_if(camapp == NULL, "camapp is NULL");
4238 state = current_state;
4240 "MM ERROR occurs : code [%x], state [%d]",
4244 case CAMERA_ERROR_DEVICE:
4245 cam_critical(LOG_SYS,
4246 " MM CAMCARORDER ERROR ");
4247 if (state < CAMERA_STATE_CAPTURING) {
4248 cam_app_notice_popup(ad,
4249 _("IDS_CAM_POP_UNABLE_TO_START_CAMERA"),
4250 cam_app_timeout_notice_response_cb);
4252 cam_app_notice_popup(ad,
4253 _("IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"),
4254 cam_app_timeout_notice_response_cb);
4257 case CAMERA_ERROR_INVALID_PARAMETER:
4258 if (state == CAMERA_STATE_CAPTURING) {
4259 cam_app_notice_popup(ad,
4260 _("IDS_CAM_POP_CAPTURE_ERROR"),
4261 cam_app_timeout_notice_response_cb);
4264 case CAMERA_ERROR_SOUND_POLICY:
4266 DEBUG_TRACE(" MM CAMCARORDER ERROR\n");
4267 cam_app_black_screen_show(ad, 2);
4268 ecore_timer_add(0.01, cam_delay_popup,
4272 case CAMERA_ERROR_INVALID_OPERATION:
4274 DEBUG_TRACE(" Internal error\n");
4275 cam_app_black_screen_show(ad, 2);
4276 ecore_timer_add(0.01, cam_delay_popup,
4280 case CAMERA_ERROR_OUT_OF_MEMORY:
4282 DEBUG_TRACE(" Out of memory\n");
4283 cam_app_black_screen_show(ad, 2);
4284 ecore_timer_add(0.01, cam_delay_popup,
4290 DEBUG_TRACE(" MM CAMCARORDER ERROR error code =%x \n", error);
4291 if (state == CAMERA_STATE_CAPTURING
4292 && camapp->camera_mode == CAM_CAMERA_MODE) {
4293 cam_app_notice_popup(ad, _("IDS_CAM_POP_CAPTURE_ERROR"),
4294 cam_app_capture_error_popup_response_cb);
4302 static void __recorder_state_cb(recorder_state_e previous , recorder_state_e current , bool by_policy, void *user_data)
4304 struct appdata *ad = NULL;
4305 CamAppData *camapp = NULL;
4307 ad = (struct appdata *)user_data;
4308 cam_retm_if(ad == NULL, "appdata is NULL");
4309 camapp = ad->camapp_handle;
4310 cam_retm_if(camapp == NULL, "camapp is NULL");
4311 if (current == RECORDER_STATE_READY) {
4312 ad->enable_mode_change = TRUE;
4314 ad->enable_mode_change = FALSE;
4316 cam_app_state_manager(previous, current, by_policy);
4319 void __recording_status_cb(int elapsed_time, int file_size, void *user_data)
4321 struct appdata *ad = NULL;
4322 CamAppData *camapp = NULL;
4323 ad = (struct appdata *)user_data;
4324 cam_retm_if(ad == NULL, "appdata is NULL");
4325 camapp = ad->camapp_handle;
4326 cam_retm_if(camapp == NULL, "camapp is NULL");
4327 /* update current time */
4331 elapsed = elapsed_time / 1000;
4332 filesize = file_size;
4333 if (camapp->rec_elapsed < elapsed) {
4334 GValue value = { 0, };
4336 cam_debug(LOG_UI, "time updated: %u ", elapsed);
4337 CAM_GVALUE_SET_UINT(value, elapsed);
4338 cam_handle_value_set(ad, PROP_REC_TIME, &value);
4340 if (camapp->rec_filesize < filesize) {
4341 GValue value = { 0, };
4343 cam_debug(LOG_UI, "filesize updated: %u ", filesize);
4344 CAM_GVALUE_SET_UINT(value, filesize);
4345 cam_handle_value_set(ad, PROP_REC_FILE_SIZE, &value);
4349 void __recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
4351 struct appdata *ad = NULL;
4352 CamAppData *camapp = NULL;
4353 ad = (struct appdata *)user_data;
4354 cam_retm_if(ad == NULL, "appdata is NULL");
4355 camapp = ad->camapp_handle;
4356 cam_retm_if(camapp == NULL, "camapp is NULL");
4358 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
4359 camapp->rec_stop_type = type;/*CAM_REC_STOP_TIME_LIMIT;*/
4360 ad->recording_commit =
4361 ecore_idler_add(cam_video_idler_record_stop, ad);
4365 gboolean cam_callback_init(void *data)
4367 struct appdata *ad = (struct appdata *)data;
4368 CamAppData *camapp = NULL;
4370 debug_fenter(LOG_UI);
4372 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4373 camapp = ad->camapp_handle;
4374 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4375 camapp->error_cb = __cam_error_cb;
4376 camapp->focus_cb = __cam_focus_cb;
4377 camapp->state_cb = __cam_state_change_cb;
4378 camapp->preview_cb = __cam_preview_cb;
4379 camapp->capture_completed_cb = __cam_capture_completed_cb;
4380 camapp->cam_interrupted_cb = __cam_interrupted_cb;
4382 camapp->recording_status_cb = __recording_status_cb;
4383 camapp->recording_state_changed_cb = __recorder_state_cb;
4384 camapp->recording_limit_reached_cb = __recording_limit_reached_cb;
4385 camapp->rec_interrupted_cb = __rec_interrupted_cb;
4387 if (camapp->camera_mode == CAM_CAMERA_MODE) {
4388 switch (camapp->shooting_mode) {
4389 case CAM_SINGLE_MODE:
4391 camapp->capture_cb = (camera_capturing_cb)
4398 camapp->capture_cb = __cam_capture_cb;
4402 if (camapp->camera_mode == CAM_CAMERA_MODE) {
4403 /*ret &= cam_mm_recorder_unset_state_changed_cb();*/
4404 ret &= cam_mm_set_preview_cb(camapp->preview_cb, (void*)ad);
4405 ret &= cam_mm_set_focus_changed_cb(camapp->focus_cb, (void*)ad);
4406 ret &= cam_mm_set_state_changed_cb(camapp->state_cb, (void*)ad);
4407 ret &= cam_mm_set_error_cb(camapp->error_cb, (void*)ad);
4408 ret &= cam_mm_set_camera_interrupted_cb(camapp->cam_interrupted_cb, (void*)ad);
4409 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
4410 ret &= cam_mm_unset_state_changed_cb();
4411 /*ret &= cam_mm_unset_preview_cb();*/
4412 /*ret &= cam_mm_unset_state_changed_cb();*/
4413 /*ret &= cam_mm_unset_error_cb();*/
4414 ret &= cam_mm_recorder_set_state_changed_cb(camapp->recording_state_changed_cb, (void*)ad);
4415 ret &= cam_mm_recorder_set_recording_status_cb(camapp->recording_status_cb, (void*)ad);
4416 ret &= cam_mm_recorder_set_recording_limit_reached_cb(camapp->recording_limit_reached_cb, (void*)ad);
4417 ret &= cam_mm_set_recorder_interrupted_cb(camapp->rec_interrupted_cb, (void*)ad);
4424 static void cam_app_close_ug(void *data)
4426 cam_debug(LOG_UI, " ");
4427 struct appdata *ad = (struct appdata *)data;
4430 cam_info(LOG_UI, "ad->imageviewer_ug : %p", ad->imageviewer_ug);
4431 if (ad->imageviewer_ug) {
4432 ug_destroy(ad->imageviewer_ug);
4433 ad->imageviewer_ug = NULL;
4435 cam_file_init(NULL);
4439 static void __ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
4441 cam_debug(LOG_UI, " ");
4443 struct appdata *ad = (struct appdata *)priv;
4449 base = ug_get_layout(ug);
4454 case UG_MODE_FULLVIEW:
4455 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
4457 elm_win_resize_object_add(ad->win_main, base);
4458 evas_object_show(base);
4465 void __ug_result_cb(ui_gadget_h ug, service_h result, void *priv)
4468 cam_debug(LOG_UI, " ");
4470 struct appdata *ad = (struct appdata *)priv;
4473 CamAppData *camapp = NULL;
4475 cam_retm_if(ad == NULL, "appdata is NULL");
4476 camapp = ad->camapp_handle;
4477 cam_retm_if(camapp == NULL, "cam_handle is NULL");
4479 if (ad->imageviewer_ug) {
4480 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
4481 if (result == NULL) {
4482 ad->path_in_return = false;
4486 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
4488 service_create(&reply);
4490 service_get_extra_data(result, "crop_image_path", &val);
4491 service_add_extra_data(reply, "crop_image_path", val);
4492 service_get_extra_data(result, "image_path", &val);
4493 service_add_extra_data(reply, "image_path", val);
4495 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_SUCCEEDED);
4496 service_destroy(reply);
4498 ad->path_in_return = true;
4501 /* get result value. */
4502 service_get_extra_data(result, "Result", &val);
4504 if (strcmp(val, "Ok") == 0) {
4505 ad->path_in_return = true;
4508 else if (strcmp(val, "Cancel") == 0) {
4509 ad->path_in_return = false;
4516 void __ug_destroy_cb(ui_gadget_h ug, void *priv)
4518 cam_debug(LOG_UI, " ");
4523 struct appdata *ad = (struct appdata *)priv;
4525 cam_retm_if(ad == NULL, "appdata is NULL");
4526 ad->ug_is_deleting_process = TRUE;
4528 cam_app_timeout_checker_init(ad);
4530 /* add mouse down event - image viewer bug */
4531 if (ad->black_screen) {
4532 DEL_EVAS_OBJECT(ad->black_screen);
4533 ad->black_screen = NULL;
4536 if (ad->imageviewer_ug) {
4537 ug_destroy(ad->imageviewer_ug);
4538 ad->imageviewer_ug = NULL;
4541 elm_win_indicator_mode_set(ad->win_main, 0);
4542 cam_app_start_rotate(ad, false);
4544 ecore_idler_add(__ug_destory_postprocessing, ad);
4549 Eina_Bool __ug_destory_postprocessing(void *data)
4551 struct appdata *ad = data;
4552 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4553 ad->ug_is_deleting_process = TRUE;
4554 CamAppData *camapp = NULL;
4555 camapp = ad->camapp_handle;
4556 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4558 cam_app_mouse_event_init(ad);
4560 show_toolbar_edje(ad);
4562 if (!cam_file_check_exists(camapp->filename)) {
4563 free(camapp->filename);
4564 camapp->filename = NULL;
4566 if (!cam_app_preview_start(ad)) {
4567 cam_app_notice_popup(ad,
4568 "PREVIEW START FAIL !!",
4569 cam_app_timeout_notice_response_cb);
4572 if (!cam_key_grab_init(ad))
4573 DEBUG_TRACE("cam_key_grab_init fail");
4574 cam_app_key_event_init(ad);
4575 /* update thumbnail to quickview after return from image viewer */
4576 cam_app_update_quickview_icon(ad);
4577 cam_file_init(NULL);
4578 ad->ug_is_deleting_process = FALSE;
4579 return ECORE_CALLBACK_CANCEL;
4584 gboolean cam_app_run_image_viewer_ug(void *data, char *file_path)
4586 DEBUG_TRACE("START");
4588 struct appdata *ad = (struct appdata *)data;
4590 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4591 cam_retvm_if(file_path == NULL, FALSE, "file_path is NULL");
4593 if (ad->ug_is_deleting_process) /*NOTE:before old ug is not deleted completely, should not create new ug*/
4596 cam_debug(LOG_UI, " ");
4597 cam_debug(LOG_UI, "path :%s", file_path);
4599 if (ad->imageviewer_ug) {
4600 return FALSE;/*NOTE: ug is login, not create ug again.*/
4605 opt = UG_OPT_INDICATOR_LANDSCAPE_ONLY | UG_OPT_INDICATOR_DISABLE;
4606 UG_INIT_EFL(ad->win_main, opt);
4608 struct ug_cbs cbs = { 0, };
4610 cbs.layout_cb = __ug_layout_cb;
4611 cbs.result_cb = __ug_result_cb;
4612 cbs.destroy_cb = __ug_destroy_cb;
4613 cbs.priv = (void *)data;
4616 if (ad->imageviewer_service)
4617 service_destroy(ad->imageviewer_service);
4619 service_create(&ad->imageviewer_service);
4621 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
4622 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
4623 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "SETAS");
4624 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_SET_AS_TYPE, "CallerID");
4626 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "DISPLAY");
4628 } else if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
4629 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "CAMERA");
4631 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_FILE_PATH_KEY_NAME, file_path);
4633 switch (ad->rot_current) {
4634 case APP_DEVICE_ORIENTATION_0:
4635 elm_win_rotation_with_resize_set(ad->win_main, 0);
4637 case APP_DEVICE_ORIENTATION_270:
4638 case APP_DEVICE_ORIENTATION_180:
4640 case APP_DEVICE_ORIENTATION_90:
4641 elm_win_rotation_with_resize_set(ad->win_main, 90);
4647 /* Create UI gadget */
4648 ad->imageviewer_ug =
4649 ug_create(NULL, IMAGE_VIEWER_UG_NAME, UG_MODE_FULLVIEW,
4650 ad->imageviewer_service, &cbs);
4652 if (!ad->imageviewer_ug) {
4653 cam_critical(LOG_SYS, "image viewer UI Gadget create fail...");
4657 if (ad->imageviewer_ug) {
4658 cam_app_key_event_deinit(ad);
4659 if(!cam_key_grab_deinit(ad)){
4660 DEBUG_TRACE("cam_key_grab_deinit fail");
4662 cam_app_preview_stop();
4663 #ifdef ENABLE_CAM_POWER_CONTROL
4664 power_unlock_state(POWER_STATE_NORMAL);
4667 cam_warning(LOG_UI, "Cannot create imageviewer ug");
4668 cam_file_init(NULL);
4678 gboolean cam_app_run_media_browser(void *data, gchar *filename)
4680 cam_debug(LOG_UI, "filename = %s", filename);
4681 struct appdata *ad = (struct appdata *)data;
4682 CamAppData *camapp = NULL;
4685 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4686 camapp = ad->camapp_handle;
4687 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4689 debug_fenter(LOG_UI);
4690 ad->launch_type = CAM_LAUNCH_IS_ALREADY_RUNNING;
4691 DEBUG_TRACE("ad->launch_type = %d", ad->launch_type);
4692 state = cam_mm_get_state();
4693 if (state > CAMERA_STATE_PREVIEW) {
4694 cam_warning(LOG_MM, "Invaild state : %d", state);
4697 toolbar_hide_setting_popup(ad);
4698 ad->foucs_out_from_quickview = FALSE;
4700 /* del mouse down event - image viewer bug */
4701 cam_app_mouse_event_deinit(ad);
4702 if (!cam_app_run_image_viewer_ug(ad, cam_app_get_last_filename())) {
4703 DEBUG_TRACE("cam_app_run_image_viewer_ug failed");
4704 cam_app_mouse_event_init(ad);
4708 if (camapp->thumbnail_name) { /* Some image is deleted from image viewer and galler -> BS */
4709 free(camapp->thumbnail_name);
4710 camapp->thumbnail_name = NULL;
4713 cam_app_timeout_checker_remove();
4717 gboolean cam_app_clear_engine_data(void *data, gboolean release)
4722 gboolean cam_app_check_wide_resolution(int id)
4725 gfloat get_value = (HIWORD(id) * 3.0) / (LOWORD(id) * 4.0);
4726 if (ABS(get_value - 1.0) < CAM_EPSINON
4727 || ABS((gfloat)((HIWORD(id) * 25.0) / (LOWORD(id) * 36.0)) - 1.0) < CAM_EPSINON) {
4735 gboolean cam_app_is_skip_video_stream()
4736 { /*if true , must finish function in stream callback function */
4737 return video_stream_skip_flag;
4740 void cam_app_stop_video_stream()
4742 video_stream_skip_flag = TRUE;
4745 void cam_app_run_video_stream()
4747 video_stream_skip_flag = FALSE;
4750 Eina_Bool _auto_shot_idle_cb(void *data)
4752 debug_fenter(LOG_CAM);
4753 struct appdata *ad = (struct appdata *)data;
4754 CamAppData *camapp = NULL;
4756 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4757 camapp = ad->camapp_handle;
4758 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4760 if (ad->auto_shot_idle) {
4761 ecore_idler_del(ad->auto_shot_idle);
4762 ad->auto_shot_idle = NULL;
4765 debug_fleave(LOG_CAM);
4767 return ECORE_CALLBACK_CANCEL;
4770 gboolean cam_app_create_progressbar(void *data)
4772 struct appdata *ad = (struct appdata *)(data);
4773 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4775 cam_debug(LOG_UI, "");
4777 cam_app_destroy_progressbar(ad);
4779 ad->progressbar = elm_progressbar_add(ad->win_main);
4780 cam_retvm_if(ad->progressbar == NULL, FALSE,
4781 "Cannot create progressbar object\n");
4783 elm_object_style_set(ad->progressbar, "list_progress");
4784 evas_object_size_hint_align_set(ad->progressbar, EVAS_HINT_FILL,
4787 evas_object_show(ad->progressbar);
4792 gboolean cam_app_set_progressbar_value(void *data, double value)
4794 struct appdata *ad = (struct appdata *)(data);
4795 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4797 cam_debug(LOG_UI, " value [%f]", value);
4799 if (ad->progressbar)
4800 elm_progressbar_value_set(ad->progressbar, value);
4805 gboolean cam_app_set_progressbar_text(void *data, const char *text)
4807 struct appdata *ad = (struct appdata *)(data);
4808 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4810 cam_retv_if(text == NULL, FALSE);
4812 if (ad->progressbar_edje)
4813 edje_object_part_text_set(_EDJ(ad->progressbar_edje),
4814 "progressbar_text", text);
4819 gboolean cam_app_destroy_progressbar(void *data)
4821 struct appdata *ad = (struct appdata *)(data);
4822 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4824 cam_debug(LOG_UI, " start");
4825 if (ad->progressbar)
4826 DEL_EVAS_OBJECT(ad->progressbar);
4827 if (ad->progressbar_edje)
4828 DEL_EVAS_OBJECT(ad->progressbar_edje);
4830 cam_debug(LOG_UI, " done");
4837 cam_app_haptic_cb(void *data, Evas_Object *o, const char *emission,
4840 debug_fenter(LOG_UI);
4841 cam_devman_haptic_play(100);
4842 /* haptic_oneshot(100); */
4846 static gboolean cam_app_timeout_checker_update()
4848 struct appdata *ad = NULL;
4849 CamAppData *camapp = NULL;
4850 gdouble c_time = 0.0;
4851 cam_debug(LOG_UI, "");
4853 ad = (struct appdata *)cam_appdata_get();
4854 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4855 camapp = ad->camapp_handle;
4856 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4858 if (ad->timeout_checker) {
4859 c_time = _get_current_time();
4860 ecore_timer_delay(ad->timeout_checker,
4861 (c_time - camapp->last_time));
4862 camapp->last_time = c_time;
4867 void cam_app_zoom_warring_popup(void *data, const char *msg,
4868 void (*func) (void *data, Evas_Object *obj, void *event_info))
4870 struct appdata *ad = (struct appdata *)(data);
4871 ad->zoom_warring_popup = elm_popup_add(ad->win_main);
4872 evas_object_size_hint_weight_set(ad->zoom_warring_popup, EVAS_HINT_EXPAND,
4874 elm_object_text_set(ad->zoom_warring_popup, msg);
4875 elm_popup_timeout_set(ad->zoom_warring_popup, 3.0);
4876 evas_object_smart_callback_add(ad->zoom_warring_popup, "timeout", func, data);
4877 evas_object_show(ad->zoom_warring_popup);
4879 void cam_app_mdm_syspopup(void *data){
4880 struct appdata *ad = (struct appdata *)(data);
4881 cam_retm_if(ad == NULL, " appdata is NULL");
4883 b = bundle_create();
4885 bundle_add(b, "_SYSPOPUP_CONTENT_", _("IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"));
4886 syspopup_launch("mdm-syspopup", b);
4889 ecore_idler_add(cam_app_stop,ad);
4894 void cam_app_notice_popup(void *data, const char *msg,
4895 void (*func) (void *data,
4900 struct appdata *ad = (struct appdata *)(data);
4901 cam_retm_if(ad == NULL, " appdata is NULL");
4902 cam_retm_if(ad->win_main == NULL, " ad->win_main is NULL");
4903 Evas_Object *popup = NULL;
4904 popup = elm_popup_add(ad->win_main);
4907 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
4909 elm_object_text_set(popup, msg);
4910 /*elm_popup_mode_set(popup, ELM_POPUP_TYPE_ALERT);*/
4911 elm_popup_timeout_set(popup, 3.0);
4912 evas_object_smart_callback_add(popup, "timeout", func, data);
4913 ad->waring_popup = popup;
4914 evas_object_show(popup);
4916 void cam_app_snapshot_popup(void *data, const char *msg,
4917 void (*func) (void *data, Evas_Object *obj, void *event_info))
4919 struct appdata *ad = (struct appdata *)(data);
4920 cam_retm_if(ad == NULL, " appdata is NULL");
4921 cam_retm_if(ad->win_main == NULL, " ad->win_main is NULL");
4922 Evas_Object *popup = NULL;
4923 popup = elm_popup_add(ad->win_main);
4926 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
4928 elm_object_text_set(popup, msg);
4929 /*elm_popup_mode_set(popup, ELM_POPUP_TYPE_ALERT);*/
4930 elm_popup_timeout_set(popup, 1.5);
4931 evas_object_smart_callback_add(popup, "timeout", func, data);
4932 ad->is_showing_snapshot_popup = TRUE; /*result popup is showing*/
4933 DEBUG_TRACE("ad->is_showing_snapshot_popup = TRUE");
4934 evas_object_show(popup);
4937 static void cam_app_capture_error_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
4939 struct appdata *ad = (struct appdata *)cam_appdata_get();
4940 cam_retm_if(ad == NULL, " appdata is NULL");
4941 CamAppData *camapp = ad->camapp_handle;
4942 cam_retm_if(camapp == NULL, " camapp is NULL");
4944 evas_object_del(obj);
4946 cam_mm_capture_stop(FALSE, camapp->camera_mode);
4950 void cam_app_timeout_notice_response_cb(void *data, Evas_Object *obj,
4953 struct appdata *ad = (struct appdata *)cam_appdata_get();
4954 cam_retm_if(ad == NULL, " appdata is NULL");
4956 evas_object_del(obj);
4962 void cam_close_flash_feature(void *data)
4964 struct appdata *ad = (struct appdata *)data;
4965 cam_retm_if(ad == NULL, " appdata is NULL");
4966 CamAppData *camapp = ad->camapp_handle;
4967 cam_retm_if(camapp == NULL, " appdata is NULL");
4968 if (camapp->flash > CAM_FLASH_OFF) {
4969 GValue value = { 0 };
4970 CAM_GVALUE_SET_INT(value, CAM_FLASH_OFF);
4971 gint tempval = g_value_get_int(&value);
4972 if (!cam_mm_set_flash(tempval)) {
4973 cam_warning(LOG_UI, "flash set fail");
4976 camapp->flash = tempval;
4979 /*lowbattery callback*/
4980 void cam_app_lowbattery_close_flash_cb(void *data, Evas_Object *obj, void *event_info)
4982 struct appdata *ad = (struct appdata *)cam_appdata_get();
4983 cam_retm_if(ad == NULL, " appdata is NULL");
4985 evas_object_del(obj);
4987 cam_close_flash_feature(ad);
4989 cam_toolbar_update(ad);
4992 static void cam_app_auto_close_popup_response_ok_cb(void *data, Evas_Object *obj,
4996 struct appdata *ad = (struct appdata *)cam_appdata_get();
4997 cam_retm_if(ad == NULL, " appdata is NULL");
4999 if (ad->auto_close_timer) {
5000 ecore_timer_del(ad->auto_close_timer);
5001 ad->auto_close_timer = NULL;
5003 cam_app_timeout_checker_remove();
5004 if (ad->auto_close_popup)
5005 evas_object_del(ad->auto_close_popup);
5006 ad->auto_close_popup = NULL;
5011 static void cam_app_auto_close_popup_response_cancel_cb(void *data, Evas_Object *obj,
5015 struct appdata *ad = (struct appdata *)cam_appdata_get();
5016 cam_retm_if(ad == NULL, " appdata is NULL");
5017 if (ad->auto_close_timer) {
5018 ecore_timer_del(ad->auto_close_timer);
5019 ad->auto_close_timer = NULL;
5021 if (ad->auto_close_popup)
5022 evas_object_del(ad->auto_close_popup);
5023 ad->auto_close_popup = NULL;
5024 cam_app_timeout_checker_init(ad);
5027 void cam_app_auto_close_popup(void *data, const char *msg,
5028 void (*func) (void *data, Evas_Object *obj,
5031 struct appdata *ad = (struct appdata *)(data);
5032 cam_retm_if(ad == NULL, " appdata is NULL");
5033 if (ad->auto_close_popup) {
5034 evas_object_del(ad->auto_close_popup);
5035 ad->auto_close_popup = NULL;
5037 ad->auto_close_popup = elm_popup_add(ad->win_main);
5038 if (ad->auto_close_popup == NULL)
5040 evas_object_size_hint_weight_set(ad->auto_close_popup, EVAS_HINT_EXPAND,
5042 elm_popup_timeout_set(ad->auto_close_popup, 9.0);
5043 elm_object_text_set(ad->auto_close_popup, msg);
5044 Evas_Object *btn1 = elm_button_add(ad->auto_close_popup);
5046 evas_object_del(ad->auto_close_popup);
5047 ad->auto_close_popup = NULL;
5050 elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK"));
5051 elm_object_part_content_set(ad->auto_close_popup, "button1", btn1);
5052 evas_object_smart_callback_add(btn1, "clicked", cam_app_auto_close_popup_response_ok_cb, (void*)ad);
5053 Evas_Object *btn2 = elm_button_add(ad->auto_close_popup);
5055 evas_object_del(ad->auto_close_popup);
5056 ad->auto_close_popup = NULL;
5060 elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
5061 elm_object_part_content_set(ad->auto_close_popup, "button2", btn2);
5062 evas_object_smart_callback_add(btn2, "clicked", cam_app_auto_close_popup_response_cancel_cb, (void*)ad);
5064 evas_object_show(ad->auto_close_popup);
5069 static Eina_Bool cam_app_auto_close_task(void *data)
5074 char *msg = _("IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS");
5075 num = 1+ snprintf(NULL, 0, msg, AUTO_CLOSE_COUNT);
5076 DEBUG_TRACE("%d",num);
5077 str = (char *)malloc(num);
5079 memset(str, 0x00, num);
5080 snprintf(str, num, msg, AUTO_CLOSE_COUNT);
5081 DEBUG_TRACE("%s",str);
5082 cam_app_auto_close_popup(data, str, NULL);
5087 return ECORE_CALLBACK_CANCEL;
5091 static Eina_Bool cam_app_auto_close_timer_cb(void *data)
5093 struct appdata *ad = (struct appdata *)(data);
5094 CamAppData *camapp = NULL;
5098 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
5099 camapp = ad->camapp_handle;
5100 cam_retvm_if(camapp == NULL, 0, "cam_handle is NULL");
5102 diff = _get_current_time() - camapp->last_time;
5104 ad->auto_close_count++;
5106 count = count - ad->auto_close_count;
5108 if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
5109 && (diff >= CAMERA_APP_TIMEOUT + 10)) {
5111 "Quit camera application !!! diff time : [%lf]",
5113 cam_app_timeout_checker_remove();
5117 return ECORE_CALLBACK_CANCEL;
5119 cam_debug(LOG_UI, "####diff time : [%lf]", diff);
5125 static Eina_Bool cam_app_timeout_checker_cb(void *data)
5127 struct appdata *ad = (struct appdata *)(data);
5128 CamAppData *camapp = NULL;
5131 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
5132 camapp = ad->camapp_handle;
5133 cam_retvm_if(camapp == NULL, 0, "cam_handle is NULL");
5135 diff = _get_current_time() - camapp->last_time;
5137 if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
5138 && (diff >= CAMERA_APP_TIMEOUT)) {
5140 "auto close popup is closeed after 10 secondes !!! diff time : [%lf]",
5142 ad->auto_close_count = 0;
5143 ad->auto_close_timer =
5144 ecore_timer_add(1, cam_app_auto_close_timer_cb, ad);
5145 // ecore_idler_add(cam_app_auto_close_task, ad);
5148 cam_debug(LOG_UI, "diff time : [%lf]", diff);
5152 gboolean cam_app_timeout_checker_init(void *data)
5154 struct appdata *ad = (struct appdata *)(data);
5155 CamAppData *camapp = NULL;
5157 debug_fenter(LOG_CAM);
5159 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5160 camapp = ad->camapp_handle;
5161 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
5163 if (ad->timeout_checker) {
5164 ecore_timer_del(ad->timeout_checker);
5165 ad->timeout_checker = NULL;
5167 if (ad->auto_close_timer) {
5168 ecore_timer_del(ad->auto_close_timer);
5169 ad->auto_close_timer = NULL;
5171 if (ad->auto_close_popup) {
5172 evas_object_del(ad->auto_close_popup);
5173 ad->auto_close_popup = NULL;
5175 if (ad->timer_timer) {
5176 ad->timer_activated = false;
5177 DEL_EVAS_OBJECT(ad->timer_icon_edje);
5178 REMOVE_TIMER(ad->timer_timer);
5180 ad->timeout_checker =
5181 ecore_timer_add(CAMERA_APP_TIMEOUT / 2, cam_app_timeout_checker_cb,
5183 camapp->last_time = _get_current_time();
5188 gboolean cam_app_timeout_checker_remove(void)
5190 struct appdata *ad = NULL;
5191 CamAppData *camapp = NULL;
5193 debug_fenter(LOG_CAM);
5195 ad = (struct appdata *)cam_appdata_get();
5196 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5197 camapp = ad->camapp_handle;
5198 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
5200 if (ad->timeout_checker) {
5201 ecore_timer_del(ad->timeout_checker);
5202 ad->timeout_checker = NULL;
5204 camapp->last_time = 0;
5209 #ifdef USE_FIFO_THREAD
5210 void *cam_app_FIFO_thread_run(void *data)
5212 struct appdata *ad = (struct appdata *)data;
5216 char buf[128] = { '\0', };
5218 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
5220 if (!access(CAM_FIFO_PATH, F_OK)) {
5221 unlink(CAM_FIFO_PATH);
5224 if (-1 == mkfifo(CAM_FIFO_PATH, 0666)) {
5225 cam_critical(LOG_SYS, " Make CamApp FIFO failed.");
5229 fd = open(CAM_FIFO_PATH, O_RDWR);
5231 cam_critical(LOG_SYS, " Open CamApp FIFO failed.");
5235 cam_debug(LOG_SYS, "Open CamApp FIFO [%s] success", CAM_FIFO_PATH);
5238 memset(buf, 0x00, 128);
5240 cam_debug(LOG_SYS, " Wait CamApp FIFO write...");
5242 int count = read(fd, buf, 128);
5244 cam_debug(LOG_SYS, " read error occur!");
5246 cam_debug(LOG_SYS, " Read from CamApp FIFO : [%s]", buf);
5248 if (!strcmp(buf, CAM_CAPTURE_AUTO_START)) {
5249 cam_debug(LOG_SYS, " #### Start _auto_shot_idle_cb");
5250 _auto_shot_idle_cb(data);
5251 } else if (!strcmp(buf, CAM_FIFO_CMD_EXIT)) {
5255 cam_warning(LOG_SYS, " Skip this...");
5260 unlink(CAM_FIFO_PATH);
5262 cam_debug(LOG_SYS, " Exit CamApp FIFO thread...");
5267 void cam_app_FIFO_thread_exit()
5269 int fd = open(CAM_FIFO_PATH, O_WRONLY);
5270 char *str_write = CAM_FIFO_CMD_EXIT;
5273 cam_critical(LOG_SYS, " Open CammApp FIFO file[%s] failed",
5276 int count = write(fd, str_write, strlen(str_write));
5278 cam_debug(LOG_SYS, " write error occur! ");
5281 cam_debug(LOG_SYS, " Write [%s] to FIFO Done.", str_write);
5287 #ifdef USE_FILE_REG_THREAD
5289 gboolean cam_app_create_file_register_thread(void *data)
5291 struct appdata *ad = (struct appdata *)data;
5294 cam_debug(LOG_SYS, "");
5296 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5298 err = pthread_mutex_init(&(ad->file_reg_mutex), NULL);
5300 cam_critical(LOG_CAM,
5301 "Create Camera file register mutex failed");
5305 err = pthread_cond_init(&(ad->file_reg_cond), NULL);
5307 cam_critical(LOG_CAM,
5308 "Create Camera file register cond failed");
5312 ad->file_reg_queue = g_queue_new();
5313 if (ad->file_reg_queue == NULL) {
5314 cam_critical(LOG_CAM,
5315 "Create Camera file register queue failed");
5320 pthread_create(&(ad->file_reg_thread), NULL,
5321 cam_app_file_register_thread_run, (void *)ad);
5323 cam_critical(LOG_CAM,
5324 "Create Camera file register thread failed");
5331 void *cam_app_file_register_thread_run(void *data)
5333 struct appdata *ad = (struct appdata *)data;
5334 gboolean Exit_loop = FALSE;
5336 cam_debug(LOG_FILE, "");
5338 pthread_mutex_lock(&ad->file_reg_mutex);
5340 while (!Exit_loop) {
5341 cam_debug(LOG_FILE, " wait signal...");
5343 pthread_cond_wait(&ad->file_reg_cond, &ad->file_reg_mutex);
5345 cam_debug(LOG_FILE, " signal received");
5347 while (!g_queue_is_empty(ad->file_reg_queue)) {
5348 char *filename = NULL;
5349 filename = g_queue_pop_head(ad->file_reg_queue);
5351 if (!strcmp(REG_THREAD_EXIT, filename)) {
5356 __cam_single_shot_reg_file(filename);
5358 cam_debug(LOG_FILE, " register done.");
5363 pthread_mutex_unlock(&ad->file_reg_mutex);
5365 pthread_mutex_destroy(&ad->file_reg_mutex);
5366 pthread_cond_destroy(&ad->file_reg_cond);
5368 cam_debug(LOG_SYS, " thread exit...");
5373 void cam_app_file_register_thread_exit(void *data)
5375 struct appdata *ad = (struct appdata *)data;
5376 char *exit_cmd = NULL;
5378 if (ad->file_reg_queue != NULL) {
5379 exit_cmd = strdup(REG_THREAD_EXIT);
5380 g_queue_push_tail(ad->file_reg_queue, exit_cmd);
5381 pthread_cond_signal(&ad->file_reg_cond);
5386 gboolean cam_app_init_with_args(void *data)
5388 struct appdata *ad = (struct appdata *)data;
5389 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5390 cam_retvm_if(ad->camapp_handle == NULL, FALSE, "camapp is NULL");
5392 cam_debug(LOG_SYS, "");
5393 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
5394 ad->camapp_handle->camera_mode = ad->exe_args->cam_mode;
5395 if (CAM_CAMCORDER_MODE == ad->camapp_handle->camera_mode) {
5396 if (ad->exe_args->resolution == CAM_RESOLUTION_QCIF) {
5397 ad->camapp_handle->recording_mode = CAM_RECORD_MMS;
5398 ad->camapp_handle->resolution = CAM_RESOLUTION_QCIF;
5399 ad->camapp_handle->fps = FPS_SLOW;
5400 if (ad->exe_args->size_limit <= 0) {
5401 ad->camapp_handle->size_limit = CAM_REC_MMS_MAX_SIZE;
5403 ad->camapp_handle->size_limit = ad->exe_args->size_limit;
5405 ad->camapp_handle->size_limit_type = CAM_MM_SIZE_LIMIT_TYPE_BYTE;
5407 ad->camapp_handle->recording_mode = CAM_RECORD_NORMAL;
5408 ad->camapp_handle->resolution = ad->exe_args->resolution;
5409 ad->camapp_handle->fps = FPS_DEFAULT;
5412 ad->camapp_handle->shooting_mode = CAM_SINGLE_MODE;
5413 if (ad->exe_args->width <= 0
5414 || ad->exe_args->height <= 0) {
5415 ad->camapp_handle->resolution = CAM_RESOLUTION_VGA;
5417 ad->camapp_handle->resolution = CAM_RESOLUTION(ad->exe_args->width, ad->exe_args->height);
5419 ad->camapp_handle->review = ad->exe_args->review;
5422 cam_debug(LOG_SYS, " camera launch mode is normal.");
5426 cam_debug(LOG_SYS, " done");
5431 Eina_Bool cam_app_focus_guide_create(void *data)
5433 struct appdata *ad = (struct appdata *)data;
5434 cam_retv_if(ad == NULL, EINA_FALSE);
5436 DEL_EVAS_OBJECT(ad->focus_edje);
5439 cam_app_load_edj(ad->layout_main, CAM_UTILS_EDJ_NAME, "focus_image");
5440 if (ad->focus_edje == NULL) {
5441 cam_critical(LOG_UI, "focus_edje load failed ");
5445 evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
5446 DEBUG_TRACE("#######################################\n");
5447 DEBUG_TRACE(" MOVE FOCUS_EDJE : %f, %f", ad->af_start_x, ad->af_start_y);
5448 evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
5449 evas_object_show(ad->focus_edje);
5450 DEBUG_TRACE("#######################################\n");
5452 #ifdef CAMERA_MACHINE_I686
5453 evas_object_hide(ad->focus_edje);
5459 Eina_Bool cam_app_focus_guide_update(void *data)
5461 #ifndef CAMERA_MACHINE_I686
5462 struct appdata *ad = (struct appdata *)data;
5463 cam_retv_if(ad == NULL, EINA_FALSE);
5465 CamAppData *camapp = NULL;
5467 if (ad->focus_edje == NULL) {
5471 /*note: relocation the focus edje*/
5472 evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
5473 evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
5474 evas_object_show(ad->focus_edje);
5476 if (ad->setting_ctxpopup
5477 || (ad->toolbar_show_setting_popup == TRUE)
5478 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) {
5479 cam_debug(LOG_UI, "do not need to update focus");
5480 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
5484 camapp = ad->camapp_handle;
5485 if (camapp == NULL) {
5488 if (ad->mm_state == CAMERA_STATE_CAPTURING
5489 && camapp->camera_mode == CAM_CAMERA_MODE) {
5492 if (ad->mm_state < CAMERA_STATE_PREVIEW || FALSE) {
5493 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
5496 DEBUG_TRACE("focus-state = %d, shooting-mode = %d", camapp->focus_state, camapp->shooting_mode);
5497 if (camapp->recording_mode == CAM_RECORD_SELF
5498 || camapp->recording_mode == CAM_RECORD_SELF_MMS
5499 || camapp->shooting_mode == CAM_SELF_MODE) {
5500 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
5502 char signame[30] = { '\0', };
5503 const char *focus_state_name[4] = {
5510 snprintf(signame, sizeof(signame), "%s,%s", "focus", focus_state_name[camapp->focus_state]);
5512 cam_debug(LOG_UI, "emit signal : %s", signame);
5513 edje_object_signal_emit(_EDJ(ad->focus_edje), signame, "program");
5520 static int cam_app_state_manager(int previous, int current, gboolean by_asm)
5522 struct appdata *ad = NULL;
5523 CamAppData *camapp = NULL;
5525 cam_info(LOG_UI, "STATE_CHANGED : %d -> %d ", previous, current);
5527 ad = (struct appdata *)cam_appdata_get();
5528 cam_retv_if(ad == NULL, FALSE);
5530 camapp = ad->camapp_handle;
5531 cam_retv_if(camapp == NULL, FALSE);
5533 ad->mm_state = current;
5535 if (camapp->camera_mode == CAM_CAMERA_MODE) {
5536 if (current == CAMERA_STATE_PREVIEW) {
5537 if (previous == CAMERA_STATE_CAPTURING) {
5538 CAM_TA_ACUM_ITEM_END(" capture stop to preview", 0);
5539 CAM_TA_ACUM_ITEM_END("Total capture time", 0);
5540 cam_debug(LOG_MM, "capture end, preview start");
5543 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
5544 if (((previous == RECORDER_STATE_RECORDING)
5545 && (current != RECORDER_STATE_PAUSED))
5546 ||((previous == RECORDER_STATE_PAUSED)
5547 && (current != RECORDER_STATE_RECORDING))) {/*finished recording*/
5549 cam_info(LOG_UI, "Set gamma NORMAL");
5550 CamIdlerItem *item = NULL;
5551 item = (CamIdlerItem *)g_malloc(sizeof(CamIdlerItem));
5556 if (camapp->filename)
5557 free(camapp->filename);
5558 cam_mm_get_filename(&camapp->filename,0);/*file size not used,so set to 0*/
5559 cam_info(LOG_UI, "Recorded file name [%s] ", camapp->filename);
5562 item->data = (void*)ad;
5563 item->idler = ecore_idler_add(cam_video_capture_handle_idler, item);
5566 ad->capture_cb_list = g_list_append(ad->capture_cb_list, item->idler);
5568 cam_info(LOG_UI, "video capture idler add : %p ", item->idler);
5578 gboolean cam_app_exit(void *data)
5581 struct appdata *ad = (struct appdata *)data;
5582 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5590 static void cam_mmc_state_change_cb(keynode_t *key, void *data)
5592 struct appdata *ad = (struct appdata *)data;
5593 CamAppData *camapp = NULL;
5594 int mmc_state = vconf_keynode_get_int(key);
5596 cam_retm_if(ad == NULL, "appdata is NULL");
5597 camapp = ad->camapp_handle;
5598 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
5600 cam_debug(LOG_SYS, " start");
5602 if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED
5603 && camapp->storage == CAM_STORAGE_EXTERNAL) {
5604 #ifdef USE_CAM_STORAGE_SETTING
5605 GValue value = { 0 };
5607 int mm_state = cam_mm_get_state();
5609 if ((mm_state == RECORDER_STATE_RECORDING
5610 || mm_state == RECORDER_STATE_PAUSED)
5611 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
5612 cam_video_record_cancel(ad);
5613 cam_app_notice_popup(ad,
5614 _("IDS_CAM_POP_REMOVE_MMC_RECORDING"),
5615 cam_app_popup_response_cb);
5617 #ifndef CAMERA_MACHINE_I686
5618 else if (mm_state != CAMERA_STATE_CAPTURING
5619 &&camapp->camera_mode == CAM_CAMERA_MODE) {
5620 if (cam_app_check_blocking_popup()) {
5621 cam_app_notice_popup(ad,
5622 _("IDS_CAM_POP_MEMORY_CARD_REMOVED"),
5623 cam_app_popup_response_cb);
5628 #ifdef USE_CAM_STORAGE_SETTING
5629 CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
5630 cam_handle_value_set(ad, PROP_STORAGE, &value);
5632 cam_info(LOG_UI, "MMC card is removed");
5637 #ifdef CAMAPP_SIG_HANDLING
5639 * This function registers a user space signal handler for the signal SIGSEGV (Signal #11)
5643 static void cam_app_register_sigsegv(void)
5645 debug_fenter(LOG_SYS);
5647 /* cam_app_act.sa_flags = SA_SIGINFO | SA_NOCLDSTOP; */
5648 cam_app_act.sa_flags = SA_SIGINFO;
5649 cam_app_act.sa_handler = (void *)cam_app_sigsegv_handler;
5650 sigemptyset(&cam_app_act.sa_mask);
5652 #ifdef ENABLE_CHECK_CAM_STATUS
5653 sigaction(SIGALRM, &cam_app_act, &cam_app_act_old); /* register an action with a previous action */
5655 sigaction(SIGABRT, &cam_app_act, &cam_app_act_old);
5656 sigaction(SIGSEGV, &cam_app_act, &cam_app_act_old);
5657 sigaction(SIGILL, &cam_app_act, &cam_app_act_old);
5659 debug_fleave(LOG_SYS);
5663 cam_app_sigsegv_handler(int signal_no, siginfo_t *info, void *context)
5665 debug_fenter(LOG_SYS);
5667 cam_debug(LOG_SYS, "signal_no = %d", signal_no);
5669 if (signal_no == SIGALRM) { /* if alarm, check the camera status. */
5670 #ifdef ENABLE_CHECK_CAM_STATUS
5671 cam_app_check_status();
5672 alarm(CAM_CHECK_STATUS_INTERVAL_TIME);
5676 sigaction(signal_no, &cam_app_act_old, NULL); /* register the previous action */
5680 debug_fleave(LOG_SYS);
5685 gboolean cam_app_black_screen_show(void *data, int mode)
5687 struct appdata *ad = (struct appdata *)data;
5688 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5689 Evas_Coord witdh = 0, height = 0;
5691 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_black_screen_show", 0);
5693 cam_debug(LOG_UI, "~~~~~~~~~~~ mode :%d", mode);
5694 if (ad->black_screen) {
5695 evas_object_del(ad->black_screen);
5696 ad->black_screen = NULL;
5699 cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME,
5701 if (ad->black_screen == NULL) {
5702 cam_critical(LOG_UI, "black_screen load failed ");
5703 CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_show",
5708 evas_object_geometry_get(ad->win_main, NULL, NULL, &witdh, &height);
5709 evas_object_resize(ad->black_screen, witdh, height);
5711 evas_object_raise(ad->black_screen);
5712 evas_object_show(ad->black_screen);
5713 evas_object_show(ad->win_main);
5714 evas_render(ad->evas);
5716 CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_show", 0);
5720 gboolean cam_app_black_screen_hide(void *data)
5722 struct appdata *ad = (struct appdata *)data;
5723 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5724 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_black_screen_hide", 0);
5725 if (ad->black_screen) {
5726 evas_object_del(ad->black_screen);
5727 ad->black_screen = NULL;
5728 edje_file_cache_flush();
5730 /* evas_render(ad->evas); */
5731 CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_hide", 0);
5735 #ifdef ENABLE_CAPTURE_ANIMATION
5737 static void __cam_app_shutter_animation_finished(void *data, Evas_Object *obj,
5738 const char *emission,
5741 cam_debug(LOG_MM, " __cam_app_shutter_animation_finished \n\n ");
5743 struct appdata *ad = (struct appdata *)data;
5745 DEL_EVAS_OBJECT(ad->shutter_screen);
5749 static gboolean cam_app_shutter_screen_show(void *data)
5751 struct appdata *ad = (struct appdata *)data;
5752 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5753 Evas_Coord witdh = 0, height = 0;
5755 char *group_name = "shutter_image";
5757 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_shutter_screen_show", 0);
5759 if (ad->shutter_screen) {
5760 evas_object_del(ad->shutter_screen);
5761 ad->shutter_screen = NULL;
5764 ad->shutter_screen =
5765 cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME,
5767 if (ad->shutter_screen == NULL) {
5768 cam_critical(LOG_UI, "shutter_screen load failed ");
5769 CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0);
5773 evas_object_geometry_get(ad->win_main, NULL, NULL, &witdh, &height);
5774 evas_object_resize(ad->shutter_screen, witdh, height);
5775 /* evas_object_resize(ad->black_screen, ad->win_width, ad->win_height); */
5777 /*evas_object_lower(ad->shutter_screen);*/
5778 evas_object_show(ad->shutter_screen);
5779 evas_object_show(ad->win_main);
5780 /* evas_render(ad->evas); */
5782 edje_object_signal_emit(_EDJ(ad->shutter_screen), "start_animation",
5785 edje_object_signal_callback_add(_EDJ(ad->shutter_screen),
5786 "animation_finish", "*",
5787 __cam_app_shutter_animation_finished,
5790 /* ecore_timer_add(0.1, cam_app_shutter_timer_cb, ad); */
5792 CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0);
5796 #ifdef ENABLE_CHECK_CAM_STATUS
5798 static void cam_app_check_status()
5800 cam_debug(LOG_SYS, "check status");
5802 #endif /* ENABLE_CHECK_CAM_STATUS */
5804 static int cam_app_preview_unlock(void *data)
5806 struct appdata *ad = (struct appdata *)data;
5807 CamAppData *camapp = NULL;
5808 cam_retv_if(ad == NULL, FALSE);
5810 camapp = ad->camapp_handle;
5811 if (camapp == NULL) {
5812 cam_critical(LOG_UI, "handle is NULL");
5816 elm_win_indicator_mode_set(ad->win_main, 0);
5821 static int cam_app_preview_lock(void *data)
5823 struct appdata *ad = (struct appdata *)data;
5826 cam_critical(LOG_UI, "handle is NULL");
5830 evas_object_hide(ad->timer_icon_edje);
5831 REMOVE_TIMER(ad->timer_timer);
5832 ad->timer_activated = false;
5833 DEL_EVAS_OBJECT(ad->timer_icon_edje);
5834 cam_app_timeout_checker_remove();
5835 if(!cam_key_grab_deinit(ad))
5836 DEBUG_TRACE("cam_key_grab_deinit fail");
5837 cam_app_key_event_deinit(ad);
5842 static void cam_idle_lockstate_change_cb(keynode_t *key, void *data)
5844 struct appdata *ad = (struct appdata *)data;
5845 CamAppData *camapp = NULL;
5847 int lock_state = vconf_keynode_get_int(key);
5848 cam_retm_if(ad == NULL, "appdata is NULL");
5849 camapp = ad->camapp_handle;
5850 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
5852 cam_debug(LOG_SYS, "#################IDLE LOCK state changed : %d",
5854 cam_state = cam_mm_get_state();
5858 cam_app_preview_lock(ad);
5859 } else if (!lock_state) {
5861 cam_app_preview_unlock(ad);
5866 static void cam_usb_state_change_cb(keynode_t *key, void *data)
5868 struct appdata *ad = (struct appdata *)data;
5869 CamAppData *camapp = NULL;
5870 int usb_state = vconf_keynode_get_int(key);
5871 int mm_state = cam_mm_get_state();
5873 cam_retm_if(ad == NULL, "appdata is NULL");
5874 camapp = ad->camapp_handle;
5875 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
5877 if (usb_state > VCONFKEY_SYSMAN_USB_DISCONNECTED
5878 && (mm_state == RECORDER_STATE_RECORDING
5879 || mm_state == RECORDER_STATE_PAUSED)
5880 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
5881 camapp->rec_stop_type = CAM_REC_STOP_USB_CONN;
5882 cam_video_record_stop(ad);
5887 #ifndef DISABLE_TOOLBAR_TOGGLE
5888 static Eina_Bool _cam_app_toolbar_toggle_timer(void *data)
5890 struct appdata *ad = (struct appdata *)data;
5894 if (ad->mm_state != CAMERA_STATE_PREVIEW) {
5898 ad->toolbar_hided = TRUE;
5899 cam_app_toggle_indicator(ad, TRUE);
5900 cam_app_toggle_toolbar(ad, TRUE);
5903 if (ad->toolbar_toggle_timer)
5904 ecore_timer_del(ad->toolbar_toggle_timer);
5905 ad->toolbar_toggle_timer = NULL;
5910 void cam_app_toggle_indicator(void *data, gboolean hide)
5912 #ifndef DISABLE_INDICATOR
5913 struct appdata *ad = (struct appdata *)data;
5915 cam_retm_if(ad == NULL, "appdata is NULL");
5917 if (ad->toolbar_toggle_timer) {
5918 REMOVE_TIMER(ad->toolbar_toggle_timer);
5921 indicator_toggle(ad, hide);
5926 void cam_app_toggle_toolbar(void *data, gboolean hide)
5928 #ifndef DISABLE_TOOLBAR_TOGGLE
5929 struct appdata *ad = (struct appdata *)data;
5931 cam_retm_if(ad == NULL, "appdata is NULL");
5933 if (ad->toolbar_toggle_timer) {
5934 REMOVE_TIMER(ad->toolbar_toggle_timer);
5938 /* toolbar_hide_all_popup(ad); */
5939 unload_settings_edje(ad);
5940 hide_toolbar_edje(ad);
5942 show_toolbar_edje(ad);
5949 cam_app_reset_settings_launch_cb(void *data, Evas_Object *obj, void *event_info)
5951 Evas_Object *notify = (Evas_Object *)data;
5952 GValue i_value = { 0, };
5953 GValue b_value = { 0, };
5954 struct appdata *ad = (struct appdata *)cam_appdata_get();
5955 CamAppData *camapp = NULL;
5957 cam_debug(LOG_CAM, "!!!!!!!!!cam_app_reset_settings_launch_cb");
5959 cam_retm_if(ad == NULL, " appdata is NULL");
5960 camapp = ad->camapp_handle;
5961 cam_retm_if(camapp == NULL, " cam_handle is NULL");
5963 cam_popup_remove(notify);
5964 hide_toolbar_edje(ad);
5966 cam_mm_preview_stop(camapp->camera_mode); /* stop preview */
5968 g_value_init(&i_value, G_TYPE_INT);
5969 g_value_init(&b_value, G_TYPE_BOOLEAN);
5973 g_value_set_int(&i_value, AF_DEFAULT);
5974 cam_handle_value_set(ad, PROP_AF_MODE, &i_value);
5977 g_value_set_int(&i_value, TIMER_DEFAULT);
5978 cam_handle_value_set(ad, PROP_TIMER, &i_value);
5981 g_value_set_int(&i_value, EFFECT_DEFAULT);
5982 cam_handle_value_set(ad, PROP_EFFECT, &i_value);
5985 g_value_set_int(&i_value, QUALITY_DEFAULT);
5986 cam_handle_value_set(ad, PROP_IMAGE_QUALITY, &i_value);
5989 g_value_set_int(&i_value, QUALITY_DEFAULT);
5990 cam_handle_value_set(ad, PROP_VIDEO_QUALITY, &i_value);
5993 g_value_set_boolean(&b_value, FALSE);
5994 cam_handle_value_set(ad, PROP_GUIDELINE, &b_value);
5995 #ifdef GUIDE_LINE_ENALBE
5996 settings_guideline_refresh(ad);
5999 g_value_set_boolean(&b_value, FALSE);
6000 cam_handle_value_set(ad, PROP_REVIEW, &b_value);
6003 g_value_set_int(&i_value, SHUTTER_SOUND_DEFAULT);
6004 cam_handle_value_set(ad, PROP_SHUTTER_SOUND, &i_value);
6006 /* audio recording */
6007 g_value_set_boolean(&b_value, TRUE);
6008 cam_handle_value_set(ad, PROP_AUDIO_REC, &b_value);
6011 g_value_set_int(&i_value, STORAGE_DEFAULT);
6012 cam_handle_value_set(ad, PROP_STORAGE, &i_value);
6015 if (camapp->camera_mode == CAM_CAMERA_MODE) {
6016 g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT);
6018 g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT);
6021 cam_handle_value_set(ad, PROP_RESOLUTION, &i_value);
6022 #ifndef DISABLE_INDICATOR
6023 if (ad->indicator_edje) {
6024 /* delete indicator */
6025 evas_object_hide(ad->indicator_edje);
6026 cam_indicator_destory(ad);
6028 cam_indicator_create(ad);
6030 show_toolbar_edje(ad);
6031 cam_app_preview_start(ad);
6034 void cam_app_reset_settings(void *data)
6036 struct appdata *ad = (struct appdata *)data;
6037 cam_retm_if(ad == NULL, "appdata is NULL");
6038 cam_popup_question_add(ad->win_main,
6039 _("IDS_CAM_POP_RESET_CAMERA_SETTINGS"),
6040 dgettext("sys_string", "IDS_COM_SK_YES"),
6041 cam_app_reset_settings_launch_cb,
6042 dgettext("sys_string", "IDS_COM_SK_NO"),
6047 static gboolean __cam_toolbar_new_thumbnail_create(Evas_Object **obj,
6049 Evas_Coord *thumbnail_x,
6050 Evas_Coord *thumbnail_y,
6051 Evas_Coord *thumbnail_w,
6052 Evas_Coord *thumbnail_h)
6054 cam_retv_if(ad == NULL, FALSE);
6055 CamAppData *camapp = ad->camapp_handle;
6056 cam_retv_if(camapp == NULL, FALSE);
6057 cam_retv_if(obj == NULL, FALSE);
6058 cam_retv_if(ad->evas == NULL, FALSE);
6059 cam_retv_if(ad->toolbar.quickview_item.edje == NULL, FALSE);
6061 if(camapp->thumbnail_name == NULL) {
6065 Evas_Object *new_thumbnail_img = elm_icon_add(ad->toolbar.quickview_item.edje);
6066 Evas_Coord x = 0, y = 0, w = 0, h = 0;
6067 Evas_Object *layout = NULL;
6068 Evas_Object *thumbnail_area = NULL;
6070 cam_retv_if(new_thumbnail_img == NULL, FALSE);
6071 elm_icon_file_set(new_thumbnail_img, camapp->thumbnail_name, NULL);
6072 elm_icon_aspect_fixed_set(new_thumbnail_img, EINA_FALSE);
6073 elm_icon_resizable_set(new_thumbnail_img, EINA_TRUE, EINA_TRUE);
6075 layout = elm_layout_edje_get(ad->toolbar.quickview_item.edje);
6076 thumbnail_area = (Evas_Object *) edje_object_part_object_get(layout,"thumbnail_area");
6077 cam_retv_if(thumbnail_area == NULL, FALSE);
6078 evas_object_geometry_get(thumbnail_area, &x, &y, &w, &h);
6084 evas_object_resize(new_thumbnail_img, 0, 0);
6085 evas_object_move(new_thumbnail_img, x, y);
6086 evas_object_show(new_thumbnail_img);
6087 *obj = new_thumbnail_img;
6091 static void cam_app_pipe_handler(void *data, void *buffer, unsigned int nbyte)
6094 struct appdata *ad = (struct appdata *)data;
6095 cam_retm_if(ad == NULL, "appdata is NULL");
6099 /* DO NOT free buffer in here */
6100 /* buffer is freed by ecore */
6102 int main_pipe_type = *((int *)buffer);
6103 DEBUG_TRACE("main_pipe_type %d", main_pipe_type);
6104 switch (main_pipe_type) {
6105 case CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL: {
6106 Evas_Object *new_thumbnail_image = NULL;
6107 Evas_Coord x = 0, y = 0, w = 0, h = 0;
6108 gboolean ret = FALSE;
6109 ret = __cam_toolbar_new_thumbnail_create(&new_thumbnail_image, ad, &x, &y, &w, &h);
6110 if (ret == FALSE || !new_thumbnail_image) {
6111 if (!new_thumbnail_image && ret) {
6112 DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
6116 cam_ui_effect_utils_set_thumbnail_effect(new_thumbnail_image,
6121 CAM_THUMBNAIL_ANTIMATION_EFFECT_DURATION);
6124 case CAM_MAIN_PIPE_OP_TYPE_ROTATE_ANIMATOR: {
6125 ad->is_rotating = TRUE;
6126 cam_ui_rotate_utils_rotate_start(ad, CAM_ROTATE_ICONS_ANTIMATION_DURATION);
6137 void cam_focus_edje_rotate(void *data)
6139 struct appdata *ad = (struct appdata *)data;
6140 cam_retm_if(ad == NULL, "appdata is NULL");
6142 DEL_EVAS_OBJECT(ad->focus_edje);
6143 ad->focus_edje = cam_app_load_edj(ad->layout_main, CAM_UTILS_EDJ_NAME, "focus_image");
6145 cam_retm_if(ad->focus_edje == NULL, "focus_edje load failed");
6147 evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
6148 evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
6149 evas_object_show(ad->focus_edje);
6151 cam_app_draw_af_box(ad);
6152 cam_app_focus_guide_update(ad);
6156 Eina_Bool cam_screen_rotate(void *data)
6158 struct appdata *ad = (struct appdata *)data;
6159 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
6161 /*cam_app_get_preview_offset_coordinate(ad);*/
6164 cam_focus_edje_rotate(ad);
6166 if (ad->timer_icon_edje)
6167 cam_app_timer_icon_rotate(ad);
6169 if (ad->toolbar_edje)
6170 cam_toolbar_rotate(ad);
6172 if (ad->recording_edje)
6173 cam_recording_rotate(ad);
6175 if (ad->indicator_edje) {
6176 cam_debug(LOG_CAM, "indicator_edje rotate start");
6177 cam_indicator_rotate(ad);
6180 if (ad->zoom_edje) {
6181 unload_zoom_edje(ad);
6185 #ifdef GUIDE_LINE_ENALBE
6186 if (ad->guideline_edje)
6187 settings_guideline_refresh(ad);
6190 /*update thumbnail*/
6191 toolbar_update_quickview_thumbnail_no_animation(ad);
6193 if ((ad->show_menu == TRUE ) ||
6194 (ad->show_menu == FALSE && ad->displayed_setting_popup != DISPLAY_NONE_POPUP )
6195 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)
6196 || (ad->toolbar_show_setting_popup == TRUE)) {
6197 /*ecore_idler_add(cam_show_setting_menu, ad);*/
6198 /*note: use timer to delay creating the popup*/
6199 ecore_timer_add(0.1, cam_show_setting_menu, ad);
6201 ad->is_rotating = FALSE;
6204 return ECORE_CALLBACK_CANCEL;
6207 static Ecore_Idler *rotate_delay_idler = NULL;
6208 Eina_Bool cam_app_screen_rotate_idler(void *data)
6210 if (rotate_delay_idler) {
6211 ecore_idler_del(rotate_delay_idler);
6212 rotate_delay_idler = NULL;
6214 struct appdata *ad = (struct appdata *)data;
6215 cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
6216 if (ad->appcore_state == CAM_APPCORE_TERMINATE_STATE
6217 || ad->appcore_state == CAM_APPCORE_PAUSE_STATE) {
6218 ad->is_rotating = FALSE;
6219 return ECORE_CALLBACK_CANCEL;
6221 /*cam_toolbar_rotate(ad);*/
6222 cam_screen_rotate(ad);
6223 return ECORE_CALLBACK_CANCEL;
6226 void cam_app_screen_rotate(void *data)
6228 struct appdata *ad = (struct appdata *)data;
6229 cam_ret_if(ad == NULL);
6230 if (ad->appcore_state == CAM_APPCORE_TERMINATE_STATE
6231 || ad->appcore_state == CAM_APPCORE_PAUSE_STATE) {
6232 ad->is_rotating = FALSE;
6235 CamAppData *cam_handle = ad->camapp_handle;
6236 cam_ret_if(cam_handle == NULL);
6239 if (ad->toolbar_edje) {
6240 rotate_delay_idler = ecore_idler_add(cam_app_screen_rotate_idler, data);
6243 /*cam_app_get_preview_offset_coordinate(ad);*/
6246 gboolean cam_app_get_resolution(int *width, int *height)
6248 cam_retv_if(width == NULL || height == NULL, FALSE);
6250 struct appdata *ad = (struct appdata *)cam_appdata_get();
6251 cam_retvm_if(ad == NULL, FALSE, "ad is NULL");
6254 CamAppData *camapp = ad->camapp_handle;
6256 if (camapp != NULL) {
6257 *width = CAM_RESOLUTION_W(camapp->resolution);
6258 *height = CAM_RESOLUTION_H(camapp->resolution);
6267 gboolean cam_app_reset_resolution(void *data, int width, int height)
6269 struct appdata *ad = (struct appdata *)data;
6270 CamAppData *camapp = NULL;
6272 gboolean need_change_state = FALSE;
6273 gboolean ret = TRUE;
6275 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6276 camapp = ad->camapp_handle;
6277 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6279 state = cam_mm_get_state();
6280 if (state > CAMERA_STATE_CREATED)
6281 need_change_state = TRUE;
6284 " reset resolution = [%d x %d], current state = [%d], need_change_state = [%d]",
6285 width, height, state, need_change_state);
6287 if (camapp->camera_mode == CAM_CAMERA_MODE) {
6289 if (camapp->shooting_mode == CAM_SINGLE_MODE
6290 && (width * height == ZSL_5M_TEST))
6292 if (0) /* camapp->shooting_mode == CAM_SINGLE_MODE && (width*height <= ZSL_MAX_REL)) */
6295 cam_info(LOG_MM, " set real resolution [%dx%d] for zsl",
6298 ret &= cam_mm_set_image_size(width, height);
6300 if (need_change_state) {
6301 ret &= cam_mm_preview_stop(camapp->camera_mode);
6302 ret &= cam_mm_unrealize();
6303 ret &= cam_mm_set_video_size(width, height);
6304 ret &= cam_mm_realize();
6305 ret &= cam_app_preview_start(ad);
6307 ret &= cam_mm_set_video_size(width, height);
6310 if (camapp->shooting_mode == CAM_SELF_MODE) {
6311 if (need_change_state) {
6312 ret &= cam_mm_preview_stop(CAM_CAMERA_MODE);
6313 ret &= cam_mm_set_image_size(width, height);
6314 ret &= cam_mm_set_video_size(width, height);
6315 ret &= cam_app_preview_start(ad);
6317 ret &= cam_mm_set_image_size(width, height);
6318 ret &= cam_mm_set_video_size(width, height);
6321 int p_width = 0; /* preview width */
6322 int p_height = 0; /* preview height */
6324 ret &= cam_mm_get_video_size(&p_width, &p_height);
6325 DEBUG_TRACE("get video size [%d]x[%d]", p_width,
6327 if (p_height == camapp->default_preview_height && (p_width == camapp->default_preview_width || p_width == PREVIEW_WIDE_W)) {
6328 /* assume that last mode is normal capture mode */
6331 int temp_width = camapp->default_preview_width;
6332 int temp_height = camapp->default_preview_height;
6333 gboolean cur_is_wide = FALSE;
6334 gboolean next_is_wide = FALSE;
6336 ret &= cam_mm_get_image_size(&cur_width, &cur_height);
6337 cur_is_wide = cam_utils_check_wide_resolution(cur_width, cur_height);
6339 "current image Resolution[w] : [%d]x[%d][%d]",
6340 cur_width, cur_height,
6343 next_is_wide = cam_utils_check_wide_resolution(width, height);
6345 "next image Resolution[w] : [%d]x[%d][%d]",
6346 width, height, next_is_wide);
6349 temp_width = PREVIEW_WIDE_W;
6351 ret &= cam_mm_set_image_size(width, height);
6353 if ((cur_is_wide != next_is_wide)
6354 || (temp_width != p_width)) {
6355 if (need_change_state) {
6357 ret &= cam_mm_preview_stop(camapp->camera_mode);
6358 ret &= cam_mm_set_video_size(temp_width, temp_height);
6359 ret &= cam_app_preview_start(ad);
6361 ret &= cam_mm_set_video_size(temp_width, temp_height);
6365 /* assume that last mode is zero system lag capture mode */
6366 int temp_width = camapp->default_preview_width;
6367 int temp_height = camapp->default_preview_height;
6368 #ifdef CAMERA_MACHINE_I686
6372 if (cam_utils_check_wide_resolution(width, height))
6373 temp_width = PREVIEW_WIDE_W;
6375 ret &= cam_mm_set_image_size(width, height);
6377 if (need_change_state) {
6378 ret &= cam_mm_preview_stop(camapp->camera_mode);
6379 ret &= cam_mm_set_video_size(temp_width, temp_height);
6380 ret &= cam_app_preview_start(ad);
6383 cam_mm_set_video_size(temp_width, temp_height);
6388 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
6389 if (need_change_state) {
6390 ret &= cam_mm_preview_stop(CAM_CAMCORDER_MODE);
6391 ret &= cam_mm_set_video_size(width, height);
6392 ret &= cam_app_preview_start(ad);
6394 ret &= cam_mm_set_video_size(width, height);
6402 int cam_app_get_aenc_bitrate(void *data)
6404 struct appdata *ad = (struct appdata *)data;
6405 CamAppData *camapp = NULL;
6408 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
6409 camapp = ad->camapp_handle;
6410 cam_retvm_if(camapp == NULL, 0, "camapp is NULL");
6412 if ((camapp->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) {
6413 bitrate = CAM_AUDIO_BITRATE_MMS;
6415 bitrate = CAM_AUDIO_BITRATE_NORMAL;
6421 int cam_app_get_venc_bitrate(void *data, int quality)
6423 struct appdata *ad = (struct appdata *)data;
6424 CamAppData *camapp = NULL;
6427 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
6428 camapp = ad->camapp_handle;
6429 cam_retvm_if(camapp == NULL, 0, "camapp is NULL");
6431 if ((camapp->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) {
6433 case CAM_QUALITY_HIGH:
6434 case CAM_QUALITY_BEST:
6438 case CAM_QUALITY_MEDIUM:
6442 case CAM_QUALITY_LOW:
6447 cam_critical(LOG_MM, "INVALID QUAILTY");
6451 switch (camapp->resolution) {
6452 case CAM_RESOLUTION_FULLHD:
6455 case CAM_QUALITY_HIGH:
6456 case CAM_QUALITY_BEST:
6457 return_val = 8000000;
6460 case CAM_QUALITY_MEDIUM:
6461 return_val = 4000000;
6464 case CAM_QUALITY_LOW:
6465 return_val = 2000000;
6469 cam_critical(LOG_MM, "INVALID QUAILTY");
6474 case CAM_RESOLUTION_HD:
6477 case CAM_QUALITY_HIGH:
6478 case CAM_QUALITY_BEST:
6479 return_val = 10000000;
6482 case CAM_QUALITY_MEDIUM:
6483 return_val = 4000000;
6486 case CAM_QUALITY_LOW:
6487 return_val = 2000000;
6491 cam_critical(LOG_MM, "INVALID QUAILTY");
6497 case CAM_RESOLUTION_WVGA:
6498 case CAM_RESOLUTION_WVGA2:
6501 case CAM_QUALITY_HIGH:
6502 case CAM_QUALITY_BEST:
6503 return_val = 4000000;
6506 case CAM_QUALITY_MEDIUM:
6507 return_val = 2000000;
6510 case CAM_QUALITY_LOW:
6511 return_val = 1000000;
6515 cam_critical(LOG_MM, "INVALID QUAILTY");
6521 case CAM_RESOLUTION_VGA:
6525 case CAM_QUALITY_HIGH:
6526 case CAM_QUALITY_BEST:
6527 return_val = 3000000;
6530 case CAM_QUALITY_MEDIUM:
6531 return_val = 1500000;
6534 case CAM_QUALITY_LOW:
6535 return_val = 500000;
6539 cam_critical(LOG_MM, "INVALID QUAILTY");
6545 case CAM_RESOLUTION_WQVGA:
6548 case CAM_QUALITY_HIGH:
6549 case CAM_QUALITY_BEST:
6550 return_val = 2000000;
6553 case CAM_QUALITY_MEDIUM:
6554 return_val = 1000000;
6557 case CAM_QUALITY_LOW:
6558 return_val = 500000;
6562 cam_critical(LOG_MM, "INVALID QUAILTY");
6568 case CAM_RESOLUTION_QVGA:
6571 case CAM_QUALITY_HIGH:
6572 case CAM_QUALITY_BEST:
6573 return_val = 384000;
6576 case CAM_QUALITY_MEDIUM:
6577 return_val = 192000;
6580 case CAM_QUALITY_LOW:
6585 cam_critical(LOG_MM, "INVALID QUAILTY");
6591 case CAM_RESOLUTION_QCIF:
6594 case CAM_QUALITY_HIGH:
6595 case CAM_QUALITY_BEST:
6596 return_val = 384000;
6599 case CAM_QUALITY_MEDIUM:
6600 return_val = 192000;
6603 case CAM_QUALITY_LOW:
6608 cam_critical(LOG_MM, "INVALID QUAILTY");
6615 cam_critical(LOG_MM, "INVALID QUAILTY");
6620 cam_debug(LOG_MM, "videoenc bit rate = %d, current quilty = %d",
6621 return_val, quality);
6625 gboolean cam_app_set_video_quality(void *data, int quality)
6627 struct appdata *ad = (struct appdata *)data;
6628 CamAppData *camapp = NULL;
6631 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6632 camapp = ad->camapp_handle;
6633 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6635 v_bitrate = cam_app_get_venc_bitrate(ad, quality);
6636 if (v_bitrate > 0) {
6637 cam_mm_set_video_encoder_bitrate(v_bitrate);
6644 /*TODO:temporily define this*/
6645 #define AUDIO_FORMAT_PCM_S16_LE 2
6646 #define AUDIO_CODEC_VORBIS 36
6647 #define VIDEO_CODEC_THEORA 27
6649 gboolean cam_app_set_recording_mode(void *data, int mode)
6651 struct appdata *ad = (struct appdata *)data;
6652 CamAppData *camapp = NULL;
6653 int video_codec = 0, audio_codec = 0, sample_rate = 0;
6654 int format = AUDIO_FORMAT_PCM_S16_LE;
6658 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6659 camapp = ad->camapp_handle;
6660 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6661 DEBUG_TRACE("mode = %d" , mode);
6662 if (mode == CAM_RECORD_MMS || mode == CAM_RECORD_SELF_MMS) {
6663 DEBUG_TRACE("mode = %d" , mode);
6664 video_codec = RECORDER_VIDEO_CODEC_H263;
6665 audio_codec = RECORDER_AUDIO_CODEC_AMR;
6667 format = AUDIO_FORMAT_PCM_S16_LE;
6670 DEBUG_TRACE("mode = %d" , mode);
6671 video_codec = RECORDER_VIDEO_CODEC_MPEG4;
6672 audio_codec = RECORDER_AUDIO_CODEC_AAC;
6673 sample_rate = 44100;
6674 format = AUDIO_FORMAT_PCM_S16_LE;
6677 #ifdef CAMERA_MACHINE_I686
6678 video_codec = VIDEO_CODEC_THEORA;
6679 audio_codec = AUDIO_CODEC_VORBIS;
6682 if (!cam_mm_set_codec(audio_codec, video_codec))
6685 if (!cam_mm_set_audio_source(sample_rate, format, channel))
6688 a_bitrate = cam_app_get_aenc_bitrate(ad);
6689 if (a_bitrate > 0) {
6690 cam_mm_set_audio_encoder_bitrate(a_bitrate);
6695 if (!cam_app_set_video_quality(ad, camapp->video_quality))
6701 gboolean cam_app_set_size_limit(int max_val, int size_limit_type)
6705 switch (size_limit_type) {
6706 case CAM_MM_SIZE_LIMIT_TYPE_BYTE:
6707 ret = cam_mm_set_max_size(max_val);
6711 case CAM_MM_SIZE_LIMIT_TYPE_SECOND:
6712 ret = cam_mm_set_max_size(0);
6717 g_assert_not_reached();
6722 gboolean cam_app_init_attribute(void *data, CamMode mode)
6724 struct appdata *ad = (struct appdata *)data;
6725 CamAppData *camapp = NULL;
6726 gboolean ret = TRUE;
6730 int rotate = CAMERA_ROTATION_270;
6731 int camera_rotate = CAMERA_ROTATION_NONE;
6733 int capture_video_format = -1;
6734 #ifdef TODO_SURRPORT
6735 int recording_video_format = -1;
6738 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6739 camapp = ad->camapp_handle;
6740 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6742 state = cam_mm_get_state();
6744 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
6745 if (state != RECORDER_STATE_CREATED) {
6748 } else if(camapp->camera_mode == CAM_CAMERA_MODE) {
6749 if (state != CAMERA_STATE_CREATED) {
6754 cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
6755 DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
6757 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
6758 /* get proper resolution */
6759 cam_mm_get_image_size(&width, &height);
6760 if (camapp->camera_mode == CAM_CAMERA_MODE) {
6761 camapp->resolution = CAM_RESOLUTION(width, height);
6764 width = CAM_RESOLUTION_W(camapp->resolution);
6765 height = CAM_RESOLUTION_H(camapp->resolution);
6767 #ifdef CAMERA_MACHINE_I686
6772 if (CAM_CAMERA_MODE == mode) {
6773 ret &= cam_mm_set_image_size(width, height);
6774 ret &= cam_mm_set_image_count(camapp->image_count);
6775 #ifdef CAMERA_MACHINE_I686
6776 ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_15);
6777 ret &= cam_mm_set_video_source_format(CAMERA_PIXEL_FORMAT_I420);
6779 ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_AUTO);
6781 cam_mm_get_video_source_format
6783 &capture_video_format);
6784 ret &= cam_mm_set_video_source_format(capture_video_format);
6787 cam_app_set_capture_format_shooting_mode
6788 (camapp->shooting_mode);
6790 } else if (CAM_CAMCORDER_MODE == mode) {
6791 ret &= cam_mm_set_video_profile();
6792 #ifdef CAMERA_MACHINE_I686
6793 ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_15);
6794 ret &= cam_mm_set_video_source_format(CAMERA_PIXEL_FORMAT_I420);
6796 ret &= cam_mm_set_fps(camapp->fps);
6797 ret &= cam_mm_get_video_source_format(NULL, &recording_video_format);
6798 ret &= cam_mm_set_video_source_format(recording_video_format);
6800 ret &= cam_mm_set_audio_recording(camapp->audio_recording);
6801 ret &= cam_app_set_recording_mode(ad, camapp->recording_mode);
6802 DEBUG_TRACE("camapp->size_limit = %d" , camapp->size_limit);
6803 DEBUG_TRACE("camapp->size_limit_type = %d" , camapp->size_limit_type);
6804 ret &= cam_app_set_size_limit(camapp->size_limit, camapp->size_limit_type);
6808 cam_mm_get_video_device(&video_dev);
6809 DEBUG_TRACE("video_dev = %d",video_dev);
6810 if (video_dev == CAM_DEVICE_VGA) {
6812 cam_mm_get_front_cam_display_rotate_value(&value, &rotate);
6814 DEBUG_TRACE("get front camera rotate %d value = %d", rotate, value);
6816 #ifdef TODO_SURRPORT
6817 rotate = CAMERA_ROTATION_270;
6818 #endif /*TODO:if new capi will released, this could be removed,but take care.*/
6821 cam_mm_get_zoom_valid_intrange(&camapp->zoom_min,&camapp->zoom_max);
6822 DEBUG_TRACE("Zoom range [%d - %d]",camapp->zoom_min, camapp->zoom_max);
6824 ret &= cam_mm_set_display_device(CAMERA_DISPLAY_TYPE_X11, GET_DISPLAY(ad->main_xid));
6825 ret &= cam_mm_set_camera_rotate(camera_rotate);
6826 ret &= cam_mm_set_display_rotate(rotate);
6827 ret &= cam_mm_set_display_geometry_method(CAMERA_DISPLAY_MODE_LETTER_BOX);
6828 #ifndef USE_CAMERA_APP_SHUTTER_SOUND
6829 ret &= cam_mm_set_shutter_sound(TRUE);
6831 ret &= cam_app_reset_resolution(ad, width, height);
6832 ret &= cam_mm_set_zoom(camapp->zoom_min);
6833 ret &= cam_mm_set_effect(camapp->effect);
6834 ret &= cam_mm_set_flash(camapp->flash);
6835 if (camapp->af_mode == CAM_FOCUS_AUTO
6836 || camapp->af_mode == CAM_FOCUS_MACRO) {
6837 ret &= cam_mm_set_focus_mode(camapp->af_mode);
6840 ret &= cam_mm_set_tag_enable(TRUE);
6842 ad->enable_mode_change = TRUE;
6843 ad->is_recording = FALSE;
6848 static gboolean cam_app_return_ext_app(void *data, const char *r_file_path)
6850 struct appdata *ad = (struct appdata *)data;
6852 service_create(&reply);
6854 if (ad->aul_service_mime != NULL){
6855 if(r_file_path == NULL){
6856 service_add_extra_data(reply, SERVICE_DATA_SELECTED, "exit");
6857 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_FAILED);
6859 service_add_extra_data(reply, SERVICE_DATA_SELECTED, r_file_path);
6860 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_SUCCEEDED);
6864 service_destroy(reply);
6868 static void cam_app_battery_status_cb(keynode_t *key, void *data)
6870 struct appdata *ad = (struct appdata *)data;
6872 debug_fenter(LOG_UI);
6873 cam_retm_if(ad == NULL, "appdata is NULL");
6875 int low_status = -1;
6877 if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &low_status)) {
6878 cam_debug(LOG_UI, "battery status low = %d", low_status);
6879 if (low_status <= VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
6880 ad->battery_status = LOW_BATTERY_CRITICAL_STATUS;
6881 cam_app_notice_popup(ad,
6882 dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"),
6883 cam_app_timeout_notice_response_cb);
6885 ad->battery_status = NORMAL_BATTERY_STATUS;
6891 /*if torch light vconf key value is changed, this cb is called*/
6892 static void cam_torchlight_update_cb(keynode_t *key, void *data)
6894 struct appdata *ad = (struct appdata *)data;
6895 cam_retm_if(ad == NULL, "appdata is NULL");
6896 int key_value = vconf_keynode_get_bool(key); /* -1: error, 1:True, 0:False */
6897 if (key_value == -1) {
6898 DEBUG_TRACE("vconf_keynode_get_bool failed");
6901 DEBUG_TRACE("VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT is changed to %d", key_value);
6903 /* disable flash icon */
6904 ad->torchlight_on = TRUE;
6907 /* enable flash icon */
6908 ad->torchlight_on = FALSE;
6910 cam_toolbar_update(ad); /*update flash icon*/
6914 static void cam_app_battery_update_cb(keynode_t *key, void *data)
6916 struct appdata *ad = (struct appdata *)data;
6917 CamAppData *camapp = NULL;
6918 char *keyname = NULL;
6920 debug_fenter(LOG_UI);
6922 cam_retm_if(ad == NULL, "appdata is NULL");
6923 camapp = ad->camapp_handle;
6924 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
6926 keyname = vconf_keynode_get_name(key);
6928 if (!strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW)) {
6929 GValue value = { 0 };
6930 gint charging = vconf_keynode_get_int(key);
6931 DEBUG_TRACE("charging = %d", charging);
6932 CAM_GVALUE_SET_INT(value, charging);
6933 cam_handle_value_set(ad, PROP_BATTERY_CHARG, &value);
6935 } else if (!strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CAPACITY)) {
6936 GValue value = { 0 };
6937 int battery_level = vconf_keynode_get_int(key);
6938 CAM_GVALUE_SET_INT(value, battery_level);
6939 cam_handle_value_set(ad, PROP_BATTERY_LEVEL, &value);
6944 Evas_Object *cam_app_create_win(const char *name)
6946 Evas_Object *eo = NULL;
6948 #ifdef CAMERA_MACHINE_I686
6949 ecore_evas_app_comp_sync_set(EINA_FALSE);
6950 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
6951 ecore_evas_app_comp_sync_set(1);
6953 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
6956 elm_win_title_set(eo, name);
6957 elm_win_borderless_set(eo, EINA_TRUE);
6958 ecore_x_window_size_get(ecore_x_window_root_first_get(),
6960 evas_object_resize(eo, w, h);
6967 Evas_Object *cam_screen_load_edj(Evas_Object *parent, const char *file,
6973 eo = elm_layout_add(parent);
6975 r = elm_layout_file_set(eo, file, group);
6977 evas_object_del(eo);
6981 evas_object_size_hint_weight_set(eo,
6985 /* //if(!strcmp((const char *)elm_widget_type_get(parent), "win")) { */
6986 elm_win_resize_object_add(parent, eo);
6993 Evas_Object *cam_app_load_edj(Evas_Object *parent, const char *file,
6996 Evas_Object *eo = NULL;
6999 eo = elm_layout_add(parent);
7001 r = elm_layout_file_set(eo, file, group);
7003 evas_object_del(eo);
7007 evas_object_size_hint_weight_set(eo,
7011 elm_win_resize_object_add(parent, eo);
7012 evas_object_show(eo);
7018 void cam_app_update_ts(Evas_Object *parent, struct text_part *tp)
7021 int size = sizeof(tp) / sizeof(tp[0]);
7022 Evas_Object *eo = elm_layout_edje_get(parent);
7024 if (eo == NULL || tp == NULL || size < 0)
7027 for (i = 0; i < size; i++) {
7028 if (tp[i].part && tp[i].msgid)
7029 edje_object_part_text_set(eo,
7030 tp[i].part, _(tp[i].msgid));
7034 Eina_Bool __cam_app_update_thumbnail_idler(void *data)
7036 struct appdata *ad = (struct appdata *)data;
7038 return ECORE_CALLBACK_CANCEL;
7040 CamAppData *camapp = ad->camapp_handle;
7043 REMOVE_IDLER(ad->update_thumbnail_idler);
7044 return ECORE_CALLBACK_CANCEL;
7049 if (!g_file_test(camapp->filename,G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
7050 DEBUG_TRACE( "The captured File is not existed");
7051 REMOVE_IDLER(ad->update_thumbnail_idler);
7052 return ECORE_CALLBACK_CANCEL;;
7055 gboolean ret = FALSE;
7057 if (ad->imageviewer_ug) { /*review on */
7058 DEBUG_TRACE("Image viewer was LAUNCHED. skip this...");
7059 REMOVE_IDLER(ad->update_thumbnail_idler);
7060 return ECORE_CALLBACK_CANCEL;;
7063 if (camapp->thumbnail_name != NULL) {
7064 free (camapp->thumbnail_name);
7065 camapp->thumbnail_name = NULL;
7069 ret = cam_file_get_cam_file_thumbnail_path(camapp->filename, &camapp->thumbnail_name);
7070 DEBUG_TRACE("ret[0:success] = [%d] camapp->filename: [%s]",
7071 ret, camapp->filename);
7072 DEBUG_TRACE("ret[0:success] = [%d] camapp->thumbnail_name: [%s]",
7073 ret, camapp->thumbnail_name);
7074 if (!g_file_test(camapp->thumbnail_name, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
7076 if (g_thumbnail_image_check_count > 10) {
7077 REMOVE_IDLER(ad->update_thumbnail_idler);
7078 return ECORE_CALLBACK_CANCEL;
7081 DEBUG_TRACE("The thumbnail File is not existed,try the %d nums", g_thumbnail_image_check_count);
7082 g_thumbnail_image_check_count++;
7083 usleep(THUMBNAIL_UPDATE_WAIT_TIME);
7084 /*REMOVE_IDLER(ad->update_thumbnail_idler);*//*note:renew, do not delete idler*/
7085 return ECORE_CALLBACK_RENEW;
7087 #ifndef ENABLE_CAPTURE_ANIMATION
7089 DEBUG_TRACE("thumbnail image check count=[%d]", g_thumbnail_image_check_count);
7090 toolbar_update_quickview_thumbnail(ad);
7093 else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
7094 toolbar_update_quickview_thumbnail(ad);
7097 DEBUG_TRACE("NOT REACHED CODES REACHED!");
7100 REMOVE_IDLER(ad->update_thumbnail_idler);
7101 return ECORE_CALLBACK_CANCEL;
7103 /* update thumbnail to quickview after first launching or return from image viewer */
7104 void cam_app_update_quickview_icon(void *data)
7106 #ifdef CAMERA_MACHINE_I686
7109 struct appdata *ad = (struct appdata *)data;
7110 cam_ret_if(ad == NULL);
7111 cam_ret_if(ad->camapp_handle == NULL);
7112 gchar *filename = NULL;
7115 /*To update quickview image, get last filename*/
7116 filename = cam_app_get_last_filename();
7117 if (ad->camapp_handle->filename) {
7118 free(ad->camapp_handle->filename);
7119 ad->camapp_handle->filename = NULL;
7121 if (filename != NULL) {
7122 if (ad->camapp_handle->filename) {
7123 free(ad->camapp_handle->filename);
7124 ad->camapp_handle->filename = NULL;
7126 ad->camapp_handle->filename = strdup(filename);
7129 if (ad->camapp_handle->thumbnail_name) {
7130 free(ad->camapp_handle->thumbnail_name);
7131 ad->camapp_handle->thumbnail_name = NULL;
7133 /*update quickview area */
7134 if (cam_file_get_cam_file_thumbnail_path(ad->camapp_handle->filename,
7135 &ad->camapp_handle->thumbnail_name))
7136 toolbar_update_quickview_thumbnail_no_animation(ad);
7143 void cam_app_update_thumbnail()
7145 #ifdef CAMERA_MACHINE_I686
7148 struct appdata *ad = (struct appdata *)cam_appdata_get();
7149 cam_ret_if(ad == NULL);
7150 CamAppData *camapp = ad->camapp_handle;
7151 cam_ret_if(camapp == NULL);
7153 DEBUG_TRACE("cam_app_update_thumbnail");
7155 if (CAM_LAUNCHING_MODE_NORMAL == ad->launching_mode && camapp->filename) {
7157 g_thumbnail_image_check_count = 0;
7158 if (!ad->update_thumbnail_idler)
7159 ad->update_thumbnail_idler = ecore_idler_add(__cam_app_update_thumbnail_idler, ad);
7165 gboolean cam_app_parse_args(CamExeArgs *args, service_h service)
7167 struct appdata *ad = (struct appdata *)cam_appdata_get();
7168 cam_retv_if(ad == NULL, FALSE);
7170 ad->aul_service_mime = NULL;
7172 int ret = service_get_mime(service, &ad->aul_service_mime);
7173 if (ret != SERVICE_ERROR_NONE)
7175 cam_debug(LOG_UI, "service_get_mime is error ");
7179 if(ad->aul_service_mime != NULL){
7181 if(strcmp(ad->aul_service_mime, AUL_SERVICE_MIME_TYPE_IMAGE) == 0){
7182 cam_debug(LOG_UI, "CAM_CAMERA_MODE");
7183 args->cam_mode = CAM_CAMERA_MODE;
7184 }else if(strcmp(ad->aul_service_mime, AUL_SERVICE_MIME_TYPE_VIDEO) == 0){
7185 cam_debug(LOG_UI, "CAM_CAMCORDER_MODE");
7186 args->cam_mode = CAM_CAMCORDER_MODE;
7190 const char *val = NULL;
7191 /* get caller appl. */
7192 service_get_extra_data(service, "CALLER", (char **)&val);
7194 cam_debug(LOG_UI, "CALLER %s", val);
7195 args->caller = strdup(val);
7197 args->caller = NULL;
7202 service_get_extra_data(service, "RESOLUTION", (char **)&val);
7204 cam_debug(LOG_UI, "RESOLUTION %s", val);
7208 if (args->cam_mode == CAM_CAMERA_MODE) {
7209 if (0 == strcmp(val, CAM_CAPTURE_RES_BIG))
7210 res = CAM_RESOLUTION_3264x2448;
7211 else if (0 == strcmp(val, CAM_CAPTURE_RES_BIG_WIDE))
7212 res = CAM_RESOLUTION_3264x1836;
7213 else if (0 == strcmp(val, CAM_CAPTURE_RES_MIDDLE))
7214 res = CAM_RESOLUTION_2560x1920;
7215 else if (0 == strcmp(val, CAM_CAPTURE_RES_MIDDLE_WIDE))
7216 res = CAM_RESOLUTION_2560x1536;
7217 else if (0 == strcmp(val, CAM_CAPTURE_RES_SMALL))
7218 res = CAM_RESOLUTION_2560x1920;
7219 else if (0 == strcmp(val, CAM_CAPTURE_RES_SMALL_WIDE))
7220 res = CAM_RESOLUTION_1280x720;
7221 else if (0 == strcmp(val, CAM_CAPTURE_RES_VGA))
7222 res = CAM_RESOLUTION_VGA;
7224 res = CAM_RESOLUTION_3264x2448;
7226 if (0 == strcmp(val, CAM_RECORDING_RES_HD))
7227 res = CAM_RESOLUTION_HD;
7228 else if (0 == strcmp(val, CAM_RECORDING_RES_VGA))
7229 res = CAM_RESOLUTION_VGA;
7230 else if (0 == strcmp(val, CAM_RECORDING_RES_QCIF))
7231 res = CAM_RESOLUTION_QCIF;
7233 res = CAM_RESOLUTION_VGA;
7236 args->width = CAM_RESOLUTION_W(res);
7237 args->height = CAM_RESOLUTION_H(res);
7238 args->resolution = res;
7243 service_get_extra_data(service, "LIMIT", (char **)&val);
7245 cam_debug(LOG_UI, "LIMIT %s", val);
7246 args->size_limit = atoi(val);
7248 args->size_limit = 0;
7253 service_get_extra_data(service, "REVIEW", (char **)&val);
7255 if (0 == strcmp(val, "TRUE"))
7256 args->review = TRUE;
7258 args->review = FALSE;
7260 args->review = FALSE;
7263 /* print exe args */
7264 cam_debug(LOG_SYS, "############### exe args ###############");
7265 cam_debug(LOG_SYS, "mode =%d", args->cam_mode);
7266 cam_debug(LOG_SYS, "caller =%s", args->caller);
7267 cam_debug(LOG_SYS, "width =%d", args->width);
7268 cam_debug(LOG_SYS, "height =%d", args->height);
7269 cam_debug(LOG_SYS, "limit =%d", args->size_limit);
7270 cam_debug(LOG_SYS, "review =%d", args->review);
7271 cam_debug(LOG_SYS, "############### end ###############");
7277 void cam_app_draw_af_box(void *data)
7280 cam_retm_if(data == NULL, "data is null");
7281 struct appdata *ad = (struct appdata *)data;
7285 switch (ad->rot_current) {
7286 case APP_DEVICE_ORIENTATION_0:
7288 ad->af_start_x = ad->touch_lcd_x;
7289 ad->af_start_y = ad->touch_lcd_y;
7292 case APP_DEVICE_ORIENTATION_180:
7294 ad->af_start_x = ad->win_height - ad->touch_lcd_x;
7295 ad->af_start_y = ad->win_width - ad->touch_lcd_y;
7298 case APP_DEVICE_ORIENTATION_270:
7300 ad->af_start_x = ad->touch_lcd_y;
7301 ad->af_start_y = ad->win_height - ad->touch_lcd_x;
7304 case APP_DEVICE_ORIENTATION_90:
7306 ad->af_start_x = ad->win_width - ad->touch_lcd_y;
7307 ad->af_start_y = ad->touch_lcd_x;
7315 DEBUG_TRACE("ad->af_start_x=%f, ad->af_start_y=%f", ad->af_start_x,
7317 ad->camera_focus_w = CAMERA_FOCUS_W * elm_config_scale_get();
7318 ad->camera_focus_h = CAMERA_FOCUS_H * elm_config_scale_get();
7319 DEBUG_TRACE("ad->camera_focus_w=%f, ad->camera_focus_h=%f",
7320 ad->camera_focus_w, ad->camera_focus_h);
7322 ad->af_start_x = ad->af_start_x - (ad->camera_focus_w / 2);
7323 ad->af_start_y = ad->af_start_y - (ad->camera_focus_h / 2);
7324 DEBUG_TRACE("af area box start x,y =[%f,%f]\n", ad->af_start_x,
7327 if (ad->rot_current == APP_DEVICE_ORIENTATION_270
7328 || ad->rot_current == APP_DEVICE_ORIENTATION_90) {
7329 if (ad->af_start_x < ad->preview_offset_x) {
7330 ad->af_start_x = ad->preview_offset_x;
7332 if (ad->af_start_y < ad->preview_offset_y) {
7333 ad->af_start_y = ad->preview_offset_y;
7335 if ((ad->af_start_x + ad->camera_focus_w) >
7336 (ad->preview_w + ad->preview_offset_x)) {
7338 (ad->preview_w + ad->preview_offset_x) -
7341 if ((ad->af_start_y + ad->camera_focus_h) >
7342 (ad->preview_h + ad->preview_offset_y)) {
7344 (ad->preview_h + ad->preview_offset_y) -
7349 if (ad->af_start_y < ad->preview_offset_x) {
7350 ad->af_start_y = ad->preview_offset_x;
7352 if (ad->af_start_x < ad->preview_offset_y) {
7353 ad->af_start_x = ad->preview_offset_y;
7355 if ((ad->af_start_y + ad->camera_focus_h) >
7356 (ad->preview_w + ad->preview_offset_x)) {
7358 (ad->preview_w + ad->preview_offset_x) -
7361 if ((ad->af_start_x + ad->camera_focus_w) >
7362 (ad->preview_h + ad->preview_offset_y)) {
7364 (ad->preview_h + ad->preview_offset_y) -
7368 if (ad->focus_edje) {
7370 ("####################################################");
7371 DEBUG_TRACE("af area start ,ad->af_start_x,y =[%f,%f]\n",
7372 ad->af_start_x, ad->af_start_y);
7374 ("####################################################");
7375 evas_object_move(ad->focus_edje, ad->af_start_x,
7377 DEBUG_TRACE(" MOVE FOCUS_EDJE : %f,%f", ad->af_start_x,
7384 /* get preview start x,y coordinate */
7385 void cam_app_get_preview_offset_coordinate(void *data)
7388 cam_retm_if(data == NULL, "data is null");
7389 struct appdata *ad = (struct appdata *)data;
7391 CamAppData *camapp = ad->camapp_handle;
7392 cam_retm_if(camapp == NULL, "camapp is null");
7396 CamVideoRectangle result; /* result ractangle */
7397 CamVideoRectangle window; /* target window ractangle */
7398 CamVideoRectangle preview; /* target preview rectangle */
7399 /*wow,now, the MMHandleType is not created*/
7400 cam_mm_get_video_size(&width, &height);
7402 ad->camfw_video_width = width;
7403 ad->camfw_video_height = height;
7406 DEBUG_TRACE("************************************************");
7407 DEBUG_TRACE("preview.w =%d, preview.h=%d", preview.w, preview.h);
7409 window.h = ad->win_height;
7410 window.w = ad->win_width;
7411 DEBUG_TRACE("window.w =%d, window.h=%d\n", window.w, window.h);
7412 DEBUG_TRACE("************************************************");
7413 cam_app_preview_start_coordinate(preview, window, &result);
7415 ad->preview_offset_x = result.x;
7416 ad->preview_offset_y = result.y;
7417 ad->preview_w = result.w;
7418 ad->preview_h = result.h;
7420 DEBUG_TRACE("************************************************");
7421 DEBUG_TRACE("ad->preview_offset_x = %d, ad->preview_offset_y = %d",
7422 ad->preview_offset_x, ad->preview_offset_y);
7423 DEBUG_TRACE("*************************************************");
7425 camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
7426 cam_app_focus_guide_update(ad);
7429 ad->af_x = (ad->win_width / 2) - ad->preview_offset_x;
7430 ad->af_y = (ad->win_height / 2) - ad->preview_offset_y;
7432 ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
7433 ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
7435 ad->touch_lcd_x = (ad->win_height / 2);
7436 ad->touch_lcd_y = (ad->win_width / 2);
7438 DEBUG_TRACE("*************************************************");
7439 DEBUG_TRACE(" ad->af_x=%d, ad->af_y=%d", ad->af_x, ad->af_y);
7440 DEBUG_TRACE(" ad->af_start_x=%d, ad->af_start_y=%d", ad->af_start_x, ad->af_start_y);
7441 DEBUG_TRACE(" ad->touch_lcd_x=%d, ad->touch_lcd_y=%d", ad->touch_lcd_x,
7443 DEBUG_TRACE("*************************************************");
7445 cam_app_draw_af_box(ad);
7446 camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS;
7449 evas_object_show(ad->focus_edje);
7452 void cam_app_preview_start_coordinate(CamVideoRectangle src,
7453 CamVideoRectangle dst,
7454 CamVideoRectangle *result)
7456 /* src is target preview rectangle */
7457 /* dst is target window rectangle */
7458 g_return_if_fail(result != NULL);
7459 gdouble src_ratio, dst_ratio;
7460 src_ratio = (gdouble) src.w / src.h;
7461 dst_ratio = (gdouble) dst.w / dst.h;
7462 if (src_ratio > dst_ratio) {
7463 DEBUG_TRACE("#### case 1\n");
7465 result->h = dst.w / src_ratio;
7467 result->y = (dst.h - result->h) / 2;
7468 } else if (src_ratio < dst_ratio) {
7469 DEBUG_TRACE("#### case 2\n");
7470 result->w = dst.h * src_ratio;
7472 result->x = (dst.w - result->w) / 2;
7475 DEBUG_TRACE("#### case 3\n");
7482 ("************************************************************");
7484 ("source is %dx%d dest is %dx%d, result window size is %dx%d result offset x= %dx y=%d",
7485 src.w, src.h, dst.w, dst.h, result->w, result->h, result->x,
7488 ("************************************************************");
7492 void cam_remove_tmp_file()
7494 const gchar *default_path = NULL;
7495 char tmpfile_name[256] = { 0 };
7497 default_path = cam_file_get_internal_video_path();
7498 DEBUG_TRACE(" video = %s", default_path);
7499 snprintf(tmpfile_name, sizeof(tmpfile_name), "%s%s", default_path,
7501 if (g_file_test(tmpfile_name, G_FILE_TEST_EXISTS)) {
7502 DEBUG_TRACE("REMOVE tmp file");
7503 unlink(tmpfile_name);
7505 default_path = cam_file_get_external_video_path();
7506 DEBUG_TRACE(" video = %s", default_path);
7507 snprintf(tmpfile_name, sizeof(tmpfile_name), "%s%s", default_path,
7510 if (g_file_test(tmpfile_name, G_FILE_TEST_EXISTS)) {
7511 DEBUG_TRACE("REMOVE tmp file");
7512 unlink(tmpfile_name);
7517 Eina_Bool cam_app_launch_after_preview_began(void *data)
7519 struct appdata *ad = (struct appdata *)data;
7520 cam_retv_if(ad == NULL, FALSE);
7522 cam_debug(LOG_UI, "cam_app_launch_after_preview_began");
7524 int state = cam_mm_get_state();
7526 if (state != RECORDER_STATE_RECORDING) {
7527 cam_debug(LOG_UI, "remove previous file");
7528 cam_remove_tmp_file();
7531 cam_app_get_preview_offset_coordinate(data);
7532 cam_toolbar_setting_popup_create(data);
7533 return ECORE_CALLBACK_CANCEL;
7536 void cam_utils_remove_idler_all(void *data)
7538 struct appdata *ad = (struct appdata *)data;
7540 Ecore_Idler *idler = NULL;
7542 debug_fenter(LOG_UI);
7544 cam_retm_if(ad == NULL, "appdata is NULL");
7547 In fact, a Lock is needed here. However, because all related functions are working main loop, practically it may not be needed. */
7549 if (!ad->capture_cb_list) {
7550 cam_debug(LOG_UI, "No idler is remained.");
7552 list = ad->capture_cb_list;
7559 "Fail to remove idler. The idler is NULL");
7561 cam_debug(LOG_UI, "Remove idler[%p].", idler);
7562 ecore_idler_del(idler);
7564 ad->capture_cb_list =
7565 g_list_remove(ad->capture_cb_list, idler);
7568 list = g_list_next(list);
7571 g_list_free(ad->capture_cb_list);
7572 ad->capture_cb_list = NULL;
7576 debug_fleave(LOG_UI);
7580 Eina_Bool cam_elm_cache_flush()
7582 /*Make the canvas discard as much data as possible used by the engine at runtime.*/
7583 DEBUG_TRACE("start");
7584 struct appdata *ad = (struct appdata *)cam_appdata_get();
7587 evas_render_idle_flush(ad->evas);
7590 elm_cache_all_flush();
7595 gboolean cam_condition_check_to_start_camera(void *data)
7597 struct appdata *ad = (struct appdata *)data;
7598 cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
7601 if (cam_utils_check_battery_critical_low()) {
7602 ad->battery_status = LOW_BATTERY_CRITICAL_STATUS;
7603 cam_app_notice_popup(ad, dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"), cam_app_timeout_notice_response_cb);
7606 } else if (cam_utils_check_battery_warning_low()) {
7607 ad->battery_status = LOW_BATTERY_WARNING_STATUS;
7609 ad->battery_status = NORMAL_BATTERY_STATUS;