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 Eina_Bool 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, ECORE_CALLBACK_CANCEL, "appdata is NULL");
702 camapp = ad->camapp_handle;
703 cam_retvm_if(camapp == NULL, ECORE_CALLBACK_CANCEL, "camapp_handle is NULL");
705 if (!cam_condition_check_to_start_camera(ad)) {
706 cam_critical(LOG_CAM, "cannot start camera");
707 return ECORE_CALLBACK_CANCEL;
710 /*init guideline value*/
711 #ifdef GUIDE_LINE_ENALBE
712 camapp->guideline = FALSE;
715 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_create", 0);
716 if (cam_mm_is_created() == FALSE) {
717 if (!cam_mm_create(CAM_DEVICE_MEGA, camapp->camera_mode)) {
718 cam_critical(LOG_MM, "cam_mm_create failed");
719 cam_app_notice_popup(ad, "UNABLE TO LAUNCH CAMERA", cam_app_timeout_notice_response_cb);
720 return ECORE_CALLBACK_CANCEL;
723 CAM_TA_ACUM_ITEM_END(" cam_mm_create", 0);
725 CAM_TA_ACUM_ITEM_BEGIN(" cam_callback_init", 0);
726 if (!cam_callback_init(ad)) {
727 cam_critical(LOG_CAM, "cam_init_mm_callback failed");
728 cam_app_notice_popup(ad, "UNABLE TO START PREVIEW", cam_app_timeout_notice_response_cb);
729 return ECORE_CALLBACK_CANCEL;
731 CAM_TA_ACUM_ITEM_END(" cam_callback_init", 0);
733 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_init_attribute", 0);
734 if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
735 cam_critical(LOG_MM, "cam_app_init_attribute failed");
738 CAM_TA_ACUM_ITEM_END(" cam_app_init_attribute", 0);
740 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0);
743 * TODO: this func dealt with efl ui api, but cam_app_start is called in thread.
744 * We should consider it carefully.
746 if (!cam_app_preview_start(ad)) {
747 if (ad->is_calling == CAMERA_ERROR_SOUND_POLICY ||ad->is_calling == RECORDER_ERROR_SOUND_POLICY) {
748 DEBUG_TRACE(" MM CAMCARORDER ERROR\n");
749 cam_app_black_screen_show(ad, 2);
750 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
751 return ECORE_CALLBACK_CANCEL;
754 cam_critical(LOG_MM, "cam_app_preview_start failed");
755 cam_app_notice_popup(ad, "UNABLE TO START PREVIEW", cam_app_timeout_notice_response_cb);
756 return ECORE_CALLBACK_CANCEL;
758 CAM_TA_ACUM_ITEM_END(" cam_app_preview_start", 0);
760 if(!cam_key_grab_init(ad))
761 DEBUG_TRACE("cam_key_grab_init fail");
762 cam_app_key_event_init(ad);
763 cam_app_timeout_checker_init(ad);
765 #ifdef ENABLE_CHECK_CAM_STATUS
766 alarm(CAM_CHECK_STATUS_INTERVAL_TIME); /* start alarm */
768 CAM_TA_ACUM_ITEM_END("#########cam_app_start", 0);
770 return ECORE_CALLBACK_CANCEL;
773 gboolean cam_app_pause(void *data)
775 DEBUG_TRACE("#############cam_app_pause - START #############\n");
776 struct appdata *ad = (struct appdata *)data;
777 CamAppData *camapp = NULL;
778 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
779 camapp = ad->camapp_handle;
780 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
783 mm_state = cam_mm_get_state();
785 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
786 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
787 DEBUG_TRACE(" contact is paused ");
789 service_create(&reply);
790 service_add_extra_data(reply, "camera_end", "1");
791 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_CANCELED);
792 service_destroy(reply);
796 if ((mm_state == RECORDER_STATE_RECORDING
797 || mm_state == RECORDER_STATE_PAUSED)
798 &&(camapp->camera_mode == CAM_CAMCORDER_MODE)) {
799 int shutter_sound_state = 0;
800 /* get current sound */
801 cam_mm_get_shutter_sound(&shutter_sound_state);
802 /* disable shutter sound */
803 cam_mm_set_shutter_sound(FALSE);
805 cam_video_record_stop(ad);
806 /*restore shutter sound */
807 cam_mm_set_shutter_sound(shutter_sound_state);
808 } else if (mm_state == CAMERA_STATE_CAPTURING
809 && (camapp->camera_mode == CAM_CAMERA_MODE)) {
810 cam_mm_capture_stop(TRUE, CAM_CAMERA_MODE);
813 if (ad->imageviewer_ug) { /* image viewer is running and camera app is fous out */
814 ad->foucs_out_from_quickview = TRUE;
816 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
817 if (!cam_app_preview_stop()) {
818 cam_critical(LOG_MM, "cam_app_preview_stop fail");
820 CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
822 cam_app_key_event_deinit(ad);
823 if (!cam_key_grab_deinit(ad)) {
824 DEBUG_TRACE("cam_key_grab_deinit fail");
827 cam_app_timeout_checker_init(ad);
829 DEBUG_TRACE("#############cam_app_pause - END #############\n");
833 gboolean cam_app_resume(void *data)
835 struct appdata *ad = (struct appdata *)data;
836 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
838 CamAppData *camapp = NULL;
839 camapp = ad->camapp_handle;
840 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
843 debug_fenter(LOG_CAM);
845 if (!cam_condition_check_to_start_camera(ad)) {
846 cam_critical(LOG_CAM, "cannot start camera");
847 return ECORE_CALLBACK_CANCEL;
850 cam_app_timeout_checker_init(ad);
852 if (ad->imageviewer_ug == NULL) { /* home key destory imageviewer_ug */
853 elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
854 cam_state = cam_mm_get_state();
855 cam_app_get_preview_offset_coordinate(ad);
857 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_start", 0);
858 if (!cam_app_preview_start(ad)) {
859 if (ad->is_calling == CAMERA_ERROR_SOUND_POLICY || ad->is_calling == RECORDER_ERROR_SOUND_POLICY) {
860 DEBUG_TRACE(" MM CAMCARORDER ERROR\n");
861 cam_app_black_screen_show(ad, 2);
862 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
866 cam_critical(LOG_MM, "cam_app_preview_start failed");
867 cam_app_notice_popup(ad,
868 "PREVIEW START FAILED !!",
869 cam_app_timeout_notice_response_cb);
872 CAM_TA_ACUM_ITEM_END(" cam_app_preview_start", 0);
875 CAM_TA_ACUM_ITEM_BEGIN(" cam_key_grab_init", 0);
877 if (!ad->imageviewer_ug) {
878 if (!cam_key_grab_init(ad))
879 DEBUG_TRACE("cam_key_grab_init fail");
880 CAM_TA_ACUM_ITEM_END(" cam_key_grab_init", 0);
881 cam_app_key_event_init(ad);
883 #ifdef ENABLE_CHECK_CAM_STATUS
884 alarm(CAM_CHECK_STATUS_INTERVAL_TIME); /* start alarm */
890 Eina_Bool cam_app_stop(void *data)
892 struct appdata *ad = (struct appdata *)data;
893 CamAppData *camapp = NULL;
895 char *filename = NULL;
896 debug_fenter(LOG_CAM);
897 cam_retvm_if(ad == NULL, EXIT_FAILURE, "appdata is NULL");
899 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_stop", 0);
901 camapp = ad->camapp_handle;
902 cam_retvm_if(camapp == NULL, EXIT_FAILURE, "camapp_handle is NULL");
904 /* return aul result path */
905 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
906 if (ad->exe_args == NULL) {
907 DEBUG_TRACE("ad->exe_args is NULL");
910 if (ad->path_in_return) {
911 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
912 DEBUG_TRACE("contacts -not need sending result");
914 if (ad->appcore_state != CAM_APPCORE_PAUSE_STATE) {
915 if (camapp->filename != NULL) {
916 filename = strdup(camapp->filename);
917 cam_app_return_ext_app(ad, filename);
922 cam_app_return_ext_app(ad, filename);
926 if (ad->imageviewer_ug) {
927 cam_app_close_ug(ad);
930 cam_popup_remove_all();
931 cam_toolbar_destroy(ad);
932 cam_app_clear_engine_data(ad, true);
934 if (ad->timer_activated) {
935 ad->timer_activated = false;
937 DEL_EVAS_OBJECT(ad->timer_icon_edje);
938 REMOVE_TIMER(ad->timer_timer);
940 REMOVE_TIMER(ad->toolbar_toggle_timer);
941 cam_app_timeout_checker_remove();
942 if (ad->auto_close_timer) {
943 ecore_timer_del(ad->auto_close_timer);
944 ad->auto_close_timer = NULL;
947 if (EXIT_FAILURE == cam_noti_deinit(ad)) {
948 cam_critical(LOG_UI, "cam_noti_deinit failed");
951 cam_app_key_event_deinit(ad);
952 if(!cam_key_grab_deinit(ad))
953 DEBUG_TRACE("cam_key_grab_deinit fail");
955 /* destory camcorder */
956 if (cam_mm_is_created()) {
958 state = cam_mm_get_state();
959 if (camapp->camera_mode == CAM_CAMERA_MODE) {
961 case CAMERA_STATE_NONE:
962 case CAMERA_STATE_CREATED:
964 case CAMERA_STATE_PREVIEW:
966 case CAMERA_STATE_CAPTURING:
967 cam_mm_capture_stop(TRUE, CAM_CAMERA_MODE);
969 case CAMERA_STATE_CAPTURED:
972 /*g_assert_not_reached();*/
975 }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
977 case RECORDER_STATE_NONE:
978 case RECORDER_STATE_CREATED:
980 case RECORDER_STATE_READY:
982 case RECORDER_STATE_RECORDING:
983 case RECORDER_STATE_PAUSED:
984 cam_video_record_stop(ad);
987 /*g_assert_not_reached();*/
992 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
993 if (!cam_app_preview_stop()) {
994 cam_critical(LOG_MM, "cam_app_preview_stop faild");
996 CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
997 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_destory", 0);
998 if (!cam_mm_destory()) {
999 cam_critical(LOG_MM, "cam_mm_destory faild");
1001 CAM_TA_ACUM_ITEM_END(" cam_mm_destory", 0);
1005 ad->toolbar_hided = FALSE;
1006 cam_app_toggle_indicator(ad, FALSE);
1007 cam_app_toggle_toolbar(ad, FALSE);
1009 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
1010 cam_app_destroy_progressbar(ad);
1011 cam_utils_remove_idler_all(ad);
1013 if (filename != NULL) {
1018 CAM_TA_ACUM_ITEM_END(" cam_app_stop", 0);
1020 CAM_TA_ACUM_ITEM_SHOW_RESULT_TO(CAM_TA_SHOW_FILE);
1023 return EXIT_SUCCESS;
1027 gboolean cam_app_quit(void *data)
1029 struct appdata *ad = (struct appdata *)data;
1030 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1032 if (cam_mm_is_created()) {
1033 /*TODO: new logic will be add for save file while camera process is killed*/
1036 state = cam_mm_get_state();
1037 if (ad->camapp_handle) {
1038 if (ad->camapp_handle->camera_mode == CAM_CAMCORDER_MODE) {
1040 case RECORDER_STATE_NONE:
1041 case RECORDER_STATE_CREATED:
1043 case RECORDER_STATE_READY:
1045 case RECORDER_STATE_RECORDING:
1046 case RECORDER_STATE_PAUSED:
1047 cam_video_record_stop(ad);
1050 /*g_assert_not_reached();*/
1056 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_preview_stop", 0);
1057 if (!cam_app_preview_stop()) {
1058 cam_critical(LOG_MM, "cam_app_preview_stop failed");
1060 CAM_TA_ACUM_ITEM_END(" cam_app_preview_stop", 0);
1062 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_destory", 0);
1063 if (!cam_mm_destory()) {
1064 cam_critical(LOG_MM, "cam_mm_destory failed");
1066 CAM_TA_ACUM_ITEM_END(" cam_mm_destory", 0);
1069 cam_devman_deinit();
1072 if (EXIT_FAILURE == cam_noti_deinit(ad)) {
1073 cam_critical(LOG_UI, "cam_noti_deinit failed");
1075 /* crear data & engine */
1076 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_clear_engine_data", 0);
1077 cam_app_clear_engine_data(data, true);
1078 CAM_TA_ACUM_ITEM_END(" cam_app_clear_engine_data", 0);
1079 CAM_TA_ACUM_ITEM_BEGIN(" cam_file_finalize", 0);
1080 cam_file_finalize();
1081 CAM_TA_ACUM_ITEM_END(" cam_file_finalize", 0);
1082 CAM_TA_ACUM_ITEM_BEGIN(" cam_sound_finalize", 0);
1083 cam_sound_finalize();
1084 CAM_TA_ACUM_ITEM_END(" cam_sound_finalize", 0);
1086 CAM_TA_ACUM_ITEM_BEGIN(" cam_config_finalize", 0);
1087 cam_config_finalize();
1088 CAM_TA_ACUM_ITEM_END(" cam_config_finalize", 0);
1090 /* disconnect media content */
1091 CAM_TA_ACUM_ITEM_BEGIN(" media_content_disconnect", 0);
1093 if(media_content_disconnect() == MEDIA_CONTENT_ERROR_NONE) {
1094 DEBUG_TRACE("dis connection is success");
1096 cam_critical(LOG_SYS, " media_content_disconnect failed");
1099 CAM_TA_ACUM_ITEM_END(" media_content_disconnect", 0);
1101 /* cam_handle_free(ad); */
1102 cam_appdata_fini(ad);
1107 gboolean cam_app_preview_start(void *data)
1109 CAM_TA_ACUM_ITEM_BEGIN("----cam_app_preview_start", 0);
1111 ("------------------------------START---------------------------------");
1113 struct appdata *ad = (struct appdata *)data;
1114 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1115 CamAppData *camapp = ad->camapp_handle;
1116 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
1118 int state = cam_mm_get_state();
1119 DEBUG_TRACE("state: %d ", state);
1121 if (state < CAMERA_STATE_NONE || state < RECORDER_STATE_NONE)
1124 if (camapp->camera_mode == CAM_CAMERA_MODE) {
1126 case CAMERA_STATE_CREATED:
1127 case CAMERA_STATE_CAPTURED:
1129 CAM_TA_ACUM_ITEM_BEGIN(" cam_mm_preview_start", 0);
1130 if (!cam_mm_preview_start(camapp->camera_mode)) {
1131 cam_critical(LOG_MM, "cam_mm_preview_start failed");
1134 CAM_TA_ACUM_ITEM_END(" cam_mm_preview_start", 0);
1137 case CAMERA_STATE_CAPTURING:
1139 if (cam_mm_capture_stop(FALSE, camapp->camera_mode) == FALSE) {
1140 cam_critical(LOG_MM, "cam_mm_capture_stop failed");
1148 }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
1150 case RECORDER_STATE_CREATED:
1151 case RECORDER_STATE_PAUSED:
1153 if (!cam_mm_preview_start(camapp->camera_mode)) {
1154 cam_critical(LOG_MM, "cam_mm_preview_start failed");
1165 CAM_TA_ACUM_ITEM_END("----cam_app_preview_start", 0);
1169 gboolean cam_app_preview_stop(void)
1171 struct appdata *ad = (struct appdata *)cam_appdata_get();
1174 CamAppData *camapp = ad->camapp_handle;
1177 if (!cam_mm_preview_stop(camapp->camera_mode)) {
1178 cam_critical(LOG_MM, "cam_mm_preview_stop failed");
1185 _main_layout_click_cb(void *data, Evas_Object *obj, void *event_info)
1187 struct appdata *ad = (struct appdata *)data;
1192 unload_zoom_edje(ad);
1194 if (ad->setting_ctxpopup || ad->toolbar_popup) {
1195 /* destroy toolbar popup and setting popup */
1196 ad->show_menu = FALSE;
1197 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
1198 cam_toolbar_and_setting_popup_del(ad);
1199 if (ad->shot_mode_guide_popup)
1200 toolbar_shot_guide_popup_create(ad, ad->camapp_handle->shooting_mode);
1201 } else if (ad->toolbar_show_setting_popup == TRUE) {
1202 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
1203 ad->show_menu = FALSE;
1204 toolbar_hide_setting_popup(ad);
1205 if (ad->toolbar_show_edit_shortcuts_popup == TRUE) {
1206 toolbar_destroy_shortcuts_popup(ad);
1207 ad->toolbar_show_edit_shortcuts_popup = FALSE;
1209 } else if (ad->toolbar_show_edit_shortcuts_popup == TRUE) {
1210 toolbar_destroy_shortcuts_popup(ad);
1211 ad->toolbar_show_edit_shortcuts_popup = FALSE;
1213 if (ad->camapp_handle->enable_touch_af == TRUE) {
1214 REMOVE_TIMER(ad->continuous_af_timer);
1215 cam_camera_touch_af_press(ad);
1222 static void cam_app_timer_icon_rotate(void *data)
1224 struct appdata *ad = (struct appdata *)data;
1225 cam_retm_if(ad == NULL, "appdata is NULL");
1227 DEL_EVAS_OBJECT(ad->timer_icon_edje);
1228 cam_app_timer_update_count(ad);
1231 static int cam_app_start_rotate(struct appdata *ad, bool bInitial)
1233 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
1235 cam_debug(LOG_UI, "rotated : %d, window rotation angle=%d", ad->rot_current); /*, elm_win_rotation_get(ad->win_main)); */
1240 switch (ad->rot_current) {
1241 case APP_DEVICE_ORIENTATION_0:
1242 ad->camcorder_rotate = CAMERA_ROTATION_90;
1243 ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT;
1247 case APP_DEVICE_ORIENTATION_180:
1248 ad->camcorder_rotate = CAMERA_ROTATION_270;
1249 ad->target_direction = CAM_TARGET_DIRECTION_PORTRAIT_INVERSE;
1253 case APP_DEVICE_ORIENTATION_270:
1254 ad->camcorder_rotate = CAMERA_ROTATION_NONE;
1255 ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE;
1259 case APP_DEVICE_ORIENTATION_90:
1260 ad->camcorder_rotate = CAMERA_ROTATION_180;
1261 ad->target_direction = CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE;
1269 ad->angle_pre = ad->angle;
1272 ////////////////////////////////////////////////////////////////////////////
1273 if (ad->toolbar_edj_file) {
1274 free(ad->toolbar_edj_file);
1275 ad->toolbar_edj_file = NULL;
1277 /*ad->angle = 270;*/
1278 switch (ad->angle) {
1280 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
1283 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_EDJ_NAME);
1286 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_INVERSE_EDJ_NAME);
1289 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_VERTICAL_INVERSE_EDJ_NAME);
1292 ad->toolbar_edj_file = strdup(CAM_TOOLBAR_LAYOUT_EDJ_NAME);
1297 elm_win_rotation_with_resize_set(ad->win_main, ad->angle);
1299 /* cam_app_get_win_size(ad); */
1300 cam_app_get_preview_offset_coordinate(ad);
1303 if (ad->toolbar_edje)
1304 cam_toolbar_rotate(ad);
1306 if (ad->indicator_edje)
1307 cam_indicator_rotate(ad);
1309 if (ad->recording_edje)
1310 cam_recording_rotate(ad);
1312 if (ad->timer_icon_edje)
1313 cam_app_timer_icon_rotate(ad);
1315 if (ad->zoom_edje) {
1316 unload_zoom_edje(ad);
1320 #ifdef GUIDE_LINE_ENALBE
1321 if (ad->guideline_edje)
1322 settings_guideline_refresh(ad);
1329 gboolean cam_layout_init(void *data)
1331 DEBUG_TRACE("START");
1333 struct appdata *ad = (struct appdata *)data;
1334 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1336 if (ad->win_main == NULL) {
1337 cam_critical(LOG_UI, "win_main is NULL");
1341 elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE);
1343 cam_app_start_rotate(ad, TRUE);
1344 DEBUG_TRACE("ad->angle = %d", ad->angle);
1345 /*elm_win_rotation_with_resize_set(ad->win_main, 270);*/
1346 cam_app_get_preview_offset_coordinate(ad);
1347 elm_theme_extension_add(NULL, CAM_SETTING_POPUP_STYLE_EDJ_NAME);
1348 elm_theme_extension_add(NULL, CAM_SETTING_POPUP_STYLE_WITH_RADIO_EDJ_NAME);
1349 elm_theme_extension_add(NULL, CAM_SLIDER_STYLE_EDJ_NAME);
1351 CAM_TA_ACUM_ITEM_BEGIN(" layout_main load", 0);
1352 if (ad->layout_main == NULL) {
1354 cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME,
1356 if (ad->layout_main == NULL) {
1357 CAM_TA_ACUM_ITEM_END(" layout_main load", 0);
1358 cam_critical(LOG_UI, "layout_main load failed ");
1362 #ifndef CAMERA_MACHINE_I686
1363 evas_object_smart_callback_del(_EDJ(ad->layout_main),
1365 _main_layout_click_cb);
1367 evas_object_smart_callback_add(_EDJ(ad->layout_main),
1369 _main_layout_click_cb, ad);
1371 define_mouse_callback(_EDJ(ad->layout_main),
1372 _EDJ(ad->layout_main));
1375 CAM_TA_ACUM_ITEM_END(" layout_main load", 0);
1377 cam_app_focus_guide_create(ad);
1379 CAM_TA_ACUM_ITEM_BEGIN(" load_toolbar_edje", 0);
1380 if (cam_toolbar_create(ad)) {
1381 CAM_TA_ACUM_ITEM_END(" load_toolbar_edje", 0);
1382 cam_critical(LOG_UI, " load_toolbar_edje failed ");
1385 CAM_TA_ACUM_ITEM_END(" load_toolbar_edje", 0);
1387 #ifndef DISABLE_INDICATOR
1388 CAM_TA_ACUM_ITEM_BEGIN(" cam_indicator_create", 0);
1389 if (ad->indicator_edje) {
1390 evas_object_hide(ad->indicator_edje);
1391 cam_indicator_destory(ad);
1393 if (cam_indicator_create(ad)) {
1394 CAM_TA_ACUM_ITEM_END(" cam_indicator_create", 0);
1395 cam_critical(LOG_UI, "cam_indicator_create failed ");
1398 CAM_TA_ACUM_ITEM_END(" cam_indicator_create", 0);
1401 cam_app_update_quickview_icon(ad);
1408 gboolean cam_handle_create(void *data)
1410 CAM_TA_ACUM_ITEM_BEGIN("------cam_handle_create", 0);
1411 struct appdata *ad = (struct appdata *)data;
1412 CamAppData *camapp = NULL;
1414 debug_fenter(LOG_CAM);
1415 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1417 if (ad->camapp_handle && cam_handle) {
1418 cam_handle_free(ad);
1421 camapp = (CamAppData *)malloc(sizeof(CamAppData));
1422 cam_retv_if(camapp == NULL, FALSE);
1423 memset(camapp, 0x00, sizeof(CamAppData));
1425 cam_handle = camapp;
1426 ad->camapp_handle = camapp;
1427 CAM_TA_ACUM_ITEM_END("------cam_handle_create", 0);
1432 gboolean cam_handle_free(void *data)
1434 struct appdata *ad = (struct appdata *)data;
1435 CamAppData *camapp = NULL;
1437 debug_fenter(LOG_CAM);
1438 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1439 camapp = ad->camapp_handle;
1440 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
1444 if (camapp && cam_handle) {
1445 if (camapp->battery_ani_timer) {
1446 ecore_timer_del(camapp->battery_ani_timer);
1447 camapp->battery_ani_timer = NULL;
1450 if (camapp->filename) {
1451 free(camapp->filename);
1452 camapp->filename = NULL;
1455 if (camapp->thumbnail_name) {
1456 free(camapp->thumbnail_name);
1457 camapp->thumbnail_name = NULL;
1465 ad->camapp_handle = NULL;
1472 gboolean cam_toolbar_menu_config_init(void *data, int mode) {
1473 struct appdata *ad = (struct appdata *)data;
1474 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1475 ad->toolbar_1_type = cam_config_get_int( PROP_TOOLBAR_1_TYPE_NAME, CAM_MENU_EMPTY);
1476 ad->toolbar_2_type = cam_config_get_int( PROP_TOOLBAR_2_TYPE_NAME, CAM_MENU_EMPTY);
1477 ad->toolbar_3_type = cam_config_get_int( PROP_TOOLBAR_3_TYPE_NAME, CAM_MENU_EMPTY);
1478 ad->toolbar_4_type = cam_config_get_int( PROP_TOOLBAR_4_TYPE_NAME, CAM_MENU_EMPTY);
1479 DEBUG_TRACE("ad->toolbar_1_type= %d", ad->toolbar_1_type);
1480 DEBUG_TRACE("ad->toolbar_2_type= %d", ad->toolbar_2_type);
1481 DEBUG_TRACE("ad->toolbar_3_type= %d", ad->toolbar_3_type);
1482 DEBUG_TRACE("ad->toolbar_4_type= %d", ad->toolbar_4_type);
1487 gboolean cam_toolbar_menu_config_update(void *data)
1489 struct appdata *ad = (struct appdata *)data;
1490 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1497 toolbar_1_type = cam_config_get_int( PROP_TOOLBAR_1_TYPE_NAME, CAM_MENU_EMPTY);
1498 toolbar_2_type = cam_config_get_int( PROP_TOOLBAR_2_TYPE_NAME, CAM_MENU_EMPTY);
1499 toolbar_3_type = cam_config_get_int( PROP_TOOLBAR_3_TYPE_NAME, CAM_MENU_EMPTY);
1500 toolbar_4_type = cam_config_get_int( PROP_TOOLBAR_4_TYPE_NAME, CAM_MENU_EMPTY);
1502 if (toolbar_1_type != ad->toolbar_1_type)
1503 cam_config_set_int(PROP_TOOLBAR_1_TYPE_NAME, ad->toolbar_1_type);
1504 if (toolbar_2_type != ad->toolbar_2_type)
1505 cam_config_set_int(PROP_TOOLBAR_2_TYPE_NAME, ad->toolbar_2_type);
1506 if (toolbar_3_type != ad->toolbar_3_type)
1507 cam_config_set_int(PROP_TOOLBAR_3_TYPE_NAME, ad->toolbar_3_type);
1508 if (toolbar_4_type != ad->toolbar_4_type)
1509 cam_config_set_int(PROP_TOOLBAR_4_TYPE_NAME, ad->toolbar_4_type);
1515 gboolean cam_handle_init(void *data, int mode)
1517 struct appdata *ad = data;
1518 CamAppData *camapp = NULL;
1521 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1523 camapp = ad->camapp_handle;
1524 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
1526 cam_info(LOG_UI, "mode : %d ", mode);
1527 camapp->camera_mode = mode;
1529 cam_info(LOG_UI, "camera_mode = %d ", camapp->camera_mode);
1531 cam_config_set_int_by_type(CAM_CONFIG_TYPE_COMMON, PROP_MODE_NAME, mode);
1533 cam_app_set_config_group(camapp->camera_mode);
1535 #ifdef USE_CAM_STORAGE_SETTING
1536 camapp->storage = cam_config_get_int( PROP_STORAGE_NAME, CAM_STORAGE_INTERNAL);
1538 vconf_get_int(VCONFKEY_SETAPPL_DEFAULT_MEM_CAMERA_INT, &(camapp->storage));
1541 /* use shot mode as default value */
1542 camapp->recording_mode = RECMODE_DEFAULT;
1543 camapp->shooting_mode = SHOTMODE_DEFAULT;
1545 camapp->af_mode = AF_DEFAULT;
1547 if (camapp->camera_mode == CAM_CAMERA_MODE) {
1548 camapp->flash = cam_config_get_int(PROP_FLASH_NAME, FLASH_DEFAULT);
1550 camapp->flash = cam_config_get_int(PROP_FLASH_NAME, REC_FLASH_DEFAULT);
1553 #ifdef GUIDE_LINE_ENALBE
1554 camapp->guideline = cam_config_get_boolean(PROP_GUIDELINE_NAME, GUIDE_LINE_DEFAULT);
1555 DEBUG_TRACE("camapp->guideline = %d" ,camapp->guideline);
1558 camapp->effect = EFFECT_DEFAULT;
1560 if (camapp->camera_mode == CAM_CAMERA_MODE)
1561 DEBUG_TRACE("default resolution will be got from FW API");
1563 camapp->resolution = cam_config_get_int(PROP_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
1565 camapp->image_quality = cam_config_get_int(PROP_IMAGE_QUALITY_NAME, QUALITY_DEFAULT);
1566 camapp->video_quality = cam_config_get_int(PROP_VIDEO_QUALITY_NAME, QUALITY_DEFAULT);
1567 camapp->audio_recording = AUDIOREC_DEFAULT;
1568 camapp->review = cam_config_get_boolean(PROP_REVIEW_NAME, FALSE);
1570 camapp->battery_level = cam_utils_get_battery_level();
1571 charging = cam_utils_get_charging_status();
1573 camapp->battery_charging = charging;
1575 camapp->battery_charging = 0;
1577 #ifdef USE_CAMERA_APP_SHUTTER_SOUND
1578 camapp->shutter_sound =
1579 cam_config_get_int(PROP_SHUTTER_SOUND_NAME, SHUTTER_SOUND_DEFAULT);
1582 cam_mm_set_shutter_sound(SOUND_DEFAULT);
1583 camapp->shutter_sound = SHUTTER_SOUND_DEFAULT; /* on */
1585 /* below item had been saved in ini file */
1586 camapp->zoom_mode = 1;
1587 camapp->image_count = IMAGE_COUNT_DEFAULT;
1588 camapp->size_limit_type = CAM_MM_SIZE_LIMIT_TYPE_BYTE;
1589 camapp->size_limit = REC_SIZE_LIMIT_DEFAULT;
1590 camapp->timer = TIMER_DEFAULT;
1591 camapp->fps = FPS_DEFAULT;
1593 camapp->enable_touch_af = TRUE;
1594 camapp->key_lock = FALSE;
1596 /*init toolbar menu config */
1597 cam_toolbar_menu_config_init((void*)ad, mode);
1602 gboolean cam_handle_value_set(void *data, int type, const GValue *value)
1604 struct appdata *ad = (struct appdata *)data;
1605 CamAppData *camapp = NULL;
1607 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
1608 camapp = ad->camapp_handle;
1609 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
1611 cam_debug(LOG_CAM, "type : %d", type);
1617 gint tempval = g_value_get_int(value);
1619 current = camapp->camera_mode;
1620 if (!cam_mode_change(ad, tempval)) {
1621 cam_critical(LOG_CAM,
1622 "MODE CHANGE IS FAILED by MIDDLE WARE");
1623 cam_app_notice_popup(data,
1624 "MODE CHANGE FAILED !!",
1625 cam_app_timeout_notice_response_cb);
1630 case PROP_SHOT_MODE:
1632 gint tempval = g_value_get_int(value);
1633 gint cur_mode = camapp->shooting_mode;
1635 camapp->shooting_mode = tempval;
1637 if (!cam_shooting_mode_change(ad)) {
1638 cam_critical(LOG_UI, "shot mode set fail");
1639 camapp->shooting_mode = cur_mode;
1642 printf(" ##### %s %d tempval = %d\n", __FUNCTION__,
1644 cam_config_set_int(PROP_SHOT_MODE_NAME, tempval);
1645 cam_app_focus_guide_update(ad);
1650 gint tempval = g_value_get_int(value);
1651 /* set recording mode */
1652 camapp->recording_mode = tempval;
1653 cam_config_set_int(PROP_REC_MODE_NAME, tempval);
1655 if (!cam_recording_mode_change(ad, tempval)) {
1656 cam_critical(LOG_UI, "rec mode change fail - mode[%d]", tempval);
1662 case PROP_RESOLUTION:
1664 gint tempval = g_value_get_int(value);
1665 /* int af_x,af_y; */
1668 ("*******************************************************");
1669 DEBUG_TRACE("value set : PROP_RESOLUTION setting");
1670 DEBUG_TRACE(" tempval = %d ", tempval);
1672 ("CAM_RESOLUTION_W = %d ,CAM_RESOLUTION_H=%d ",
1673 CAM_RESOLUTION_W(tempval),
1674 CAM_RESOLUTION_H(tempval));
1676 ("*******************************************************");
1679 cam_critical(LOG_FILE, "1111111111");
1681 if (!cam_app_reset_resolution(ad, CAM_RESOLUTION_W(tempval), CAM_RESOLUTION_H(tempval))) {
1682 cam_warning(LOG_UI, "resolution set fail");
1685 #ifdef GUIDE_LINE_ENALBE
1686 settings_guideline_refresh(ad);
1688 camapp->resolution = tempval;
1689 cam_critical(LOG_FILE, " camapp->resolution %d", camapp->resolution);
1691 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
1692 cam_app_set_video_quality(ad, camapp->video_quality);
1693 /* cam_mm_set_video_quality(camapp->recording_mode, camapp->video_quality); */
1696 if ((camapp->camera_mode == CAM_CAMERA_MODE
1697 && camapp->shooting_mode == CAM_SINGLE_MODE)
1698 || (camapp->camera_mode == CAM_CAMCORDER_MODE
1699 && camapp->recording_mode == CAM_RECORD_NORMAL)) {
1701 "resolution saved : [%d]x[%d]",
1702 CAM_RESOLUTION_W(tempval),
1703 CAM_RESOLUTION_H(tempval));
1704 cam_config_set_int(PROP_RESOLUTION_NAME,
1707 cam_app_get_preview_offset_coordinate(ad);
1708 ad->remained_count = cam_system_get_still_count_by_resolution(ad);
1712 { /* fps may not set it alone */
1713 gint tempval = g_value_get_int(value);
1715 if (!cam_mm_set_fps(tempval)) {
1716 cam_warning(LOG_UI, "fps set fail");
1719 camapp->fps = tempval;
1724 gint tempval = g_value_get_int(value);
1725 if (!cam_mm_set_effect(tempval)) {
1726 cam_warning(LOG_UI, "effect set fail : %d",
1730 camapp->effect = tempval;
1731 cam_config_set_int(PROP_EFFECT_NAME, tempval);
1736 gint tempval = g_value_get_int(value);
1737 gint oldval = cam_config_get_int(PROP_AF_NAME, CAM_FOCUS_AUTO);
1739 if ((tempval == CAM_FOCUS_AUTO)
1740 || (tempval == CAM_FOCUS_MACRO)) {
1741 if (!cam_mm_set_focus_mode(tempval)) {
1742 cam_warning(LOG_UI, "af mode set fail");
1747 cam_warning(LOG_UI, "unknow af mode : %d",
1751 camapp->af_mode = tempval;
1752 cam_app_focus_guide_update(ad);
1753 if (camapp->camera_mode == CAM_CAMERA_MODE
1754 && camapp->shooting_mode == CAM_SINGLE_MODE) {
1755 cam_config_set_int(PROP_AF_NAME, tempval);
1761 gint tempval = g_value_get_int(value);
1762 if (!cam_mm_set_flash(tempval)) {
1763 cam_warning(LOG_UI, "flash set fail");
1766 camapp->flash = tempval;
1767 /*fix me ,why only when in camera single mode ,
1768 save the FLASH setting value to config file*/
1769 if ((camapp->camera_mode == CAM_CAMERA_MODE
1770 && camapp->shooting_mode == CAM_SINGLE_MODE)
1771 || camapp->camera_mode == CAM_CAMCORDER_MODE) {
1772 cam_config_set_int(PROP_FLASH_NAME, tempval);
1778 gint tempval = g_value_get_int(value);
1780 camapp->timer = tempval;
1783 case PROP_IMAGE_QUALITY:
1785 gint tempval = g_value_get_int(value);
1786 if (!cam_mm_set_image_enc_quality(tempval)) {
1788 "image quality[%d] set fail",
1793 camapp->image_quality = tempval;
1794 cam_config_set_int(PROP_IMAGE_QUALITY_NAME, tempval);
1797 case PROP_VIDEO_QUALITY:
1799 gint tempval = g_value_get_int(value);
1800 if (!cam_app_set_video_quality(ad, tempval)) {
1802 "video quality[%d] set fail",
1807 camapp->video_quality = tempval;
1808 cam_config_set_int(PROP_VIDEO_QUALITY_NAME, tempval);
1811 case PROP_AUDIO_REC:
1813 gboolean tempval = g_value_get_boolean(value);
1814 if (!cam_mm_set_audio_recording(tempval)) {
1815 cam_warning(LOG_UI, "audio_recording set fail");
1818 camapp->audio_recording = tempval;
1819 cam_config_set_boolean(PROP_AUDIO_REC_NAME, tempval);
1823 case PROP_AUDIO_QUALITY:
1825 gint tempval = g_value_get_int(value);
1826 /* set audio quality */
1827 camapp->audio_quality = tempval;
1828 cam_config_set_int(PROP_AUDIO_QUALITY_NAME, tempval);
1831 case PROP_BATTERY_CHARG:
1833 gint tempval_charging = g_value_get_int(value);
1835 DEBUG_TRACE("charging = %d", tempval_charging);
1836 camapp->battery_charging = tempval_charging;
1837 camapp->battery_level = cam_utils_get_battery_level();
1838 indicator_update_battery(ad, camapp->battery_level);
1841 case PROP_BATTERY_LEVEL:
1843 gint tempval = g_value_get_int(value);
1844 camapp->battery_charging = cam_utils_get_charging_status();
1845 camapp->battery_level = tempval;
1846 indicator_update_battery(ad, camapp->battery_level);
1852 gint tempval = g_value_get_int(value);
1853 if (!cam_mm_set_zoom(tempval)) {
1854 cam_warning(LOG_UI, "zoom set fail");
1857 camapp->zoom = tempval;
1862 gint tempval = g_value_get_int(value);
1864 camapp->storage = tempval;
1865 cam_config_set_int(PROP_STORAGE_NAME, tempval);
1868 case PROP_GUIDELINE:
1870 gboolean tempval = g_value_get_boolean(value);
1872 camapp->guideline = tempval;
1873 cam_config_set_boolean(PROP_GUIDELINE_NAME, tempval);
1878 gboolean tempval = g_value_get_boolean(value);
1879 camapp->review = tempval;
1880 cam_config_set_boolean(PROP_REVIEW_NAME, tempval);
1883 case PROP_IMAGE_COUNT:
1885 gint tempval = g_value_get_int(value);
1886 if (!cam_mm_set_image_count(tempval)) {
1887 cam_warning(LOG_UI, "image_count set fail");
1890 camapp->image_count = tempval;
1893 case PROP_SHUTTER_SOUND:
1895 gint tempval = g_value_get_int(value);
1896 camapp->shutter_sound = tempval;
1897 cam_config_set_int(PROP_SHUTTER_SOUND_NAME, tempval);
1900 case PROP_SIZE_LIMIT:
1902 gint tempval = g_value_get_int(value);
1903 if (!cam_app_set_size_limit
1904 (tempval, camapp->size_limit_type)) {
1905 cam_warning(LOG_UI, "size_limit set fail");
1908 camapp->size_limit = tempval;
1911 case PROP_SIZE_LIMIT_TYPE:
1913 gint tempval = g_value_get_int(value);
1914 camapp->size_limit_type = tempval;
1919 guint tempval = g_value_get_uint(value);
1920 camapp->rec_elapsed = tempval;
1923 case PROP_REC_FILE_SIZE:
1925 guint tempval = g_value_get_uint(value);
1926 camapp->rec_filesize = tempval;
1930 cam_warning(LOG_UI, "unknow type :%d ", type);
1934 /* indicator should be updated here!!! */
1935 /* change_indicator_mode_icons(ad); */
1939 gboolean cam_mode_change(void *data, int to_mode)
1941 struct appdata *ad = (struct appdata *)data;
1942 cam_retv_if(ad == NULL, FALSE);
1943 CamAppData *camapp = ad->camapp_handle;
1944 cam_retv_if(camapp == NULL, FALSE);
1947 debug_fenter(LOG_UI);
1949 cam_elm_cache_flush();
1951 evas_object_hide(ad->timer_icon_edje);
1952 REMOVE_TIMER(ad->timer_timer);
1953 ad->timer_activated = false;
1954 DEL_EVAS_OBJECT(ad->timer_icon_edje);
1955 #ifdef GUIDE_LINE_ENALBE
1956 DEL_EVAS_OBJECT(ad->guideline_edje);
1957 camapp->guideline = FALSE;
1959 cam_app_timeout_checker_remove();
1960 /* draw to_mode icon in preview area */
1961 #ifdef USE_CAMERA_APP_SHUTTER_SOUND
1962 if (ad->play_rec_sound != 0)
1965 /*cam_app_black_screen_show(ad, to_mode);*/
1967 if (cam_mm_get_state() == CAMERA_STATE_CAPTURING
1968 && (camapp->camera_mode == CAM_CAMERA_MODE)) {
1969 cam_mm_capture_stop(true, CAM_CAMERA_MODE);
1972 /* stop preview and destory mmfw handle */
1973 if (!cam_app_preview_stop()) {
1974 cam_critical(LOG_MM, "cam_app_preview_stop faild");
1975 goto MODE_CHANGE_FAILED;
1979 if (!cam_mm_destory()) {
1980 cam_critical(LOG_MM, "cam_mm_destory faild");
1981 cam_app_notice_popup(data,
1982 "cam_mm_destory faild BY MIDDLE WARE",
1983 cam_app_timeout_notice_response_cb);
1987 if (to_mode == CAM_CAMERA_MODE) {
1988 DEBUG_TRACE("session_type :SOUND_SESSION_TYPE_SHARE");
1989 session_type = SOUND_SESSION_TYPE_SHARE;
1991 DEBUG_TRACE("session_type :SOUND_SESSION_TYPE_EXCLUSIVE");
1992 session_type = SOUND_SESSION_TYPE_EXCLUSIVE;
1994 if (!cam_mm_session_init(session_type)) {
1995 cam_critical(LOG_MM, "cam_mm_session_init faild");
1996 goto MODE_CHANGE_FAILED;
1999 if (!cam_mm_create(CAM_DEVICE_MEGA, to_mode)) {
2000 cam_critical(LOG_MM, "cam_mm_create failed");
2001 goto MODE_CHANGE_FAILED;
2004 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
2005 cam_utils_remove_idler_all(ad);
2007 if (to_mode == CAM_CAMCORDER_MODE) {
2008 ad->last_camera_zoom_mode = camapp->zoom_mode;
2011 if (!cam_handle_create(ad)) {
2012 cam_critical(LOG_CAM, "cam_handle_create faild");
2013 goto MODE_CHANGE_FAILED;
2017 if (!cam_handle_init(ad, to_mode)) {
2018 cam_critical(LOG_CAM, "cam_handle_init faild");
2019 goto MODE_CHANGE_FAILED;
2023 else if (to_mode == CAM_CAMERA_MODE) {
2024 camapp->zoom_mode = ad->last_camera_zoom_mode;
2026 if (!cam_callback_init(ad)) {
2027 cam_critical(LOG_MM, "cam_init_mm_callback failed");
2028 goto MODE_CHANGE_FAILED;
2031 DEBUG_TRACE("camera mode = %d", to_mode);
2032 if (!cam_app_init_attribute(ad, to_mode)) {
2033 cam_critical(LOG_MM, "cam_app_init_attribute failed");
2034 // goto MODE_CHANGE_FAILED;
2037 cam_app_get_preview_offset_coordinate(ad);
2039 if (!cam_app_preview_start(ad)) {
2040 cam_critical(LOG_MM, "cam_app_preview_start failed");
2041 goto MODE_CHANGE_FAILED;
2044 cam_app_timeout_checker_init(ad);
2047 /*update toolbar shortcuts*/
2048 cam_toolbar_destroy(ad);
2049 cam_toolbar_create(ad);
2050 cam_app_update_quickview_icon((void *)ad);
2055 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2059 gboolean cam_recording_mode_change(void *data, int rec_mode)
2061 struct appdata *ad = (struct appdata *)data;
2062 CamAppData *camapp = NULL;
2063 CamDeviceType device_type = CAM_DEVICE_MEGA;
2064 GValue value = { 0 };
2066 gboolean cam_reset = FALSE;
2068 debug_fenter(LOG_CAM);
2070 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2071 camapp = ad->camapp_handle;
2072 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2074 cam_app_timeout_checker_remove();
2076 g_value_init(&value, G_TYPE_INT);
2078 cam_mm_get_video_device(&video_dev);
2079 if (((camapp->recording_mode == CAM_RECORD_SELF || camapp->recording_mode == CAM_RECORD_SELF_MMS )&& video_dev == CAM_DEVICE_MEGA)
2080 || ((camapp->recording_mode != CAM_RECORD_SELF || camapp->recording_mode == CAM_RECORD_SELF_MMS) && video_dev == CAM_DEVICE_VGA)) {
2082 /* stop preview and destory mmfw handle */
2084 if (!cam_app_preview_stop()) {
2085 cam_critical(LOG_MM, "cam_app_preview_stop faild");
2088 if (!cam_mm_destory()) {
2089 cam_critical(LOG_MM, "cam_mm_destory faild");
2092 if (camapp->recording_mode == CAM_RECORD_SELF ||camapp->recording_mode == CAM_RECORD_SELF_MMS ) {
2093 device_type = CAM_DEVICE_VGA;
2095 device_type = CAM_DEVICE_MEGA;
2098 if (!cam_mm_create(device_type, camapp->camera_mode)) {
2099 cam_critical(LOG_MM, "cam_mm_create failed");
2100 cam_app_notice_popup(ad, "cam_app_preview_start failed", cam_app_timeout_notice_response_cb);
2103 cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
2104 DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
2107 if (!cam_app_preview_stop()) {
2108 cam_critical(LOG_MM, "cam_app_preview_stop faild");
2113 ad->camapp_handle->enable_touch_af = TRUE;
2115 if(rec_mode == CAM_RECORD_SELF) {
2117 ad->camapp_handle->enable_touch_af = FALSE;
2118 g_value_set_int(&value, FPS_SLOW);
2119 if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
2120 cam_critical(LOG_UI, "fps set fail");
2124 g_value_set_int(&value, CAM_RESOLUTION_VGA);
2125 if (!cam_handle_value_set(ad, PROP_RESOLUTION, &value)) {
2126 cam_critical(LOG_UI, "resolution set fail");
2130 g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
2131 if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
2132 cam_critical(LOG_UI, "size limit set fail");
2136 if (!cam_mm_reset_recording_motion_fps()) {
2137 cam_critical(LOG_UI,
2138 "slow motion fps set fail");
2141 camapp->recording_mode = CAM_RECORD_SELF;
2142 } else if (rec_mode == CAM_RECORD_MMS ||rec_mode == CAM_RECORD_SELF_MMS ) {
2143 g_value_set_int(&value, FPS_SLOW);
2144 if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
2145 cam_critical(LOG_UI, "fps set fail");
2149 g_value_set_int(&value, CAM_RESOLUTION_QCIF);
2150 if (!cam_handle_value_set(ad, PROP_RESOLUTION, &value)) {
2151 cam_critical(LOG_UI, "resolution set fail");
2155 g_value_set_int(&value, CAM_REC_MMS_MAX_SIZE);
2156 if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
2157 cam_critical(LOG_UI, "size limit set fail");
2161 if (!cam_mm_reset_recording_motion_fps()) {
2162 cam_critical(LOG_UI,
2163 "slow motion fps set fail");
2166 if (rec_mode == CAM_RECORD_MMS)
2167 camapp->recording_mode = CAM_RECORD_MMS;
2169 camapp->recording_mode = CAM_RECORD_SELF_MMS;
2173 cam_config_get_int(PROP_RESOLUTION_NAME, REC_RESOLUTION_DEFAULT);
2175 g_value_set_int(&value, FPS_DEFAULT);
2176 if (!cam_handle_value_set(ad, PROP_FPS, &value)) {
2177 cam_critical(LOG_UI, "fps set fail");
2181 g_value_set_int(&value, resolution_n);
2182 if (!cam_handle_value_set(ad, PROP_RESOLUTION, &value)) {
2183 cam_critical(LOG_UI, "resolution set fail");
2187 g_value_set_int(&value, REC_SIZE_LIMIT_DEFAULT);
2188 if (!cam_handle_value_set(ad, PROP_SIZE_LIMIT, &value)) {
2189 cam_critical(LOG_UI, "size limit set fail");
2193 if (!cam_mm_reset_recording_motion_fps()) {
2194 cam_critical(LOG_UI,
2195 "slow motion fps set fail");
2198 camapp->recording_mode = CAM_RECORD_NORMAL;
2202 if (!cam_app_init_attribute(ad, camapp->camera_mode)) {
2203 cam_critical(LOG_MM, "cam_app_init_attribute failed");
2207 if (!cam_app_set_recording_mode(ad, rec_mode)) {
2208 DEBUG_TRACE("cam_app_set_recording_mode failed");
2213 cam_app_get_preview_offset_coordinate(ad);
2215 if (!cam_callback_init(ad)) {
2216 cam_critical(LOG_MM, "cam_init_mm_callback failed");
2217 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2221 if (!cam_app_preview_start(ad)) {
2222 cam_critical(LOG_MM, "cam_app_preview_start failed");
2223 cam_app_notice_popup(ad, "PREVIEW START FAILED !!", cam_app_timeout_notice_response_cb);
2227 cam_app_timeout_checker_init(ad);
2233 static gboolean cam_app_set_capture_format_shooting_mode(int mode)
2236 case CAM_SINGLE_MODE:
2238 if (!cam_mm_set_capture_format(CAMERA_PIXEL_FORMAT_JPEG))
2246 "\n################# shooting mode set return success : %d\n",
2252 static void cam_shooting_mode_reset(void *data)
2257 gboolean cam_shooting_mode_change(void *data)
2259 struct appdata *ad = (struct appdata *)data;
2260 CamAppData *camapp = NULL;
2261 CamDeviceType device_type = CAM_DEVICE_MEGA;
2262 GValue value = { 0 };
2264 gboolean cam_reset = FALSE;
2266 debug_fenter(LOG_CAM);
2268 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
2269 camapp = ad->camapp_handle;
2270 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
2272 cam_elm_cache_flush();
2274 cam_app_stop_video_stream();
2275 cam_app_timeout_checker_remove();
2276 cam_shooting_mode_reset(ad);
2277 cam_mm_get_video_device(&video_dev);
2279 if ((camapp->shooting_mode == CAM_SELF_MODE && video_dev == CAM_DEVICE_MEGA)
2280 || (camapp->shooting_mode != CAM_SELF_MODE && video_dev == CAM_DEVICE_VGA)) {
2281 /* stop preview and destory mmfw handle */
2283 if (!cam_app_preview_stop()) {
2284 cam_critical(LOG_MM, "cam_app_preview_stop faild");
2287 if (!cam_mm_destory()) {
2288 cam_critical(LOG_MM, "cam_mm_destory faild");
2291 if (camapp->shooting_mode == CAM_SELF_MODE) {
2292 device_type = CAM_DEVICE_VGA;
2294 device_type = CAM_DEVICE_MEGA;
2296 DEBUG_TRACE("device_type = %d" ,device_type);
2297 if (!cam_mm_create(device_type, camapp->camera_mode)) {
2298 cam_critical(LOG_MM, "cam_mm_create failed");
2299 cam_app_notice_popup(ad, "cam_app_preview_start faild ", cam_app_timeout_notice_response_cb);
2302 cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
2303 DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
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_volume_key_press(void *data)
3061 struct appdata *ad = (struct appdata *)data;
3062 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3064 CamAppData *camapp = NULL;
3065 camapp = ad->camapp_handle;
3066 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
3068 if (ad->cancel_key_press == TRUE)
3069 return ECORE_CALLBACK_CANCEL;
3072 gboolean up_key = ad->up_key;
3073 debug_fenter(LOG_UI);
3075 state = cam_mm_get_state();
3076 cam_debug(LOG_UI, " state = %d", state);
3077 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
3079 case RECORDER_STATE_RECORDING:
3080 case RECORDER_STATE_PAUSED:
3081 case RECORDER_STATE_READY:
3083 if (!camapp->zoom_lock) {
3084 zoom_in(ad, up_key);
3088 case RECORDER_STATE_NONE:
3089 case RECORDER_STATE_CREATED:
3094 } else if(camapp->camera_mode == CAM_CAMERA_MODE) {
3096 case CAMERA_STATE_PREVIEW:
3097 case CAMERA_STATE_CAPTURED:
3099 if (!camapp->zoom_lock) {
3100 zoom_in(ad, up_key);
3104 case CAMERA_STATE_NONE:
3105 case CAMERA_STATE_CREATED:
3106 case CAMERA_STATE_CAPTURING:
3114 return ECORE_CALLBACK_RENEW;
3117 static gboolean cam_power_key_press(void *data)
3119 struct appdata *ad = (struct appdata *)data;
3120 CamAppData *camapp = NULL;
3122 #ifdef ENABLE_CAM_POWER_CONTROL
3123 power_lock_state(POWER_STATE_SCREEN_OFF, 0);
3126 debug_fenter(LOG_UI);
3128 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3129 camapp = ad->camapp_handle;
3130 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
3132 if (ad->mm_state < CAMERA_STATE_PREVIEW) {
3134 } else if (ad->mm_state == CAMERA_STATE_PREVIEW) {
3136 } else if (ad->mm_state > CAMERA_STATE_PREVIEW) {
3137 if (camapp->camera_mode == CAM_CAMERA_MODE) {
3138 DEBUG_TRACE("camera mode");
3140 camapp->rec_stop_type = CAM_REC_STOP_POWER_KEY;
3141 if (!cam_video_record_stop(ad)) {
3142 DEBUG_TRACE("record stop fail");
3149 #ifdef ENABLE_CAM_POWER_CONTROL
3150 power_unlock_state(POWER_STATE_SCREEN_OFF);
3156 static gboolean __cam_end_key_grab_init(void *data)
3158 struct appdata *ad = (struct appdata *)data;
3159 Ecore_X_Display *disp = NULL;
3161 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3162 cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
3164 disp = ecore_x_display_get();
3165 cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
3167 if (utilx_grab_key(disp, ad->main_xid, KEY_END, SHARED_GRAB) == -1) {
3168 cam_critical(LOG_SYS, "%s key grap fail", KEY_END);
3174 gboolean cam_key_grab_init(void *data)
3176 struct appdata *ad = (struct appdata *)data;
3177 Ecore_X_Display *disp = NULL;
3179 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3180 cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
3187 DEBUG_TRACE("key_grab_init############################");
3189 ad->cancel_key_press = FALSE;
3191 disp = ecore_x_display_get();
3192 cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
3195 if (utilx_grab_key(disp, ad->main_xid, KEY_VOLUMEUP, TOP_POSITION_GRAB) != success) {
3196 cam_critical(LOG_SYS, "%s key grap fail", KEY_VOLUMEUP);
3199 if (utilx_grab_key(disp, ad->main_xid, KEY_VOLUMEDOWN, TOP_POSITION_GRAB) != success) {
3200 cam_critical(LOG_SYS, "%s key grap fail", KEY_VOLUMEDOWN);
3204 if (utilx_grab_key(disp, ad->main_xid, KEY_CAMERA, TOP_POSITION_GRAB) != success) {
3205 cam_critical(LOG_SYS, "%s key grap fail", KEY_CAMERA);
3208 if (utilx_grab_key(disp, ad->main_xid, KEY_CONFIG, TOP_POSITION_GRAB) != success) {
3209 cam_critical(LOG_SYS, "%s key grap fail", KEY_CONFIG);
3213 if (utilx_grab_key(disp, ad->main_xid, KEY_POWER, SHARED_GRAB) != success) {
3214 cam_critical(LOG_SYS, "%s key grap fail", KEY_POWER);
3219 if (utilx_grab_key(disp, ad->main_xid, KEY_SEND, SHARED_GRAB) != success) {
3220 cam_critical(LOG_SYS, "%s key grap fail", KEY_SEND);
3223 if (utilx_grab_key(disp, ad->main_xid, KEY_END, SHARED_GRAB) != success) {
3224 cam_critical(LOG_SYS, "%s key grap fail", KEY_END);
3228 ad->isGrabed = TRUE;
3232 gboolean cam_key_grab_deinit(void *data)
3234 struct appdata *ad = (struct appdata *)data;
3235 Ecore_X_Display *disp = NULL;
3239 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
3240 cam_retvm_if(ad->main_xid <= 0, FALSE, "main_xid <= 0");
3244 DEBUG_TRACE("key_grab_deinit############################");
3246 disp = ecore_x_display_get();
3247 cam_retvm_if(disp == NULL, FALSE, "ecore_x_display_get fail");
3250 if (utilx_ungrab_key(disp, ad->main_xid, KEY_VOLUMEUP) != success){
3251 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_VOLUMEUP);
3254 if (utilx_ungrab_key(disp, ad->main_xid, KEY_VOLUMEDOWN) != success){
3255 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_VOLUMEDOWN);
3260 if (utilx_ungrab_key(disp, ad->main_xid, KEY_CAMERA) != success){
3261 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_CAMERA);
3265 if (utilx_ungrab_key(disp, ad->main_xid, KEY_CONFIG) != success){
3266 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_CONFIG);
3271 if (utilx_ungrab_key(disp, ad->main_xid, KEY_POWER) != success){
3272 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_POWER);
3275 if (utilx_ungrab_key(disp, ad->main_xid, KEY_PAUSE) != success){
3276 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_PAUSE);
3281 if (utilx_ungrab_key(disp, ad->main_xid, KEY_SEND) != success){
3282 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_SEND);
3285 if (utilx_ungrab_key(disp, ad->main_xid, KEY_SELECT) != success){
3286 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_SELECT);
3289 if (utilx_ungrab_key(disp, ad->main_xid, KEY_END) != success){
3290 cam_critical(LOG_SYS, "%s key ungrap fail", KEY_END);
3294 ad->isGrabed = FALSE;
3298 gboolean cam_app_mouse_event_init(void *data)
3300 struct appdata *ad = (struct appdata *)data;
3302 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3305 #if ENABLE_MOUSE_CONTROL
3306 if (ad->mouse_down == NULL) {
3308 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
3309 cam_mouse_button_down, ad);
3312 if (ad->mouse_up == NULL) {
3314 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
3315 cam_mouse_button_up, ad);
3319 if (ad->mouse_move == NULL) {
3321 ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
3322 cam_mouse_move, ad);
3330 gboolean cam_app_mouse_event_deinit(void *data)
3332 struct appdata *ad = (struct appdata *)data;
3334 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3337 if (ad->mouse_down) {
3338 ecore_event_handler_del(ad->mouse_down);
3339 ad->mouse_down = NULL;
3342 ecore_event_handler_del(ad->mouse_up);
3343 ad->mouse_up = NULL;
3345 if (ad->mouse_move) {
3346 ecore_event_handler_del(ad->mouse_move);
3347 ad->mouse_move = NULL;
3353 gboolean cam_app_key_event_init(void *data)
3355 struct appdata *ad = (struct appdata *)data;
3357 DEBUG_TRACE("cam_app_key_event_init");
3360 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3363 if (ad->key_down == NULL) {
3365 ecore_event_handler_add(ECORE_EVENT_KEY_DOWN,
3366 cam_hard_key_down, ad);
3368 if (ad->key_up == NULL) {
3370 ecore_event_handler_add(ECORE_EVENT_KEY_UP, cam_hard_key_up,
3373 #if ENABLE_MOUSE_CONTROL
3374 if (ad->mouse_down == NULL) {
3376 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
3377 cam_mouse_button_down, ad);
3380 if (ad->mouse_up == NULL) {
3382 ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP,
3383 cam_mouse_button_up, ad);
3387 if (ad->mouse_move == NULL) {
3389 ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE,
3390 cam_mouse_move, ad);
3398 gboolean cam_app_key_event_deinit(void *data)
3400 struct appdata *ad = (struct appdata *)data;
3402 DEBUG_TRACE("cam_app_key_event_deinit");
3405 cam_critical(LOG_UI, "appdata is NULL, maybe not created");
3409 ecore_event_handler_del(ad->key_down);
3410 ad->key_down = NULL;
3413 ecore_event_handler_del(ad->key_up);
3416 if (ad->mouse_down) {
3417 ecore_event_handler_del(ad->mouse_down);
3418 ad->mouse_down = NULL;
3421 ecore_event_handler_del(ad->mouse_up);
3422 ad->mouse_up = NULL;
3424 if (ad->mouse_move) {
3425 ecore_event_handler_del(ad->mouse_move);
3426 ad->mouse_move = NULL;
3432 Eina_Bool cam_hard_key_down(void *data, int type, void *event_info)
3434 struct appdata *ad = (struct appdata *)data;
3435 CamAppData *camapp = NULL;
3438 Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info;
3440 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
3442 cam_debug(LOG_UI, "Key name : %s", kd->keyname);
3444 camapp = ad->camapp_handle;
3445 cam_retvm_if(camapp == NULL, -1, "camapp_handle is NULL");
3447 ad->show_menu = FALSE;
3448 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3449 cam_toolbar_and_setting_popup_del(ad);
3451 cam_app_timeout_checker_update();
3453 /* Camera key Press */
3454 if (0 == strcmp(kd->keyname, KEY_CANCEL)) {
3455 ad->cancel_key_press = TRUE;
3457 if (0 == strcmp(kd->keyname, KEY_CONFIG)) { /* camera key - full */
3458 if (!camapp->key_lock) {
3459 camapp->key_lock = TRUE;
3460 CAM_TA_ACUM_ITEM_BEGIN("Total capture time", 0);
3461 CAM_TA_ACUM_ITEM_BEGIN
3462 (" camera key to capture start", 0);
3463 if (!cam_camera_key_press(ad)) {
3465 "cam_camera_key_press failed");
3467 camapp->key_lock = FALSE;
3470 /* Camera key HALF press */
3471 else if (0 == strcmp(kd->keyname, KEY_CAMERA)) { /* camera key - half */
3472 if (!camapp->key_lock) {
3473 camapp->key_lock = TRUE;
3474 ad->displayed_setting_popup = DISPLAY_NONE_POPUP;
3475 ad->show_menu = FALSE;
3476 cam_toolbar_and_setting_popup_del(ad);
3478 if (!cam_camera_key_half_press(ad)) {
3480 "cam_camera_key_half_press failed");
3482 camapp->key_lock = FALSE;
3484 } else if (0 == strcmp(kd->keyname, KEY_VOLUMEUP)) {
3485 if (!camapp->key_lock) {
3486 camapp->key_lock = TRUE;
3488 cam_add_longpress_key_timer(ad);
3489 camapp->key_lock = FALSE;
3491 } else if (0 == strcmp(kd->keyname, KEY_VOLUMEDOWN)) {
3492 if (!camapp->key_lock) {
3493 camapp->key_lock = TRUE;
3495 cam_add_longpress_key_timer(ad);
3496 camapp->key_lock = FALSE;
3498 } else if (0 == strcmp(kd->keyname, KEY_SELECT)) {
3500 } else if ((0 == strcmp(kd->keyname, KEY_SELECT))
3501 && ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
3502 if (!camapp->key_lock) {
3503 camapp->key_lock = TRUE;
3506 #ifdef ENABLE_CAM_POWER_CONTROL
3507 else if (0 == strcmp(kd->keyname, KEY_POWER)) {
3508 if (!camapp->key_lock) {
3509 camapp->key_lock = TRUE;
3510 power_unlock_state(POWER_STATE_NORMAL);
3511 cam_power_key_press(ad);
3512 camapp->key_lock = FALSE;
3520 Eina_Bool cam_hard_key_up(void *data, int type, void *event_info)
3522 struct appdata *ad = (struct appdata *)data;
3523 CamAppData *camapp = NULL;
3525 Ecore_Event_Key *kd = (Ecore_Event_Key *) event_info;
3526 cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
3528 cam_debug(LOG_UI, "Key name : %s", kd->keyname);
3530 camapp = ad->camapp_handle;
3531 cam_retv_if(camapp == NULL, ECORE_CALLBACK_CANCEL);
3533 cam_app_timeout_checker_update();
3535 if (0 == strcmp(kd->keyname, KEY_CANCEL)) {
3536 ad->cancel_key_press = FALSE;
3539 if(ad->cancel_key_press == TRUE) {
3540 if (ad->longpress_timer) { /*volume key long press */
3541 cam_del_longpress_key_timer(ad);
3542 cam_volume_key_press(ad);
3548 if (0 == strcmp(kd->keyname, KEY_CONFIG)) { /* camera key - full */
3549 if (!camapp->key_lock) {
3550 camapp->key_lock = TRUE;
3551 if (!cam_camera_key_release(ad)) {
3553 "cam_camera_key_release failed");
3555 camapp->key_lock = FALSE;
3557 } else if (0 == strcmp(kd->keyname, KEY_CAMERA)) { /* camera key - half */
3558 if (!camapp->key_lock) {
3559 camapp->key_lock = TRUE;
3560 if (!cam_camera_key_half_release(ad)) {
3562 "cam_camera_key_release failed");
3564 camapp->key_lock = FALSE;
3566 } else if (0 == strcmp(kd->keyname, KEY_VOLUMEUP)
3567 || 0 == strcmp(kd->keyname, KEY_VOLUMEDOWN)) {
3568 if (!camapp->key_lock) {
3569 camapp->key_lock = TRUE;
3570 cam_del_longpress_key_timer(ad);
3571 cam_volume_key_press(ad);
3572 camapp->key_lock = FALSE;
3574 } else if (0 == strcmp(kd->keyname, KEY_END)
3575 || 0 == strcmp(kd->keyname, KEY_SELECT)) {
3577 DEBUG_TRACE("camapp->key_lock = %d", camapp->key_lock);
3578 if (!camapp->key_lock) {
3579 camapp->key_lock = TRUE;
3581 if ( ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
3584 mm_state = cam_mm_get_state();
3585 ad->appcore_state = CAM_APPCORE_PAUSE_STATE;
3586 if (mm_state < CAMERA_STATE_CAPTURING) {
3592 if (ad->imageviewer_ug) {
3593 DEBUG_TRACE("destory imageviewer");
3594 cam_app_close_ug(ad);
3595 cam_app_start_rotate(ad, false);
3596 cam_app_key_event_deinit(ad);
3597 if(!cam_key_grab_deinit(ad))
3598 DEBUG_TRACE("cam_key_grab_deinit fail");
3599 ad->foucs_out_from_quickview = FALSE;
3601 if ((ad->mm_state == RECORDER_STATE_RECORDING
3602 || ad->mm_state == RECORDER_STATE_PAUSED)
3603 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
3604 camapp->rec_stop_type = CAM_REC_STOP_NORMAL;
3605 ad->recording_commit = ecore_idler_add(cam_video_idler_record_stop, ad);
3606 camapp->key_lock = FALSE;
3608 } else if (ad->mm_state == CAMERA_STATE_CAPTURING
3609 &&camapp->camera_mode == CAM_CAMERA_MODE) {
3610 camapp->key_lock = FALSE;
3612 } else if ((ad->mm_state == RECORDER_STATE_READY
3613 &&camapp->camera_mode == CAM_CAMERA_MODE)
3614 ||(ad->mm_state == CAMERA_STATE_PREVIEW
3615 &&camapp->camera_mode == CAM_CAMCORDER_MODE)) {
3618 if (0 == strcmp(kd->keyname, KEY_END)) {
3619 cam_debug(LOG_UI, " Key up : END Key");
3620 /*cam_app_exit(ad);*/
3621 /*camapp->key_lock = FALSE;*/
3623 camapp->key_lock = FALSE;
3626 cam_debug(LOG_UI, "key lock status = %d",
3634 /*note: focus edje zoom in*/
3635 static void __cam_app_set_focus_zoom_in_effect(void *data)
3637 struct appdata *ad = (struct appdata *)data;
3638 cam_retm_if(ad == NULL, "appdata is NULL");
3640 if (ad->camapp_handle->enable_touch_af == TRUE) {
3641 REMOVE_TIMER(ad->continuous_af_timer);
3642 cam_camera_touch_af_press(ad);
3644 cam_app_draw_af_box(ad);
3645 evas_object_show(ad->focus_edje);
3646 cam_ui_effect_utils_set_zoom_effect(ad->focus_edje,
3647 CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE,
3648 CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE,
3649 CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION);
3653 /*note: focus edje zoom out*/
3654 static void __cam_app_set_focus_zoom_out_effect(void *data)
3656 struct appdata *ad = (struct appdata *)data;
3657 cam_retm_if(ad == NULL, "appdata is NULL");
3659 if (ad->camapp_handle->enable_touch_af == TRUE) {
3660 REMOVE_TIMER(ad->continuous_af_timer);
3661 cam_camera_touch_af_press(ad);
3663 cam_app_draw_af_box(ad);
3664 evas_object_show(ad->focus_edje);
3665 cam_ui_effect_utils_set_zoom_effect(ad->focus_edje,
3666 CAM_FOCUS_EDJE_ZOOM_EFFECT_END_RATE,
3667 CAM_FOCUS_EDJE_ZOOM_EFFECT_START_RATE,
3668 CAM_FOCUS_EDJE_ZOOM_EFFECT_DURATION);
3672 #if ENABLE_MOUSE_CONTROL
3673 Eina_Bool cam_mouse_button_down(void *data, int type, void *event_info)
3675 struct appdata *ad = (struct appdata *)data;
3676 cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
3677 CamAppData *camapp = ad->camapp_handle;
3678 cam_retvm_if(camapp == NULL, EINA_FALSE, "camapp_handle is NULL");
3681 || ad->setting_ctxpopup
3682 || (ad->toolbar_show_setting_popup == TRUE)
3683 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) {
3684 cam_debug(LOG_UI, "ignore touch event");
3685 ad->af_outside = TRUE;
3688 int toolbar_width = TOOLBAR_W;
3690 Ecore_Event_Mouse_Button *md = (Ecore_Event_Mouse_Button *) event_info;
3691 cam_debug(LOG_UI, "mouse button down[%d, %d]", md->root.x, md->root.y);
3693 ad->touch_lcd_x = md->root.x; /* LCD x */
3694 ad->touch_lcd_y = md->root.y; /* LCD y */
3696 ad->af_outside = FALSE;
3699 if (ad->touch_lcd_y < toolbar_width
3700 || ad->touch_lcd_y > (ad->win_width - toolbar_width)) {
3701 ad->af_outside = TRUE;
3703 ad->af_x = ad->touch_lcd_y - ad->preview_offset_x;
3706 if (ad->touch_lcd_x < ad->preview_offset_y
3707 || ad->touch_lcd_x > (ad->preview_h + ad->preview_offset_y)) {
3708 ad->af_outside = TRUE;
3710 ad->af_y = ad->preview_h - ad->touch_lcd_x;
3713 ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
3714 ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
3716 ("*************************************************************************************");
3717 DEBUG_TRACE("touched lcd x,y=[%d,%d] af x,y=[%d,%d]\n", ad->touch_lcd_x,
3718 ad->touch_lcd_y, ad->af_x, ad->af_y);
3720 ("*************************************************************************************");
3721 if (ad->af_outside == FALSE) {
3722 __cam_app_set_focus_zoom_in_effect((void *)ad);
3724 cam_app_timeout_checker_update();
3725 cam_setting_toolbar_execution_time_checker_update(ad);
3730 Eina_Bool cam_mouse_button_up(void *data, int type, void *event_info)
3732 struct appdata *ad = (struct appdata *)data;
3733 CamAppData *camapp = NULL;
3736 || ad->setting_ctxpopup
3737 || (ad->toolbar_show_setting_popup == TRUE)
3738 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) {
3739 cam_debug(LOG_UI, "ignore touch event");
3740 ad->af_outside = TRUE;
3744 Ecore_Event_Mouse_Button *md = (Ecore_Event_Mouse_Button *) event_info;
3745 if (ad->shutter_move == TRUE) {
3748 double shutter_h_ratio = SHUTTER_H_RATIO;
3749 double shutter_w_ratio = SHUTTER_W_RATIO;
3750 double screen_ratio = SCREEN_RATIO;
3752 y_gap = (double)md->root.y /(double)ad->win_width;
3753 x_gap = (double)md->root.x /(double)ad->win_height;
3755 if (x_gap > (screen_ratio -shutter_h_ratio) || x_gap < shutter_h_ratio) {
3756 if (!cam_camera_key_half_release(ad)) {
3757 DEBUG_TRACE("cam_camera_key_half_release");
3759 } else if (ad->angle == 90 ||ad->angle == 180) {
3760 if (y_gap > shutter_w_ratio) {
3761 if (!cam_camera_key_half_release(ad)) {
3762 DEBUG_TRACE("cam_camera_key_half_release");
3766 if (y_gap < screen_ratio -shutter_w_ratio) {
3767 if (!cam_camera_key_half_release(ad)) {
3768 DEBUG_TRACE("cam_camera_key_half_release");
3774 cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
3775 cam_debug(LOG_UI, "mouse button up[%d, %d]", md->root.x, md->root.y);
3776 if (ad->af_outside == FALSE) {
3777 __cam_app_set_focus_zoom_out_effect((void *)ad);
3779 camapp = ad->camapp_handle;
3780 if (camapp == NULL) {
3781 cam_warning(LOG_UI, "camapp_handle is NULL, maybe not created");
3787 Eina_Bool cam_mouse_move(void *data, int type, void *event_info)
3789 struct appdata *ad = (struct appdata *)data;
3790 CamAppData *camapp = NULL;
3792 Ecore_Event_Mouse_Move *md = (Ecore_Event_Mouse_Move *) event_info;
3794 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
3795 cam_debug(LOG_UI, "mouse move[%d, %d]", md->root.x, md->root.y);
3796 cam_debug(LOG_UI, "mouse move angle[%lf]", md->multi.angle);
3797 cam_debug(LOG_UI, "mouse move pressure[%lf]", md->multi.pressure);
3798 camapp = ad->camapp_handle;
3799 if (camapp == NULL) {
3800 cam_warning(LOG_UI, "camapp_handle is NULL, maybe not created");
3803 cam_app_timeout_checker_update();
3809 void cam_app_set_config_group(gint mode)
3811 cam_debug(LOG_UI, "mode : %d", mode);
3813 if (mode == CAM_CAMERA_MODE) {
3814 cam_config_set_group_name(CAM_CONFIG_TYPE_PREVIEW, "still");
3816 cam_config_set_group_name(CAM_CONFIG_TYPE_PREVIEW, "video");
3819 debug_fleave(LOG_UI);
3824 int cam_app_get_latest_mode(void)
3826 cam_config_set_group_name(CAM_CONFIG_TYPE_COMMON, "common");
3828 cam_config_get_int_by_type(CAM_CONFIG_TYPE_COMMON, "mode",
3831 debug_msg(LOG_UI, "last mode:%d", last_mode);
3835 const gchar *cam_app_get_target_path(void)
3837 CamAppData *camapp = NULL;
3839 camapp = cam_handle_get();
3843 const gchar *default_path = NULL;
3844 switch (camapp->storage) {
3845 case CAM_STORAGE_INTERNAL:
3847 (camapp->camera_mode == CAM_CAMCORDER_MODE) ?
3848 cam_file_get_internal_video_path() :
3849 cam_file_get_internal_image_path();
3851 case CAM_STORAGE_EXTERNAL:
3853 (camapp->camera_mode == CAM_CAMCORDER_MODE) ?
3854 cam_file_get_external_video_path() :
3855 cam_file_get_external_image_path();
3858 cam_critical(LOG_UI, "Unknow storage type : %d",
3863 cam_debug(LOG_UI, "target path : [%s]", default_path);
3864 return default_path;
3866 cam_critical(LOG_UI, "camapp handle is NULL");
3871 gchar *cam_app_get_last_filename(void)
3873 CamAppData *camapp = NULL;
3874 gchar *last_file_path = NULL;
3875 struct appdata *ad = (struct appdata *)cam_appdata_get();
3876 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3878 camapp = cam_handle_get();
3879 cam_retvm_if(camapp == NULL, NULL, "cam_handle is NULL");
3881 last_file_path = cam_file_get_last_file_path(ad, cam_app_get_target_path());
3883 if (last_file_path) {
3884 cam_debug(LOG_UI, "last_file_path : %s", last_file_path);
3886 cam_critical(LOG_UI, "last_file_path is NULL");
3889 return last_file_path;
3892 gchar *cam_app_get_next_filename(void)
3895 CamAppData *camapp = NULL;
3896 gchar *new_filename = NULL;
3897 struct appdata *ad = (struct appdata *)cam_appdata_get();
3898 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
3900 camapp = cam_handle_get();
3901 cam_retvm_if(camapp == NULL, NULL, "cam_handle is NULL");
3903 mm_state = cam_mm_get_state();
3905 if (mm_state == RECORDER_STATE_RECORDING
3906 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
3907 new_filename = cam_file_get_next_filename(cam_app_get_target_path(), INAGE_FILE_NAME, IMAGE_FILE_EXTENSION);
3909 new_filename = cam_file_get_next_filename(cam_app_get_target_path(),
3910 (camapp->camera_mode ==
3914 (camapp->camera_mode ==
3916 IMAGE_FILE_EXTENSION :
3917 VIDEO_FILE_EXTENSION);
3921 cam_debug(LOG_UI, "next filename : %s", new_filename);
3923 cam_critical(LOG_UI, "new_filename is NULL");
3926 return new_filename;
3929 static void __cam_preview_cb(void *stream_buffer, int buffer_size, int width,
3930 int height, camera_pixel_format_e format, void *user_data)
3933 cam_retm_if(user_data == NULL, "data is null");
3934 struct appdata *ad = (struct appdata *)user_data;
3936 CamAppData *camapp = ad->camapp_handle;
3937 cam_retm_if(camapp == NULL, "camapp is null");
3941 static void __cam_state_change_cb(camera_state_e previous, camera_state_e current,
3942 bool by_policy, void *user_data)
3944 struct appdata *ad = NULL;
3945 CamAppData *camapp = NULL;
3946 ad = (struct appdata *)user_data;
3947 cam_retm_if(ad == NULL, "camapp is null");
3948 camapp = ad->camapp_handle;
3949 cam_retm_if(camapp == NULL, "camapp is null");
3950 DEBUG_TRACE("current= %d, previous = %d, ad->enable_mode_change = %d",
3951 current, previous, ad->enable_mode_change);
3952 if (current == CAMERA_STATE_PREVIEW) {
3953 ad->enable_mode_change = TRUE;
3955 ad->enable_mode_change = FALSE;
3957 DEBUG_TRACE("current= %d, previous = %d, ad->enable_mode_change = %d",
3958 current, previous, ad->enable_mode_change);
3959 cam_app_state_manager(previous, current, by_policy);
3963 static void __cam_focus_cb(camera_focus_state_e state, void *user_data) {
3965 struct appdata *ad = NULL;
3966 CamAppData *camapp = NULL;
3968 ad = (struct appdata *)user_data;
3969 cam_retm_if(ad == NULL, "appdata is NULL");
3972 * TODO: perhaps we have to consider: in thread, we should not use any efl api.
3974 * try not to operation the global evas object in asynchronous
3975 * callback or thread. Some bs perhaps caused by this.
3978 /*note: while rotating, return. */
3979 if (ad->is_rotating) return;/*note: while rotating, return. */
3980 camapp = ad->camapp_handle;
3981 cam_retm_if(camapp == NULL, "camapp is NULL");
3984 cam_debug(LOG_MM, " Focus state changed to [%d]", state);
3986 if(ad->appcore_state == CAM_APPCORE_PAUSE_STATE)
3989 if (camapp->camera_mode == CAM_CAMERA_MODE) {
3990 camapp->focus_state = state ;
3991 cam_app_focus_guide_update(ad);
3993 camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
3996 case CAMERA_FOCUS_STATE_ONGOING:
3998 case CAMERA_FOCUS_STATE_FOCUSED:
3999 if (ad->mm_state < CAMERA_STATE_CAPTURING) {
4000 if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF
4001 && camapp->camera_mode == CAM_CAMERA_MODE )
4002 cam_sound_play (CAM_SOUND_EFFECT_AF_OK, ad);
4004 if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO){
4005 REMOVE_TIMER(ad->continuous_af_timer);
4006 DEBUG_TRACE("start caf");
4007 cam_app_focus_guide_create(ad);
4008 cam_app_focus_guide_update(ad);
4012 case CAMERA_FOCUS_STATE_FAILED:
4013 if (ad->mm_state < CAMERA_STATE_CAPTURING) {
4014 if (camapp->shutter_sound != CAM_SETTINGS_SOUND_OFF
4015 && camapp->camera_mode == CAM_CAMERA_MODE)
4016 cam_sound_play (CAM_SOUND_EFFECT_AF_FAIL, ad);
4018 if (camapp->focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) {
4019 REMOVE_TIMER(ad->continuous_af_timer);
4020 DEBUG_TRACE("start caf");
4021 cam_app_focus_guide_create(ad);
4022 cam_app_focus_guide_update(ad);
4033 static void __cam_capture_cb(camera_image_data_s* image,
4034 camera_image_data_s* postview,
4035 camera_image_data_s* thumbnail,
4038 struct appdata *ad = (struct appdata *)user_data;
4039 cam_retm_if(ad == NULL, "appdata is NULL");
4040 CamAppData *camapp = NULL;
4041 camapp = ad->camapp_handle;
4042 cam_retm_if(camapp == NULL, "camapp is NULL");
4044 gchar *filename = NULL;
4046 if ((image->format == CAMERA_PIXEL_FORMAT_YUYV)
4047 || (image->format == CAMERA_PIXEL_FORMAT_NV12)) {
4049 "got raw data - format [%d] data [%p], length [%d], width [%d], height [%d]",
4050 image->format, image->data, image->size, image->width,
4053 /* MMImageJpegEncodeToFile(filename, src->data, src->width,src->height, src->format, 90); */
4054 } else if (image->format == CAMERA_PIXEL_FORMAT_JPEG) {
4056 "got JPEG data - data [%p], length [%d], width [%d], height [%d]",
4057 image->data, image->size, image->width, image->height);
4060 filename = cam_app_get_next_filename();
4061 if (filename == NULL) {
4062 cam_critical(LOG_SYS, " Get next filename FAILED");
4066 fp = fopen(filename, "w+");
4068 cam_critical(LOG_SYS, "FileOPEN error!!");
4071 cam_debug(LOG_SYS, "FileOPEN success");
4072 if (fwrite(image->data, image->size, 1, fp) != 1) {
4073 cam_critical(LOG_SYS, "File write error!!");
4077 /*fsync(fp->_fileno);*/
4078 /*block for increasing formance of shot-to-shot */
4079 cam_debug(LOG_SYS, "File write success");
4082 if (camapp->filename)
4083 free(camapp->filename);
4084 camapp->filename = strdup(filename);
4090 static void __cam_capture_completed_cb(void *user_data)
4092 /* camera_error_e e;*/
4094 struct appdata *ad = NULL;
4095 CamAppData *camapp = NULL;
4097 ad = (struct appdata *)user_data;
4098 camapp = ad->camapp_handle;
4100 if (camapp->camera_mode == CAM_CAMERA_MODE) {
4101 #ifndef ENABLE_CAPTURE_ANIMATION
4103 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
4104 CamIdlerItem *item = NULL;
4105 item = (CamIdlerItem *)
4106 g_malloc(sizeof(CamIdlerItem));
4111 item->data = user_data;
4112 item->idler = ecore_idler_add(cam_image_capture_handle_idler, item);
4115 ad->capture_cb_list = g_list_append(ad->capture_cb_list, item->idler);
4117 cam_info(LOG_UI, "image capture idler add : %p ", item->idler);
4121 if (!cam_app_preview_start(ad)) {
4122 cam_critical(LOG_MM, "cam_app_preview_start failed");
4123 cam_app_notice_popup(ad, "cam_app_preview_start faild ",
4124 cam_app_timeout_notice_response_cb);
4127 }else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
4129 DEBUG_TRACE("MM_MESSAGE_CAMCORDER_VIDEO_SNAPSHOT_CAPTURED");
4130 ecore_idler_add(cam_capture_on_recording_handle, ad);
4134 static void __cam_interrupted_cb(camera_policy_e policy, camera_state_e previous, camera_state_e current, void *data)
4136 struct appdata *ad = (struct appdata *)data;
4137 CamAppData *camapp = NULL;
4138 cam_retm_if(ad == NULL, "appdata is NULL");
4139 camapp = ad->camapp_handle;
4140 cam_retm_if(camapp == NULL, "cam_handle is NULL");
4141 DEBUG_TRACE("policy is [%d]",policy);
4143 case CAMERA_POLICY_SOUND:
4145 cam_app_black_screen_show(ad, 2);
4146 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
4149 case CAMERA_POLICY_SECURITY:
4150 cam_app_mdm_syspopup(ad);
4157 static void __rec_interrupted_cb(recorder_policy_e policy, recorder_state_e previous, recorder_state_e current, void *data)
4159 struct appdata *ad = (struct appdata *)data;
4160 CamAppData *camapp = NULL;
4161 cam_retm_if(ad == NULL, "appdata is NULL");
4162 camapp = ad->camapp_handle;
4163 cam_retm_if(camapp == NULL, "cam_handle is NULL");
4164 DEBUG_TRACE("policy is [%d]",policy);
4167 case RECORDER_POLICY_SOUND:
4169 cam_app_black_screen_show(ad, 2);
4170 ecore_timer_add(0.01, cam_delay_popup, (void *)ad);
4173 case RECORDER_POLICY_SECURITY:
4174 cam_app_mdm_syspopup(ad);
4181 static void __cam_error_cb(int error, camera_state_e current_state, void *user_data)
4183 struct appdata *ad = NULL;
4184 CamAppData *camapp = NULL;
4186 ad = (struct appdata *)user_data;
4187 cam_retm_if(ad == NULL, "appdata is NULL");
4188 camapp = ad->camapp_handle;
4189 cam_retm_if(camapp == NULL, "camapp is NULL");
4192 state = current_state;
4194 "MM ERROR occurs : code [%x], state [%d]",
4198 case CAMERA_ERROR_DEVICE:
4199 cam_critical(LOG_SYS,
4200 " MM CAMCARORDER ERROR ");
4201 if (state < CAMERA_STATE_CAPTURING) {
4202 cam_app_notice_popup(ad,
4203 _("IDS_CAM_POP_UNABLE_TO_START_CAMERA"),
4204 cam_app_timeout_notice_response_cb);
4206 cam_app_notice_popup(ad,
4207 _("IDS_CAM_POP_CAPTURE_TIME_EXCEEDED_START_AGAIN"),
4208 cam_app_timeout_notice_response_cb);
4211 case CAMERA_ERROR_INVALID_PARAMETER:
4212 if (state == CAMERA_STATE_CAPTURING) {
4213 cam_app_notice_popup(ad,
4214 _("IDS_CAM_POP_CAPTURE_ERROR"),
4215 cam_app_timeout_notice_response_cb);
4218 case CAMERA_ERROR_SOUND_POLICY:
4220 DEBUG_TRACE(" MM CAMCARORDER ERROR\n");
4221 cam_app_black_screen_show(ad, 2);
4222 ecore_timer_add(0.01, cam_delay_popup,
4226 case CAMERA_ERROR_INVALID_OPERATION:
4228 DEBUG_TRACE(" Internal error\n");
4229 cam_app_black_screen_show(ad, 2);
4230 ecore_timer_add(0.01, cam_delay_popup,
4234 case CAMERA_ERROR_OUT_OF_MEMORY:
4236 DEBUG_TRACE(" Out of memory\n");
4237 cam_app_black_screen_show(ad, 2);
4238 ecore_timer_add(0.01, cam_delay_popup,
4244 DEBUG_TRACE(" MM CAMCARORDER ERROR error code =%x \n", error);
4245 if (state == CAMERA_STATE_CAPTURING
4246 && camapp->camera_mode == CAM_CAMERA_MODE) {
4247 cam_app_notice_popup(ad, _("IDS_CAM_POP_CAPTURE_ERROR"),
4248 cam_app_capture_error_popup_response_cb);
4256 static void __recorder_state_cb(recorder_state_e previous , recorder_state_e current , bool by_policy, void *user_data)
4258 struct appdata *ad = NULL;
4259 CamAppData *camapp = NULL;
4261 ad = (struct appdata *)user_data;
4262 cam_retm_if(ad == NULL, "appdata is NULL");
4263 camapp = ad->camapp_handle;
4264 cam_retm_if(camapp == NULL, "camapp is NULL");
4265 if (current == RECORDER_STATE_READY) {
4266 ad->enable_mode_change = TRUE;
4268 ad->enable_mode_change = FALSE;
4270 cam_app_state_manager(previous, current, by_policy);
4273 void __recording_status_cb(int elapsed_time, int file_size, void *user_data)
4275 struct appdata *ad = NULL;
4276 CamAppData *camapp = NULL;
4277 ad = (struct appdata *)user_data;
4278 cam_retm_if(ad == NULL, "appdata is NULL");
4279 camapp = ad->camapp_handle;
4280 cam_retm_if(camapp == NULL, "camapp is NULL");
4281 /* update current time */
4285 elapsed = elapsed_time / 1000;
4286 filesize = file_size;
4287 if (camapp->rec_elapsed < elapsed) {
4288 GValue value = { 0, };
4290 cam_debug(LOG_UI, "time updated: %u ", elapsed);
4291 CAM_GVALUE_SET_UINT(value, elapsed);
4292 cam_handle_value_set(ad, PROP_REC_TIME, &value);
4294 if (camapp->rec_filesize < filesize) {
4295 GValue value = { 0, };
4297 cam_debug(LOG_UI, "filesize updated: %u ", filesize);
4298 CAM_GVALUE_SET_UINT(value, filesize);
4299 cam_handle_value_set(ad, PROP_REC_FILE_SIZE, &value);
4303 void __recording_limit_reached_cb(recorder_recording_limit_type_e type, void *user_data)
4305 struct appdata *ad = NULL;
4306 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");
4312 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
4313 camapp->rec_stop_type = type;/*CAM_REC_STOP_TIME_LIMIT;*/
4314 ad->recording_commit =
4315 ecore_idler_add(cam_video_idler_record_stop, ad);
4319 gboolean cam_callback_init(void *data)
4321 struct appdata *ad = (struct appdata *)data;
4322 CamAppData *camapp = NULL;
4324 debug_fenter(LOG_UI);
4326 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4327 camapp = ad->camapp_handle;
4328 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4329 camapp->error_cb = __cam_error_cb;
4330 camapp->focus_cb = __cam_focus_cb;
4331 camapp->state_cb = __cam_state_change_cb;
4332 camapp->preview_cb = __cam_preview_cb;
4333 camapp->capture_completed_cb = __cam_capture_completed_cb;
4334 camapp->cam_interrupted_cb = __cam_interrupted_cb;
4336 camapp->recording_status_cb = __recording_status_cb;
4337 camapp->recording_state_changed_cb = __recorder_state_cb;
4338 camapp->recording_limit_reached_cb = __recording_limit_reached_cb;
4339 camapp->rec_interrupted_cb = __rec_interrupted_cb;
4341 if (camapp->camera_mode == CAM_CAMERA_MODE) {
4342 switch (camapp->shooting_mode) {
4343 case CAM_SINGLE_MODE:
4345 camapp->capture_cb = (camera_capturing_cb)
4352 camapp->capture_cb = __cam_capture_cb;
4356 if (camapp->camera_mode == CAM_CAMERA_MODE) {
4357 /*ret &= cam_mm_recorder_unset_state_changed_cb();*/
4358 ret &= cam_mm_set_preview_cb(camapp->preview_cb, (void*)ad);
4359 ret &= cam_mm_set_focus_changed_cb(camapp->focus_cb, (void*)ad);
4360 ret &= cam_mm_set_state_changed_cb(camapp->state_cb, (void*)ad);
4361 ret &= cam_mm_set_error_cb(camapp->error_cb, (void*)ad);
4362 ret &= cam_mm_set_camera_interrupted_cb(camapp->cam_interrupted_cb, (void*)ad);
4363 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
4364 ret &= cam_mm_unset_state_changed_cb();
4365 /*ret &= cam_mm_unset_preview_cb();*/
4366 /*ret &= cam_mm_unset_state_changed_cb();*/
4367 /*ret &= cam_mm_unset_error_cb();*/
4368 ret &= cam_mm_recorder_set_state_changed_cb(camapp->recording_state_changed_cb, (void*)ad);
4369 ret &= cam_mm_recorder_set_recording_status_cb(camapp->recording_status_cb, (void*)ad);
4370 ret &= cam_mm_recorder_set_recording_limit_reached_cb(camapp->recording_limit_reached_cb, (void*)ad);
4371 ret &= cam_mm_set_recorder_interrupted_cb(camapp->rec_interrupted_cb, (void*)ad);
4378 static void cam_app_close_ug(void *data)
4380 cam_debug(LOG_UI, " ");
4381 struct appdata *ad = (struct appdata *)data;
4384 cam_info(LOG_UI, "ad->imageviewer_ug : %p", ad->imageviewer_ug);
4385 if (ad->imageviewer_ug) {
4386 ug_destroy(ad->imageviewer_ug);
4387 ad->imageviewer_ug = NULL;
4389 cam_file_init(NULL);
4393 static void __ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
4395 cam_debug(LOG_UI, " ");
4397 struct appdata *ad = (struct appdata *)priv;
4403 base = ug_get_layout(ug);
4408 case UG_MODE_FULLVIEW:
4409 evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND,
4411 elm_win_resize_object_add(ad->win_main, base);
4412 evas_object_show(base);
4419 void __ug_result_cb(ui_gadget_h ug, service_h result, void *priv)
4422 cam_debug(LOG_UI, " ");
4424 struct appdata *ad = (struct appdata *)priv;
4427 CamAppData *camapp = NULL;
4429 cam_retm_if(ad == NULL, "appdata is NULL");
4430 camapp = ad->camapp_handle;
4431 cam_retm_if(camapp == NULL, "cam_handle is NULL");
4433 if (ad->imageviewer_ug) {
4434 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
4435 if (result == NULL) {
4436 ad->path_in_return = false;
4440 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
4442 service_create(&reply);
4444 service_get_extra_data(result, "crop_image_path", &val);
4445 service_add_extra_data(reply, "crop_image_path", val);
4446 service_get_extra_data(result, "image_path", &val);
4447 service_add_extra_data(reply, "image_path", val);
4449 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_SUCCEEDED);
4450 service_destroy(reply);
4452 ad->path_in_return = true;
4455 /* get result value. */
4456 service_get_extra_data(result, "Result", &val);
4458 if (strcmp(val, "Ok") == 0) {
4459 ad->path_in_return = true;
4462 else if (strcmp(val, "Cancel") == 0) {
4463 ad->path_in_return = false;
4470 void __ug_destroy_cb(ui_gadget_h ug, void *priv)
4472 cam_debug(LOG_UI, " ");
4477 struct appdata *ad = (struct appdata *)priv;
4479 cam_retm_if(ad == NULL, "appdata is NULL");
4480 ad->ug_is_deleting_process = TRUE;
4482 cam_app_timeout_checker_init(ad);
4484 /* add mouse down event - image viewer bug */
4485 if (ad->black_screen) {
4486 DEL_EVAS_OBJECT(ad->black_screen);
4487 ad->black_screen = NULL;
4490 if (ad->imageviewer_ug) {
4491 ug_destroy(ad->imageviewer_ug);
4492 ad->imageviewer_ug = NULL;
4495 elm_win_indicator_mode_set(ad->win_main, 0);
4496 cam_app_start_rotate(ad, false);
4498 ecore_idler_add(__ug_destory_postprocessing, ad);
4503 Eina_Bool __ug_destory_postprocessing(void *data)
4505 struct appdata *ad = data;
4506 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4507 ad->ug_is_deleting_process = TRUE;
4508 CamAppData *camapp = NULL;
4509 camapp = ad->camapp_handle;
4510 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4512 cam_app_mouse_event_init(ad);
4514 show_toolbar_edje(ad);
4516 if (!cam_file_check_exists(camapp->filename)) {
4517 free(camapp->filename);
4518 camapp->filename = NULL;
4520 if (!cam_app_preview_start(ad)) {
4521 cam_app_notice_popup(ad,
4522 "PREVIEW START FAIL !!",
4523 cam_app_timeout_notice_response_cb);
4526 if (!cam_key_grab_init(ad))
4527 DEBUG_TRACE("cam_key_grab_init fail");
4528 cam_app_key_event_init(ad);
4529 /* update thumbnail to quickview after return from image viewer */
4530 cam_app_update_quickview_icon(ad);
4531 cam_file_init(NULL);
4532 ad->ug_is_deleting_process = FALSE;
4533 return ECORE_CALLBACK_CANCEL;
4538 gboolean cam_app_run_image_viewer_ug(void *data, char *file_path)
4540 DEBUG_TRACE("START");
4542 struct appdata *ad = (struct appdata *)data;
4544 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4545 cam_retvm_if(file_path == NULL, FALSE, "file_path is NULL");
4547 if (ad->ug_is_deleting_process) /*NOTE:before old ug is not deleted completely, should not create new ug*/
4550 cam_debug(LOG_UI, " ");
4551 cam_debug(LOG_UI, "path :%s", file_path);
4553 if (ad->imageviewer_ug) {
4554 return FALSE;/*NOTE: ug is login, not create ug again.*/
4559 opt = UG_OPT_INDICATOR_LANDSCAPE_ONLY | UG_OPT_INDICATOR_DISABLE;
4560 UG_INIT_EFL(ad->win_main, opt);
4562 struct ug_cbs cbs = { 0, };
4564 cbs.layout_cb = __ug_layout_cb;
4565 cbs.result_cb = __ug_result_cb;
4566 cbs.destroy_cb = __ug_destroy_cb;
4567 cbs.priv = (void *)data;
4570 if (ad->imageviewer_service)
4571 service_destroy(ad->imageviewer_service);
4573 service_create(&ad->imageviewer_service);
4575 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
4576 if ((ad->exe_args->caller) && (strcmp(ad->exe_args->caller, "contacts") == 0)) {
4577 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "SETAS");
4578 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_SET_AS_TYPE, "CallerID");
4580 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "DISPLAY");
4582 } else if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
4583 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_VIEW_MODE_KEY_NAME, "CAMERA");
4585 service_add_extra_data(ad->imageviewer_service, IMAGE_VIEWER_FILE_PATH_KEY_NAME, file_path);
4587 switch (ad->rot_current) {
4588 case APP_DEVICE_ORIENTATION_0:
4589 elm_win_rotation_with_resize_set(ad->win_main, 0);
4591 case APP_DEVICE_ORIENTATION_270:
4592 case APP_DEVICE_ORIENTATION_180:
4594 case APP_DEVICE_ORIENTATION_90:
4595 elm_win_rotation_with_resize_set(ad->win_main, 90);
4601 /* Create UI gadget */
4602 ad->imageviewer_ug =
4603 ug_create(NULL, IMAGE_VIEWER_UG_NAME, UG_MODE_FULLVIEW,
4604 ad->imageviewer_service, &cbs);
4606 if (!ad->imageviewer_ug) {
4607 cam_critical(LOG_SYS, "image viewer UI Gadget create fail...");
4611 if (ad->imageviewer_ug) {
4612 cam_app_key_event_deinit(ad);
4613 if(!cam_key_grab_deinit(ad)){
4614 DEBUG_TRACE("cam_key_grab_deinit fail");
4616 cam_app_preview_stop();
4617 #ifdef ENABLE_CAM_POWER_CONTROL
4618 power_unlock_state(POWER_STATE_NORMAL);
4621 cam_warning(LOG_UI, "Cannot create imageviewer ug");
4622 cam_file_init(NULL);
4632 gboolean cam_app_run_media_browser(void *data, gchar *filename)
4634 cam_debug(LOG_UI, "filename = %s", filename);
4635 struct appdata *ad = (struct appdata *)data;
4636 CamAppData *camapp = NULL;
4639 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4640 camapp = ad->camapp_handle;
4641 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4643 debug_fenter(LOG_UI);
4644 ad->launch_type = CAM_LAUNCH_IS_ALREADY_RUNNING;
4645 DEBUG_TRACE("ad->launch_type = %d", ad->launch_type);
4646 state = cam_mm_get_state();
4647 if (state > CAMERA_STATE_PREVIEW) {
4648 cam_warning(LOG_MM, "Invaild state : %d", state);
4651 toolbar_hide_setting_popup(ad);
4652 ad->foucs_out_from_quickview = FALSE;
4654 /* del mouse down event - image viewer bug */
4655 cam_app_mouse_event_deinit(ad);
4656 if (!cam_app_run_image_viewer_ug(ad, cam_app_get_last_filename())) {
4657 DEBUG_TRACE("cam_app_run_image_viewer_ug failed");
4658 cam_app_mouse_event_init(ad);
4662 if (camapp->thumbnail_name) { /* Some image is deleted from image viewer and galler -> BS */
4663 free(camapp->thumbnail_name);
4664 camapp->thumbnail_name = NULL;
4667 cam_app_timeout_checker_remove();
4671 gboolean cam_app_clear_engine_data(void *data, gboolean release)
4676 gboolean cam_app_check_wide_resolution(int id)
4679 gfloat get_value = (HIWORD(id) * 3.0) / (LOWORD(id) * 4.0);
4680 if (ABS(get_value - 1.0) < CAM_EPSINON
4681 || ABS((gfloat)((HIWORD(id) * 25.0) / (LOWORD(id) * 36.0)) - 1.0) < CAM_EPSINON) {
4689 gboolean cam_app_is_skip_video_stream()
4690 { /*if true , must finish function in stream callback function */
4691 return video_stream_skip_flag;
4694 void cam_app_stop_video_stream()
4696 video_stream_skip_flag = TRUE;
4699 void cam_app_run_video_stream()
4701 video_stream_skip_flag = FALSE;
4704 Eina_Bool _auto_shot_idle_cb(void *data)
4706 debug_fenter(LOG_CAM);
4707 struct appdata *ad = (struct appdata *)data;
4708 CamAppData *camapp = NULL;
4710 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4711 camapp = ad->camapp_handle;
4712 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4714 if (ad->auto_shot_idle) {
4715 ecore_idler_del(ad->auto_shot_idle);
4716 ad->auto_shot_idle = NULL;
4719 debug_fleave(LOG_CAM);
4721 return ECORE_CALLBACK_CANCEL;
4724 gboolean cam_app_create_progressbar(void *data)
4726 struct appdata *ad = (struct appdata *)(data);
4727 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4729 cam_debug(LOG_UI, "");
4731 cam_app_destroy_progressbar(ad);
4733 ad->progressbar = elm_progressbar_add(ad->win_main);
4734 cam_retvm_if(ad->progressbar == NULL, FALSE,
4735 "Cannot create progressbar object\n");
4737 elm_object_style_set(ad->progressbar, "list_progress");
4738 evas_object_size_hint_align_set(ad->progressbar, EVAS_HINT_FILL,
4741 evas_object_show(ad->progressbar);
4746 gboolean cam_app_set_progressbar_value(void *data, double value)
4748 struct appdata *ad = (struct appdata *)(data);
4749 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4751 cam_debug(LOG_UI, " value [%f]", value);
4753 if (ad->progressbar)
4754 elm_progressbar_value_set(ad->progressbar, value);
4759 gboolean cam_app_set_progressbar_text(void *data, const char *text)
4761 struct appdata *ad = (struct appdata *)(data);
4762 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4764 cam_retv_if(text == NULL, FALSE);
4766 if (ad->progressbar_edje)
4767 edje_object_part_text_set(_EDJ(ad->progressbar_edje),
4768 "progressbar_text", text);
4773 gboolean cam_app_destroy_progressbar(void *data)
4775 struct appdata *ad = (struct appdata *)(data);
4776 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4778 cam_debug(LOG_UI, " start");
4779 if (ad->progressbar)
4780 DEL_EVAS_OBJECT(ad->progressbar);
4781 if (ad->progressbar_edje)
4782 DEL_EVAS_OBJECT(ad->progressbar_edje);
4784 cam_debug(LOG_UI, " done");
4791 cam_app_haptic_cb(void *data, Evas_Object *o, const char *emission,
4794 debug_fenter(LOG_UI);
4795 cam_devman_haptic_play(100);
4796 /* haptic_oneshot(100); */
4800 static gboolean cam_app_timeout_checker_update()
4802 struct appdata *ad = NULL;
4803 CamAppData *camapp = NULL;
4804 gdouble c_time = 0.0;
4805 cam_debug(LOG_UI, "");
4807 ad = (struct appdata *)cam_appdata_get();
4808 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
4809 camapp = ad->camapp_handle;
4810 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
4812 if (ad->timeout_checker) {
4813 c_time = _get_current_time();
4814 ecore_timer_delay(ad->timeout_checker,
4815 (c_time - camapp->last_time));
4816 camapp->last_time = c_time;
4821 void cam_app_zoom_warring_popup(void *data, const char *msg,
4822 void (*func) (void *data, Evas_Object *obj, void *event_info))
4824 struct appdata *ad = (struct appdata *)(data);
4825 ad->zoom_warring_popup = elm_popup_add(ad->win_main);
4826 evas_object_size_hint_weight_set(ad->zoom_warring_popup, EVAS_HINT_EXPAND,
4828 elm_object_text_set(ad->zoom_warring_popup, msg);
4829 elm_popup_timeout_set(ad->zoom_warring_popup, 3.0);
4830 evas_object_smart_callback_add(ad->zoom_warring_popup, "timeout", func, data);
4831 evas_object_show(ad->zoom_warring_popup);
4833 void cam_app_mdm_syspopup(void *data){
4834 struct appdata *ad = (struct appdata *)(data);
4835 cam_retm_if(ad == NULL, " appdata is NULL");
4837 b = bundle_create();
4839 bundle_add(b, "_SYSPOPUP_CONTENT_", _("IDS_CAM_POP_SECURITY_POLICY_RESTRICTS_USE_OF_CAMERA"));
4840 syspopup_launch("mdm-syspopup", b);
4843 ecore_idler_add(cam_app_stop,ad);
4848 void cam_app_notice_popup(void *data, const char *msg,
4849 void (*func) (void *data,
4854 struct appdata *ad = (struct appdata *)(data);
4855 cam_retm_if(ad == NULL, " appdata is NULL");
4856 cam_retm_if(ad->win_main == NULL, " ad->win_main is NULL");
4857 Evas_Object *popup = NULL;
4858 popup = elm_popup_add(ad->win_main);
4861 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
4863 elm_object_text_set(popup, msg);
4864 /*elm_popup_mode_set(popup, ELM_POPUP_TYPE_ALERT);*/
4865 elm_popup_timeout_set(popup, 3.0);
4866 evas_object_smart_callback_add(popup, "timeout", func, data);
4867 ad->waring_popup = popup;
4868 evas_object_show(popup);
4870 void cam_app_snapshot_popup(void *data, const char *msg,
4871 void (*func) (void *data, Evas_Object *obj, void *event_info))
4873 struct appdata *ad = (struct appdata *)(data);
4874 cam_retm_if(ad == NULL, " appdata is NULL");
4875 cam_retm_if(ad->win_main == NULL, " ad->win_main is NULL");
4876 Evas_Object *popup = NULL;
4877 popup = elm_popup_add(ad->win_main);
4880 evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND,
4882 elm_object_text_set(popup, msg);
4883 /*elm_popup_mode_set(popup, ELM_POPUP_TYPE_ALERT);*/
4884 elm_popup_timeout_set(popup, 1.5);
4885 evas_object_smart_callback_add(popup, "timeout", func, data);
4886 ad->is_showing_snapshot_popup = TRUE; /*result popup is showing*/
4887 DEBUG_TRACE("ad->is_showing_snapshot_popup = TRUE");
4888 evas_object_show(popup);
4891 static void cam_app_capture_error_popup_response_cb(void *data, Evas_Object *obj, void *event_info)
4893 struct appdata *ad = (struct appdata *)cam_appdata_get();
4894 cam_retm_if(ad == NULL, " appdata is NULL");
4895 CamAppData *camapp = ad->camapp_handle;
4896 cam_retm_if(camapp == NULL, " camapp is NULL");
4898 evas_object_del(obj);
4900 cam_mm_capture_stop(FALSE, camapp->camera_mode);
4904 void cam_app_timeout_notice_response_cb(void *data, Evas_Object *obj,
4907 struct appdata *ad = (struct appdata *)cam_appdata_get();
4908 cam_retm_if(ad == NULL, " appdata is NULL");
4910 evas_object_del(obj);
4916 void cam_close_flash_feature(void *data)
4918 struct appdata *ad = (struct appdata *)data;
4919 cam_retm_if(ad == NULL, " appdata is NULL");
4920 CamAppData *camapp = ad->camapp_handle;
4921 cam_retm_if(camapp == NULL, " appdata is NULL");
4922 if (camapp->flash > CAM_FLASH_OFF) {
4923 GValue value = { 0 };
4924 CAM_GVALUE_SET_INT(value, CAM_FLASH_OFF);
4925 gint tempval = g_value_get_int(&value);
4926 if (!cam_mm_set_flash(tempval)) {
4927 cam_warning(LOG_UI, "flash set fail");
4930 camapp->flash = tempval;
4933 /*lowbattery callback*/
4934 void cam_app_lowbattery_close_flash_cb(void *data, Evas_Object *obj, void *event_info)
4936 struct appdata *ad = (struct appdata *)cam_appdata_get();
4937 cam_retm_if(ad == NULL, " appdata is NULL");
4939 evas_object_del(obj);
4941 cam_close_flash_feature(ad);
4943 cam_toolbar_update(ad);
4946 static void cam_app_auto_close_popup_response_ok_cb(void *data, Evas_Object *obj,
4950 struct appdata *ad = (struct appdata *)cam_appdata_get();
4951 cam_retm_if(ad == NULL, " appdata is NULL");
4953 if (ad->auto_close_timer) {
4954 ecore_timer_del(ad->auto_close_timer);
4955 ad->auto_close_timer = NULL;
4957 cam_app_timeout_checker_remove();
4958 if (ad->auto_close_popup)
4959 evas_object_del(ad->auto_close_popup);
4960 ad->auto_close_popup = NULL;
4965 static void cam_app_auto_close_popup_response_cancel_cb(void *data, Evas_Object *obj,
4969 struct appdata *ad = (struct appdata *)cam_appdata_get();
4970 cam_retm_if(ad == NULL, " appdata is NULL");
4971 if (ad->auto_close_timer) {
4972 ecore_timer_del(ad->auto_close_timer);
4973 ad->auto_close_timer = NULL;
4975 if (ad->auto_close_popup)
4976 evas_object_del(ad->auto_close_popup);
4977 ad->auto_close_popup = NULL;
4978 cam_app_timeout_checker_init(ad);
4981 void cam_app_auto_close_popup(void *data, const char *msg,
4982 void (*func) (void *data, Evas_Object *obj,
4985 struct appdata *ad = (struct appdata *)(data);
4986 cam_retm_if(ad == NULL, " appdata is NULL");
4987 if (ad->auto_close_popup) {
4988 evas_object_del(ad->auto_close_popup);
4989 ad->auto_close_popup = NULL;
4991 ad->auto_close_popup = elm_popup_add(ad->win_main);
4992 if (ad->auto_close_popup == NULL)
4994 evas_object_size_hint_weight_set(ad->auto_close_popup, EVAS_HINT_EXPAND,
4996 elm_popup_timeout_set(ad->auto_close_popup, 9.0);
4997 elm_object_text_set(ad->auto_close_popup, msg);
4998 Evas_Object *btn1 = elm_button_add(ad->auto_close_popup);
5000 evas_object_del(ad->auto_close_popup);
5001 ad->auto_close_popup = NULL;
5004 elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_OK"));
5005 elm_object_part_content_set(ad->auto_close_popup, "button1", btn1);
5006 evas_object_smart_callback_add(btn1, "clicked", cam_app_auto_close_popup_response_ok_cb, (void*)ad);
5007 Evas_Object *btn2 = elm_button_add(ad->auto_close_popup);
5009 evas_object_del(ad->auto_close_popup);
5010 ad->auto_close_popup = NULL;
5014 elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL"));
5015 elm_object_part_content_set(ad->auto_close_popup, "button2", btn2);
5016 evas_object_smart_callback_add(btn2, "clicked", cam_app_auto_close_popup_response_cancel_cb, (void*)ad);
5018 evas_object_show(ad->auto_close_popup);
5023 static Eina_Bool cam_app_auto_close_task(void *data)
5028 char *msg = _("IDS_CAM_POP_CLOSE_CAMERA_IN_PD_SECONDS");
5029 num = 1+ snprintf(NULL, 0, msg, AUTO_CLOSE_COUNT);
5030 DEBUG_TRACE("%d",num);
5031 str = (char *)malloc(num);
5033 memset(str, 0x00, num);
5034 snprintf(str, num, msg, AUTO_CLOSE_COUNT);
5035 DEBUG_TRACE("%s",str);
5036 cam_app_auto_close_popup(data, str, NULL);
5041 return ECORE_CALLBACK_CANCEL;
5045 static Eina_Bool cam_app_auto_close_timer_cb(void *data)
5047 struct appdata *ad = (struct appdata *)(data);
5048 CamAppData *camapp = NULL;
5052 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
5053 camapp = ad->camapp_handle;
5054 cam_retvm_if(camapp == NULL, 0, "cam_handle is NULL");
5056 diff = _get_current_time() - camapp->last_time;
5058 ad->auto_close_count++;
5060 count = count - ad->auto_close_count;
5062 if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
5063 && (diff >= CAMERA_APP_TIMEOUT + 10)) {
5065 "Quit camera application !!! diff time : [%lf]",
5067 cam_app_timeout_checker_remove();
5071 return ECORE_CALLBACK_CANCEL;
5073 cam_debug(LOG_UI, "####diff time : [%lf]", diff);
5079 static Eina_Bool cam_app_timeout_checker_cb(void *data)
5081 struct appdata *ad = (struct appdata *)(data);
5082 CamAppData *camapp = NULL;
5085 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
5086 camapp = ad->camapp_handle;
5087 cam_retvm_if(camapp == NULL, 0, "cam_handle is NULL");
5089 diff = _get_current_time() - camapp->last_time;
5091 if ((cam_mm_get_state() == CAMERA_STATE_PREVIEW)
5092 && (diff >= CAMERA_APP_TIMEOUT)) {
5094 "auto close popup is closeed after 10 secondes !!! diff time : [%lf]",
5096 ad->auto_close_count = 0;
5097 ad->auto_close_timer =
5098 ecore_timer_add(1, cam_app_auto_close_timer_cb, ad);
5099 // ecore_idler_add(cam_app_auto_close_task, ad);
5102 cam_debug(LOG_UI, "diff time : [%lf]", diff);
5106 gboolean cam_app_timeout_checker_init(void *data)
5108 struct appdata *ad = (struct appdata *)(data);
5109 CamAppData *camapp = NULL;
5111 debug_fenter(LOG_CAM);
5113 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5114 camapp = ad->camapp_handle;
5115 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
5117 if (ad->timeout_checker) {
5118 ecore_timer_del(ad->timeout_checker);
5119 ad->timeout_checker = NULL;
5121 if (ad->auto_close_timer) {
5122 ecore_timer_del(ad->auto_close_timer);
5123 ad->auto_close_timer = NULL;
5125 if (ad->auto_close_popup) {
5126 evas_object_del(ad->auto_close_popup);
5127 ad->auto_close_popup = NULL;
5129 if (ad->timer_timer) {
5130 ad->timer_activated = false;
5131 DEL_EVAS_OBJECT(ad->timer_icon_edje);
5132 REMOVE_TIMER(ad->timer_timer);
5134 ad->timeout_checker =
5135 ecore_timer_add(CAMERA_APP_TIMEOUT / 2, cam_app_timeout_checker_cb,
5137 camapp->last_time = _get_current_time();
5142 gboolean cam_app_timeout_checker_remove(void)
5144 struct appdata *ad = NULL;
5145 CamAppData *camapp = NULL;
5147 debug_fenter(LOG_CAM);
5149 ad = (struct appdata *)cam_appdata_get();
5150 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5151 camapp = ad->camapp_handle;
5152 cam_retvm_if(camapp == NULL, FALSE, "cam_handle is NULL");
5154 if (ad->timeout_checker) {
5155 ecore_timer_del(ad->timeout_checker);
5156 ad->timeout_checker = NULL;
5158 camapp->last_time = 0;
5163 #ifdef USE_FIFO_THREAD
5164 void *cam_app_FIFO_thread_run(void *data)
5166 struct appdata *ad = (struct appdata *)data;
5170 char buf[128] = { '\0', };
5172 cam_retvm_if(ad == NULL, NULL, "appdata is NULL");
5174 if (!access(CAM_FIFO_PATH, F_OK)) {
5175 unlink(CAM_FIFO_PATH);
5178 if (-1 == mkfifo(CAM_FIFO_PATH, 0666)) {
5179 cam_critical(LOG_SYS, " Make CamApp FIFO failed.");
5183 fd = open(CAM_FIFO_PATH, O_RDWR);
5185 cam_critical(LOG_SYS, " Open CamApp FIFO failed.");
5189 cam_debug(LOG_SYS, "Open CamApp FIFO [%s] success", CAM_FIFO_PATH);
5192 memset(buf, 0x00, 128);
5194 cam_debug(LOG_SYS, " Wait CamApp FIFO write...");
5196 int count = read(fd, buf, 128);
5198 cam_debug(LOG_SYS, " read error occur!");
5200 cam_debug(LOG_SYS, " Read from CamApp FIFO : [%s]", buf);
5202 if (!strcmp(buf, CAM_CAPTURE_AUTO_START)) {
5203 cam_debug(LOG_SYS, " #### Start _auto_shot_idle_cb");
5204 _auto_shot_idle_cb(data);
5205 } else if (!strcmp(buf, CAM_FIFO_CMD_EXIT)) {
5209 cam_warning(LOG_SYS, " Skip this...");
5214 unlink(CAM_FIFO_PATH);
5216 cam_debug(LOG_SYS, " Exit CamApp FIFO thread...");
5221 void cam_app_FIFO_thread_exit()
5223 int fd = open(CAM_FIFO_PATH, O_WRONLY);
5224 char *str_write = CAM_FIFO_CMD_EXIT;
5227 cam_critical(LOG_SYS, " Open CammApp FIFO file[%s] failed",
5230 int count = write(fd, str_write, strlen(str_write));
5232 cam_debug(LOG_SYS, " write error occur! ");
5235 cam_debug(LOG_SYS, " Write [%s] to FIFO Done.", str_write);
5241 #ifdef USE_FILE_REG_THREAD
5243 gboolean cam_app_create_file_register_thread(void *data)
5245 struct appdata *ad = (struct appdata *)data;
5248 cam_debug(LOG_SYS, "");
5250 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5252 err = pthread_mutex_init(&(ad->file_reg_mutex), NULL);
5254 cam_critical(LOG_CAM,
5255 "Create Camera file register mutex failed");
5259 err = pthread_cond_init(&(ad->file_reg_cond), NULL);
5261 cam_critical(LOG_CAM,
5262 "Create Camera file register cond failed");
5266 ad->file_reg_queue = g_queue_new();
5267 if (ad->file_reg_queue == NULL) {
5268 cam_critical(LOG_CAM,
5269 "Create Camera file register queue failed");
5274 pthread_create(&(ad->file_reg_thread), NULL,
5275 cam_app_file_register_thread_run, (void *)ad);
5277 cam_critical(LOG_CAM,
5278 "Create Camera file register thread failed");
5285 void *cam_app_file_register_thread_run(void *data)
5287 struct appdata *ad = (struct appdata *)data;
5288 gboolean Exit_loop = FALSE;
5290 cam_debug(LOG_FILE, "");
5292 pthread_mutex_lock(&ad->file_reg_mutex);
5294 while (!Exit_loop) {
5295 cam_debug(LOG_FILE, " wait signal...");
5297 pthread_cond_wait(&ad->file_reg_cond, &ad->file_reg_mutex);
5299 cam_debug(LOG_FILE, " signal received");
5301 while (!g_queue_is_empty(ad->file_reg_queue)) {
5302 char *filename = NULL;
5303 filename = g_queue_pop_head(ad->file_reg_queue);
5305 if (!strcmp(REG_THREAD_EXIT, filename)) {
5310 __cam_single_shot_reg_file(filename);
5312 cam_debug(LOG_FILE, " register done.");
5317 pthread_mutex_unlock(&ad->file_reg_mutex);
5319 pthread_mutex_destroy(&ad->file_reg_mutex);
5320 pthread_cond_destroy(&ad->file_reg_cond);
5322 cam_debug(LOG_SYS, " thread exit...");
5327 void cam_app_file_register_thread_exit(void *data)
5329 struct appdata *ad = (struct appdata *)data;
5330 char *exit_cmd = NULL;
5332 if (ad->file_reg_queue != NULL) {
5333 exit_cmd = strdup(REG_THREAD_EXIT);
5334 g_queue_push_tail(ad->file_reg_queue, exit_cmd);
5335 pthread_cond_signal(&ad->file_reg_cond);
5340 gboolean cam_app_init_with_args(void *data)
5342 struct appdata *ad = (struct appdata *)data;
5343 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5344 cam_retvm_if(ad->camapp_handle == NULL, FALSE, "camapp is NULL");
5346 cam_debug(LOG_SYS, "");
5347 if (ad->launching_mode == CAM_LAUNCHING_MODE_EXTERNAL) {
5348 ad->camapp_handle->camera_mode = ad->exe_args->cam_mode;
5349 if (CAM_CAMCORDER_MODE == ad->camapp_handle->camera_mode) {
5350 if (ad->exe_args->resolution == CAM_RESOLUTION_QCIF) {
5351 ad->camapp_handle->recording_mode = CAM_RECORD_MMS;
5352 ad->camapp_handle->resolution = CAM_RESOLUTION_QCIF;
5353 ad->camapp_handle->fps = FPS_SLOW;
5354 if (ad->exe_args->size_limit <= 0) {
5355 ad->camapp_handle->size_limit = CAM_REC_MMS_MAX_SIZE;
5357 ad->camapp_handle->size_limit = ad->exe_args->size_limit;
5359 ad->camapp_handle->size_limit_type = CAM_MM_SIZE_LIMIT_TYPE_BYTE;
5361 ad->camapp_handle->recording_mode = CAM_RECORD_NORMAL;
5362 ad->camapp_handle->resolution = ad->exe_args->resolution;
5363 ad->camapp_handle->fps = FPS_DEFAULT;
5366 ad->camapp_handle->shooting_mode = CAM_SINGLE_MODE;
5367 if (ad->exe_args->width <= 0
5368 || ad->exe_args->height <= 0) {
5369 ad->camapp_handle->resolution = CAM_RESOLUTION_VGA;
5371 ad->camapp_handle->resolution = CAM_RESOLUTION(ad->exe_args->width, ad->exe_args->height);
5373 ad->camapp_handle->review = ad->exe_args->review;
5376 cam_debug(LOG_SYS, " camera launch mode is normal.");
5380 cam_debug(LOG_SYS, " done");
5385 Eina_Bool cam_app_focus_guide_create(void *data)
5387 struct appdata *ad = (struct appdata *)data;
5388 cam_retv_if(ad == NULL, EINA_FALSE);
5390 DEL_EVAS_OBJECT(ad->focus_edje);
5393 cam_app_load_edj(ad->layout_main, CAM_UTILS_EDJ_NAME, "focus_image");
5394 if (ad->focus_edje == NULL) {
5395 cam_critical(LOG_UI, "focus_edje load failed ");
5399 evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
5400 DEBUG_TRACE("#######################################\n");
5401 DEBUG_TRACE(" MOVE FOCUS_EDJE : %f, %f", ad->af_start_x, ad->af_start_y);
5402 evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
5403 evas_object_show(ad->focus_edje);
5404 DEBUG_TRACE("#######################################\n");
5406 #ifdef CAMERA_MACHINE_I686
5407 evas_object_hide(ad->focus_edje);
5413 Eina_Bool cam_app_focus_guide_update(void *data)
5415 #ifndef CAMERA_MACHINE_I686
5416 struct appdata *ad = (struct appdata *)data;
5417 cam_retv_if(ad == NULL, EINA_FALSE);
5419 CamAppData *camapp = NULL;
5421 if (ad->focus_edje == NULL) {
5425 /*note: relocation the focus edje*/
5426 evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
5427 evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
5428 evas_object_show(ad->focus_edje);
5430 if (ad->setting_ctxpopup
5431 || (ad->toolbar_show_setting_popup == TRUE)
5432 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)) {
5433 cam_debug(LOG_UI, "do not need to update focus");
5434 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
5438 camapp = ad->camapp_handle;
5439 if (camapp == NULL) {
5442 if (ad->mm_state == CAMERA_STATE_CAPTURING
5443 && camapp->camera_mode == CAM_CAMERA_MODE) {
5446 if (ad->mm_state < CAMERA_STATE_PREVIEW || FALSE) {
5447 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
5450 DEBUG_TRACE("focus-state = %d, shooting-mode = %d", camapp->focus_state, camapp->shooting_mode);
5451 if (camapp->recording_mode == CAM_RECORD_SELF
5452 || camapp->recording_mode == CAM_RECORD_SELF_MMS
5453 || camapp->shooting_mode == CAM_SELF_MODE) {
5454 edje_object_signal_emit(_EDJ(ad->focus_edje), "focus,hide", "program");
5456 char signame[30] = { '\0', };
5457 const char *focus_state_name[4] = {
5464 snprintf(signame, sizeof(signame), "%s,%s", "focus", focus_state_name[camapp->focus_state]);
5466 cam_debug(LOG_UI, "emit signal : %s", signame);
5467 edje_object_signal_emit(_EDJ(ad->focus_edje), signame, "program");
5474 static int cam_app_state_manager(int previous, int current, gboolean by_asm)
5476 struct appdata *ad = NULL;
5477 CamAppData *camapp = NULL;
5479 cam_info(LOG_UI, "STATE_CHANGED : %d -> %d ", previous, current);
5481 ad = (struct appdata *)cam_appdata_get();
5482 cam_retv_if(ad == NULL, FALSE);
5484 camapp = ad->camapp_handle;
5485 cam_retv_if(camapp == NULL, FALSE);
5487 ad->mm_state = current;
5489 if (camapp->camera_mode == CAM_CAMERA_MODE) {
5490 if (current == CAMERA_STATE_PREVIEW) {
5491 if (previous == CAMERA_STATE_CAPTURING) {
5492 CAM_TA_ACUM_ITEM_END(" capture stop to preview", 0);
5493 CAM_TA_ACUM_ITEM_END("Total capture time", 0);
5494 cam_debug(LOG_MM, "capture end, preview start");
5497 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
5498 if (((previous == RECORDER_STATE_RECORDING)
5499 && (current != RECORDER_STATE_PAUSED))
5500 ||((previous == RECORDER_STATE_PAUSED)
5501 && (current != RECORDER_STATE_RECORDING))) {/*finished recording*/
5503 cam_info(LOG_UI, "Set gamma NORMAL");
5504 CamIdlerItem *item = NULL;
5505 item = (CamIdlerItem *)g_malloc(sizeof(CamIdlerItem));
5510 if (camapp->filename)
5511 free(camapp->filename);
5512 cam_mm_get_filename(&camapp->filename,0);/*file size not used,so set to 0*/
5513 cam_info(LOG_UI, "Recorded file name [%s] ", camapp->filename);
5516 item->data = (void*)ad;
5517 item->idler = ecore_idler_add(cam_video_capture_handle_idler, item);
5520 ad->capture_cb_list = g_list_append(ad->capture_cb_list, item->idler);
5522 cam_info(LOG_UI, "video capture idler add : %p ", item->idler);
5532 gboolean cam_app_exit(void *data)
5535 struct appdata *ad = (struct appdata *)data;
5536 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5544 static void cam_mmc_state_change_cb(keynode_t *key, void *data)
5546 struct appdata *ad = (struct appdata *)data;
5547 CamAppData *camapp = NULL;
5548 int mmc_state = vconf_keynode_get_int(key);
5550 cam_retm_if(ad == NULL, "appdata is NULL");
5551 camapp = ad->camapp_handle;
5552 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
5554 cam_debug(LOG_SYS, " start");
5556 if (mmc_state == VCONFKEY_SYSMAN_MMC_REMOVED
5557 && camapp->storage == CAM_STORAGE_EXTERNAL) {
5558 #ifdef USE_CAM_STORAGE_SETTING
5559 GValue value = { 0 };
5561 int mm_state = cam_mm_get_state();
5563 if ((mm_state == RECORDER_STATE_RECORDING
5564 || mm_state == RECORDER_STATE_PAUSED)
5565 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
5566 cam_video_record_cancel(ad);
5567 cam_app_notice_popup(ad,
5568 _("IDS_CAM_POP_REMOVE_MMC_RECORDING"),
5569 cam_app_popup_response_cb);
5571 #ifndef CAMERA_MACHINE_I686
5572 else if (mm_state != CAMERA_STATE_CAPTURING
5573 &&camapp->camera_mode == CAM_CAMERA_MODE) {
5574 if (cam_app_check_blocking_popup()) {
5575 cam_app_notice_popup(ad,
5576 _("IDS_CAM_POP_MEMORY_CARD_REMOVED"),
5577 cam_app_popup_response_cb);
5582 #ifdef USE_CAM_STORAGE_SETTING
5583 CAM_GVALUE_SET_INT(value, CAM_STORAGE_INTERNAL);
5584 cam_handle_value_set(ad, PROP_STORAGE, &value);
5586 cam_info(LOG_UI, "MMC card is removed");
5591 #ifdef CAMAPP_SIG_HANDLING
5593 * This function registers a user space signal handler for the signal SIGSEGV (Signal #11)
5597 static void cam_app_register_sigsegv(void)
5599 debug_fenter(LOG_SYS);
5601 /* cam_app_act.sa_flags = SA_SIGINFO | SA_NOCLDSTOP; */
5602 cam_app_act.sa_flags = SA_SIGINFO;
5603 cam_app_act.sa_handler = (void *)cam_app_sigsegv_handler;
5604 sigemptyset(&cam_app_act.sa_mask);
5606 #ifdef ENABLE_CHECK_CAM_STATUS
5607 sigaction(SIGALRM, &cam_app_act, &cam_app_act_old); /* register an action with a previous action */
5609 sigaction(SIGABRT, &cam_app_act, &cam_app_act_old);
5610 sigaction(SIGSEGV, &cam_app_act, &cam_app_act_old);
5611 sigaction(SIGILL, &cam_app_act, &cam_app_act_old);
5613 debug_fleave(LOG_SYS);
5617 cam_app_sigsegv_handler(int signal_no, siginfo_t *info, void *context)
5619 debug_fenter(LOG_SYS);
5621 cam_debug(LOG_SYS, "signal_no = %d", signal_no);
5623 if (signal_no == SIGALRM) { /* if alarm, check the camera status. */
5624 #ifdef ENABLE_CHECK_CAM_STATUS
5625 cam_app_check_status();
5626 alarm(CAM_CHECK_STATUS_INTERVAL_TIME);
5630 sigaction(signal_no, &cam_app_act_old, NULL); /* register the previous action */
5634 debug_fleave(LOG_SYS);
5639 gboolean cam_app_black_screen_show(void *data, int mode)
5641 struct appdata *ad = (struct appdata *)data;
5642 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5643 Evas_Coord witdh = 0, height = 0;
5645 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_black_screen_show", 0);
5647 cam_debug(LOG_UI, "~~~~~~~~~~~ mode :%d", mode);
5648 if (ad->black_screen) {
5649 evas_object_del(ad->black_screen);
5650 ad->black_screen = NULL;
5653 cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME,
5655 if (ad->black_screen == NULL) {
5656 cam_critical(LOG_UI, "black_screen load failed ");
5657 CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_show",
5662 evas_object_geometry_get(ad->win_main, NULL, NULL, &witdh, &height);
5663 evas_object_resize(ad->black_screen, witdh, height);
5665 evas_object_raise(ad->black_screen);
5666 evas_object_show(ad->black_screen);
5667 evas_object_show(ad->win_main);
5668 evas_render(ad->evas);
5670 CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_show", 0);
5674 gboolean cam_app_black_screen_hide(void *data)
5676 struct appdata *ad = (struct appdata *)data;
5677 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5678 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_black_screen_hide", 0);
5679 if (ad->black_screen) {
5680 evas_object_del(ad->black_screen);
5681 ad->black_screen = NULL;
5682 edje_file_cache_flush();
5684 /* evas_render(ad->evas); */
5685 CAM_TA_ACUM_ITEM_END(" cam_app_black_screen_hide", 0);
5689 #ifdef ENABLE_CAPTURE_ANIMATION
5691 static void __cam_app_shutter_animation_finished(void *data, Evas_Object *obj,
5692 const char *emission,
5695 cam_debug(LOG_MM, " __cam_app_shutter_animation_finished \n\n ");
5697 struct appdata *ad = (struct appdata *)data;
5699 DEL_EVAS_OBJECT(ad->shutter_screen);
5703 static gboolean cam_app_shutter_screen_show(void *data)
5705 struct appdata *ad = (struct appdata *)data;
5706 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
5707 Evas_Coord witdh = 0, height = 0;
5709 char *group_name = "shutter_image";
5711 CAM_TA_ACUM_ITEM_BEGIN(" cam_app_shutter_screen_show", 0);
5713 if (ad->shutter_screen) {
5714 evas_object_del(ad->shutter_screen);
5715 ad->shutter_screen = NULL;
5718 ad->shutter_screen =
5719 cam_app_load_edj(ad->win_main, CAM_MAIN_LAYOUT_EDJ_NAME,
5721 if (ad->shutter_screen == NULL) {
5722 cam_critical(LOG_UI, "shutter_screen load failed ");
5723 CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0);
5727 evas_object_geometry_get(ad->win_main, NULL, NULL, &witdh, &height);
5728 evas_object_resize(ad->shutter_screen, witdh, height);
5729 /* evas_object_resize(ad->black_screen, ad->win_width, ad->win_height); */
5731 /*evas_object_lower(ad->shutter_screen);*/
5732 evas_object_show(ad->shutter_screen);
5733 evas_object_show(ad->win_main);
5734 /* evas_render(ad->evas); */
5736 edje_object_signal_emit(_EDJ(ad->shutter_screen), "start_animation",
5739 edje_object_signal_callback_add(_EDJ(ad->shutter_screen),
5740 "animation_finish", "*",
5741 __cam_app_shutter_animation_finished,
5744 /* ecore_timer_add(0.1, cam_app_shutter_timer_cb, ad); */
5746 CAM_TA_ACUM_ITEM_END(" cam_app_shutter_screen_show", 0);
5750 #ifdef ENABLE_CHECK_CAM_STATUS
5752 static void cam_app_check_status()
5754 cam_debug(LOG_SYS, "check status");
5756 #endif /* ENABLE_CHECK_CAM_STATUS */
5758 static int cam_app_preview_unlock(void *data)
5760 struct appdata *ad = (struct appdata *)data;
5761 CamAppData *camapp = NULL;
5762 cam_retv_if(ad == NULL, FALSE);
5764 camapp = ad->camapp_handle;
5765 if (camapp == NULL) {
5766 cam_critical(LOG_UI, "handle is NULL");
5770 elm_win_indicator_mode_set(ad->win_main, 0);
5775 static int cam_app_preview_lock(void *data)
5777 struct appdata *ad = (struct appdata *)data;
5780 cam_critical(LOG_UI, "handle is NULL");
5784 evas_object_hide(ad->timer_icon_edje);
5785 REMOVE_TIMER(ad->timer_timer);
5786 ad->timer_activated = false;
5787 DEL_EVAS_OBJECT(ad->timer_icon_edje);
5788 cam_app_timeout_checker_remove();
5789 if(!cam_key_grab_deinit(ad))
5790 DEBUG_TRACE("cam_key_grab_deinit fail");
5791 cam_app_key_event_deinit(ad);
5796 static void cam_idle_lockstate_change_cb(keynode_t *key, void *data)
5798 struct appdata *ad = (struct appdata *)data;
5799 CamAppData *camapp = NULL;
5801 int lock_state = vconf_keynode_get_int(key);
5802 cam_retm_if(ad == NULL, "appdata is NULL");
5803 camapp = ad->camapp_handle;
5804 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
5806 cam_debug(LOG_SYS, "#################IDLE LOCK state changed : %d",
5808 cam_state = cam_mm_get_state();
5812 cam_app_preview_lock(ad);
5813 } else if (!lock_state) {
5815 cam_app_preview_unlock(ad);
5820 static void cam_usb_state_change_cb(keynode_t *key, void *data)
5822 struct appdata *ad = (struct appdata *)data;
5823 CamAppData *camapp = NULL;
5824 int usb_state = vconf_keynode_get_int(key);
5825 int mm_state = cam_mm_get_state();
5827 cam_retm_if(ad == NULL, "appdata is NULL");
5828 camapp = ad->camapp_handle;
5829 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
5831 if (usb_state > VCONFKEY_SYSMAN_USB_DISCONNECTED
5832 && (mm_state == RECORDER_STATE_RECORDING
5833 || mm_state == RECORDER_STATE_PAUSED)
5834 &&camapp->camera_mode == CAM_CAMCORDER_MODE) {
5835 camapp->rec_stop_type = CAM_REC_STOP_USB_CONN;
5836 cam_video_record_stop(ad);
5841 #ifndef DISABLE_TOOLBAR_TOGGLE
5842 static Eina_Bool _cam_app_toolbar_toggle_timer(void *data)
5844 struct appdata *ad = (struct appdata *)data;
5848 if (ad->mm_state != CAMERA_STATE_PREVIEW) {
5852 ad->toolbar_hided = TRUE;
5853 cam_app_toggle_indicator(ad, TRUE);
5854 cam_app_toggle_toolbar(ad, TRUE);
5857 if (ad->toolbar_toggle_timer)
5858 ecore_timer_del(ad->toolbar_toggle_timer);
5859 ad->toolbar_toggle_timer = NULL;
5864 void cam_app_toggle_indicator(void *data, gboolean hide)
5866 #ifndef DISABLE_INDICATOR
5867 struct appdata *ad = (struct appdata *)data;
5869 cam_retm_if(ad == NULL, "appdata is NULL");
5871 if (ad->toolbar_toggle_timer) {
5872 REMOVE_TIMER(ad->toolbar_toggle_timer);
5875 indicator_toggle(ad, hide);
5880 void cam_app_toggle_toolbar(void *data, gboolean hide)
5882 #ifndef DISABLE_TOOLBAR_TOGGLE
5883 struct appdata *ad = (struct appdata *)data;
5885 cam_retm_if(ad == NULL, "appdata is NULL");
5887 if (ad->toolbar_toggle_timer) {
5888 REMOVE_TIMER(ad->toolbar_toggle_timer);
5892 /* toolbar_hide_all_popup(ad); */
5893 unload_settings_edje(ad);
5894 hide_toolbar_edje(ad);
5896 show_toolbar_edje(ad);
5903 cam_app_reset_settings_launch_cb(void *data, Evas_Object *obj, void *event_info)
5905 Evas_Object *notify = (Evas_Object *)data;
5906 GValue i_value = { 0, };
5907 GValue b_value = { 0, };
5908 struct appdata *ad = (struct appdata *)cam_appdata_get();
5909 CamAppData *camapp = NULL;
5911 cam_debug(LOG_CAM, "!!!!!!!!!cam_app_reset_settings_launch_cb");
5913 cam_retm_if(ad == NULL, " appdata is NULL");
5914 camapp = ad->camapp_handle;
5915 cam_retm_if(camapp == NULL, " cam_handle is NULL");
5917 cam_popup_remove(notify);
5918 hide_toolbar_edje(ad);
5920 cam_mm_preview_stop(camapp->camera_mode); /* stop preview */
5922 g_value_init(&i_value, G_TYPE_INT);
5923 g_value_init(&b_value, G_TYPE_BOOLEAN);
5927 g_value_set_int(&i_value, AF_DEFAULT);
5928 cam_handle_value_set(ad, PROP_AF_MODE, &i_value);
5931 g_value_set_int(&i_value, TIMER_DEFAULT);
5932 cam_handle_value_set(ad, PROP_TIMER, &i_value);
5935 g_value_set_int(&i_value, EFFECT_DEFAULT);
5936 cam_handle_value_set(ad, PROP_EFFECT, &i_value);
5939 g_value_set_int(&i_value, QUALITY_DEFAULT);
5940 cam_handle_value_set(ad, PROP_IMAGE_QUALITY, &i_value);
5943 g_value_set_int(&i_value, QUALITY_DEFAULT);
5944 cam_handle_value_set(ad, PROP_VIDEO_QUALITY, &i_value);
5947 g_value_set_boolean(&b_value, FALSE);
5948 cam_handle_value_set(ad, PROP_GUIDELINE, &b_value);
5949 #ifdef GUIDE_LINE_ENALBE
5950 settings_guideline_refresh(ad);
5953 g_value_set_boolean(&b_value, FALSE);
5954 cam_handle_value_set(ad, PROP_REVIEW, &b_value);
5957 g_value_set_int(&i_value, SHUTTER_SOUND_DEFAULT);
5958 cam_handle_value_set(ad, PROP_SHUTTER_SOUND, &i_value);
5960 /* audio recording */
5961 g_value_set_boolean(&b_value, TRUE);
5962 cam_handle_value_set(ad, PROP_AUDIO_REC, &b_value);
5965 g_value_set_int(&i_value, STORAGE_DEFAULT);
5966 cam_handle_value_set(ad, PROP_STORAGE, &i_value);
5969 if (camapp->camera_mode == CAM_CAMERA_MODE) {
5970 g_value_set_int(&i_value, IMAGE_RESOLUTION_DEFAULT);
5972 g_value_set_int(&i_value, REC_RESOLUTION_DEFAULT);
5975 cam_handle_value_set(ad, PROP_RESOLUTION, &i_value);
5976 #ifndef DISABLE_INDICATOR
5977 if (ad->indicator_edje) {
5978 /* delete indicator */
5979 evas_object_hide(ad->indicator_edje);
5980 cam_indicator_destory(ad);
5982 cam_indicator_create(ad);
5984 show_toolbar_edje(ad);
5985 cam_app_preview_start(ad);
5988 void cam_app_reset_settings(void *data)
5990 struct appdata *ad = (struct appdata *)data;
5991 cam_retm_if(ad == NULL, "appdata is NULL");
5992 cam_popup_question_add(ad->win_main,
5993 _("IDS_CAM_POP_RESET_CAMERA_SETTINGS"),
5994 dgettext("sys_string", "IDS_COM_SK_YES"),
5995 cam_app_reset_settings_launch_cb,
5996 dgettext("sys_string", "IDS_COM_SK_NO"),
6001 static gboolean __cam_toolbar_new_thumbnail_create(Evas_Object **obj,
6003 Evas_Coord *thumbnail_x,
6004 Evas_Coord *thumbnail_y,
6005 Evas_Coord *thumbnail_w,
6006 Evas_Coord *thumbnail_h)
6008 cam_retv_if(ad == NULL, FALSE);
6009 CamAppData *camapp = ad->camapp_handle;
6010 cam_retv_if(camapp == NULL, FALSE);
6011 cam_retv_if(obj == NULL, FALSE);
6012 cam_retv_if(ad->evas == NULL, FALSE);
6013 cam_retv_if(ad->toolbar.quickview_item.edje == NULL, FALSE);
6015 if(camapp->thumbnail_name == NULL) {
6019 Evas_Object *new_thumbnail_img = elm_icon_add(ad->toolbar.quickview_item.edje);
6020 Evas_Coord x = 0, y = 0, w = 0, h = 0;
6021 Evas_Object *layout = NULL;
6022 Evas_Object *thumbnail_area = NULL;
6024 cam_retv_if(new_thumbnail_img == NULL, FALSE);
6025 elm_icon_file_set(new_thumbnail_img, camapp->thumbnail_name, NULL);
6026 elm_icon_aspect_fixed_set(new_thumbnail_img, EINA_FALSE);
6027 elm_icon_resizable_set(new_thumbnail_img, EINA_TRUE, EINA_TRUE);
6029 layout = elm_layout_edje_get(ad->toolbar.quickview_item.edje);
6030 thumbnail_area = (Evas_Object *) edje_object_part_object_get(layout,"thumbnail_area");
6031 cam_retv_if(thumbnail_area == NULL, FALSE);
6032 evas_object_geometry_get(thumbnail_area, &x, &y, &w, &h);
6038 evas_object_resize(new_thumbnail_img, 0, 0);
6039 evas_object_move(new_thumbnail_img, x, y);
6040 evas_object_show(new_thumbnail_img);
6041 *obj = new_thumbnail_img;
6045 static void cam_app_pipe_handler(void *data, void *buffer, unsigned int nbyte)
6048 struct appdata *ad = (struct appdata *)data;
6049 cam_retm_if(ad == NULL, "appdata is NULL");
6053 /* DO NOT free buffer in here */
6054 /* buffer is freed by ecore */
6056 int main_pipe_type = *((int *)buffer);
6057 DEBUG_TRACE("main_pipe_type %d", main_pipe_type);
6058 switch (main_pipe_type) {
6059 case CAM_MAIN_PIPE_OP_TYPE_UPDATE_THUMBNAIL: {
6060 Evas_Object *new_thumbnail_image = NULL;
6061 Evas_Coord x = 0, y = 0, w = 0, h = 0;
6062 gboolean ret = FALSE;
6063 ret = __cam_toolbar_new_thumbnail_create(&new_thumbnail_image, ad, &x, &y, &w, &h);
6064 if (ret == FALSE || !new_thumbnail_image) {
6065 if (!new_thumbnail_image && ret) {
6066 DEL_EVAS_OBJECT(ad->toolbar.quickview_item.thumbnail_image);
6070 cam_ui_effect_utils_set_thumbnail_effect(new_thumbnail_image,
6075 CAM_THUMBNAIL_ANTIMATION_EFFECT_DURATION);
6078 case CAM_MAIN_PIPE_OP_TYPE_ROTATE_ANIMATOR: {
6079 ad->is_rotating = TRUE;
6080 cam_ui_rotate_utils_rotate_start(ad, CAM_ROTATE_ICONS_ANTIMATION_DURATION);
6091 void cam_focus_edje_rotate(void *data)
6093 struct appdata *ad = (struct appdata *)data;
6094 cam_retm_if(ad == NULL, "appdata is NULL");
6096 DEL_EVAS_OBJECT(ad->focus_edje);
6097 ad->focus_edje = cam_app_load_edj(ad->layout_main, CAM_UTILS_EDJ_NAME, "focus_image");
6099 cam_retm_if(ad->focus_edje == NULL, "focus_edje load failed");
6101 evas_object_resize(ad->focus_edje, ad->camera_focus_w, ad->camera_focus_h);
6102 evas_object_move(ad->focus_edje, ad->af_start_x, ad->af_start_y);
6103 evas_object_show(ad->focus_edje);
6105 cam_app_draw_af_box(ad);
6106 cam_app_focus_guide_update(ad);
6110 Eina_Bool cam_screen_rotate(void *data)
6112 struct appdata *ad = (struct appdata *)data;
6113 cam_retvm_if(ad == NULL, -1, "appdata is NULL");
6115 /*cam_app_get_preview_offset_coordinate(ad);*/
6118 cam_focus_edje_rotate(ad);
6120 if (ad->timer_icon_edje)
6121 cam_app_timer_icon_rotate(ad);
6123 if (ad->toolbar_edje)
6124 cam_toolbar_rotate(ad);
6126 if (ad->recording_edje)
6127 cam_recording_rotate(ad);
6129 if (ad->indicator_edje) {
6130 cam_debug(LOG_CAM, "indicator_edje rotate start");
6131 cam_indicator_rotate(ad);
6134 if (ad->zoom_edje) {
6135 unload_zoom_edje(ad);
6139 #ifdef GUIDE_LINE_ENALBE
6140 if (ad->guideline_edje)
6141 settings_guideline_refresh(ad);
6144 /*update thumbnail*/
6145 toolbar_update_quickview_thumbnail_no_animation(ad);
6147 if ((ad->show_menu == TRUE ) ||
6148 (ad->show_menu == FALSE && ad->displayed_setting_popup != DISPLAY_NONE_POPUP )
6149 || (ad->toolbar_show_edit_shortcuts_popup == TRUE)
6150 || (ad->toolbar_show_setting_popup == TRUE)) {
6151 /*ecore_idler_add(cam_show_setting_menu, ad);*/
6152 /*note: use timer to delay creating the popup*/
6153 ecore_timer_add(0.1, cam_show_setting_menu, ad);
6155 ad->is_rotating = FALSE;
6158 return ECORE_CALLBACK_CANCEL;
6161 static Ecore_Idler *rotate_delay_idler = NULL;
6162 Eina_Bool cam_app_screen_rotate_idler(void *data)
6164 if (rotate_delay_idler) {
6165 ecore_idler_del(rotate_delay_idler);
6166 rotate_delay_idler = NULL;
6168 struct appdata *ad = (struct appdata *)data;
6169 cam_retv_if(ad == NULL, ECORE_CALLBACK_CANCEL);
6170 if (ad->appcore_state == CAM_APPCORE_TERMINATE_STATE
6171 || ad->appcore_state == CAM_APPCORE_PAUSE_STATE) {
6172 ad->is_rotating = FALSE;
6173 return ECORE_CALLBACK_CANCEL;
6175 /*cam_toolbar_rotate(ad);*/
6176 cam_screen_rotate(ad);
6177 return ECORE_CALLBACK_CANCEL;
6180 void cam_app_screen_rotate(void *data)
6182 struct appdata *ad = (struct appdata *)data;
6183 cam_ret_if(ad == NULL);
6184 if (ad->appcore_state == CAM_APPCORE_TERMINATE_STATE
6185 || ad->appcore_state == CAM_APPCORE_PAUSE_STATE) {
6186 ad->is_rotating = FALSE;
6189 CamAppData *cam_handle = ad->camapp_handle;
6190 cam_ret_if(cam_handle == NULL);
6193 if (ad->toolbar_edje) {
6194 rotate_delay_idler = ecore_idler_add(cam_app_screen_rotate_idler, data);
6197 /*cam_app_get_preview_offset_coordinate(ad);*/
6200 gboolean cam_app_get_resolution(int *width, int *height)
6202 cam_retv_if(width == NULL || height == NULL, FALSE);
6204 struct appdata *ad = (struct appdata *)cam_appdata_get();
6205 cam_retvm_if(ad == NULL, FALSE, "ad is NULL");
6208 CamAppData *camapp = ad->camapp_handle;
6210 if (camapp != NULL) {
6211 *width = CAM_RESOLUTION_W(camapp->resolution);
6212 *height = CAM_RESOLUTION_H(camapp->resolution);
6221 gboolean cam_app_reset_resolution(void *data, int width, int height)
6223 struct appdata *ad = (struct appdata *)data;
6224 CamAppData *camapp = NULL;
6226 gboolean need_change_state = FALSE;
6227 gboolean ret = TRUE;
6229 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6230 camapp = ad->camapp_handle;
6231 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6233 state = cam_mm_get_state();
6234 if (state > CAMERA_STATE_CREATED)
6235 need_change_state = TRUE;
6238 " reset resolution = [%d x %d], current state = [%d], need_change_state = [%d]",
6239 width, height, state, need_change_state);
6241 if (camapp->camera_mode == CAM_CAMERA_MODE) {
6243 if (camapp->shooting_mode == CAM_SINGLE_MODE
6244 && (width * height == ZSL_5M_TEST))
6246 if (0) /* camapp->shooting_mode == CAM_SINGLE_MODE && (width*height <= ZSL_MAX_REL)) */
6249 cam_info(LOG_MM, " set real resolution [%dx%d] for zsl",
6252 ret &= cam_mm_set_image_size(width, height);
6254 if (need_change_state) {
6255 ret &= cam_mm_preview_stop(camapp->camera_mode);
6256 ret &= cam_mm_unrealize();
6257 ret &= cam_mm_set_video_size(width, height);
6258 ret &= cam_mm_realize();
6259 ret &= cam_app_preview_start(ad);
6261 ret &= cam_mm_set_video_size(width, height);
6264 if (camapp->shooting_mode == CAM_SELF_MODE) {
6265 if (need_change_state) {
6266 ret &= cam_mm_preview_stop(CAM_CAMERA_MODE);
6267 ret &= cam_mm_set_image_size(width, height);
6268 ret &= cam_mm_set_video_size(width, height);
6269 ret &= cam_app_preview_start(ad);
6271 ret &= cam_mm_set_image_size(width, height);
6272 ret &= cam_mm_set_video_size(width, height);
6275 int p_width = 0; /* preview width */
6276 int p_height = 0; /* preview height */
6278 ret &= cam_mm_get_video_size(&p_width, &p_height);
6279 DEBUG_TRACE("get video size [%d]x[%d]", p_width,
6281 if (p_height == camapp->default_preview_height && (p_width == camapp->default_preview_width || p_width == PREVIEW_WIDE_W)) {
6282 /* assume that last mode is normal capture mode */
6285 int temp_width = camapp->default_preview_width;
6286 int temp_height = camapp->default_preview_height;
6287 gboolean cur_is_wide = FALSE;
6288 gboolean next_is_wide = FALSE;
6290 ret &= cam_mm_get_image_size(&cur_width, &cur_height);
6291 cur_is_wide = cam_utils_check_wide_resolution(cur_width, cur_height);
6293 "current image Resolution[w] : [%d]x[%d][%d]",
6294 cur_width, cur_height,
6297 next_is_wide = cam_utils_check_wide_resolution(width, height);
6299 "next image Resolution[w] : [%d]x[%d][%d]",
6300 width, height, next_is_wide);
6303 temp_width = PREVIEW_WIDE_W;
6305 ret &= cam_mm_set_image_size(width, height);
6307 if ((cur_is_wide != next_is_wide)
6308 || (temp_width != p_width)) {
6309 if (need_change_state) {
6311 ret &= cam_mm_preview_stop(camapp->camera_mode);
6312 ret &= cam_mm_set_video_size(temp_width, temp_height);
6313 ret &= cam_app_preview_start(ad);
6315 ret &= cam_mm_set_video_size(temp_width, temp_height);
6319 /* assume that last mode is zero system lag capture mode */
6320 int temp_width = camapp->default_preview_width;
6321 int temp_height = camapp->default_preview_height;
6322 #ifdef CAMERA_MACHINE_I686
6326 if (cam_utils_check_wide_resolution(width, height))
6327 temp_width = PREVIEW_WIDE_W;
6329 ret &= cam_mm_set_image_size(width, height);
6331 if (need_change_state) {
6332 ret &= cam_mm_preview_stop(camapp->camera_mode);
6333 ret &= cam_mm_set_video_size(temp_width, temp_height);
6334 ret &= cam_app_preview_start(ad);
6337 cam_mm_set_video_size(temp_width, temp_height);
6342 } else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
6343 if (need_change_state) {
6344 ret &= cam_mm_preview_stop(CAM_CAMCORDER_MODE);
6345 ret &= cam_mm_set_video_size(width, height);
6346 ret &= cam_app_preview_start(ad);
6348 ret &= cam_mm_set_video_size(width, height);
6356 int cam_app_get_aenc_bitrate(void *data)
6358 struct appdata *ad = (struct appdata *)data;
6359 CamAppData *camapp = NULL;
6362 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
6363 camapp = ad->camapp_handle;
6364 cam_retvm_if(camapp == NULL, 0, "camapp is NULL");
6366 if ((camapp->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) {
6367 bitrate = CAM_AUDIO_BITRATE_MMS;
6369 bitrate = CAM_AUDIO_BITRATE_NORMAL;
6375 int cam_app_get_venc_bitrate(void *data, int quality)
6377 struct appdata *ad = (struct appdata *)data;
6378 CamAppData *camapp = NULL;
6381 cam_retvm_if(ad == NULL, 0, "appdata is NULL");
6382 camapp = ad->camapp_handle;
6383 cam_retvm_if(camapp == NULL, 0, "camapp is NULL");
6385 if ((camapp->recording_mode == CAM_RECORD_MMS) ||(camapp->recording_mode == CAM_RECORD_SELF_MMS)) {
6387 case CAM_QUALITY_HIGH:
6388 case CAM_QUALITY_BEST:
6392 case CAM_QUALITY_MEDIUM:
6396 case CAM_QUALITY_LOW:
6401 cam_critical(LOG_MM, "INVALID QUAILTY");
6405 switch (camapp->resolution) {
6406 case CAM_RESOLUTION_FULLHD:
6409 case CAM_QUALITY_HIGH:
6410 case CAM_QUALITY_BEST:
6411 return_val = 8000000;
6414 case CAM_QUALITY_MEDIUM:
6415 return_val = 4000000;
6418 case CAM_QUALITY_LOW:
6419 return_val = 2000000;
6423 cam_critical(LOG_MM, "INVALID QUAILTY");
6428 case CAM_RESOLUTION_HD:
6431 case CAM_QUALITY_HIGH:
6432 case CAM_QUALITY_BEST:
6433 return_val = 10000000;
6436 case CAM_QUALITY_MEDIUM:
6437 return_val = 4000000;
6440 case CAM_QUALITY_LOW:
6441 return_val = 2000000;
6445 cam_critical(LOG_MM, "INVALID QUAILTY");
6451 case CAM_RESOLUTION_WVGA:
6452 case CAM_RESOLUTION_WVGA2:
6455 case CAM_QUALITY_HIGH:
6456 case CAM_QUALITY_BEST:
6457 return_val = 4000000;
6460 case CAM_QUALITY_MEDIUM:
6461 return_val = 2000000;
6464 case CAM_QUALITY_LOW:
6465 return_val = 1000000;
6469 cam_critical(LOG_MM, "INVALID QUAILTY");
6475 case CAM_RESOLUTION_VGA:
6479 case CAM_QUALITY_HIGH:
6480 case CAM_QUALITY_BEST:
6481 return_val = 3000000;
6484 case CAM_QUALITY_MEDIUM:
6485 return_val = 1500000;
6488 case CAM_QUALITY_LOW:
6489 return_val = 500000;
6493 cam_critical(LOG_MM, "INVALID QUAILTY");
6499 case CAM_RESOLUTION_WQVGA:
6502 case CAM_QUALITY_HIGH:
6503 case CAM_QUALITY_BEST:
6504 return_val = 2000000;
6507 case CAM_QUALITY_MEDIUM:
6508 return_val = 1000000;
6511 case CAM_QUALITY_LOW:
6512 return_val = 500000;
6516 cam_critical(LOG_MM, "INVALID QUAILTY");
6522 case CAM_RESOLUTION_QVGA:
6525 case CAM_QUALITY_HIGH:
6526 case CAM_QUALITY_BEST:
6527 return_val = 384000;
6530 case CAM_QUALITY_MEDIUM:
6531 return_val = 192000;
6534 case CAM_QUALITY_LOW:
6539 cam_critical(LOG_MM, "INVALID QUAILTY");
6545 case CAM_RESOLUTION_QCIF:
6548 case CAM_QUALITY_HIGH:
6549 case CAM_QUALITY_BEST:
6550 return_val = 384000;
6553 case CAM_QUALITY_MEDIUM:
6554 return_val = 192000;
6557 case CAM_QUALITY_LOW:
6562 cam_critical(LOG_MM, "INVALID QUAILTY");
6569 cam_critical(LOG_MM, "INVALID QUAILTY");
6574 cam_debug(LOG_MM, "videoenc bit rate = %d, current quilty = %d",
6575 return_val, quality);
6579 gboolean cam_app_set_video_quality(void *data, int quality)
6581 struct appdata *ad = (struct appdata *)data;
6582 CamAppData *camapp = NULL;
6585 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6586 camapp = ad->camapp_handle;
6587 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6589 v_bitrate = cam_app_get_venc_bitrate(ad, quality);
6590 if (v_bitrate > 0) {
6591 cam_mm_set_video_encoder_bitrate(v_bitrate);
6598 /*TODO:temporily define this*/
6599 #define AUDIO_FORMAT_PCM_S16_LE 2
6600 #define AUDIO_CODEC_VORBIS 36
6601 #define VIDEO_CODEC_THEORA 27
6603 gboolean cam_app_set_recording_mode(void *data, int mode)
6605 struct appdata *ad = (struct appdata *)data;
6606 CamAppData *camapp = NULL;
6607 int video_codec = 0, audio_codec = 0, sample_rate = 0;
6608 int format = AUDIO_FORMAT_PCM_S16_LE;
6612 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6613 camapp = ad->camapp_handle;
6614 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6615 DEBUG_TRACE("mode = %d" , mode);
6616 if (mode == CAM_RECORD_MMS || mode == CAM_RECORD_SELF_MMS) {
6617 DEBUG_TRACE("mode = %d" , mode);
6618 video_codec = RECORDER_VIDEO_CODEC_H263;
6619 audio_codec = RECORDER_AUDIO_CODEC_AMR;
6621 format = AUDIO_FORMAT_PCM_S16_LE;
6624 DEBUG_TRACE("mode = %d" , mode);
6625 video_codec = RECORDER_VIDEO_CODEC_MPEG4;
6626 audio_codec = RECORDER_AUDIO_CODEC_AAC;
6627 sample_rate = 44100;
6628 format = AUDIO_FORMAT_PCM_S16_LE;
6631 #ifdef CAMERA_MACHINE_I686
6632 video_codec = VIDEO_CODEC_THEORA;
6633 audio_codec = AUDIO_CODEC_VORBIS;
6636 if (!cam_mm_set_codec(audio_codec, video_codec))
6639 if (!cam_mm_set_audio_source(sample_rate, format, channel))
6642 a_bitrate = cam_app_get_aenc_bitrate(ad);
6643 if (a_bitrate > 0) {
6644 cam_mm_set_audio_encoder_bitrate(a_bitrate);
6649 if (!cam_app_set_video_quality(ad, camapp->video_quality))
6655 gboolean cam_app_set_size_limit(int max_val, int size_limit_type)
6659 switch (size_limit_type) {
6660 case CAM_MM_SIZE_LIMIT_TYPE_BYTE:
6661 ret = cam_mm_set_max_size(max_val);
6665 case CAM_MM_SIZE_LIMIT_TYPE_SECOND:
6666 ret = cam_mm_set_max_size(0);
6671 g_assert_not_reached();
6676 gboolean cam_app_init_attribute(void *data, CamMode mode)
6678 struct appdata *ad = (struct appdata *)data;
6679 CamAppData *camapp = NULL;
6680 gboolean ret = TRUE;
6684 int rotate = CAMERA_ROTATION_270;
6685 int camera_rotate = CAMERA_ROTATION_NONE;
6687 int capture_video_format = -1;
6688 #ifdef TODO_SURRPORT
6689 int recording_video_format = -1;
6692 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
6693 camapp = ad->camapp_handle;
6694 cam_retvm_if(camapp == NULL, FALSE, "camapp is NULL");
6696 state = cam_mm_get_state();
6698 if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
6699 if (state != RECORDER_STATE_CREATED) {
6702 } else if(camapp->camera_mode == CAM_CAMERA_MODE) {
6703 if (state != CAMERA_STATE_CREATED) {
6708 cam_mm_get_video_size( &camapp->default_preview_width, &camapp->default_preview_height);
6709 DEBUG_TRACE("default_width = %d,default_height = %d", camapp->default_preview_width, camapp->default_preview_height);
6711 if (ad->launching_mode == CAM_LAUNCHING_MODE_NORMAL) {
6712 /* get proper resolution */
6713 cam_mm_get_image_size(&width, &height);
6714 if (camapp->camera_mode == CAM_CAMERA_MODE) {
6715 camapp->resolution = CAM_RESOLUTION(width, height);
6718 width = CAM_RESOLUTION_W(camapp->resolution);
6719 height = CAM_RESOLUTION_H(camapp->resolution);
6721 #ifdef CAMERA_MACHINE_I686
6726 if (CAM_CAMERA_MODE == mode) {
6727 ret &= cam_mm_set_image_size(width, height);
6728 ret &= cam_mm_set_image_count(camapp->image_count);
6729 #ifdef CAMERA_MACHINE_I686
6730 ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_15);
6731 ret &= cam_mm_set_video_source_format(CAMERA_PIXEL_FORMAT_I420);
6733 ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_AUTO);
6735 cam_mm_get_video_source_format
6737 &capture_video_format);
6738 ret &= cam_mm_set_video_source_format(capture_video_format);
6741 cam_app_set_capture_format_shooting_mode
6742 (camapp->shooting_mode);
6744 } else if (CAM_CAMCORDER_MODE == mode) {
6745 ret &= cam_mm_set_video_profile();
6746 #ifdef CAMERA_MACHINE_I686
6747 ret &= cam_mm_set_fps(CAMERA_ATTR_FPS_15);
6748 ret &= cam_mm_set_video_source_format(CAMERA_PIXEL_FORMAT_I420);
6750 ret &= cam_mm_set_fps(camapp->fps);
6751 ret &= cam_mm_get_video_source_format(NULL, &recording_video_format);
6752 ret &= cam_mm_set_video_source_format(recording_video_format);
6754 ret &= cam_mm_set_audio_recording(camapp->audio_recording);
6755 ret &= cam_app_set_recording_mode(ad, camapp->recording_mode);
6756 DEBUG_TRACE("camapp->size_limit = %d" , camapp->size_limit);
6757 DEBUG_TRACE("camapp->size_limit_type = %d" , camapp->size_limit_type);
6758 ret &= cam_app_set_size_limit(camapp->size_limit, camapp->size_limit_type);
6762 cam_mm_get_video_device(&video_dev);
6763 DEBUG_TRACE("video_dev = %d",video_dev);
6764 if (video_dev == CAM_DEVICE_VGA) {
6766 cam_mm_get_front_cam_display_rotate_value(&value, &rotate);
6768 DEBUG_TRACE("get front camera rotate %d value = %d", rotate, value);
6770 #ifdef TODO_SURRPORT
6771 rotate = CAMERA_ROTATION_270;
6772 #endif /*TODO:if new capi will released, this could be removed,but take care.*/
6775 cam_mm_get_zoom_valid_intrange(&camapp->zoom_min,&camapp->zoom_max);
6776 DEBUG_TRACE("Zoom range [%d - %d]",camapp->zoom_min, camapp->zoom_max);
6778 ret &= cam_mm_set_display_device(CAMERA_DISPLAY_TYPE_X11, GET_DISPLAY(ad->main_xid));
6779 ret &= cam_mm_set_camera_rotate(camera_rotate);
6780 ret &= cam_mm_set_display_rotate(rotate);
6781 ret &= cam_mm_set_display_geometry_method(CAMERA_DISPLAY_MODE_LETTER_BOX);
6782 #ifndef USE_CAMERA_APP_SHUTTER_SOUND
6783 ret &= cam_mm_set_shutter_sound(TRUE);
6785 ret &= cam_app_reset_resolution(ad, width, height);
6786 ret &= cam_mm_set_zoom(camapp->zoom_min);
6787 ret &= cam_mm_set_effect(camapp->effect);
6788 ret &= cam_mm_set_flash(camapp->flash);
6789 if (camapp->af_mode == CAM_FOCUS_AUTO
6790 || camapp->af_mode == CAM_FOCUS_MACRO) {
6791 ret &= cam_mm_set_focus_mode(camapp->af_mode);
6794 ret &= cam_mm_set_tag_enable(TRUE);
6796 ad->enable_mode_change = TRUE;
6797 ad->is_recording = FALSE;
6802 static gboolean cam_app_return_ext_app(void *data, const char *r_file_path)
6804 struct appdata *ad = (struct appdata *)data;
6806 service_create(&reply);
6808 if (ad->aul_service_mime != NULL){
6809 if(r_file_path == NULL){
6810 service_add_extra_data(reply, SERVICE_DATA_SELECTED, "exit");
6811 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_FAILED);
6813 service_add_extra_data(reply, SERVICE_DATA_SELECTED, r_file_path);
6814 service_reply_to_launch_request(reply, ad->service_handle, SERVICE_RESULT_SUCCEEDED);
6818 service_destroy(reply);
6822 static void cam_app_battery_status_cb(keynode_t *key, void *data)
6824 struct appdata *ad = (struct appdata *)data;
6826 debug_fenter(LOG_UI);
6827 cam_retm_if(ad == NULL, "appdata is NULL");
6829 int low_status = -1;
6831 if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &low_status)) {
6832 cam_debug(LOG_UI, "battery status low = %d", low_status);
6833 if (low_status <= VCONFKEY_SYSMAN_BAT_WARNING_LOW) {
6834 ad->battery_status = LOW_BATTERY_CRITICAL_STATUS;
6835 cam_app_notice_popup(ad,
6836 dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"),
6837 cam_app_timeout_notice_response_cb);
6839 ad->battery_status = NORMAL_BATTERY_STATUS;
6845 /*if torch light vconf key value is changed, this cb is called*/
6846 static void cam_torchlight_update_cb(keynode_t *key, void *data)
6848 struct appdata *ad = (struct appdata *)data;
6849 cam_retm_if(ad == NULL, "appdata is NULL");
6850 int key_value = vconf_keynode_get_bool(key); /* -1: error, 1:True, 0:False */
6851 if (key_value == -1) {
6852 DEBUG_TRACE("vconf_keynode_get_bool failed");
6855 DEBUG_TRACE("VCONFKEY_SETAPPL_ACCESSIBILITY_TORCH_LIGHT is changed to %d", key_value);
6857 /* disable flash icon */
6858 ad->torchlight_on = TRUE;
6861 /* enable flash icon */
6862 ad->torchlight_on = FALSE;
6864 cam_toolbar_update(ad); /*update flash icon*/
6868 static void cam_app_battery_update_cb(keynode_t *key, void *data)
6870 struct appdata *ad = (struct appdata *)data;
6871 CamAppData *camapp = NULL;
6872 char *keyname = NULL;
6874 debug_fenter(LOG_UI);
6876 cam_retm_if(ad == NULL, "appdata is NULL");
6877 camapp = ad->camapp_handle;
6878 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
6880 keyname = vconf_keynode_get_name(key);
6882 if (!strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CHARGE_NOW)) {
6883 GValue value = { 0 };
6884 gint charging = vconf_keynode_get_int(key);
6885 DEBUG_TRACE("charging = %d", charging);
6886 CAM_GVALUE_SET_INT(value, charging);
6887 cam_handle_value_set(ad, PROP_BATTERY_CHARG, &value);
6889 } else if (!strcmp(keyname, VCONFKEY_SYSMAN_BATTERY_CAPACITY)) {
6890 GValue value = { 0 };
6891 int battery_level = vconf_keynode_get_int(key);
6892 CAM_GVALUE_SET_INT(value, battery_level);
6893 cam_handle_value_set(ad, PROP_BATTERY_LEVEL, &value);
6898 Evas_Object *cam_app_create_win(const char *name)
6900 Evas_Object *eo = NULL;
6902 #ifdef CAMERA_MACHINE_I686
6903 ecore_evas_app_comp_sync_set(EINA_FALSE);
6904 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
6905 ecore_evas_app_comp_sync_set(1);
6907 eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
6910 elm_win_title_set(eo, name);
6911 elm_win_borderless_set(eo, EINA_TRUE);
6912 ecore_x_window_size_get(ecore_x_window_root_first_get(),
6914 evas_object_resize(eo, w, h);
6921 Evas_Object *cam_screen_load_edj(Evas_Object *parent, const char *file,
6927 eo = elm_layout_add(parent);
6929 r = elm_layout_file_set(eo, file, group);
6931 evas_object_del(eo);
6935 evas_object_size_hint_weight_set(eo,
6939 /* //if(!strcmp((const char *)elm_widget_type_get(parent), "win")) { */
6940 elm_win_resize_object_add(parent, eo);
6947 Evas_Object *cam_app_load_edj(Evas_Object *parent, const char *file,
6950 Evas_Object *eo = NULL;
6953 eo = elm_layout_add(parent);
6955 r = elm_layout_file_set(eo, file, group);
6957 evas_object_del(eo);
6961 evas_object_size_hint_weight_set(eo,
6965 elm_win_resize_object_add(parent, eo);
6966 evas_object_show(eo);
6972 void cam_app_update_ts(Evas_Object *parent, struct text_part *tp)
6975 int size = sizeof(tp) / sizeof(tp[0]);
6976 Evas_Object *eo = elm_layout_edje_get(parent);
6978 if (eo == NULL || tp == NULL || size < 0)
6981 for (i = 0; i < size; i++) {
6982 if (tp[i].part && tp[i].msgid)
6983 edje_object_part_text_set(eo,
6984 tp[i].part, _(tp[i].msgid));
6988 Eina_Bool __cam_app_update_thumbnail_idler(void *data)
6990 struct appdata *ad = (struct appdata *)data;
6992 return ECORE_CALLBACK_CANCEL;
6994 CamAppData *camapp = ad->camapp_handle;
6997 REMOVE_IDLER(ad->update_thumbnail_idler);
6998 return ECORE_CALLBACK_CANCEL;
7003 if (!g_file_test(camapp->filename,G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
7004 DEBUG_TRACE( "The captured File is not existed");
7005 REMOVE_IDLER(ad->update_thumbnail_idler);
7006 return ECORE_CALLBACK_CANCEL;;
7009 gboolean ret = FALSE;
7011 if (ad->imageviewer_ug) { /*review on */
7012 DEBUG_TRACE("Image viewer was LAUNCHED. skip this...");
7013 REMOVE_IDLER(ad->update_thumbnail_idler);
7014 return ECORE_CALLBACK_CANCEL;;
7017 if (camapp->thumbnail_name != NULL) {
7018 free (camapp->thumbnail_name);
7019 camapp->thumbnail_name = NULL;
7023 ret = cam_file_get_cam_file_thumbnail_path(camapp->filename, &camapp->thumbnail_name);
7024 DEBUG_TRACE("ret[0:success] = [%d] camapp->filename: [%s]",
7025 ret, camapp->filename);
7026 DEBUG_TRACE("ret[0:success] = [%d] camapp->thumbnail_name: [%s]",
7027 ret, camapp->thumbnail_name);
7028 if (!g_file_test(camapp->thumbnail_name, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) {
7030 if (g_thumbnail_image_check_count > 10) {
7031 REMOVE_IDLER(ad->update_thumbnail_idler);
7032 return ECORE_CALLBACK_CANCEL;
7035 DEBUG_TRACE("The thumbnail File is not existed,try the %d nums", g_thumbnail_image_check_count);
7036 g_thumbnail_image_check_count++;
7037 usleep(THUMBNAIL_UPDATE_WAIT_TIME);
7038 /*REMOVE_IDLER(ad->update_thumbnail_idler);*//*note:renew, do not delete idler*/
7039 return ECORE_CALLBACK_RENEW;
7041 #ifndef ENABLE_CAPTURE_ANIMATION
7043 DEBUG_TRACE("thumbnail image check count=[%d]", g_thumbnail_image_check_count);
7044 toolbar_update_quickview_thumbnail(ad);
7047 else if (camapp->camera_mode == CAM_CAMCORDER_MODE) {
7048 toolbar_update_quickview_thumbnail(ad);
7051 DEBUG_TRACE("NOT REACHED CODES REACHED!");
7054 REMOVE_IDLER(ad->update_thumbnail_idler);
7055 return ECORE_CALLBACK_CANCEL;
7057 /* update thumbnail to quickview after first launching or return from image viewer */
7058 void cam_app_update_quickview_icon(void *data)
7060 #ifdef CAMERA_MACHINE_I686
7063 struct appdata *ad = (struct appdata *)data;
7064 cam_ret_if(ad == NULL);
7065 cam_ret_if(ad->camapp_handle == NULL);
7066 gchar *filename = NULL;
7069 /*To update quickview image, get last filename*/
7070 filename = cam_app_get_last_filename();
7071 if (ad->camapp_handle->filename) {
7072 free(ad->camapp_handle->filename);
7073 ad->camapp_handle->filename = NULL;
7075 if (filename != NULL) {
7076 if (ad->camapp_handle->filename) {
7077 free(ad->camapp_handle->filename);
7078 ad->camapp_handle->filename = NULL;
7080 ad->camapp_handle->filename = strdup(filename);
7083 if (ad->camapp_handle->thumbnail_name) {
7084 free(ad->camapp_handle->thumbnail_name);
7085 ad->camapp_handle->thumbnail_name = NULL;
7087 /*update quickview area */
7088 if (cam_file_get_cam_file_thumbnail_path(ad->camapp_handle->filename,
7089 &ad->camapp_handle->thumbnail_name))
7090 toolbar_update_quickview_thumbnail_no_animation(ad);
7097 void cam_app_update_thumbnail()
7099 #ifdef CAMERA_MACHINE_I686
7102 struct appdata *ad = (struct appdata *)cam_appdata_get();
7103 cam_ret_if(ad == NULL);
7104 CamAppData *camapp = ad->camapp_handle;
7105 cam_ret_if(camapp == NULL);
7107 DEBUG_TRACE("cam_app_update_thumbnail");
7109 if (CAM_LAUNCHING_MODE_NORMAL == ad->launching_mode && camapp->filename) {
7111 g_thumbnail_image_check_count = 0;
7112 if (!ad->update_thumbnail_idler)
7113 ad->update_thumbnail_idler = ecore_idler_add(__cam_app_update_thumbnail_idler, ad);
7119 gboolean cam_app_parse_args(CamExeArgs *args, service_h service)
7121 struct appdata *ad = (struct appdata *)cam_appdata_get();
7122 cam_retv_if(ad == NULL, FALSE);
7124 ad->aul_service_mime = NULL;
7126 int ret = service_get_mime(service, &ad->aul_service_mime);
7127 if (ret != SERVICE_ERROR_NONE)
7129 cam_debug(LOG_UI, "service_get_mime is error ");
7133 if(ad->aul_service_mime != NULL){
7135 if(strcmp(ad->aul_service_mime, AUL_SERVICE_MIME_TYPE_IMAGE) == 0){
7136 cam_debug(LOG_UI, "CAM_CAMERA_MODE");
7137 args->cam_mode = CAM_CAMERA_MODE;
7138 }else if(strcmp(ad->aul_service_mime, AUL_SERVICE_MIME_TYPE_VIDEO) == 0){
7139 cam_debug(LOG_UI, "CAM_CAMCORDER_MODE");
7140 args->cam_mode = CAM_CAMCORDER_MODE;
7144 const char *val = NULL;
7145 /* get caller appl. */
7146 service_get_extra_data(service, "CALLER", (char **)&val);
7148 cam_debug(LOG_UI, "CALLER %s", val);
7149 args->caller = strdup(val);
7151 args->caller = NULL;
7156 service_get_extra_data(service, "RESOLUTION", (char **)&val);
7158 cam_debug(LOG_UI, "RESOLUTION %s", val);
7162 if (args->cam_mode == CAM_CAMERA_MODE) {
7163 if (0 == strcmp(val, CAM_CAPTURE_RES_BIG))
7164 res = CAM_RESOLUTION_3264x2448;
7165 else if (0 == strcmp(val, CAM_CAPTURE_RES_BIG_WIDE))
7166 res = CAM_RESOLUTION_3264x1836;
7167 else if (0 == strcmp(val, CAM_CAPTURE_RES_MIDDLE))
7168 res = CAM_RESOLUTION_2560x1920;
7169 else if (0 == strcmp(val, CAM_CAPTURE_RES_MIDDLE_WIDE))
7170 res = CAM_RESOLUTION_2560x1536;
7171 else if (0 == strcmp(val, CAM_CAPTURE_RES_SMALL))
7172 res = CAM_RESOLUTION_2560x1920;
7173 else if (0 == strcmp(val, CAM_CAPTURE_RES_SMALL_WIDE))
7174 res = CAM_RESOLUTION_1280x720;
7175 else if (0 == strcmp(val, CAM_CAPTURE_RES_VGA))
7176 res = CAM_RESOLUTION_VGA;
7178 res = CAM_RESOLUTION_3264x2448;
7180 if (0 == strcmp(val, CAM_RECORDING_RES_HD))
7181 res = CAM_RESOLUTION_HD;
7182 else if (0 == strcmp(val, CAM_RECORDING_RES_VGA))
7183 res = CAM_RESOLUTION_VGA;
7184 else if (0 == strcmp(val, CAM_RECORDING_RES_QCIF))
7185 res = CAM_RESOLUTION_QCIF;
7187 res = CAM_RESOLUTION_VGA;
7190 args->width = CAM_RESOLUTION_W(res);
7191 args->height = CAM_RESOLUTION_H(res);
7192 args->resolution = res;
7197 service_get_extra_data(service, "LIMIT", (char **)&val);
7199 cam_debug(LOG_UI, "LIMIT %s", val);
7200 args->size_limit = atoi(val);
7202 args->size_limit = 0;
7207 service_get_extra_data(service, "REVIEW", (char **)&val);
7209 if (0 == strcmp(val, "TRUE"))
7210 args->review = TRUE;
7212 args->review = FALSE;
7214 args->review = FALSE;
7217 /* print exe args */
7218 cam_debug(LOG_SYS, "############### exe args ###############");
7219 cam_debug(LOG_SYS, "mode =%d", args->cam_mode);
7220 cam_debug(LOG_SYS, "caller =%s", args->caller);
7221 cam_debug(LOG_SYS, "width =%d", args->width);
7222 cam_debug(LOG_SYS, "height =%d", args->height);
7223 cam_debug(LOG_SYS, "limit =%d", args->size_limit);
7224 cam_debug(LOG_SYS, "review =%d", args->review);
7225 cam_debug(LOG_SYS, "############### end ###############");
7231 void cam_app_draw_af_box(void *data)
7234 cam_retm_if(data == NULL, "data is null");
7235 struct appdata *ad = (struct appdata *)data;
7239 switch (ad->rot_current) {
7240 case APP_DEVICE_ORIENTATION_0:
7242 ad->af_start_x = ad->touch_lcd_x;
7243 ad->af_start_y = ad->touch_lcd_y;
7246 case APP_DEVICE_ORIENTATION_180:
7248 ad->af_start_x = ad->win_height - ad->touch_lcd_x;
7249 ad->af_start_y = ad->win_width - ad->touch_lcd_y;
7252 case APP_DEVICE_ORIENTATION_270:
7254 ad->af_start_x = ad->touch_lcd_y;
7255 ad->af_start_y = ad->win_height - ad->touch_lcd_x;
7258 case APP_DEVICE_ORIENTATION_90:
7260 ad->af_start_x = ad->win_width - ad->touch_lcd_y;
7261 ad->af_start_y = ad->touch_lcd_x;
7269 DEBUG_TRACE("ad->af_start_x=%f, ad->af_start_y=%f", ad->af_start_x,
7271 ad->camera_focus_w = CAMERA_FOCUS_W * elm_config_scale_get();
7272 ad->camera_focus_h = CAMERA_FOCUS_H * elm_config_scale_get();
7273 DEBUG_TRACE("ad->camera_focus_w=%f, ad->camera_focus_h=%f",
7274 ad->camera_focus_w, ad->camera_focus_h);
7276 ad->af_start_x = ad->af_start_x - (ad->camera_focus_w / 2);
7277 ad->af_start_y = ad->af_start_y - (ad->camera_focus_h / 2);
7278 DEBUG_TRACE("af area box start x,y =[%f,%f]\n", ad->af_start_x,
7281 if (ad->rot_current == APP_DEVICE_ORIENTATION_270
7282 || ad->rot_current == APP_DEVICE_ORIENTATION_90) {
7283 if (ad->af_start_x < ad->preview_offset_x) {
7284 ad->af_start_x = ad->preview_offset_x;
7286 if (ad->af_start_y < ad->preview_offset_y) {
7287 ad->af_start_y = ad->preview_offset_y;
7289 if ((ad->af_start_x + ad->camera_focus_w) >
7290 (ad->preview_w + ad->preview_offset_x)) {
7292 (ad->preview_w + ad->preview_offset_x) -
7295 if ((ad->af_start_y + ad->camera_focus_h) >
7296 (ad->preview_h + ad->preview_offset_y)) {
7298 (ad->preview_h + ad->preview_offset_y) -
7303 if (ad->af_start_y < ad->preview_offset_x) {
7304 ad->af_start_y = ad->preview_offset_x;
7306 if (ad->af_start_x < ad->preview_offset_y) {
7307 ad->af_start_x = ad->preview_offset_y;
7309 if ((ad->af_start_y + ad->camera_focus_h) >
7310 (ad->preview_w + ad->preview_offset_x)) {
7312 (ad->preview_w + ad->preview_offset_x) -
7315 if ((ad->af_start_x + ad->camera_focus_w) >
7316 (ad->preview_h + ad->preview_offset_y)) {
7318 (ad->preview_h + ad->preview_offset_y) -
7322 if (ad->focus_edje) {
7324 ("####################################################");
7325 DEBUG_TRACE("af area start ,ad->af_start_x,y =[%f,%f]\n",
7326 ad->af_start_x, ad->af_start_y);
7328 ("####################################################");
7329 evas_object_move(ad->focus_edje, ad->af_start_x,
7331 DEBUG_TRACE(" MOVE FOCUS_EDJE : %f,%f", ad->af_start_x,
7338 /* get preview start x,y coordinate */
7339 void cam_app_get_preview_offset_coordinate(void *data)
7342 cam_retm_if(data == NULL, "data is null");
7343 struct appdata *ad = (struct appdata *)data;
7345 CamAppData *camapp = ad->camapp_handle;
7346 cam_retm_if(camapp == NULL, "camapp is null");
7350 CamVideoRectangle result; /* result ractangle */
7351 CamVideoRectangle window; /* target window ractangle */
7352 CamVideoRectangle preview; /* target preview rectangle */
7353 /*wow,now, the MMHandleType is not created*/
7354 cam_mm_get_video_size(&width, &height);
7356 ad->camfw_video_width = width;
7357 ad->camfw_video_height = height;
7360 DEBUG_TRACE("************************************************");
7361 DEBUG_TRACE("preview.w =%d, preview.h=%d", preview.w, preview.h);
7363 window.h = ad->win_height;
7364 window.w = ad->win_width;
7365 DEBUG_TRACE("window.w =%d, window.h=%d\n", window.w, window.h);
7366 DEBUG_TRACE("************************************************");
7367 cam_app_preview_start_coordinate(preview, window, &result);
7369 ad->preview_offset_x = result.x;
7370 ad->preview_offset_y = result.y;
7371 ad->preview_w = result.w;
7372 ad->preview_h = result.h;
7374 DEBUG_TRACE("************************************************");
7375 DEBUG_TRACE("ad->preview_offset_x = %d, ad->preview_offset_y = %d",
7376 ad->preview_offset_x, ad->preview_offset_y);
7377 DEBUG_TRACE("*************************************************");
7379 camapp->focus_state = CAM_FOCUS_STATUS_RELEASED;
7380 cam_app_focus_guide_update(ad);
7383 ad->af_x = (ad->win_width / 2) - ad->preview_offset_x;
7384 ad->af_y = (ad->win_height / 2) - ad->preview_offset_y;
7386 ad->af_x = (ad->af_x * ad->camfw_video_width) / ad->preview_w;
7387 ad->af_y = (ad->af_y * ad->camfw_video_height) / ad->preview_h;
7389 ad->touch_lcd_x = (ad->win_height / 2);
7390 ad->touch_lcd_y = (ad->win_width / 2);
7392 DEBUG_TRACE("*************************************************");
7393 DEBUG_TRACE(" ad->af_x=%d, ad->af_y=%d", ad->af_x, ad->af_y);
7394 DEBUG_TRACE(" ad->af_start_x=%d, ad->af_start_y=%d", ad->af_start_x, ad->af_start_y);
7395 DEBUG_TRACE(" ad->touch_lcd_x=%d, ad->touch_lcd_y=%d", ad->touch_lcd_x,
7397 DEBUG_TRACE("*************************************************");
7399 cam_app_draw_af_box(ad);
7400 camapp->focus_mode = CAM_FOCUS_MODE_CONTINUOUS;
7403 evas_object_show(ad->focus_edje);
7406 void cam_app_preview_start_coordinate(CamVideoRectangle src,
7407 CamVideoRectangle dst,
7408 CamVideoRectangle *result)
7410 /* src is target preview rectangle */
7411 /* dst is target window rectangle */
7412 g_return_if_fail(result != NULL);
7413 gdouble src_ratio, dst_ratio;
7414 src_ratio = (gdouble) src.w / src.h;
7415 dst_ratio = (gdouble) dst.w / dst.h;
7416 if (src_ratio > dst_ratio) {
7417 DEBUG_TRACE("#### case 1\n");
7419 result->h = dst.w / src_ratio;
7421 result->y = (dst.h - result->h) / 2;
7422 } else if (src_ratio < dst_ratio) {
7423 DEBUG_TRACE("#### case 2\n");
7424 result->w = dst.h * src_ratio;
7426 result->x = (dst.w - result->w) / 2;
7429 DEBUG_TRACE("#### case 3\n");
7436 ("************************************************************");
7438 ("source is %dx%d dest is %dx%d, result window size is %dx%d result offset x= %dx y=%d",
7439 src.w, src.h, dst.w, dst.h, result->w, result->h, result->x,
7442 ("************************************************************");
7446 void cam_remove_tmp_file()
7448 const gchar *default_path = NULL;
7449 char tmpfile_name[256] = { 0 };
7451 default_path = cam_file_get_internal_video_path();
7452 DEBUG_TRACE(" video = %s", default_path);
7453 snprintf(tmpfile_name, sizeof(tmpfile_name), "%s%s", default_path,
7455 if (g_file_test(tmpfile_name, G_FILE_TEST_EXISTS)) {
7456 DEBUG_TRACE("REMOVE tmp file");
7457 unlink(tmpfile_name);
7459 default_path = cam_file_get_external_video_path();
7460 DEBUG_TRACE(" video = %s", default_path);
7461 snprintf(tmpfile_name, sizeof(tmpfile_name), "%s%s", default_path,
7464 if (g_file_test(tmpfile_name, G_FILE_TEST_EXISTS)) {
7465 DEBUG_TRACE("REMOVE tmp file");
7466 unlink(tmpfile_name);
7471 Eina_Bool cam_app_launch_after_preview_began(void *data)
7473 struct appdata *ad = (struct appdata *)data;
7474 cam_retv_if(ad == NULL, FALSE);
7476 cam_debug(LOG_UI, "cam_app_launch_after_preview_began");
7478 int state = cam_mm_get_state();
7480 if (state != RECORDER_STATE_RECORDING) {
7481 cam_debug(LOG_UI, "remove previous file");
7482 cam_remove_tmp_file();
7485 cam_app_get_preview_offset_coordinate(data);
7486 cam_toolbar_setting_popup_create(data);
7487 return ECORE_CALLBACK_CANCEL;
7490 void cam_utils_remove_idler_all(void *data)
7492 struct appdata *ad = (struct appdata *)data;
7494 Ecore_Idler *idler = NULL;
7496 debug_fenter(LOG_UI);
7498 cam_retm_if(ad == NULL, "appdata is NULL");
7501 In fact, a Lock is needed here. However, because all related functions are working main loop, practically it may not be needed. */
7503 if (!ad->capture_cb_list) {
7504 cam_debug(LOG_UI, "No idler is remained.");
7506 list = ad->capture_cb_list;
7513 "Fail to remove idler. The idler is NULL");
7515 cam_debug(LOG_UI, "Remove idler[%p].", idler);
7516 ecore_idler_del(idler);
7518 ad->capture_cb_list =
7519 g_list_remove(ad->capture_cb_list, idler);
7522 list = g_list_next(list);
7525 g_list_free(ad->capture_cb_list);
7526 ad->capture_cb_list = NULL;
7530 debug_fleave(LOG_UI);
7534 Eina_Bool cam_elm_cache_flush()
7536 /*Make the canvas discard as much data as possible used by the engine at runtime.*/
7537 DEBUG_TRACE("start");
7538 struct appdata *ad = (struct appdata *)cam_appdata_get();
7541 evas_render_idle_flush(ad->evas);
7544 elm_cache_all_flush();
7549 gboolean cam_condition_check_to_start_camera(void *data)
7551 struct appdata *ad = (struct appdata *)data;
7552 cam_retvm_if(ad == NULL, EINA_FALSE, "appdata is NULL");
7555 if (cam_utils_check_battery_critical_low()) {
7556 ad->battery_status = LOW_BATTERY_CRITICAL_STATUS;
7557 cam_app_notice_popup(ad, dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY"), cam_app_timeout_notice_response_cb);
7560 } else if (cam_utils_check_battery_warning_low()) {
7561 ad->battery_status = LOW_BATTERY_WARNING_STATUS;
7563 ad->battery_status = NORMAL_BATTERY_STATUS;