Flora license update
[apps/core/preloaded/ug-camera-efl.git] / include / cam_app.h
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.1 (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
7  *
8  *        http://floralicense.org/license/
9  *
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.
15  */
16
17
18 #ifndef __DEF_cam_app_H_
19 #define __DEF_cam_app_H_
20
21
22
23 #include <Elementary.h>
24 #include <Ecore_X.h>
25 #include <Edje.h>
26 #include <utilX.h>
27 #include <glib.h>
28 #include <glib-object.h>
29
30 #include <libintl.h>
31 #include <aul.h>
32 #include <aul_service.h>
33 #include <app.h>
34
35 #include "cam_property.h"
36 #include "cam_debug.h"
37
38 #include <media_content.h>
39
40 #define USE_FIFO_THREAD
41 #define EFL_TEMP_CODE
42 #define REG_THREAD_EXIT "REG_THREAD_EXIT"
43 #define RUN_IMAGE_HANDLE "RUN_IMAGE_HANDLE"
44 #define UPDATE_THUMBNAIL "UPDATE_THUMBNAIL"
45 #define UPDATE_THUMBNAIL_NO_ANI "UPDATE_THUMBNAIL_NO_ANI"
46 #define REC_FILE_SAVE_REG "REC_FILE_SAVE_REG"
47
48
49 #define USE_VCONF_CAMERA_KEY
50
51 /* next define statement will be deleted */
52 #define TODO_SURRPORT
53 #include <camera.h>
54 #define BEAT_UI
55
56
57 /*
58   * example
59 GValue value = {0, };
60 CAM_GVALUE_SET_INT(value, 10);
61 */
62
63 #define CAM_GVALUE_SET_INT(g_value/*GValue */, n_value) \
64 { \
65         g_value_init(&g_value, G_TYPE_INT); \
66         g_value_set_int(&g_value, n_value); \
67 }
68
69 #define CAM_GVALUE_SET_UINT(g_value/*GValue */, n_value) \
70 { \
71         g_value_init(&g_value, G_TYPE_UINT); \
72         g_value_set_uint(&g_value, n_value); \
73 }
74
75 #define CAM_GVALUE_SET_BOOLEAN(g_value/*GValue */, n_value) \
76 { \
77         g_value_init(&g_value, G_TYPE_BOOLEAN); \
78         g_value_set_boolean(&g_value, n_value); \
79 }
80
81 #define CAM_GVALUE_SET_STRING(g_value/*GValue */, n_value) \
82 { \
83         g_value_init(&g_value, G_TYPE_STRING); \
84         g_value_set_string(&g_value, n_value); \
85 }
86
87 #define _EDJ(x)  (Evas_Object *)elm_layout_edje_get(x)
88 /* guide rect color of panorama shot & smile shot */
89 #define UYVY_GUIDE_RECT_GREEN   (unsigned long)0xC262C212;
90 #define UYVY_GUIDE_RECT_ORANGE  (unsigned long)0xA6BAA621;
91 #define UYVY_GUIDE_RECT_RED     (unsigned long)0x52FA5270;
92 #define UYVY_GUIDE_RECT_WHITE   (unsigned long)0xFE7FFE80;
93 #define YUYV_GUIDE_RECT_GREEN   (unsigned long)0x62C212C2;
94 #define YUYV_GUIDE_RECT_ORANGE  (unsigned long)0xBAA621A6;
95 #define YUYV_GUIDE_RECT_RED             (unsigned long)0xFA527052;
96 #define YUYV_GUIDE_RECT_WHITE   (unsigned long)0x7FFE80FE;
97
98 enum {
99         NORMAL_BATTERY_STATUS = 0,
100         LOW_BATTERY_WARNING_STATUS,
101         LOW_BATTERY_CRITICAL_STATUS,
102 };
103
104 enum {
105         DISPLAY_NONE_POPUP = 0,
106         DISPLAY_EDIT_SHOTCUTS_POPUP,
107         DISPLAY_BURST_SHOT_MODE_POPUP,
108         DISPLAY_VOLUME_KEY_POPUP,
109         DISPLAY_SELF_PORTRAIT_POPUP,
110         DISPLAY_FLASH_POPUP,
111         DISPLAY_SHOOTING_MODE_POPUP,
112         DISPLAY_RECORDING_MODE_POPUP,
113         DISPLAY_SCENE_MODE_POPUP,
114         DISPLAY_FOCUS_MODE_POPUP,
115         DISPLAY_TIMER_POPUP,
116         DISPLAY_EFFECTS_POPUP,
117         DISPLAY_PHOTO_RESOLUTION_POPUP,
118         DISPLAY_VIDEO_RESOLUTION_POPUP,
119         DISPLAY_WHITE_BALANCE_POPUP,
120         DISPLAY_ISO_POPUP,
121         DISPLAY_METERING_POPUP,
122         DISPLAY_ANTI_SHAKE_POPUP,
123         DISPLAY_OUTDOOR_VISIBILITY_POPUP,
124         DISPLAY_AUTO_CONTRAST_POPUP,
125         DISPLAY_GUIDELINES_POPUP,
126         DISPLAY_CAPTURE_VOICE_POPUP,
127         DISPLAY_GPS_TAG_POPUP,
128         DISPLAY_SAVE_AS_FLIP,
129         DISPLAY_STORAGE_POPUP,
130         DISPLAY_RESET_POPUP,
131 };
132
133 enum {
134         CAM_POPUP_RESPONSE_NONE = 0,
135         CAM_POPUP_RESPONSE_TIMEOUT,
136         CAM_POPUP_RESPONSE_OK,
137         CAM_POPUP_RESPONSE_CANCEL,
138         CAM_POPUP_RESPONSE_CLOSE,
139   } ;
140
141 typedef enum _CamCaptureMode{
142         CAM_CAPTURE_DEFAULT = 0,
143         CAM_CAPTURE_SINGLE = CAM_CAPTURE_DEFAULT,
144         CAM_CAPTURE_BURST,
145         CAM_CAPTURE_MAX,
146 }CamCaptureMode;
147
148 typedef enum _CamFileExtention{
149         CAM_FILE_EXTENTION_IMAGE =0,
150         CAM_FILE_EXTENTION_VIDEO,
151 }CamFileExtention;
152
153 typedef void (*cam_update_view_cb)(void *data);
154
155
156 typedef struct _CamApp CamAppData;
157
158 struct _CamApp {
159         gint camera_mode;
160         gint shooting_mode;
161         gint recording_mode;
162         gint scene_mode;
163         gint focus_mode;
164         gint photo_resolution;
165         gint video_resolution;
166         gint fps;
167         gint brightness;
168         gint brightness_min;
169         gint brightness_max;
170         gint white_balance;
171         gint iso;
172         gint auto_exposure;
173         gint effect;
174         gint af_mode;
175         gint wdr;
176         gint flash;
177         gint timer;
178         gint image_quality;
179         gint video_quality;
180         gint audio_quality;
181         gint default_preview_width;
182         gint default_preview_height;
183         gint battery_level;
184         gint battery_charging;
185
186         gint gps_level;
187         gint zoom_min;
188         gint zoom_max;
189         gint zoom_mode;
190         gint storage;
191         gint volume_key;
192
193         gint device_type;
194
195         gboolean self_portrait;
196         gboolean outdoor_visibility;
197         gboolean burst_shot;
198         gboolean audio_recording;
199         gboolean anti_shake;
200         gboolean capture_by_voice;
201         gboolean auto_contrast;
202         gboolean guideline;
203         gboolean gps;
204         gboolean review;
205         gboolean save_as_flip;
206         gboolean enable_touch_af;
207         CamTouchAFState touch_af_state;
208
209         int need_gps_popup;
210         int need_gps_on;
211
212         gint image_count;
213         gint shutter_sound;
214         gint size_limit;
215         gint size_limit_type;
216         guint rec_elapsed;
217         guint rec_filesize;
218         guint rec_stop_type;
219
220         guint focus_state;
221
222         /* timeout check */
223         gdouble last_time;
224         gdouble start_time;     /* setting toolbar */
225
226         /* continuous */
227         Evas_Object *conti_image;
228         int conti_capture_cnt;
229
230         /* guide rect for px & smile shot */
231         gulong guide_rect_color;
232
233         /*  continuous shot */
234         CamContinuousShotData *continuous_shot_data;
235
236         /* post processing */
237         gboolean post_processing;
238
239         /* file */
240         gchar *filename;
241         char *thumbnail_name;
242
243         gboolean zoom_lock;
244
245         int key_lock;
246         int mouse_lock;
247
248         /*set guide rect color */
249         gulong guide_rect_green;
250         gulong guide_rect_orange;
251         gulong guide_rect_red;
252         gulong guide_rect_white; /*store white color of yuyv or uvuv*/
253
254         /*camera callback*/
255         camera_state_changed_cb state_cb;
256         camera_focus_changed_cb focus_cb;
257         camera_error_cb error_cb;
258         camera_capturing_cb capture_cb;
259         camera_capture_completed_cb capture_completed_cb;
260         camera_preview_cb preview_cb;
261         camera_interrupted_cb cam_interrupted_cb;
262         cam_update_view_cb update_view_cb;
263
264         /*recorder callbak*/
265         recorder_recording_status_cb recording_status_cb;
266         recorder_state_changed_cb recording_state_changed_cb;
267         recorder_recording_limit_reached_cb recording_limit_reached_cb;
268         recorder_interrupted_cb rec_interrupted_cb;
269
270         /*face detect callback*/
271         camera_face_detected_cb face_detect_cb;
272
273         CamCaptureMode default_capture_mode;
274
275         /* reserved setting data*/
276         cam_reserved_setting_data reserved_setting_data;
277 };
278
279 typedef struct _CamVideoRectangle CamVideoRectangle;
280 struct _CamVideoRectangle {
281         gint x;
282         gint y;
283         gint w;
284         gint h;
285 };
286
287
288 /**
289  * Structure of Idler item
290  */
291 typedef struct {
292         Ecore_Idler *idler;
293         void *data;
294 } CamIdlerItem;
295
296 gboolean __cam_single_shot_reg_file(char *file_path);
297
298 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
299 Eina_Bool cam_image_capture_handle_idler(void *item);
300 Eina_Bool cam_image_capture_handle(void *data);
301 Eina_Bool cam_capture_on_recording_handle(void *data);
302
303  /* gboolean cam_xwin_create(void *data); */
304 void *cam_appdata_get(void);
305 int cam_appdata_init(void *data);
306 int cam_appdata_fini(void *data);
307 CamAppData *cam_handle_get(void);
308
309 gboolean cam_app_start(void *data);
310 gboolean cam_app_stop(void *data);
311 gboolean cam_app_resume(void *data);
312 gboolean cam_app_pause(void *data);
313
314 gboolean cam_app_init(void *data);
315
316 gboolean cam_handle_create(void *data);
317 gboolean cam_handle_free(void *data);
318 gboolean cam_handle_init(void *data, int mode);
319 /* auto shot for smile , panorama, action shot and etc. */
320 Eina_Bool _auto_shot_idle_cb(void *data);
321
322 gboolean cam_app_preview_start(void *data);
323 gboolean cam_app_preview_stop(void);
324
325 gboolean cam_camera_touch_af_press(void *data);
326 gboolean cam_camera_key_press(void *data);
327 gboolean cam_camera_key_half_press(void *data);
328 gboolean cam_camera_key_release(void *data);
329 gboolean cam_camera_key_half_release(void *data);
330 Eina_Bool cam_volume_key_press(void *data);
331
332 Eina_Bool cam_hard_key_up(void *data, int type, void *event_info);
333 Eina_Bool cam_hard_key_down(void *data, int type, void *event_info);
334
335 Eina_Bool cam_mouse_button_down(void *data, void *event_info);
336 Eina_Bool cam_mouse_button_up(void *data, void *event_info);
337
338 gboolean cam_handle_value_set(void *data, int type, const GValue *value);
339
340 int cam_app_get_latest_mode(void);
341 void cam_app_set_config_group(gint mode);
342
343 const gchar *cam_app_get_target_path(void);
344 gchar *cam_app_get_next_filename(CamFileExtention extention);
345 gchar *cam_app_get_last_filename(void);
346
347 gboolean cam_callback_init(void *data);
348
349 gboolean cam_app_run_media_browser(void *data, gchar *filename);
350 /* int cam_quick_waiter(void * data); */
351
352 gboolean cam_app_clear_engine_data(void *data, gboolean release);
353
354 gboolean cam_app_check_wide_resolution(int id);
355
356 gboolean cam_app_is_skip_video_stream();        /* if true , must finish function in stream callback function */
357
358 void cam_app_stop_video_stream();       /* This function set skip flag to true, so cam_app_skip_video_stream will be returned true, */
359
360 void cam_app_run_video_stream();        /* This function set skip flag to false, for frame process in px or smile shot */
361
362 Eina_Bool cam_app_capture_idle_cb(void *yuvdata);
363
364 /* progress */
365 gboolean cam_app_create_progressbar(void *data);
366 gboolean cam_app_set_progressbar_value(void *data, double value);
367 gboolean cam_app_set_progressbar_text(void *data, const char *text);
368 gboolean cam_app_destroy_progressbar(void *data);
369
370 /* timeout */
371 gboolean cam_app_timeout_checker_init(void *data);
372 gboolean cam_app_timeout_checker_remove(void);
373
374 #ifdef USE_FIFO_THREAD
375 void *cam_app_FIFO_thread_run(void *data);
376 void cam_app_FIFO_thread_exit();
377 #endif
378
379 gboolean cam_app_create_file_register_thread(void *data);
380 void *cam_app_file_register_thread_run(void *data);
381 void cam_app_file_register_thread_exit(void *data);
382 gboolean cam_app_set_args(void *data, char *args[]);
383 gboolean cam_app_init_with_args(void *data);
384
385 /* gboolean cam_app_wait_target_state(int target, int wait_time); */
386
387 gboolean cam_app_exit(void *data);
388
389 gboolean cam_key_grab_init(void *data);
390 gboolean cam_key_grab_deinit(void *data);
391
392 gboolean cam_app_key_event_init(void *data);
393 gboolean cam_app_key_event_deinit(void *data);
394
395 gboolean cam_layout_init(void *data);
396 gboolean cam_mode_change(void *data, int to_mode);
397 gboolean cam_shooting_mode_change(void *data);
398 gboolean cam_recording_mode_change(void *data, int rec_mode);
399
400 void cam_app_set_progress_value(Evas_Object *pb, double value,
401                                 const char *message);
402 gboolean cam_app_set_vconf_state(int vconf_state);
403 gboolean cam_app_get_vconf_state(int *vconf_state);
404
405 void cam_app_reset_settings(void *data);
406 gboolean cam_toolbar_menu_config_update(void *data);
407
408 gboolean cam_app_set_resolution(void *data, int width, int height);
409 gboolean cam_app_get_photo_resolution(int *width, int *height);
410 gboolean cam_app_reset_resolution(void *data, int width, int height,  gboolean force_set);
411 int cam_app_get_aenc_bitrate(void *data);
412 int cam_app_get_venc_bitrate(void *data, int quality);
413 gboolean cam_app_set_video_quality(void *data, int quality);
414 gboolean cam_app_set_recording_mode(void *data, int mode);
415 gboolean cam_app_set_size_limit(int max_val, int size_limit_type);
416 gboolean cam_app_init_attribute(void *data, CamMode mode);
417
418
419
420 void cam_app_toggle_indicator(void *data, gboolean hide);
421 void cam_app_toggle_toolbar(void *data, gboolean hide);
422 void cam_app_get_preview_offset_coordinate(void *data);
423 void cam_app_draw_af_box(void *data);
424
425 void cam_app_set_blocking_popup();
426 void cam_app_free_blocking_popup();
427 void cam_app_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
428 void cam_app_gps_popup_response_cb(void *data, Evas_Object *obj, void *event_info);
429
430 Evas_Object *cam_app_create_win(Evas_Object *parent, const char *name);
431
432 Evas_Object *cam_app_load_edj(Evas_Object *parent, const char *file, const char *group);
433
434 void cam_app_update_thumbnail();
435
436 void cam_set_orient_value(void *data);
437
438
439 gboolean cam_app_parse_args(CamExeArgs *args, service_h service);
440
441 #ifdef EFL_TEMP_CODE
442 void cam_win_transparent_set(void *data);
443 #endif
444
445 void cam_app_gps_enable_popup(void *data, const char *msg,
446                               Eina_Bool (*func) (void *data));
447 void cam_app_notice_popup(void *data, const char *msg,
448                            void (*func) (void *data,
449                            Evas_Object *obj,
450                            void *event_info)
451                            );
452 void cam_app_timeout_notice_response_cb(void *data,
453                                         Evas_Object *obj,
454                                         void *event_info);
455 void cam_app_lowbattery_close_flash_cb(void *data, Evas_Object *obj,
456                                         void *event_info);
457 gboolean cam_app_run_image_viewer_ug(void *data, char *file_path, gboolean launch_special_view);
458 gboolean cam_app_run_location_ug(void *data);
459 gboolean cam_image_capture_start(void *data);
460 /* update thumbnail to quickview after first launching or return from image viewer */
461 void cam_app_update_quickview_icon(void *data);
462 /* Idler of capture callback management. wh01.cho@samsung.com. 2010-12-15. */
463 void cam_utils_remove_idler_all(void *data);
464 gdouble _get_current_time(void);
465 void cam_remove_tmp_file();
466 Eina_Bool cam_continuous_af_start(void *data);
467
468 Eina_Bool cam_elm_cache_flush();
469 void cam_app_mdm_syspopup(void *data);
470 gboolean cam_app_lbs_start(void *data);
471 gboolean cam_app_lbs_stop(void *data);
472
473 Eina_Bool cam_app_focus_guide_create(void *data);
474 Eina_Bool cam_app_focus_guide_update(void *data);
475
476 Eina_Bool cam_screen_rotate(void *data);
477 void cam_app_screen_rotate(void *data);
478
479 void cam_app_cancel_timer(void *data);
480
481 gboolean cam_condition_check_to_start_camera(void *data);
482
483 void cam_app_get_win_size(void* data);
484
485 gboolean cam_do_record(void* data);
486 gboolean cam_do_capture(void* data);
487
488 void cam_reset_focus_mode(void *data);
489
490 gboolean cam_set_default_capture_mode(void *data, CamCaptureMode type);
491 /* timeout */
492 gboolean cam_app_timeout_checker_update();
493 gboolean cam_app_hide_progressbar(void *data);
494 gint cam_app_get_max_image_size_by_ratio(void *data, int resolution);
495 void cam_app_stop_capture(void* data);
496 void cam_create_error_popup(void* data);
497
498 #endif