Release version 0.2.28
[platform/core/api/camera.git] / src / camera.c
1 /*
2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
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 #include <stdio.h>
19 #include <stdlib.h>
20 #include <string.h>
21 #include <mm.h>
22 #include <mm_types.h>
23 #include <camera.h>
24 #include <muse_camera.h>
25 #include <muse_camera_msg.h>
26 #include <muse_core_ipc.h>
27 #include <camera_private.h>
28 #include <muse_core.h>
29 //#include <glib.h>
30 #include <dlog.h>
31 #include <Elementary.h>
32 #include <tbm_surface_internal.h>
33 #include <gst/gst.h>
34 #include <mm_camcorder.h>
35 #include <mm_camcorder_client.h>
36 #include <Evas.h>
37 #ifdef HAVE_WAYLAND
38 #include <Ecore_Wayland.h>
39 #else
40 #include <Ecore.h>
41 #endif
42
43 #ifdef LOG_TAG
44 #undef LOG_TAG
45 #endif
46 #define LOG_TAG "TIZEN_N_CAMERA_CLIENT"
47
48
49 int __convert_camera_error_code(const char *func, int code)
50 {
51         int ret = CAMERA_ERROR_NONE;
52         const char *errorstr = NULL;
53
54         switch (code) {
55         case MM_ERROR_NONE:
56                 ret = CAMERA_ERROR_NONE;
57                 errorstr = "ERROR_NONE";
58                 break;
59         case MM_ERROR_CAMCORDER_INVALID_ARGUMENT:
60         case MM_ERROR_COMMON_INVALID_ATTRTYPE:
61                 ret = CAMERA_ERROR_INVALID_PARAMETER;
62                 errorstr = "INVALID_PARAMETER";
63                 break;
64         case MM_ERROR_CAMCORDER_NOT_INITIALIZED:
65         case MM_ERROR_CAMCORDER_INVALID_STATE:
66                 ret = CAMERA_ERROR_INVALID_STATE;
67                 errorstr = "INVALID_STATE";
68                 break;
69         case MM_ERROR_CAMCORDER_DEVICE_NOT_FOUND:
70                 ret = CAMERA_ERROR_DEVICE_NOT_FOUND;
71                 errorstr = "DEVICE_NOT_FOUND";
72                 break;
73         case MM_ERROR_CAMCORDER_DEVICE_BUSY:
74         case MM_ERROR_CAMCORDER_DEVICE_OPEN:
75         case MM_ERROR_CAMCORDER_CMD_IS_RUNNING:
76                 ret = CAMERA_ERROR_DEVICE_BUSY;
77                 errorstr = "DEVICE_BUSY";
78                 break;
79         case MM_ERROR_CAMCORDER_DEVICE:
80         case MM_ERROR_CAMCORDER_DEVICE_IO:
81         case MM_ERROR_CAMCORDER_DEVICE_TIMEOUT:
82         case MM_ERROR_CAMCORDER_DEVICE_WRONG_JPEG:
83         case MM_ERROR_CAMCORDER_DEVICE_LACK_BUFFER:
84                 ret = CAMERA_ERROR_DEVICE;
85                 errorstr = "ERROR_DEVICE";
86                 break;
87         case MM_ERROR_CAMCORDER_GST_CORE:
88         case MM_ERROR_CAMCORDER_GST_LIBRARY:
89         case MM_ERROR_CAMCORDER_GST_RESOURCE:
90         case MM_ERROR_CAMCORDER_GST_STREAM:
91         case MM_ERROR_CAMCORDER_GST_STATECHANGE:
92         case MM_ERROR_CAMCORDER_GST_NEGOTIATION:
93         case MM_ERROR_CAMCORDER_GST_LINK:
94         case MM_ERROR_CAMCORDER_GST_FLOW_ERROR:
95         case MM_ERROR_CAMCORDER_ENCODER:
96         case MM_ERROR_CAMCORDER_ENCODER_BUFFER:
97         case MM_ERROR_CAMCORDER_ENCODER_WRONG_TYPE:
98         case MM_ERROR_CAMCORDER_ENCODER_WORKING:
99         case MM_ERROR_CAMCORDER_INTERNAL:
100         case MM_ERROR_CAMCORDER_RESPONSE_TIMEOUT:
101         case MM_ERROR_CAMCORDER_DSP_FAIL:
102         case MM_ERROR_CAMCORDER_AUDIO_EMPTY:
103         case MM_ERROR_CAMCORDER_CREATE_CONFIGURE:
104         case MM_ERROR_CAMCORDER_FILE_SIZE_OVER:
105         case MM_ERROR_CAMCORDER_DISPLAY_DEVICE_OFF:
106         case MM_ERROR_CAMCORDER_INVALID_CONDITION:
107                 ret = CAMERA_ERROR_INVALID_OPERATION;
108                 errorstr = "INVALID_OPERATION";
109                 break;
110         case MM_ERROR_CAMCORDER_RESOURCE_CREATION:
111         case MM_ERROR_COMMON_OUT_OF_MEMORY:
112                 ret = CAMERA_ERROR_OUT_OF_MEMORY;
113                 errorstr = "OUT_OF_MEMORY";
114                 break;
115         case MM_ERROR_POLICY_BLOCKED:
116                 ret = CAMERA_ERROR_SOUND_POLICY;
117                 errorstr = "ERROR_SOUND_POLICY";
118                 break;
119         case MM_ERROR_POLICY_BLOCKED_BY_CALL:
120                 ret = CAMERA_ERROR_SOUND_POLICY_BY_CALL;
121                 errorstr = "ERROR_SOUND_POLICY_BY_CALL";
122                 break;
123         case MM_ERROR_POLICY_BLOCKED_BY_ALARM:
124                 ret = CAMERA_ERROR_SOUND_POLICY_BY_ALARM;
125                 errorstr = "ERROR_SOUND_POLICY_BY_ALARM";
126                 break;
127         case MM_ERROR_POLICY_RESTRICTED:
128                 ret = CAMERA_ERROR_SECURITY_RESTRICTED;
129                 errorstr = "ERROR_RESTRICTED";
130                 break;
131         case MM_ERROR_CAMCORDER_DEVICE_REG_TROUBLE:
132                 ret = CAMERA_ERROR_ESD;
133                 errorstr = "ERROR_ESD";
134                 break;
135         case MM_ERROR_COMMON_INVALID_PERMISSION:
136                 ret = CAMERA_ERROR_PERMISSION_DENIED;
137                 errorstr = "ERROR_PERMISSION_DENIED";
138                 break;
139         case MM_ERROR_COMMON_OUT_OF_ARRAY:
140         case MM_ERROR_COMMON_OUT_OF_RANGE:
141         case MM_ERROR_COMMON_ATTR_NOT_EXIST:
142         case MM_ERROR_CAMCORDER_NOT_SUPPORTED:
143                 ret = CAMERA_ERROR_NOT_SUPPORTED;
144                 errorstr = "ERROR_NOT_SUPPORTED";
145                 break;
146         default:
147                 ret = CAMERA_ERROR_INVALID_OPERATION;
148                 errorstr = "INVALID_OPERATION";
149         }
150
151         if (code != MM_ERROR_NONE) {
152                 LOGE("[%s] %s(0x%08x) : core frameworks error code(0x%08x)", func ? func : "NULL_FUNC", errorstr, ret, code);
153         }
154
155         return ret;
156 }
157
158 #ifdef HAVE_WAYLAND
159 static MMCamWaylandInfo *_get_wl_info(Evas_Object *obj)
160 {
161         MMCamWaylandInfo *wl_info = NULL;
162
163         if (obj == NULL) {
164                 LOGE("evas object is NULL");
165                 return NULL;
166         }
167
168         wl_info = g_new0(MMCamWaylandInfo, 1);
169         if (wl_info == NULL) {
170                 LOGE("wl_info alloc failed : %d", sizeof(MMCamWaylandInfo));
171                 return NULL;
172         }
173
174         wl_info->evas_obj = (void *)obj;
175         wl_info->window = (void *)elm_win_wl_window_get(obj);
176         wl_info->surface = (void *)ecore_wl_window_surface_get(wl_info->window);
177         wl_info->display = (void *)ecore_wl_display_get();
178
179         if (wl_info->window == NULL || wl_info->surface == NULL || wl_info->display == NULL) {
180                 LOGE("something is NULL %p, %p, %p", wl_info->window, wl_info->surface, wl_info->display);
181                 g_free(wl_info);
182                 return NULL;
183         }
184
185         evas_object_geometry_get(obj, &wl_info->window_x, &wl_info->window_y,
186                                  &wl_info->window_width, &wl_info->window_height);
187
188         LOGD("wayland obj %p, window %p, surface %p, display %p, size %d,%d,%dx%d",
189              wl_info->evas_obj, wl_info->window, wl_info->surface, wl_info->display,
190              wl_info->window_x, wl_info->window_y, wl_info->window_width, wl_info->window_height);
191
192         return wl_info;
193 }
194 #endif /* HAVE_WAYLAND */
195
196 static int _import_tbm_key(tbm_bufmgr bufmgr, unsigned int tbm_key, tbm_bo *bo, tbm_bo_handle *bo_handle)
197 {
198         tbm_bo tmp_bo = NULL;
199         tbm_bo_handle tmp_bo_handle = {NULL, };
200
201         if (bufmgr == NULL || bo == NULL || bo_handle == NULL || tbm_key == 0) {
202                 LOGE("invalid parameter - bufmgr %p, bo %p, bo_handle %p, key %d",
203                      bufmgr, bo, bo_handle, tbm_key);
204                 return false;
205         }
206
207         tmp_bo = tbm_bo_import(bufmgr, tbm_key);
208         if (tmp_bo == NULL) {
209                 LOGE("bo import failed - bufmgr %p, key %d", bufmgr, tbm_key);
210                 return false;
211         }
212
213         tmp_bo_handle = tbm_bo_map(tmp_bo, TBM_DEVICE_CPU, TBM_OPTION_READ);
214         if (tmp_bo_handle.ptr == NULL) {
215                 LOGE("bo map failed %p", tmp_bo);
216                 tbm_bo_unref(tmp_bo);
217                 tmp_bo = NULL;
218                 return false;
219         }
220
221         /* set bo and bo_handle */
222         *bo = tmp_bo;
223         *bo_handle = tmp_bo_handle;
224
225         return true;
226 }
227
228 static void _release_imported_bo(tbm_bo *bo)
229 {
230         if (bo == NULL || *bo == NULL) {
231                 LOGW("NULL bo");
232                 return;
233         }
234
235         tbm_bo_unmap(*bo);
236         tbm_bo_unref(*bo);
237         *bo = NULL;
238
239         return;
240 }
241
242 static int _client_wait_for_cb_return(muse_camera_api_e api, camera_cb_info_s *cb_info, int time_out)
243 {
244         int ret = CAMERA_ERROR_NONE;
245         gint64 end_time;
246
247         LOGD("Enter api : %d", api);
248
249         g_mutex_lock(&(cb_info->api_mutex[api]));
250
251         if (cb_info->api_activating[api] == 0) {
252                 end_time = g_get_monotonic_time() + time_out * G_TIME_SPAN_SECOND;
253                 if (g_cond_wait_until(&(cb_info->api_cond[api]), &(cb_info->api_mutex[api]), end_time)) {
254                         ret = cb_info->api_ret[api];
255                         cb_info->api_activating[api] = 0;
256
257                         LOGD("return value : 0x%x", ret);
258                 } else {
259                         ret = CAMERA_ERROR_INVALID_OPERATION;
260
261                         LOGE("api %d was TIMED OUT!", api);
262                 }
263         } else {
264                 ret = cb_info->api_ret[api];
265                 cb_info->api_activating[api] = 0;
266
267                 LOGD("condition is already checked for the api[%d], return[0x%x]", api, ret);
268         }
269
270         g_mutex_unlock(&(cb_info->api_mutex[api]));
271
272         return ret;
273 }
274
275 int _camera_get_tbm_surface_format(int in_format, uint32_t *out_format)
276 {
277         if (in_format <= MM_PIXEL_FORMAT_INVALID ||
278             in_format >= MM_PIXEL_FORMAT_NUM ||
279             out_format == NULL) {
280                 LOGE("INVALID_PARAMETER : in_format %d, out_format ptr %p", in_format, out_format);
281                 return CAMERA_ERROR_INVALID_PARAMETER;
282         }
283
284         switch (in_format) {
285         case MM_PIXEL_FORMAT_NV12:
286         case MM_PIXEL_FORMAT_NV12T:
287                 *out_format = TBM_FORMAT_NV12;
288                 break;
289         case MM_PIXEL_FORMAT_NV16:
290                 *out_format = TBM_FORMAT_NV16;
291                 break;
292         case MM_PIXEL_FORMAT_NV21:
293                 *out_format = TBM_FORMAT_NV21;
294                 break;
295         case MM_PIXEL_FORMAT_YUYV:
296                 *out_format = TBM_FORMAT_YUYV;
297                 break;
298         case MM_PIXEL_FORMAT_UYVY:
299         case MM_PIXEL_FORMAT_ITLV_JPEG_UYVY:
300                 *out_format = TBM_FORMAT_UYVY;
301                 break;
302         case MM_PIXEL_FORMAT_422P:
303                 *out_format = TBM_FORMAT_YUV422;
304                 break;
305         case MM_PIXEL_FORMAT_I420:
306                 *out_format = TBM_FORMAT_YUV420;
307                 break;
308         case MM_PIXEL_FORMAT_YV12:
309                 *out_format = TBM_FORMAT_YVU420;
310                 break;
311         case MM_PIXEL_FORMAT_RGB565:
312                 *out_format = TBM_FORMAT_RGB565;
313                 break;
314         case MM_PIXEL_FORMAT_RGB888:
315                 *out_format = TBM_FORMAT_RGB888;
316                 break;
317         case MM_PIXEL_FORMAT_RGBA:
318                 *out_format = TBM_FORMAT_RGBA8888;
319                 break;
320         case MM_PIXEL_FORMAT_ARGB:
321                 *out_format = TBM_FORMAT_ARGB8888;
322                 break;
323         default:
324                 LOGE("invalid in_format %d", in_format);
325                 return CAMERA_ERROR_INVALID_PARAMETER;
326         }
327
328         return CAMERA_ERROR_NONE;
329 }
330
331
332 int _camera_get_media_packet_mimetype(int in_format, media_format_mimetype_e *mimetype)
333 {
334         if (in_format <= MM_PIXEL_FORMAT_INVALID ||
335             in_format >= MM_PIXEL_FORMAT_NUM ||
336             mimetype == NULL) {
337                 LOGE("INVALID_PARAMETER : in_format %d, mimetype ptr %p", in_format, mimetype);
338                 return CAMERA_ERROR_INVALID_PARAMETER;
339         }
340
341         switch (in_format) {
342         case MM_PIXEL_FORMAT_NV12:
343         case MM_PIXEL_FORMAT_NV12T:
344                 *mimetype = MEDIA_FORMAT_NV12;
345                 break;
346         case MM_PIXEL_FORMAT_NV16:
347                 *mimetype = MEDIA_FORMAT_NV16;
348                 break;
349         case MM_PIXEL_FORMAT_NV21:
350                 *mimetype = MEDIA_FORMAT_NV21;
351                 break;
352         case MM_PIXEL_FORMAT_YUYV:
353                 *mimetype = MEDIA_FORMAT_YUYV;
354                 break;
355         case MM_PIXEL_FORMAT_UYVY:
356         case MM_PIXEL_FORMAT_ITLV_JPEG_UYVY:
357                 *mimetype = MEDIA_FORMAT_UYVY;
358                 break;
359         case MM_PIXEL_FORMAT_422P:
360                 *mimetype = MEDIA_FORMAT_422P;
361                 break;
362         case MM_PIXEL_FORMAT_I420:
363                 *mimetype = MEDIA_FORMAT_I420;
364                 break;
365         case MM_PIXEL_FORMAT_YV12:
366                 *mimetype = MEDIA_FORMAT_YV12;
367                 break;
368         case MM_PIXEL_FORMAT_RGB565:
369                 *mimetype = MEDIA_FORMAT_RGB565;
370                 break;
371         case MM_PIXEL_FORMAT_RGB888:
372                 *mimetype = MEDIA_FORMAT_RGB888;
373                 break;
374         case MM_PIXEL_FORMAT_RGBA:
375                 *mimetype = MEDIA_FORMAT_RGBA;
376                 break;
377         case MM_PIXEL_FORMAT_ARGB:
378                 *mimetype = MEDIA_FORMAT_ARGB;
379                 break;
380         default:
381                 LOGE("invalid in_format %d", in_format);
382                 return CAMERA_ERROR_INVALID_PARAMETER;
383         }
384
385         return CAMERA_ERROR_NONE;
386 }
387
388 int _camera_media_packet_finalize(media_packet_h pkt, int error_code, void *user_data)
389 {
390         int i = 0;
391         int ret = 0;
392         camera_cb_info_s *cb_info = (camera_cb_info_s *)user_data;
393         camera_media_packet_data *mp_data = NULL;
394         tbm_surface_h tsurf = NULL;
395
396         if (pkt == NULL || cb_info == NULL) {
397                 LOGE("invalid parameter buffer %p, cb_info %p", pkt, cb_info);
398                 return MEDIA_PACKET_FINALIZE;
399         }
400
401         ret = media_packet_get_extra(pkt, (void **)&mp_data);
402         if (ret != MEDIA_PACKET_ERROR_NONE) {
403                 LOGE("media_packet_get_extra failed 0x%x", ret);
404                 return MEDIA_PACKET_FINALIZE;
405         }
406
407         /*LOGD("mp_data %p", mp_data);*/
408
409         if (mp_data) {
410                 int tbm_key = mp_data->tbm_key;
411
412                 /* release imported bo */
413                 for (i = 0 ; i < mp_data->num_buffer_key ; i++) {
414                         tbm_bo_unref(mp_data->buffer_bo[i]);
415                         mp_data->buffer_bo[i] = NULL;
416                 }
417
418                 /* unmap and unref tbm bo */
419                 _release_imported_bo(&mp_data->bo);
420
421                 /* return buffer */
422                 muse_camera_msg_send1_no_return(MUSE_CAMERA_API_RETURN_BUFFER,
423                                                 cb_info->fd, cb_info,
424                                                 INT, tbm_key);
425                 g_free(mp_data);
426                 mp_data = NULL;
427         }
428
429         ret = media_packet_get_tbm_surface(pkt, &tsurf);
430         if (ret != MEDIA_PACKET_ERROR_NONE) {
431                 LOGE("media_packet_get_tbm_surface failed 0x%x", ret);
432                 return MEDIA_PACKET_FINALIZE;
433         }
434
435         if (tsurf) {
436                 tbm_surface_destroy(tsurf);
437                 tsurf = NULL;
438         }
439
440         return MEDIA_PACKET_FINALIZE;
441 }
442
443 static void _client_user_callback(camera_cb_info_s *cb_info, char *recv_msg, muse_camera_event_e event)
444 {
445         int param1 = 0;
446         int param2 = 0;
447         int tbm_key = 0;
448         tbm_bo bo = NULL;
449         tbm_bo_handle bo_handle = {NULL, };
450
451         if (recv_msg == NULL || event >= MUSE_CAMERA_EVENT_TYPE_NUM) {
452                 LOGE("invalid parameter - camera msg %p, event %d", recv_msg, event);
453                 return;
454         }
455
456         LOGD("get camera msg %s, event %d", recv_msg, event);
457
458         if (cb_info->user_cb[event] == NULL) {
459                 LOGW("user callback for event %d is not set", event);
460                 return;
461         }
462
463         switch (event) {
464         case MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE:
465                 {
466                         int previous = 0;
467                         int current = 0;
468                         int by_policy = 0;
469
470                         muse_camera_msg_get(previous, recv_msg);
471                         muse_camera_msg_get(current, recv_msg);
472                         muse_camera_msg_get(by_policy, recv_msg);
473
474                         LOGD("STATE CHANGE - previous %d, current %d, by_policy %d",
475                              previous, current, by_policy);
476
477                         ((camera_state_changed_cb)cb_info->user_cb[event])((camera_state_e)previous,
478                                                                            (camera_state_e)current,
479                                                                            (bool)by_policy,
480                                                                            cb_info->user_data[event]);
481                 }
482                 break;
483         case MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE:
484                 {
485                         int state = 0;
486
487                         muse_camera_msg_get(state, recv_msg);
488
489                         LOGD("FOCUS state - %d", state);
490
491                         ((camera_focus_changed_cb)cb_info->user_cb[event])((camera_focus_state_e)state,
492                                                                            cb_info->user_data[event]);
493                 }
494                 break;
495         case MUSE_CAMERA_EVENT_TYPE_CAPTURE_COMPLETE:
496                 LOGD("CAPTURE_COMPLETED");
497                 ((camera_capture_completed_cb)cb_info->user_cb[event])(cb_info->user_data[event]);
498                 break;
499         case MUSE_CAMERA_EVENT_TYPE_PREVIEW:
500         case MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW:
501                 {
502                         camera_preview_data_s frame;
503                         unsigned char *buf_pos = NULL;
504                         MMCamcorderVideoStreamDataType *stream = NULL;
505                         int i = 0;
506                         int total_size = 0;
507                         int num_buffer_key = 0;
508                         int buffer_key[BUFFER_MAX_PLANE_NUM] = {0, };
509                         tbm_bo buffer_bo[BUFFER_MAX_PLANE_NUM] = {NULL, };
510                         tbm_bo_handle buffer_bo_handle[BUFFER_MAX_PLANE_NUM] = {{.ptr = NULL}, };
511                         camera_media_packet_data *mp_data = NULL;
512
513                         muse_camera_msg_get(tbm_key, recv_msg);
514                         muse_camera_msg_get(num_buffer_key, recv_msg);
515                         muse_camera_msg_get_array(buffer_key, recv_msg);
516
517                         memset(&frame, 0x0, sizeof(camera_preview_data_s));
518
519                         if (tbm_key <= 0) {
520                                 LOGE("invalid key %d", tbm_key);
521                                 break;
522                         }
523
524                         /* import tbm bo and get virtual address */
525                         if (!_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) {
526                                 LOGE("failed to import key %d", tbm_key);
527
528                                 muse_camera_msg_send1_no_return(MUSE_CAMERA_API_RETURN_BUFFER,
529                                                                 cb_info->fd, cb_info,
530                                                                 INT, tbm_key);
531                                 break;
532                         }
533
534                         buf_pos = (unsigned char *)bo_handle.ptr;
535
536                         /* get stream info */
537                         stream = (MMCamcorderVideoStreamDataType *)buf_pos;
538
539                         for (i = 0 ; i < num_buffer_key ; i++) {
540                                 /* import buffer bo and get virtual address */
541                                 if (!_import_tbm_key(cb_info->bufmgr, buffer_key[i], &buffer_bo[i], &buffer_bo_handle[i])) {
542                                         LOGE("failed to import buffer key %d", buffer_key[i]);
543
544                                         /* release imported bo */
545                                         for (i -= 1 ; i >= 0 ; i--) {
546                                                 _release_imported_bo(&buffer_bo[i]);
547                                         }
548                                         _release_imported_bo(&bo);
549
550                                         /* send return buffer */
551                                         muse_camera_msg_send1_no_return(MUSE_CAMERA_API_RETURN_BUFFER,
552                                                                         cb_info->fd, cb_info,
553                                                                         INT, tbm_key);
554                                         return;
555                                 }
556                         }
557
558                         if (cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_PREVIEW]) {
559                                 /* set frame info */
560                                 if (stream->format == MM_PIXEL_FORMAT_ITLV_JPEG_UYVY) {
561                                         frame.format  = MM_PIXEL_FORMAT_UYVY;
562                                 } else {
563                                         frame.format = stream->format;
564                                 }
565                                 frame.width = stream->width;
566                                 frame.height = stream->height;
567                                 frame.timestamp = stream->timestamp;
568                                 frame.num_of_planes = stream->num_planes;
569
570                                 if (num_buffer_key == 0) {
571                                         /* non-zero copy */
572                                         buf_pos += sizeof(MMCamcorderVideoStreamDataType);
573                                         switch (stream->num_planes) {
574                                         case 1:
575                                                 frame.data.single_plane.yuv = buf_pos;
576                                                 frame.data.single_plane.size = stream->data.yuv420.length_yuv;
577                                                 total_size = stream->data.yuv420.length_yuv;
578                                                 break;
579                                         case 2:
580                                                 frame.data.double_plane.y = buf_pos;
581                                                 frame.data.double_plane.y_size = stream->data.yuv420sp.length_y;
582                                                 buf_pos += stream->data.yuv420sp.length_y;
583                                                 frame.data.double_plane.uv = buf_pos;
584                                                 frame.data.double_plane.uv_size = stream->data.yuv420sp.length_uv;
585                                                 total_size = stream->data.yuv420sp.length_y + \
586                                                              stream->data.yuv420sp.length_uv;
587                                                 break;
588                                         case 3:
589                                                 frame.data.triple_plane.y = buf_pos;
590                                                 frame.data.triple_plane.y_size = stream->data.yuv420p.length_y;
591                                                 buf_pos += stream->data.yuv420p.length_y;
592                                                 frame.data.triple_plane.u = buf_pos;
593                                                 frame.data.triple_plane.u_size = stream->data.yuv420p.length_u;
594                                                 buf_pos += stream->data.yuv420p.length_u;
595                                                 frame.data.triple_plane.v = buf_pos;
596                                                 frame.data.triple_plane.v_size = stream->data.yuv420p.length_v;
597                                                 total_size = stream->data.yuv420p.length_y + \
598                                                              stream->data.yuv420p.length_u + \
599                                                              stream->data.yuv420p.length_v;
600                                                 break;
601                                         default:
602                                                 break;
603                                         }
604                                 } else {
605                                         /* zero copy */
606                                         switch (stream->num_planes) {
607                                         case 1:
608                                                 frame.data.single_plane.yuv = buffer_bo_handle[0].ptr;
609                                                 frame.data.single_plane.size = stream->data.yuv420.length_yuv;
610                                                 total_size = stream->data.yuv420.length_yuv;
611                                                 break;
612                                         case 2:
613                                                 frame.data.double_plane.y = buffer_bo_handle[0].ptr;
614                                                 if (stream->num_planes == (unsigned int)num_buffer_key) {
615                                                         frame.data.double_plane.uv = buffer_bo_handle[1].ptr;
616                                                 } else {
617                                                         frame.data.double_plane.uv = buffer_bo_handle[0].ptr + stream->data.yuv420sp.length_y;
618                                                 }
619                                                 frame.data.double_plane.y_size = stream->data.yuv420sp.length_y;
620                                                 frame.data.double_plane.uv_size = stream->data.yuv420sp.length_uv;
621                                                 total_size = stream->data.yuv420sp.length_y + \
622                                                              stream->data.yuv420sp.length_uv;
623                                                 break;
624                                         case 3:
625                                                 frame.data.triple_plane.y = buffer_bo_handle[0].ptr;
626                                                 if (stream->num_planes == (unsigned int)num_buffer_key) {
627                                                         frame.data.triple_plane.u = buffer_bo_handle[1].ptr;
628                                                         frame.data.triple_plane.v = buffer_bo_handle[2].ptr;
629                                                 } else {
630                                                         frame.data.triple_plane.u = buffer_bo_handle[0].ptr + stream->data.yuv420p.length_y;
631                                                         frame.data.triple_plane.v = buffer_bo_handle[1].ptr + stream->data.yuv420p.length_u;
632                                                 }
633                                                 frame.data.triple_plane.y_size = stream->data.yuv420p.length_y;
634                                                 frame.data.triple_plane.u_size = stream->data.yuv420p.length_u;
635                                                 frame.data.triple_plane.v_size = stream->data.yuv420p.length_v;
636                                                 total_size = stream->data.yuv420p.length_y + \
637                                                              stream->data.yuv420p.length_u + \
638                                                              stream->data.yuv420p.length_v;
639                                                 break;
640                                         default:
641                                                 break;
642                                         }
643                                 }
644
645                                 /*
646                                 LOGD("PREVIEW_CB - format %d, %dx%d, size %d plane num %d",
647                                      frame.format, frame.width, frame.height, total_size, frame.num_of_planes);
648                                 */
649
650                                 ((camera_preview_cb)cb_info->user_cb[event])(&frame, cb_info->user_data[event]);
651
652                                 /*LOGD("PREVIEW_CB retuned");*/
653                         }
654
655                         if (cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW]) {
656                                 media_packet_h pkt = NULL;
657                                 tbm_surface_h tsurf = NULL;
658                                 uint32_t bo_format = 0;
659                                 int ret = 0;
660                                 media_format_mimetype_e mimetype = MEDIA_FORMAT_NV12;
661                                 bool make_pkt_fmt = false;
662                                 tbm_surface_info_s tsurf_info;
663
664                                 memset(&tsurf_info, 0x0, sizeof(tbm_surface_info_s));
665
666                                 /* unmap buffer bo */
667                                 for (i = 0 ; i < num_buffer_key ; i++) {
668                                         if (buffer_bo[i]) {
669                                                 tbm_bo_unmap(buffer_bo[i]);
670                                         }
671                                 }
672
673                                 /* create tbm surface */
674                                 for (i = 0 ; i < BUFFER_MAX_PLANE_NUM ; i++) {
675                                         tsurf_info.planes[i].stride = stream->stride[i];
676                                 }
677
678                                 /* get tbm surface format */
679                                 ret = _camera_get_tbm_surface_format(stream->format, &bo_format);
680                                 ret |= _camera_get_media_packet_mimetype(stream->format, &mimetype);
681
682                                 if (num_buffer_key > 0 && ret == CAMERA_ERROR_NONE) {
683                                         tsurf_info.width = stream->width;
684                                         tsurf_info.height = stream->height;
685                                         tsurf_info.format = bo_format;
686                                         tsurf_info.bpp = tbm_surface_internal_get_bpp(bo_format);
687                                         tsurf_info.num_planes = tbm_surface_internal_get_num_planes(bo_format);
688
689                                         switch (bo_format) {
690                                         case TBM_FORMAT_NV12:
691                                         case TBM_FORMAT_NV21:
692                                                 tsurf_info.planes[0].size = stream->stride[0] * stream->elevation[0];
693                                                 tsurf_info.planes[1].size = stream->stride[1] * stream->elevation[1];
694                                                 tsurf_info.planes[0].offset = 0;
695                                                 if (num_buffer_key == 1) {
696                                                         tsurf_info.planes[1].offset = tsurf_info.planes[0].size;
697                                                 }
698                                                 tsurf_info.size = tsurf_info.planes[0].size + tsurf_info.planes[1].size;
699                                                 break;
700                                         case TBM_FORMAT_YUV420:
701                                         case TBM_FORMAT_YVU420:
702                                                 tsurf_info.planes[0].size = stream->stride[0] * stream->elevation[0];
703                                                 tsurf_info.planes[1].size = stream->stride[1] * stream->elevation[1];
704                                                 tsurf_info.planes[2].size = stream->stride[2] * stream->elevation[2];
705                                                 tsurf_info.planes[0].offset = 0;
706                                                 if (num_buffer_key == 1) {
707                                                         tsurf_info.planes[1].offset = tsurf_info.planes[0].size;
708                                                         tsurf_info.planes[2].offset = tsurf_info.planes[0].size + tsurf_info.planes[1].size;
709                                                 }
710                                                 tsurf_info.size = tsurf_info.planes[0].size + tsurf_info.planes[1].size + tsurf_info.planes[2].size;
711                                                 break;
712                                         case TBM_FORMAT_UYVY:
713                                         case TBM_FORMAT_YUYV:
714                                                 tsurf_info.planes[0].size = (stream->stride[0] * stream->elevation[0]) << 1;
715                                                 tsurf_info.planes[0].offset = 0;
716                                                 tsurf_info.size = tsurf_info.planes[0].size;
717                                                 break;
718                                         default:
719                                                 break;
720                                         }
721
722                                         tsurf = tbm_surface_internal_create_with_bos(&tsurf_info, buffer_bo, num_buffer_key);
723                                         /*LOGD("tbm surface %p", tsurf);*/
724                                 }
725
726                                 if (tsurf) {
727                                         /* check media packet format */
728                                         if (cb_info->pkt_fmt) {
729                                                 int pkt_fmt_width = 0;
730                                                 int pkt_fmt_height = 0;
731                                                 media_format_mimetype_e pkt_fmt_mimetype = MEDIA_FORMAT_NV12;
732
733                                                 media_format_get_video_info(cb_info->pkt_fmt, &pkt_fmt_mimetype, &pkt_fmt_width, &pkt_fmt_height, NULL, NULL);
734                                                 if (pkt_fmt_mimetype != mimetype ||
735                                                     pkt_fmt_width != stream->width ||
736                                                     pkt_fmt_height != stream->height) {
737                                                         LOGW("different format. current 0x%x, %dx%d, new 0x%x, %dx%d",
738                                                              pkt_fmt_mimetype, pkt_fmt_width, pkt_fmt_height, mimetype, stream->width, stream->height);
739                                                         media_format_unref(cb_info->pkt_fmt);
740                                                         cb_info->pkt_fmt = NULL;
741                                                         make_pkt_fmt = true;
742                                                 }
743                                         } else {
744                                                 make_pkt_fmt = true;
745                                         }
746
747                                         /* create packet format */
748                                         if (make_pkt_fmt) {
749                                                 LOGW("make new pkt_fmt - mimetype 0x%x, %dx%d", mimetype, stream->width, stream->height);
750                                                 ret = media_format_create(&cb_info->pkt_fmt);
751                                                 if (ret == MEDIA_FORMAT_ERROR_NONE) {
752                                                         ret = media_format_set_video_mime(cb_info->pkt_fmt, mimetype);
753                                                         ret |= media_format_set_video_width(cb_info->pkt_fmt, stream->width);
754                                                         ret |= media_format_set_video_height(cb_info->pkt_fmt, stream->height);
755                                                         LOGW("media_format_set_video_mime,width,height ret : 0x%x", ret);
756                                                 } else {
757                                                         LOGW("media_format_create failed");
758                                                 }
759                                         }
760
761                                         /* create media packet */
762                                         ret = media_packet_create_from_tbm_surface(cb_info->pkt_fmt,
763                                                                                    tsurf,
764                                                                                    (media_packet_finalize_cb)_camera_media_packet_finalize,
765                                                                                    (void *)cb_info,
766                                                                                    &pkt);
767                                         if (ret != MEDIA_PACKET_ERROR_NONE) {
768                                                 LOGE("media_packet_create_from_tbm_surface failed");
769
770                                                 tbm_surface_destroy(tsurf);
771                                                 tsurf = NULL;
772                                         }
773                                 } else {
774                                         LOGE("failed to create tbm surface %dx%d, format %d, num_buffer_key %d",
775                                              stream->width, stream->height, stream->format, num_buffer_key);
776                                 }
777
778                                 if (pkt) {
779                                         /*LOGD("media packet %p, internal buffer %p", pkt, stream->internal_buffer);*/
780
781                                         mp_data = g_new0(camera_media_packet_data, 1);
782                                         if (mp_data) {
783                                                 mp_data->tbm_key = tbm_key;
784                                                 mp_data->num_buffer_key = num_buffer_key;
785                                                 mp_data->bo = bo;
786                                                 for (i = 0 ; i < num_buffer_key ; i++) {
787                                                         mp_data->buffer_bo[i] = buffer_bo[i];
788                                                 }
789
790                                                 /* set media packet data */
791                                                 ret = media_packet_set_extra(pkt, (void *)mp_data);
792                                                 if (ret != MEDIA_PACKET_ERROR_NONE) {
793                                                         LOGE("media_packet_set_extra failed");
794
795                                                         if (mp_data) {
796                                                                 g_free(mp_data);
797                                                                 mp_data = NULL;
798                                                         }
799
800                                                         media_packet_destroy(pkt);
801                                                         pkt = NULL;
802                                                 } else {
803                                                         int e_type = MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW;
804
805                                                         /* set timestamp : msec -> nsec */
806                                                         if (media_packet_set_pts(pkt, (uint64_t)(stream->timestamp) * 1000000) != MEDIA_PACKET_ERROR_NONE) {
807                                                                 LOGW("media_packet_set_pts failed");
808                                                         }
809
810                                                         /* call media packet callback */
811                                                         ((camera_media_packet_preview_cb)cb_info->user_cb[e_type])(pkt, cb_info->user_data[e_type]);
812                                                 }
813                                         } else {
814                                                 LOGE("failed to alloc media packet data");
815                                         }
816                                 }
817                         }
818
819                         /* send message for preview callback return */
820                         muse_camera_msg_send_no_return(MUSE_CAMERA_API_PREVIEW_CB_RETURN, cb_info->fd, cb_info);
821
822                         if (mp_data == NULL) {
823                                 /* release imported bo */
824                                 for (i = 0 ; i < num_buffer_key ; i++) {
825                                         _release_imported_bo(&buffer_bo[i]);
826                                 }
827
828                                 /* unmap and unref tbm bo */
829                                 _release_imported_bo(&bo);
830
831                                 /* return buffer */
832                                 muse_camera_msg_send1_no_return(MUSE_CAMERA_API_RETURN_BUFFER,
833                                                                 cb_info->fd, cb_info,
834                                                                 INT, tbm_key);
835
836                                 /*LOGD("return buffer Done");*/
837                         }
838                 }
839                 break;
840         case MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS:
841                 {
842                         int percent = 0;
843
844                         muse_camera_msg_get(percent, recv_msg);
845
846                         LOGD("HDR progress - %d \%", percent);
847
848                         ((camera_attr_hdr_progress_cb)cb_info->user_cb[event])(percent, cb_info->user_data[event]);
849                 }
850                 break;
851         case MUSE_CAMERA_EVENT_TYPE_INTERRUPTED:
852                 {
853                         int policy = 0;
854                         int previous = 0;
855                         int current = 0;
856
857                         muse_camera_msg_get(policy, recv_msg);
858                         muse_camera_msg_get(previous, recv_msg);
859                         muse_camera_msg_get(current, recv_msg);
860
861                         LOGD("INTERRUPTED - policy %d, state previous %d, current %d",
862                              policy, previous, current);
863
864                         ((camera_interrupted_cb)cb_info->user_cb[event])((camera_policy_e)policy,
865                                                                          (camera_state_e)previous,
866                                                                          (camera_state_e)current,
867                                                                          cb_info->user_data[event]);
868                 }
869                 break;
870         case MUSE_CAMERA_EVENT_TYPE_FACE_DETECTION:
871                 {
872                         int count = 0;
873                         camera_detected_face_s *faces = NULL;
874
875                         muse_camera_msg_get(count, recv_msg);
876                         muse_camera_msg_get(tbm_key, recv_msg);
877
878                         if (count > 0 && tbm_key > 0) {
879                                 LOGD("FACE_DETECTION - count %d, tbm_key %d", count, tbm_key);
880
881                                 if (!_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) {
882                                         break;
883                                 }
884
885                                 /* set face info */
886                                 faces = bo_handle.ptr;
887
888                                 ((camera_face_detected_cb)cb_info->user_cb[event])(faces, count, cb_info->user_data[event]);
889
890 #if 0
891                                 {
892                                         int i = 0;
893
894                                         for (i = 0 ; i < count ; i++) {
895                                                 LOGD("id[%2d] - score %d, position (%d,%d,%dx%d)",
896                                                      i, faces[i].score, faces[i].x, faces[i].y, faces[i].width, faces[i].height);
897                                         }
898                                 }
899 #endif
900
901                                 /* release bo */
902                                 _release_imported_bo(&bo);
903
904                                 /* return buffer */
905                                 muse_camera_msg_send1_no_return(MUSE_CAMERA_API_RETURN_BUFFER,
906                                                                 cb_info->fd, cb_info,
907                                                                 INT, tbm_key);
908
909                                 LOGD("return buffer done");
910                         } else {
911                                 LOGE("invalid message - count %d, key %d", count, tbm_key);
912                         }
913                 }
914                 break;
915         case MUSE_CAMERA_EVENT_TYPE_ERROR:
916                 {
917                         int error = 0;
918                         int current_state = 0;
919
920                         muse_camera_msg_get(error, recv_msg);
921                         muse_camera_msg_get(current_state, recv_msg);
922
923                         LOGE("ERROR - error 0x%x, current_state %d", error, current_state);
924
925                         ((camera_error_cb)cb_info->user_cb[event])((camera_error_e)error,
926                                                                    (camera_state_e)current_state,
927                                                                    cb_info->user_data[event]);
928                 }
929                 break;
930         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_RESOLUTION:
931                 muse_camera_msg_get(param1, recv_msg);
932                 muse_camera_msg_get(param2, recv_msg);
933
934                 LOGD("SUPPORTED_PREVIEW_RESOLUTION - %d x %d", param1, param2);
935
936                 ((camera_supported_preview_resolution_cb)cb_info->user_cb[event])(param1, param2, cb_info->user_data[event]);
937                 break;
938         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_RESOLUTION:
939                 muse_camera_msg_get(param1, recv_msg);
940                 muse_camera_msg_get(param2, recv_msg);
941
942                 LOGD("SUPPORTED_CAPTURE_RESOLUTION - %d x %d", param1, param2);
943
944                 ((camera_supported_capture_resolution_cb)cb_info->user_cb[event])(param1, param2, cb_info->user_data[event]);
945                 break;
946         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_FORMAT:
947                 muse_camera_msg_get(param1, recv_msg);
948
949                 LOGD("SUPPORTED_CAPTURE_FORMAT - %d ", param1);
950
951                 ((camera_supported_capture_format_cb)cb_info->user_cb[event])((camera_pixel_format_e)param1, cb_info->user_data[event]);
952                 break;
953         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_FORMAT:
954                 muse_camera_msg_get(param1, recv_msg);
955
956                 LOGD("SUPPORTED_PREVIEW_FORMAT - %d ", param1);
957
958                 ((camera_supported_preview_format_cb)cb_info->user_cb[event])((camera_pixel_format_e)param1, cb_info->user_data[event]);
959                 break;
960         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_AF_MODE:
961                 muse_camera_msg_get(param1, recv_msg);
962
963                 LOGD("SUPPORTED_AF_MODE - %d ", param1);
964
965                 ((camera_attr_supported_af_mode_cb)cb_info->user_cb[event])((camera_attr_af_mode_e)param1, cb_info->user_data[event]);
966                 break;
967         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EXPOSURE_MODE:
968                 muse_camera_msg_get(param1, recv_msg);
969
970                 LOGD("SUPPORTED_EXPOSURE_MODE - %d ", param1);
971
972                 ((camera_attr_supported_exposure_mode_cb)cb_info->user_cb[event])((camera_attr_exposure_mode_e)param1, cb_info->user_data[event]);
973                 break;
974         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_ISO:
975                 muse_camera_msg_get(param1, recv_msg);
976
977                 LOGD("SUPPORTED_ISO - %d ", param1);
978
979                 ((camera_attr_supported_iso_cb)cb_info->user_cb[event])((camera_attr_iso_e)param1, cb_info->user_data[event]);
980                 break;
981         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_WHITEBALANCE:
982                 muse_camera_msg_get(param1, recv_msg);
983
984                 LOGD("SUPPORTED_WHITEBALANCE - %d ", param1);
985
986                 ((camera_attr_supported_whitebalance_cb)cb_info->user_cb[event])((camera_attr_whitebalance_e)param1, cb_info->user_data[event]);
987                 break;
988         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EFFECT:
989                 muse_camera_msg_get(param1, recv_msg);
990
991                 LOGD("SUPPORTED_EFFECT - %d ", param1);
992
993                 ((camera_attr_supported_effect_cb)cb_info->user_cb[event])((camera_attr_effect_mode_e)param1, cb_info->user_data[event]);
994                 break;
995         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_SCENE_MODE:
996                 muse_camera_msg_get(param1, recv_msg);
997
998                 LOGD("SUPPORTED_SCENE_MODE - %d ", param1);
999
1000                 ((camera_attr_supported_scene_mode_cb)cb_info->user_cb[event])((camera_attr_scene_mode_e)param1, cb_info->user_data[event]);
1001                 break;
1002         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FLASH_MODE:
1003                 muse_camera_msg_get(param1, recv_msg);
1004
1005                 LOGD("SUPPORTED_FLASH_MODE - %d ", param1);
1006
1007                 ((camera_attr_supported_flash_mode_cb)cb_info->user_cb[event])((camera_attr_flash_mode_e)param1, cb_info->user_data[event]);
1008                 break;
1009         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS:
1010                 muse_camera_msg_get(param1, recv_msg);
1011
1012                 LOGD("SUPPORTED_FPS - %d ", param1);
1013
1014                 ((camera_attr_supported_fps_cb)cb_info->user_cb[event])((camera_attr_fps_e)param1, cb_info->user_data[event]);
1015                 break;
1016         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS_BY_RESOLUTION:
1017                 muse_camera_msg_get(param1, recv_msg);
1018
1019                 LOGD("SUPPORTED_FPS_BY_RESOLUTION - %d ", param1);
1020
1021                 ((camera_attr_supported_fps_cb)cb_info->user_cb[event])((camera_attr_fps_e)param1, cb_info->user_data[event]);
1022                 break;
1023         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_FLIP:
1024                 muse_camera_msg_get(param1, recv_msg);
1025
1026                 LOGD("SUPPORTED_STREAM_FLIP - %d ", param1);
1027
1028                 ((camera_attr_supported_stream_flip_cb)cb_info->user_cb[event])((camera_flip_e)param1, cb_info->user_data[event]);
1029                 break;
1030         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_ROTATION:
1031                 muse_camera_msg_get(param1, recv_msg);
1032
1033                 LOGD("SUPPORTED_STREAM_ROTATION - %d ", param1);
1034
1035                 ((camera_attr_supported_stream_rotation_cb)cb_info->user_cb[event])((camera_rotation_e)param1, cb_info->user_data[event]);
1036                 break;
1037         case MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_THEATER_MODE:
1038                 muse_camera_msg_get(param1, recv_msg);
1039
1040                 LOGD("SUPPORTED_THEATER_MODE - %d ", param1);
1041
1042                 ((camera_attr_supported_theater_mode_cb)cb_info->user_cb[event])((camera_attr_theater_mode_e)param1, cb_info->user_data[event]);
1043                 break;
1044         case MUSE_CAMERA_EVENT_TYPE_CAPTURE:
1045                 {
1046                         camera_image_data_s *rImage = NULL;
1047                         camera_image_data_s *rPostview = NULL;
1048                         camera_image_data_s *rThumbnail = NULL;
1049                         unsigned char *buf_pos = NULL;
1050                         int is_postview = 0;
1051                         int is_thumbnail = 0;
1052
1053                         muse_camera_msg_get(tbm_key, recv_msg);
1054                         muse_camera_msg_get(is_postview, recv_msg);
1055                         muse_camera_msg_get(is_thumbnail, recv_msg);
1056
1057                         LOGD("camera capture callback came in. key %d, postview %d, thumbnail %d",
1058                              tbm_key, is_postview, is_thumbnail);
1059
1060                         if (tbm_key <= 0) {
1061                                 LOGE("invalid key %d", tbm_key);
1062                                 break;
1063                         }
1064
1065                         /* import tbm bo and get virtual address */
1066                         if (!_import_tbm_key(cb_info->bufmgr, tbm_key, &bo, &bo_handle)) {
1067                                 break;
1068                         }
1069
1070                         buf_pos = (unsigned char *)bo_handle.ptr;
1071                         rImage = (camera_image_data_s *)buf_pos;
1072                         rImage->data = buf_pos + sizeof(camera_image_data_s);
1073                         buf_pos += sizeof(camera_image_data_s) + rImage->size;
1074
1075                         if (is_postview) {
1076                                 rPostview = (camera_image_data_s *)buf_pos;
1077                                 LOGD("rPostview->size : %d", rPostview->size);
1078                                 rPostview->data = buf_pos + sizeof(camera_image_data_s);
1079                                 buf_pos += sizeof(camera_image_data_s) + rPostview->size;
1080                         }
1081
1082                         if (is_thumbnail) {
1083                                 rThumbnail = (camera_image_data_s *)buf_pos;
1084                                 LOGD("rThumbnail->size : %d", rThumbnail->size);
1085                                 rThumbnail->data = buf_pos + sizeof(camera_image_data_s);
1086                                 buf_pos += sizeof(camera_image_data_s) + rThumbnail->size;
1087                         }
1088
1089                         LOGD("image info %dx%d, size : %d", rImage->height, rImage->width, rImage->size);
1090
1091                         ((camera_capturing_cb)cb_info->user_cb[event])(rImage, rPostview, rThumbnail, cb_info->user_data[event]);
1092
1093                         /* unmap and unref tbm bo */
1094                         _release_imported_bo(&bo);
1095
1096                         /* return buffer */
1097                         muse_camera_msg_send1_no_return(MUSE_CAMERA_API_RETURN_BUFFER,
1098                                                         cb_info->fd,
1099                                                         cb_info,
1100                                                         INT, tbm_key);
1101
1102                         LOGD("return buffer done");
1103                 }
1104                 break;
1105         case MUSE_CAMERA_EVENT_TYPE_VIDEO_FRAME_RENDER_ERROR:
1106                 break;
1107         default:
1108                 LOGW("Unknown event : %d", event);
1109                 break;
1110         }
1111
1112         return;
1113 }
1114
1115 static bool _camera_idle_event_callback(void *data)
1116 {
1117         camera_cb_info_s *cb_info = NULL;
1118         camera_idle_event_s *cam_idle_event = (camera_idle_event_s *)data;
1119
1120         if (cam_idle_event == NULL) {
1121                 LOGE("cam_idle_event is NULL");
1122                 return false;
1123         }
1124
1125         /* lock event */
1126         g_mutex_lock(&cam_idle_event->event_mutex);
1127
1128         cb_info = cam_idle_event->cb_info;
1129         if (cb_info == NULL) {
1130                 LOGW("camera cb_info is NULL. event %d", cam_idle_event->event);
1131                 goto IDLE_EVENT_CALLBACK_DONE;
1132         }
1133
1134         /* remove event from list */
1135         g_mutex_lock(&cb_info->idle_event_mutex);
1136         if (cb_info->idle_event_list) {
1137                 cb_info->idle_event_list = g_list_remove(cb_info->idle_event_list, (gpointer)cam_idle_event);
1138         }
1139         /*LOGD("remove camera idle event %p, %p", cam_idle_event, cb_info->idle_event_list);*/
1140         g_mutex_unlock(&cb_info->idle_event_mutex);
1141
1142         /* user callback */
1143         _client_user_callback(cam_idle_event->cb_info, cam_idle_event->recv_msg, cam_idle_event->event);
1144
1145         /* send signal for waiting thread */
1146         g_cond_signal(&cb_info->idle_event_cond);
1147
1148 IDLE_EVENT_CALLBACK_DONE:
1149         /* unlock and release event */
1150         g_mutex_unlock(&cam_idle_event->event_mutex);
1151         g_mutex_clear(&cam_idle_event->event_mutex);
1152
1153         free(cam_idle_event);
1154         cam_idle_event = NULL;
1155
1156         return false;
1157 }
1158
1159 static void *_camera_msg_handler_func(gpointer data)
1160 {
1161         int ret = 0;
1162         int api = 0;
1163         int event = 0;
1164         int event_class = 0;
1165         camera_message_s *cam_msg = NULL;
1166         camera_idle_event_s *cam_idle_event = NULL;
1167         camera_cb_info_s *cb_info = (camera_cb_info_s *)data;
1168
1169         if (cb_info == NULL) {
1170                 LOGE("cb_info NULL");
1171                 return NULL;
1172         }
1173
1174         LOGD("start");
1175
1176         g_mutex_lock(&cb_info->msg_handler_mutex);
1177
1178         while (g_atomic_int_get(&cb_info->msg_handler_running)) {
1179                 if (g_queue_is_empty(cb_info->msg_queue)) {
1180                         LOGD("signal wait...");
1181                         g_cond_wait(&cb_info->msg_handler_cond, &cb_info->msg_handler_mutex);
1182                         LOGD("signal received");
1183
1184                         if (g_atomic_int_get(&cb_info->msg_handler_running) == 0) {
1185                                 LOGD("stop event thread");
1186                                 break;
1187                         }
1188                 }
1189
1190                 cam_msg = (camera_message_s *)g_queue_pop_head(cb_info->msg_queue);
1191
1192                 g_mutex_unlock(&cb_info->msg_handler_mutex);
1193
1194                 if (cam_msg == NULL) {
1195                         LOGE("NULL message");
1196                         g_mutex_lock(&cb_info->msg_handler_mutex);
1197                         continue;
1198                 }
1199
1200                 api = cam_msg->api;
1201
1202                 if (api < MUSE_CAMERA_API_MAX) {
1203                         g_mutex_lock(&cb_info->api_mutex[api]);
1204
1205                         if (muse_camera_msg_get(ret, cam_msg->recv_msg)) {
1206                                 cb_info->api_ret[api] = ret;
1207                                 cb_info->api_activating[api] = 1;
1208
1209                                 LOGD("camera api %d - return 0x%x", ret);
1210
1211                                 g_cond_signal(&cb_info->api_cond[api]);
1212                         } else {
1213                                 LOGE("failed to get camera ret for api %d, msg %s", api, cam_msg->recv_msg);
1214                         }
1215
1216                         g_mutex_unlock(&cb_info->api_mutex[api]);
1217                 } else if (api == MUSE_CAMERA_CB_EVENT) {
1218                         event = -1;
1219                         event_class = -1;
1220
1221                         if (!muse_camera_msg_get(event, cam_msg->recv_msg) ||
1222                             !muse_camera_msg_get(event_class, cam_msg->recv_msg)) {
1223                                 LOGE("failed to get camera event %d, class %d", event, event_class);
1224
1225                                 g_free(cam_msg);
1226                                 cam_msg = NULL;
1227
1228                                 g_mutex_lock(&cb_info->msg_handler_mutex);
1229                                 continue;
1230                         }
1231
1232                         switch (event_class) {
1233                         case MUSE_CAMERA_EVENT_CLASS_THREAD_SUB:
1234                                 _client_user_callback(cb_info, cam_msg->recv_msg, event);
1235                                 break;
1236                         case MUSE_CAMERA_EVENT_CLASS_THREAD_MAIN:
1237                                 cam_idle_event = (camera_idle_event_s *)malloc(sizeof(camera_idle_event_s));
1238                                 if (cam_idle_event == NULL) {
1239                                         LOGE("cam_idle_event alloc failed");
1240                                         break;
1241                                 }
1242
1243                                 cam_idle_event->event = event;
1244                                 cam_idle_event->cb_info = cb_info;
1245                                 g_mutex_init(&cam_idle_event->event_mutex);
1246                                 memcpy(cam_idle_event->recv_msg, cam_msg->recv_msg, sizeof(cam_idle_event->recv_msg));
1247
1248                                 LOGD("add camera event[%d, %p] to IDLE", event, cam_idle_event);
1249
1250                                 g_mutex_lock(&cb_info->idle_event_mutex);
1251                                 cb_info->idle_event_list = g_list_append(cb_info->idle_event_list, (gpointer)cam_idle_event);
1252                                 g_mutex_unlock(&cb_info->idle_event_mutex);
1253
1254                                 g_idle_add_full(G_PRIORITY_DEFAULT,
1255                                                 (GSourceFunc)_camera_idle_event_callback,
1256                                                 (gpointer)cam_idle_event,
1257                                                 NULL);
1258                                 break;
1259                         default:
1260                                 LOGE("unknown camera event class %d", event_class);
1261                                 break;
1262                         }
1263                 } else {
1264                         LOGE("unknown camera api[%d] message[%s]", api, cam_msg->recv_msg);
1265                 }
1266
1267                 free(cam_msg);
1268                 cam_msg = NULL;
1269
1270                 g_mutex_lock(&cb_info->msg_handler_mutex);
1271         }
1272
1273         /* remove remained event */
1274         while (!g_queue_is_empty(cb_info->msg_queue)) {
1275                 cam_msg = (camera_message_s *)g_queue_pop_head(cb_info->msg_queue);
1276                 if (cam_msg) {
1277                         LOGD("remove camera message %p", cam_msg);
1278                         free(cam_msg);
1279                         cam_msg = NULL;
1280                 } else {
1281                         LOGW("NULL camera message");
1282                 }
1283         }
1284
1285         g_mutex_unlock(&cb_info->msg_handler_mutex);
1286
1287         LOGD("return");
1288
1289         return NULL;
1290 }
1291
1292 static void _camera_remove_idle_event_all(camera_cb_info_s *cb_info)
1293 {
1294         camera_idle_event_s *cam_idle_event = NULL;
1295         gboolean ret = TRUE;
1296         GList *list = NULL;
1297         gint64 end_time = 0;
1298
1299         if (cb_info == NULL) {
1300                 LOGE("cb_info is NULL");
1301                 return;
1302         }
1303
1304         g_mutex_lock(&cb_info->idle_event_mutex);
1305
1306         if (cb_info->idle_event_list == NULL) {
1307                 LOGD("No idle event is remained.");
1308         } else {
1309                 list = cb_info->idle_event_list;
1310
1311                 while (list) {
1312                         cam_idle_event = list->data;
1313                         list = g_list_next(list);
1314
1315                         if (!cam_idle_event) {
1316                                 LOGW("Fail to remove idle event. The event is NULL");
1317                         } else {
1318                                 if (g_mutex_trylock(&cam_idle_event->event_mutex)) {
1319                                         ret = g_idle_remove_by_data(cam_idle_event);
1320
1321                                         LOGD("remove idle event [%p], ret[%d]", cam_idle_event, ret);
1322
1323                                         if (ret == FALSE) {
1324                                                 cam_idle_event->cb_info = NULL;
1325                                                 LOGW("idle callback for event %p will be called later", cam_idle_event);
1326                                         }
1327
1328                                         cb_info->idle_event_list = g_list_remove(cb_info->idle_event_list, (gpointer)cam_idle_event);
1329
1330                                         g_mutex_unlock(&cam_idle_event->event_mutex);
1331
1332                                         if (ret == TRUE) {
1333                                                 g_mutex_clear(&cam_idle_event->event_mutex);
1334
1335                                                 free(cam_idle_event);
1336                                                 cam_idle_event = NULL;
1337
1338                                                 LOGD("remove idle event done");
1339                                         }
1340                                 } else {
1341                                         LOGW("event lock failed. it's being called...");
1342
1343                                         end_time = g_get_monotonic_time () + G_TIME_SPAN_MILLISECOND * 100;
1344
1345                                         if (g_cond_wait_until(&cb_info->idle_event_cond, &cb_info->idle_event_mutex, end_time)) {
1346                                                 LOGW("signal received");
1347                                         } else {
1348                                                 LOGW("timeout");
1349                                         }
1350                                 }
1351                         }
1352                 }
1353
1354                 g_list_free(cb_info->idle_event_list);
1355                 cb_info->idle_event_list = NULL;
1356         }
1357
1358         g_mutex_unlock(&cb_info->idle_event_mutex);
1359
1360         return;
1361 }
1362
1363 static void *_camera_msg_recv_func(gpointer data)
1364 {
1365         int i = 0;
1366         int ret = 0;
1367         int api = 0;
1368         int api_class = 0;
1369         int num_token = 0;
1370         int str_pos = 0;
1371         int prev_pos = 0;
1372         int prev_state = CAMERA_STATE_NONE;
1373         char *recv_msg = NULL;
1374         char **parse_str = NULL;
1375         camera_cb_info_s *cb_info = (camera_cb_info_s *)data;
1376
1377         if (cb_info == NULL) {
1378                 LOGE("cb_info NULL");
1379                 return NULL;
1380         }
1381
1382         LOGD("start");
1383
1384         parse_str = (char **)malloc(sizeof(char *) * CAMERA_PARSE_STRING_SIZE);
1385         if (parse_str == NULL) {
1386                 LOGE("parse_str malloc failed");
1387                 return NULL;
1388         }
1389
1390         for (i = 0 ; i < CAMERA_PARSE_STRING_SIZE ; i++) {
1391                 parse_str[i] = (char *)malloc(sizeof(char) * MUSE_CAMERA_MSG_MAX_LENGTH);
1392                 if (parse_str[i] == NULL) {
1393                         LOGE("parse_str[%d] malloc failed", i);
1394                         goto CB_HANDLER_EXIT;
1395                 }
1396         }
1397
1398         recv_msg = cb_info->recv_msg;
1399
1400         while (g_atomic_int_get(&cb_info->msg_recv_running)) {
1401                 ret = muse_core_ipc_recv_msg(cb_info->fd, recv_msg);
1402                 if (ret <= 0)
1403                         break;
1404                 recv_msg[ret] = '\0';
1405
1406                 str_pos = 0;
1407                 prev_pos = 0;
1408                 num_token = 0;
1409
1410                 /*LOGD("recvMSg : %s, length : %d", recv_msg, ret);*/
1411
1412                 /* Need to split the combined entering msgs.
1413                     This module supports up to 200 combined msgs. */
1414                 for (str_pos = 0; str_pos < ret; str_pos++) {
1415                         if(recv_msg[str_pos] == '}') {
1416                                 memset(parse_str[num_token], 0x0, sizeof(char) * MUSE_CAMERA_MSG_MAX_LENGTH);
1417                                 strncpy(parse_str[num_token], recv_msg + prev_pos, str_pos - prev_pos + 1);
1418                                 LOGD("splitted msg : [%s], Index : %d", parse_str[num_token], num_token);
1419                                 prev_pos = str_pos+1;
1420                                 num_token++;
1421                         }
1422                 }
1423
1424                 /*LOGD("num_token : %d", num_token);*/
1425
1426                 /* Re-construct to the useful single msg. */
1427                 for (i = 0; i < num_token; i++) {
1428                         if (i >= CAMERA_PARSE_STRING_SIZE) {
1429                                 LOGE("invalid token index %d", i);
1430                                 break;
1431                         }
1432
1433                         api = -1;
1434                         api_class = -1;
1435
1436                         if (!muse_camera_msg_get(api, parse_str[i])) {
1437                                 LOGE("failed to get camera api");
1438                                 continue;
1439                         }
1440
1441                         if (muse_camera_msg_get(api_class, parse_str[i])) {
1442                                 LOGD("camera api_class[%d]", api_class);
1443                         }
1444
1445                         if (api_class == MUSE_CAMERA_API_CLASS_IMMEDIATE) {
1446                                 g_mutex_lock(&cb_info->api_mutex[api]);
1447
1448                                 if (!muse_camera_msg_get(ret, parse_str[i])) {
1449                                         LOGE("failed to get camera ret");
1450                                         g_mutex_unlock(&cb_info->api_mutex[api]);
1451                                         continue;
1452                                 }
1453
1454                                 cb_info->api_ret[api] = ret;
1455                                 cb_info->api_activating[api] = 1;
1456
1457                                 if (api == MUSE_CAMERA_API_CREATE) {
1458                                         if (ret != CAMERA_ERROR_NONE) {
1459                                                 g_atomic_int_set(&cb_info->msg_recv_running, 0);
1460                                                 LOGE("camera create error 0x%x. close client cb handler", ret);
1461                                         }
1462                                 } else if (api == MUSE_CAMERA_API_DESTROY) {
1463                                         if (ret == CAMERA_ERROR_NONE) {
1464                                                 g_atomic_int_set(&cb_info->msg_recv_running, 0);
1465                                                 LOGD("camera destroy done. close client cb handler");
1466                                         }
1467                                 } else if (api == MUSE_CAMERA_API_START_PREVIEW) {
1468                                         muse_camera_msg_get(prev_state, parse_str[i]);
1469                                         cb_info->prev_state = prev_state;
1470                                 }
1471
1472                                 g_cond_signal(&cb_info->api_cond[api]);
1473                                 g_mutex_unlock(&cb_info->api_mutex[api]);
1474                         } else if (api_class == MUSE_CAMERA_API_CLASS_THREAD_SUB ||
1475                                    api == MUSE_CAMERA_CB_EVENT) {
1476                                 camera_message_s *cam_msg = g_new0(camera_message_s, 1);
1477                                 if (cam_msg == NULL) {
1478                                         LOGE("failed to alloc cam_msg");
1479                                         continue;
1480                                 }
1481
1482                                 cam_msg->api = api;
1483                                 memcpy(cam_msg->recv_msg, parse_str[i], sizeof(cam_msg->recv_msg));
1484
1485                                 LOGD("add camera message to queue : api %d", api);
1486
1487                                 g_mutex_lock(&cb_info->msg_handler_mutex);
1488                                 g_queue_push_tail(cb_info->msg_queue, (gpointer)cam_msg);
1489                                 g_cond_signal(&cb_info->msg_handler_cond);
1490                                 g_mutex_unlock(&cb_info->msg_handler_mutex);
1491                         } else {
1492                                 LOGW("unknown camera api %d and api_class %d", api, api_class);
1493                         }
1494                 }
1495
1496         }
1497
1498         LOGD("client cb exit");
1499
1500 CB_HANDLER_EXIT:
1501         if (parse_str) {
1502                 for (i = 0 ; i < CAMERA_PARSE_STRING_SIZE ; i++) {
1503                         if (parse_str[i]) {
1504                                 free(parse_str[i]);
1505                                 parse_str[i] = NULL;
1506                         }
1507                 }
1508
1509                 free(parse_str);
1510                 parse_str = NULL;
1511         }
1512
1513         return NULL;
1514 }
1515
1516 static camera_cb_info_s *_client_callback_new(gint sockfd)
1517 {
1518         camera_cb_info_s *cb_info = NULL;
1519         GCond *tmp_cond = NULL;
1520         GMutex *tmp_mutex = NULL;
1521         gint *tmp_activating = NULL;
1522         gint *tmp_ret = NULL;
1523
1524         g_return_val_if_fail(sockfd > 0, NULL);
1525
1526         cb_info = g_new0(camera_cb_info_s, 1);
1527         if (cb_info == NULL) {
1528                 LOGE("cb_info failed");
1529                 goto ErrorExit;
1530         }
1531
1532         g_mutex_init(&cb_info->msg_handler_mutex);
1533         g_cond_init(&cb_info->msg_handler_cond);
1534         g_mutex_init(&cb_info->idle_event_mutex);
1535         g_cond_init(&cb_info->idle_event_cond);
1536
1537         tmp_cond = g_new0(GCond, MUSE_CAMERA_API_MAX);
1538         if (tmp_cond == NULL) {
1539                 LOGE("tmp_cond failed");
1540                 goto ErrorExit;
1541         }
1542
1543         tmp_mutex = g_new0(GMutex, MUSE_CAMERA_API_MAX);
1544         if (tmp_mutex == NULL) {
1545                 LOGE("tmp_mutex failed");
1546                 goto ErrorExit;
1547         }
1548
1549         tmp_activating = g_new0(gint, MUSE_CAMERA_API_MAX);
1550         if (tmp_activating == NULL) {
1551                 LOGE("tmp_activating failed");
1552                 goto ErrorExit;
1553         }
1554
1555         tmp_ret = g_new0(gint, MUSE_CAMERA_API_MAX);
1556         if (tmp_ret == NULL) {
1557                 LOGE("tmp_ret failed");
1558                 goto ErrorExit;
1559         }
1560
1561         cb_info->msg_queue = g_queue_new();
1562         if (cb_info->msg_queue == NULL) {
1563                 LOGE("msg_queue new failed");
1564                 goto ErrorExit;
1565         }
1566
1567         g_atomic_int_set(&cb_info->msg_handler_running, 1);
1568         cb_info->msg_handler_thread = g_thread_try_new("camera_msg_handler",
1569                                                        _camera_msg_handler_func,
1570                                                        (gpointer)cb_info,
1571                                                        NULL);
1572         if (cb_info->msg_handler_thread == NULL) {
1573                 LOGE("message handler thread creation failed");
1574                 goto ErrorExit;
1575         }
1576
1577         cb_info->fd = sockfd;
1578         cb_info->api_cond = tmp_cond;
1579         cb_info->api_mutex = tmp_mutex;
1580         cb_info->api_activating = tmp_activating;
1581         cb_info->api_ret = tmp_ret;
1582
1583         g_atomic_int_set(&cb_info->msg_recv_running, 1);
1584         cb_info->msg_recv_thread = g_thread_try_new("camera_msg_recv",
1585                                                     _camera_msg_recv_func,
1586                                                     (gpointer)cb_info,
1587                                                     NULL);
1588         if (cb_info->msg_recv_thread == NULL) {
1589                 LOGE("message receive thread creation failed");
1590                 goto ErrorExit;
1591         }
1592
1593         return cb_info;
1594
1595 ErrorExit:
1596         if (cb_info) {
1597                 if (cb_info->msg_handler_thread) {
1598                         g_mutex_lock(&cb_info->msg_handler_mutex);
1599                         g_atomic_int_set(&cb_info->msg_handler_running, 0);
1600                         g_cond_signal(&cb_info->msg_handler_cond);
1601                         g_mutex_unlock(&cb_info->msg_handler_mutex);
1602
1603                         g_thread_join(cb_info->msg_handler_thread);
1604                         g_thread_unref(cb_info->msg_handler_thread);
1605                         cb_info->msg_handler_thread = NULL;
1606                 }
1607
1608                 g_mutex_clear(&cb_info->msg_handler_mutex);
1609                 g_cond_clear(&cb_info->msg_handler_cond);
1610                 g_mutex_clear(&cb_info->idle_event_mutex);
1611                 g_cond_clear(&cb_info->idle_event_cond);
1612
1613                 if (cb_info->msg_queue) {
1614                         g_queue_free(cb_info->msg_queue);
1615                         cb_info->msg_queue = NULL;
1616                 }
1617
1618                 g_free(cb_info);
1619                 cb_info = NULL;
1620         }
1621
1622         if (tmp_cond) {
1623                 g_free(tmp_cond);
1624                 tmp_cond = NULL;
1625         }
1626         if (tmp_mutex) {
1627                 g_free(tmp_mutex);
1628                 tmp_mutex = NULL;
1629         }
1630         if (tmp_activating) {
1631                 g_free(tmp_activating);
1632                 tmp_activating = NULL;
1633         }
1634         if (tmp_ret) {
1635                 g_free(tmp_ret);
1636                 tmp_ret = NULL;
1637         }
1638
1639         return NULL;
1640 }
1641
1642 static void _client_callback_destroy(camera_cb_info_s *cb_info)
1643 {
1644         g_return_if_fail(cb_info != NULL);
1645
1646         LOGD("MSG receive thread[%p] destroy", cb_info->msg_recv_thread);
1647
1648         g_thread_join(cb_info->msg_recv_thread);
1649         g_thread_unref(cb_info->msg_recv_thread);
1650         cb_info->msg_recv_thread = NULL;
1651
1652         LOGD("msg thread removed");
1653
1654         g_mutex_lock(&cb_info->msg_handler_mutex);
1655         g_atomic_int_set(&cb_info->msg_handler_running, 0);
1656         g_cond_signal(&cb_info->msg_handler_cond);
1657         g_mutex_unlock(&cb_info->msg_handler_mutex);
1658
1659         g_thread_join(cb_info->msg_handler_thread);
1660         g_thread_unref(cb_info->msg_handler_thread);
1661         cb_info->msg_handler_thread = NULL;
1662
1663         g_queue_free(cb_info->msg_queue);
1664         cb_info->msg_queue = NULL;
1665         g_mutex_clear(&cb_info->msg_handler_mutex);
1666         g_cond_clear(&cb_info->msg_handler_cond);
1667         g_mutex_clear(&cb_info->idle_event_mutex);
1668         g_cond_clear(&cb_info->idle_event_cond);
1669
1670         LOGD("event thread removed");
1671
1672         if (cb_info->bufmgr) {
1673                 tbm_bufmgr_deinit(cb_info->bufmgr);
1674                 cb_info->bufmgr = NULL;
1675         }
1676         if (cb_info->api_cond) {
1677                 g_free(cb_info->api_cond);
1678                 cb_info->api_cond = NULL;
1679         }
1680         if (cb_info->api_mutex) {
1681                 g_free(cb_info->api_mutex);
1682                 cb_info->api_mutex = NULL;
1683         }
1684         if (cb_info->api_activating) {
1685                 g_free(cb_info->api_activating);
1686                 cb_info->api_activating = NULL;
1687         }
1688         if (cb_info->api_ret) {
1689                 g_free(cb_info->api_ret);
1690                 cb_info->api_ret = NULL;
1691         }
1692         if (cb_info->pkt_fmt) {
1693                 media_format_unref(cb_info->pkt_fmt);
1694                 cb_info->pkt_fmt = NULL;
1695         }
1696
1697         g_free(cb_info);
1698         cb_info = NULL;
1699
1700         return;
1701 }
1702
1703 int camera_create(camera_device_e device, camera_h* camera)
1704 {
1705         int sock_fd = -1;
1706         char *sndMsg;
1707         int ret = CAMERA_ERROR_NONE;
1708         int pid = 0;
1709         camera_cli_s *pc = NULL;
1710         tbm_bufmgr bufmgr = NULL;
1711
1712         muse_camera_api_e api = MUSE_CAMERA_API_CREATE;
1713         muse_core_api_module_e muse_module = MUSE_CAMERA;
1714         int device_type = (int)device;
1715
1716         if (camera == NULL){
1717                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1718                 return CAMERA_ERROR_INVALID_PARAMETER;
1719         }
1720
1721         bufmgr = tbm_bufmgr_init(-1);
1722         if (bufmgr == NULL) {
1723                 LOGE("get tbm bufmgr failed");
1724                 return CAMERA_ERROR_INVALID_OPERATION;
1725         }
1726
1727         sock_fd = muse_core_client_new();
1728         if (sock_fd < 0) {
1729                 LOGE("muse_core_client_new failed - returned fd %d", sock_fd);
1730                 ret = CAMERA_ERROR_INVALID_OPERATION;
1731                 goto ErrorExit;
1732         }
1733
1734         pid = getpid();
1735
1736         sndMsg = muse_core_msg_json_factory_new(api,
1737                                                 MUSE_TYPE_INT, "module", muse_module,
1738                                                 MUSE_TYPE_INT, PARAM_DEVICE_TYPE, device_type,
1739                                                 MUSE_TYPE_INT, "pid", pid,
1740                                                 0);
1741
1742         muse_core_ipc_send_msg(sock_fd, sndMsg);
1743         muse_core_msg_json_factory_free(sndMsg);
1744
1745         pc = g_new0(camera_cli_s, 1);
1746         if (pc == NULL) {
1747                 LOGE("camera_cli_s alloc failed");
1748                 ret = CAMERA_ERROR_OUT_OF_MEMORY;
1749                 goto ErrorExit;
1750         }
1751
1752         pc->cb_info = _client_callback_new(sock_fd);
1753         if (pc->cb_info == NULL) {
1754                 LOGE("cb_info alloc failed");
1755                 ret = CAMERA_ERROR_OUT_OF_MEMORY;
1756                 goto ErrorExit;
1757         }
1758
1759         LOGD("cb info : %d", pc->cb_info->fd);
1760
1761         ret = _client_wait_for_cb_return(api, pc->cb_info, CALLBACK_TIME_OUT);
1762         if (ret == CAMERA_ERROR_NONE) {
1763                 intptr_t handle = 0;
1764                 muse_camera_msg_get_pointer(handle, pc->cb_info->recv_msg);
1765                 if (handle == 0) {
1766                         LOGE("Receiving Handle Failed!!");
1767                         ret = CAMERA_ERROR_INVALID_OPERATION;
1768                         goto ErrorExit;
1769                 }
1770
1771                 pc->remote_handle = handle;
1772                 pc->cb_info->bufmgr = bufmgr;
1773
1774                 LOGD("camera create 0x%x", pc->remote_handle);
1775                 *camera = (camera_h) pc;
1776         } else {
1777                 goto ErrorExit;
1778         }
1779
1780         return ret;
1781
1782 ErrorExit:
1783         tbm_bufmgr_deinit(bufmgr);
1784         bufmgr = NULL;
1785
1786         if (pc) {
1787                 _client_callback_destroy(pc->cb_info);
1788                 pc->cb_info = NULL;
1789                 g_free(pc);
1790                 pc = NULL;
1791         }
1792
1793         LOGE("camera create error : 0x%x", ret);
1794
1795         return ret;
1796 }
1797
1798  int camera_destroy(camera_h camera)
1799 {
1800         if (camera == NULL) {
1801                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1802                 return CAMERA_ERROR_INVALID_PARAMETER;
1803         }
1804
1805         int ret = CAMERA_ERROR_NONE;
1806         muse_camera_api_e api = MUSE_CAMERA_API_DESTROY;
1807         camera_cli_s *pc = (camera_cli_s *)camera;
1808         int sock_fd = 0;
1809
1810         LOGD("ENTER");
1811
1812         if (pc->cb_info == NULL) {
1813                 LOGE("cb_info NULL, INVALID_PARAMETER");
1814                 return CAMERA_ERROR_INVALID_PARAMETER;
1815         }
1816
1817         sock_fd = pc->cb_info->fd;
1818
1819         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
1820         if (ret == CAMERA_ERROR_NONE) {
1821                 if (pc->client_handle) {
1822                         mm_camcorder_client_destroy(pc->client_handle);
1823                         pc->client_handle = NULL;
1824                 }
1825                 _camera_remove_idle_event_all(pc->cb_info);
1826                 _client_callback_destroy(pc->cb_info);
1827                 pc->cb_info = NULL;
1828
1829 #ifdef HAVE_WAYLAND
1830                 if (pc->wl_info) {
1831                         g_free(pc->wl_info);
1832                         pc->wl_info = NULL;
1833                 }
1834 #endif /* HAVE_WAYLAND */
1835
1836                 g_free(pc);
1837                 pc = NULL;
1838         } else {
1839                 LOGE("camera destroy error : 0x%x", ret);
1840         }
1841
1842         return ret;
1843 }
1844
1845 int camera_start_preview(camera_h camera)
1846 {
1847         int ret = CAMERA_ERROR_NONE;
1848         muse_camera_api_e api = MUSE_CAMERA_API_START_PREVIEW;
1849         camera_cli_s *pc = (camera_cli_s *)camera;
1850         int sock_fd = 0;
1851         char caps[MUSE_CAMERA_MSG_MAX_LENGTH] = {0};
1852
1853         if (camera == NULL) {
1854                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1855                 return CAMERA_ERROR_INVALID_PARAMETER;
1856         }
1857
1858         if (pc->cb_info == NULL) {
1859                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1860                 return CAMERA_ERROR_INVALID_PARAMETER;
1861         }
1862
1863         LOGD("start");
1864
1865         sock_fd = pc->cb_info->fd;
1866
1867         if (pc->client_handle == NULL) {
1868                 LOGW("set display is not called by application. set NONE type internally");
1869                 ret = camera_set_display(camera, CAMERA_DISPLAY_TYPE_NONE, NULL);
1870                 if (ret != CAMERA_ERROR_NONE) {
1871                         LOGE("Internal camera_set_display failed 0x%x", ret);
1872                         return ret;
1873                 }
1874         }
1875
1876         muse_camera_msg_send_longtime(api, sock_fd, pc->cb_info, ret);
1877
1878         if (ret != CAMERA_ERROR_NONE) {
1879                 LOGE("start preview failed 0x%x", ret);
1880                 return ret;
1881         }
1882
1883         if (pc->cb_info->prev_state == CAMERA_STATE_CREATED) {
1884                 if (muse_camera_msg_get_string(caps, pc->cb_info->recv_msg) == FALSE) {
1885                         LOGE("failed to get caps string");
1886                         goto _START_PREVIEW_ERROR;
1887                 }
1888
1889                 LOGD("caps : %s", caps);
1890
1891                 ret = mm_camcorder_client_realize(pc->client_handle, caps);
1892                 if (ret != MM_ERROR_NONE) {
1893                         LOGE("client realize failed 0x%x", ret);
1894                         goto _START_PREVIEW_ERROR;
1895                 }
1896         }
1897
1898         LOGD("ret : 0x%x", ret);
1899
1900         return CAMERA_ERROR_NONE;
1901
1902 _START_PREVIEW_ERROR:
1903         muse_camera_msg_send_longtime(MUSE_CAMERA_API_STOP_PREVIEW, sock_fd, pc->cb_info, ret);
1904
1905         return CAMERA_ERROR_INVALID_OPERATION;
1906 }
1907
1908 int camera_stop_preview(camera_h camera)
1909 {
1910         if (camera == NULL) {
1911                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1912                 return CAMERA_ERROR_INVALID_PARAMETER;
1913         }
1914         int ret = CAMERA_ERROR_NONE;
1915         camera_cli_s *pc = (camera_cli_s *)camera;
1916         int sock_fd;
1917         muse_camera_api_e api = MUSE_CAMERA_API_STOP_PREVIEW;
1918
1919         if (pc->cb_info == NULL) {
1920                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1921                 return CAMERA_ERROR_INVALID_PARAMETER;
1922         }
1923
1924         sock_fd = pc->cb_info->fd;
1925         LOGD("Enter");
1926         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
1927
1928         if (ret != CAMERA_ERROR_NONE) {
1929                 LOGE("stop preview failed 0x%x", ret);
1930                 return ret;
1931         }
1932
1933         if (pc->client_handle != NULL) {
1934                 if (mm_camcorder_client_unrealize(pc->client_handle) == MM_ERROR_NONE) {
1935                         LOGD("client unrealize done");
1936                 } else {
1937                         LOGE("client unrealize failed. restart preview...");
1938                         muse_camera_msg_send_longtime(MUSE_CAMERA_API_START_PREVIEW, sock_fd, pc->cb_info, ret);
1939                         return CAMERA_ERROR_INVALID_OPERATION;
1940                 }
1941         } else {
1942                 LOGW("client handle is NULL");
1943         }
1944
1945         LOGD("ret : 0x%x", ret);
1946
1947         return ret;
1948 }
1949
1950 int camera_start_capture(camera_h camera, camera_capturing_cb capturing_cb, camera_capture_completed_cb completed_cb, void *user_data)
1951 {
1952         if (camera == NULL) {
1953                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1954                 return CAMERA_ERROR_INVALID_PARAMETER;
1955         }
1956         int ret = CAMERA_ERROR_NONE;
1957
1958         camera_cli_s *pc = (camera_cli_s *)camera;
1959         muse_camera_api_e api = MUSE_CAMERA_API_START_CAPTURE;
1960         int sock_fd;
1961         int is_capturing_cb = 0;
1962         int is_completed_cb = 0;
1963         LOGD("Enter, handle :%x", pc->remote_handle);
1964
1965         if (pc->cb_info == NULL) {
1966                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1967                 return CAMERA_ERROR_INVALID_PARAMETER;
1968         }
1969
1970         sock_fd = pc->cb_info->fd;
1971
1972         if (capturing_cb != NULL) {
1973                 is_capturing_cb = 1;
1974                 pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_CAPTURE] = capturing_cb;
1975                 pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_CAPTURE] = user_data;
1976         }
1977
1978         if(completed_cb != NULL) {
1979                 is_completed_cb = 1;
1980                 pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_CAPTURE_COMPLETE] = completed_cb;
1981                 pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_CAPTURE_COMPLETE] = user_data;
1982         }
1983
1984         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, is_capturing_cb, INT, is_completed_cb);
1985         LOGD("is_capturing_cb :%d, is_completed_cb : %d", is_capturing_cb, is_completed_cb);
1986         LOGD("ret : 0x%x", ret);
1987         return ret;
1988 }
1989
1990 bool camera_is_supported_continuous_capture(camera_h camera)
1991 {
1992         if (camera == NULL) {
1993                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
1994                 return false;
1995         }
1996
1997         int ret = CAMERA_ERROR_NONE;
1998         camera_cli_s *pc = (camera_cli_s *)camera;
1999         muse_camera_api_e api = MUSE_CAMERA_API_SUPPORT_CONTINUOUS_CAPTURE;
2000         int sock_fd;
2001
2002         if (pc->cb_info == NULL) {
2003                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2004                 return CAMERA_ERROR_INVALID_PARAMETER;
2005         }
2006
2007         sock_fd = pc->cb_info->fd;
2008
2009         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2010         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2011         LOGD("ret : 0x%x", ret);
2012         return (bool)ret;
2013 }
2014
2015 int camera_start_continuous_capture(camera_h camera, int count, int interval, camera_capturing_cb capturing_cb, camera_capture_completed_cb completed_cb , void *user_data)
2016 {
2017         if (camera == NULL) {
2018                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
2019                 return CAMERA_ERROR_INVALID_PARAMETER;
2020         }
2021
2022         int ret = CAMERA_ERROR_NONE;
2023
2024         camera_cli_s *pc = (camera_cli_s *)camera;
2025         muse_camera_api_e api = MUSE_CAMERA_API_START_CONTINUOUS_CAPTURE;
2026
2027         LOGD("Enter, handle :%x", pc->remote_handle);
2028
2029         int sock_fd;
2030         if (pc->cb_info == NULL) {
2031                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2032                 return CAMERA_ERROR_INVALID_PARAMETER;
2033         }
2034         sock_fd = pc->cb_info->fd;
2035
2036         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_CAPTURE] = capturing_cb;
2037         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_CAPTURE] = user_data;
2038         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_CAPTURE_COMPLETE] = completed_cb;
2039
2040         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, count, INT, interval);
2041
2042         LOGD("ret : 0x%x", ret);
2043
2044         return ret;
2045 }
2046
2047 int camera_stop_continuous_capture(camera_h camera)
2048 {
2049         if (camera == NULL) {
2050                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2051                 return CAMERA_ERROR_INVALID_PARAMETER;
2052         }
2053
2054
2055         int ret = CAMERA_ERROR_NONE;
2056
2057         camera_cli_s *pc = (camera_cli_s *)camera;
2058         muse_camera_api_e api = MUSE_CAMERA_API_STOP_CONTINUOUS_CAPTURE;
2059         LOGD("Enter,  handle :%x", pc->remote_handle);
2060         int sock_fd;
2061         if (pc->cb_info == NULL) {
2062                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2063                 return CAMERA_ERROR_INVALID_PARAMETER;
2064         }
2065         sock_fd = pc->cb_info->fd;
2066         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2067         LOGD("ret : 0x%x", ret);
2068         return ret;
2069 }
2070
2071 bool camera_is_supported_face_detection(camera_h camera)
2072 {
2073         if (camera == NULL) {
2074                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2075                 return false;
2076         }
2077         int ret = CAMERA_ERROR_NONE;
2078
2079         camera_cli_s *pc = (camera_cli_s *)camera;
2080         muse_camera_api_e api = MUSE_CAMERA_API_SUPPORT_FACE_DETECTION;
2081         int sock_fd;
2082         if (pc->cb_info == NULL) {
2083                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2084                 return CAMERA_ERROR_INVALID_PARAMETER;
2085         }
2086         sock_fd = pc->cb_info->fd;
2087
2088         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2089         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2090         LOGD("ret : 0x%x", ret);
2091         return (bool)ret;
2092 }
2093
2094 bool camera_is_supported_zero_shutter_lag(camera_h camera)
2095 {
2096         if (camera == NULL) {
2097                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2098                 return false;
2099         }
2100         int ret = CAMERA_ERROR_NONE;
2101
2102         camera_cli_s *pc = (camera_cli_s *)camera;
2103         muse_camera_api_e api = MUSE_CAMERA_API_SUPPORT_ZERO_SHUTTER_LAG;
2104         int sock_fd;
2105         if (pc->cb_info == NULL) {
2106                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2107                 return CAMERA_ERROR_INVALID_PARAMETER;
2108         }
2109         sock_fd = pc->cb_info->fd;
2110
2111         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2112         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2113         LOGD("ret : 0x%x", ret);
2114         return (bool)ret;
2115 }
2116
2117 bool camera_is_supported_media_packet_preview_cb(camera_h camera)
2118 {
2119         if (camera == NULL) {
2120                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2121                 return false;
2122         }
2123
2124         int ret = CAMERA_ERROR_NONE;
2125
2126         camera_cli_s *pc = (camera_cli_s *)camera;
2127         muse_camera_api_e api = MUSE_CAMERA_API_SUPPORT_MEDIA_PACKET_PREVIEW_CB;
2128         int sock_fd;
2129         if (pc->cb_info == NULL) {
2130                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2131                 return CAMERA_ERROR_INVALID_PARAMETER;
2132         }
2133         sock_fd = pc->cb_info->fd;
2134
2135         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2136         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2137         LOGD("ret : 0x%x", ret);
2138         return (bool)ret;
2139 }
2140
2141 int camera_get_device_count(camera_h camera, int *device_count)
2142 {
2143         if (camera == NULL || device_count == NULL) {
2144                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
2145                 return CAMERA_ERROR_INVALID_PARAMETER;
2146         }
2147         int ret = CAMERA_ERROR_NONE;
2148
2149         camera_cli_s *pc = (camera_cli_s *)camera;
2150         muse_camera_api_e api = MUSE_CAMERA_API_GET_DEVICE_COUNT;
2151         int sock_fd;
2152         if (pc->cb_info == NULL) {
2153                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2154                 return CAMERA_ERROR_INVALID_PARAMETER;
2155         }
2156         sock_fd = pc->cb_info->fd;
2157         int get_device_count;
2158
2159         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2160         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2161
2162         if (ret == CAMERA_ERROR_NONE) {
2163                 muse_camera_msg_get(get_device_count, pc->cb_info->recv_msg);
2164                 *device_count = get_device_count;
2165         }
2166         LOGD("ret : 0x%x", ret);
2167         return ret;
2168 }
2169
2170 int camera_start_face_detection(camera_h camera, camera_face_detected_cb callback, void * user_data)
2171 {
2172         if (camera == NULL) {
2173                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
2174                 return CAMERA_ERROR_INVALID_PARAMETER;
2175         }
2176
2177         int ret = CAMERA_ERROR_NONE;
2178
2179         camera_cli_s *pc = (camera_cli_s *)camera;
2180         muse_camera_api_e api = MUSE_CAMERA_API_START_FACE_DETECTION;
2181
2182         LOGD("Enter, handle :%x", pc->remote_handle);
2183         int sock_fd;
2184         if (pc->cb_info == NULL) {
2185                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2186                 return CAMERA_ERROR_INVALID_PARAMETER;
2187         }
2188         sock_fd = pc->cb_info->fd;
2189         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FACE_DETECTION] = callback;
2190         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FACE_DETECTION] = user_data;
2191
2192         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2193         LOGD("ret : 0x%x", ret);
2194         return ret;
2195 }
2196
2197 int camera_stop_face_detection(camera_h camera)
2198 {
2199         if (camera == NULL) {
2200                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2201                 return CAMERA_ERROR_INVALID_PARAMETER;
2202         }
2203
2204         int ret = CAMERA_ERROR_NONE;
2205
2206         camera_cli_s *pc = (camera_cli_s *)camera;
2207         muse_camera_api_e api = MUSE_CAMERA_API_STOP_FACE_DETECTION;
2208         LOGD("Enter,  handle :%x", pc->remote_handle);
2209         int sock_fd;
2210         if (pc->cb_info == NULL) {
2211                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2212                 return CAMERA_ERROR_INVALID_PARAMETER;
2213         }
2214         sock_fd = pc->cb_info->fd;
2215         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2216         LOGD("ret : 0x%x", ret);
2217         return ret;
2218 }
2219
2220 int camera_get_state(camera_h camera, camera_state_e * state)
2221 {
2222         if (camera == NULL || state == NULL) {
2223                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2224                 return CAMERA_ERROR_INVALID_PARAMETER;
2225         }
2226         int ret = CAMERA_ERROR_NONE;
2227
2228         camera_cli_s *pc = (camera_cli_s *)camera;
2229         muse_camera_api_e api = MUSE_CAMERA_API_GET_STATE;
2230         int sock_fd;
2231         if (pc->cb_info == NULL) {
2232                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2233                 return CAMERA_ERROR_INVALID_PARAMETER;
2234         }
2235         sock_fd = pc->cb_info->fd;
2236         int get_state;
2237
2238         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2239         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2240
2241         if (ret == CAMERA_ERROR_NONE) {
2242                 muse_camera_msg_get(get_state, pc->cb_info->recv_msg);
2243                 *state = (camera_state_e)get_state;
2244         }
2245         LOGD("ret : 0x%x", ret);
2246         return ret;
2247 }
2248
2249 int camera_start_focusing(camera_h camera, bool continuous)
2250 {
2251         if( camera == NULL){
2252                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2253                 return CAMERA_ERROR_INVALID_PARAMETER;
2254         }
2255
2256         int ret = CAMERA_ERROR_NONE;
2257
2258         camera_cli_s *pc = (camera_cli_s *)camera;
2259         muse_camera_api_e api = MUSE_CAMERA_API_START_FOCUSING;
2260         int sock_fd;
2261         if (pc->cb_info == NULL) {
2262                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2263                 return CAMERA_ERROR_INVALID_PARAMETER;
2264         }
2265         sock_fd = pc->cb_info->fd;
2266         int is_continuous = (int)continuous;
2267
2268         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2269         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, is_continuous);
2270         LOGD("ret : 0x%x", ret);
2271         return ret;
2272 }
2273
2274 int camera_cancel_focusing(camera_h camera)
2275 {
2276         if (camera == NULL) {
2277                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2278                 return CAMERA_ERROR_INVALID_PARAMETER;
2279         }
2280
2281         int ret = CAMERA_ERROR_NONE;
2282
2283         camera_cli_s *pc = (camera_cli_s *)camera;
2284         muse_camera_api_e api = MUSE_CAMERA_API_CANCEL_FOCUSING;
2285         int sock_fd;
2286         if (pc->cb_info == NULL) {
2287                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2288                 return CAMERA_ERROR_INVALID_PARAMETER;
2289         }
2290         sock_fd = pc->cb_info->fd;
2291
2292         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2293         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2294         LOGD("ret : 0x%x", ret);
2295         return ret;
2296 }
2297
2298 int camera_set_display(camera_h camera, camera_display_type_e type, camera_display_h display)
2299 {
2300         int ret = CAMERA_ERROR_NONE;
2301         void *set_display_handle = NULL;
2302         int set_surface = MM_DISPLAY_SURFACE_X;
2303         Evas_Object *obj = NULL;
2304         const char *object_type = NULL;
2305         char socket_path[MUSE_CAMERA_MSG_MAX_LENGTH] = {0,};
2306 #ifdef HAVE_WAYLAND
2307         MMCamWaylandInfo *wl_info = NULL;
2308 #endif /* HAVE_WAYLAND */
2309
2310         if (camera == NULL) {
2311                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
2312                 return CAMERA_ERROR_INVALID_PARAMETER;
2313         }
2314
2315         if (type != CAMERA_DISPLAY_TYPE_NONE && display == NULL) {
2316                 LOGE("display type[%d] is not NONE, but display handle is NULL", type);
2317                 return CAMERA_ERROR_INVALID_PARAMETER;
2318         }
2319
2320         camera_cli_s *pc = (camera_cli_s *)camera;
2321         muse_camera_api_e api = MUSE_CAMERA_API_SET_DISPLAY;
2322         int sock_fd;
2323         if (pc->cb_info == NULL) {
2324                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2325                 return CAMERA_ERROR_INVALID_PARAMETER;
2326         }
2327         sock_fd = pc->cb_info->fd;
2328
2329         LOGD("Enter, remote_handle : %x display : 0x%x", pc->remote_handle, display);
2330
2331         if (type == CAMERA_DISPLAY_TYPE_NONE) {
2332                 set_display_handle = 0;
2333                 set_surface = MM_DISPLAY_SURFACE_NULL;
2334                 LOGD("display type NONE");
2335         } else {
2336                 obj = (Evas_Object *)display;
2337                 object_type = evas_object_type_get(obj);
2338                 if (object_type) {
2339                         if (type == CAMERA_DISPLAY_TYPE_OVERLAY && !strcmp(object_type, "elm_win")) {
2340 #ifdef HAVE_WAYLAND
2341                                 /* set wayland info */
2342                                 wl_info = _get_wl_info(obj);
2343                                 if (wl_info == NULL) {
2344                                         LOGE("failed to get wl_info");
2345                                         return CAMERA_ERROR_INVALID_OPERATION;
2346                                 }
2347
2348                                 set_display_handle = (void *)wl_info;
2349 #else /* HAVE_WAYLAND */
2350                                 /* x window overlay surface */
2351                                 set_display_handle = (void *)elm_win_xwindow_get(obj);
2352 #endif
2353                                 set_surface = MM_DISPLAY_SURFACE_X;
2354                                 LOGD("display type OVERLAY : handle %p", set_display_handle);
2355                         } else if (type == CAMERA_DISPLAY_TYPE_EVAS && !strcmp(object_type, "image")) {
2356                                 /* evas object surface */
2357                                 set_display_handle = (void *)display;
2358                                 set_surface = MM_DISPLAY_SURFACE_EVAS;
2359                                 LOGD("display type EVAS : handle %p", set_display_handle);
2360                         } else {
2361                                 LOGE("unknown evas object [%p,%s] or type [%d] mismatch", obj, object_type, type);
2362                                 return CAMERA_ERROR_INVALID_PARAMETER;
2363                         }
2364                 } else {
2365                         LOGE("failed to get evas object type from %p", obj);
2366                         return CAMERA_ERROR_INVALID_PARAMETER;
2367                 }
2368         }
2369
2370         pc->display_handle = (intptr_t)set_display_handle;
2371
2372         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2373
2374         if (ret == CAMERA_ERROR_NONE) {
2375                 if (pc->client_handle == NULL) {
2376                         ret = mm_camcorder_client_create(&pc->client_handle);
2377                         if (ret != MM_ERROR_NONE) {
2378                                 LOGE("camera client create Failed 0x%x", ret);
2379                                 goto _SET_DISPLAY_ERROR;
2380                         }
2381                 }
2382
2383                 if (muse_camera_msg_get_string(socket_path, pc->cb_info->recv_msg) == FALSE) {
2384                         LOGE("failed to get socket path");
2385                         goto _SET_DISPLAY_ERROR;
2386                 }
2387
2388                 LOGD("shmsrc socket path : %s", socket_path);
2389
2390                 ret = mm_camcorder_client_set_shm_socket_path(pc->client_handle, socket_path);
2391                 if (ret != MM_ERROR_NONE) {
2392                         LOGE("failed to set socket path 0x%x", ret);
2393                         goto _SET_DISPLAY_ERROR;
2394                 }
2395
2396                 ret = mm_camcorder_set_attributes(pc->client_handle, NULL,
2397                                                   MMCAM_DISPLAY_SURFACE, set_surface,
2398                                                   NULL);
2399                 if (ret != MM_ERROR_NONE) {
2400                         LOGE("set display surface failed 0x%x", ret);
2401                         goto _SET_DISPLAY_ERROR;
2402                 }
2403
2404                 if (type != CAMERA_DISPLAY_TYPE_NONE) {
2405                         ret = mm_camcorder_set_attributes(pc->client_handle, NULL,
2406                                                           MMCAM_DISPLAY_HANDLE, set_display_handle, sizeof(void *),
2407                                                           NULL);
2408                         if (ret != MM_ERROR_NONE) {
2409                                 LOGE("set display handle failed 0x%x", ret);
2410                                 goto _SET_DISPLAY_ERROR;
2411                         }
2412                 }
2413
2414 #ifdef HAVE_WAYLAND
2415                 if (pc->wl_info) {
2416                         g_free(pc->wl_info);
2417                         pc->wl_info = NULL;
2418                 }
2419
2420                 pc->wl_info = wl_info;
2421 #endif /* HAVE_WAYLAND */
2422
2423                 return CAMERA_ERROR_NONE;;
2424         } else {
2425                 LOGE("set display error - 0x%x");
2426                 return ret;
2427         }
2428
2429 _SET_DISPLAY_ERROR:
2430 #ifdef HAVE_WAYLAND
2431         if (wl_info) {
2432                 g_free(wl_info);
2433                 wl_info = NULL;
2434         }
2435 #endif /* HAVE_WAYLAND */
2436
2437         return __convert_camera_error_code(__func__, ret);
2438 }
2439
2440 int camera_set_preview_resolution(camera_h camera,  int width, int height)
2441 {
2442         if( camera == NULL){
2443                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2444                 return CAMERA_ERROR_INVALID_PARAMETER;
2445         }
2446         int ret = CAMERA_ERROR_NONE;
2447
2448         camera_cli_s *pc = (camera_cli_s *)camera;
2449         muse_camera_api_e api = MUSE_CAMERA_API_SET_PREVIEW_RESOLUTION;
2450         int sock_fd;
2451         if (pc->cb_info == NULL) {
2452                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2453                 return CAMERA_ERROR_INVALID_PARAMETER;
2454         }
2455         sock_fd = pc->cb_info->fd;
2456
2457         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2458         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, width, INT, height);
2459         LOGD("ret : 0x%x", ret);
2460         return ret;
2461 }
2462
2463
2464 int camera_set_capture_resolution(camera_h camera,  int width, int height)
2465 {
2466         if (camera == NULL) {
2467                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2468                 return CAMERA_ERROR_INVALID_PARAMETER;
2469         }
2470
2471         int ret = CAMERA_ERROR_NONE;
2472
2473         camera_cli_s *pc = (camera_cli_s *)camera;
2474         muse_camera_api_e api = MUSE_CAMERA_API_SET_CAPTURE_RESOLUTION;
2475         int sock_fd;
2476         if (pc->cb_info == NULL) {
2477                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2478                 return CAMERA_ERROR_INVALID_PARAMETER;
2479         }
2480         sock_fd = pc->cb_info->fd;
2481
2482         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2483         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, width, INT, height);
2484         LOGD("ret : 0x%x", ret);
2485         return ret;
2486 }
2487
2488 int camera_set_capture_format(camera_h camera, camera_pixel_format_e format)
2489 {
2490         if (camera == NULL) {
2491                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2492                 return CAMERA_ERROR_INVALID_PARAMETER;
2493         }
2494
2495         int ret = CAMERA_ERROR_NONE;
2496         int set_format = (int)format;
2497
2498         camera_cli_s *pc = (camera_cli_s *)camera;
2499         muse_camera_api_e api = MUSE_CAMERA_API_SET_CAPTURE_FORMAT;
2500         int sock_fd;
2501         if (pc->cb_info == NULL) {
2502                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2503                 return CAMERA_ERROR_INVALID_PARAMETER;
2504         }
2505         sock_fd = pc->cb_info->fd;
2506
2507         LOGD("Enter, remote_handle : %x, capture_format: %d", pc->remote_handle, set_format);
2508         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_format);
2509         LOGD("ret : 0x%x", ret);
2510         return ret;
2511 }
2512
2513 int camera_set_preview_format(camera_h camera, camera_pixel_format_e format)
2514 {
2515         if (camera == NULL) {
2516                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2517                 return CAMERA_ERROR_INVALID_PARAMETER;
2518         }
2519
2520         int ret = CAMERA_ERROR_NONE;
2521         int set_format = (int)format;
2522
2523         camera_cli_s *pc = (camera_cli_s *)camera;
2524         muse_camera_api_e api = MUSE_CAMERA_API_SET_PREVIEW_FORMAT;
2525         int sock_fd;
2526         if (pc->cb_info == NULL) {
2527                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2528                 return CAMERA_ERROR_INVALID_PARAMETER;
2529         }
2530         sock_fd = pc->cb_info->fd;
2531
2532         LOGD("Enter, remote_handle : %x, capture_format: %d", pc->remote_handle, set_format);
2533         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_format);
2534         LOGD("ret : 0x%x", ret);
2535         return ret;
2536 }
2537
2538 int camera_get_preview_resolution(camera_h camera,  int *width, int *height)
2539 {
2540         if (camera == NULL || width == NULL || height == NULL) {
2541                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2542                 return CAMERA_ERROR_INVALID_PARAMETER;
2543         }
2544
2545
2546         int ret = CAMERA_ERROR_NONE;
2547
2548         camera_cli_s *pc = (camera_cli_s *)camera;
2549         muse_camera_api_e api = MUSE_CAMERA_API_GET_PREVIEW_RESOLUTION;
2550         int sock_fd;
2551         if (pc->cb_info == NULL) {
2552                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2553                 return CAMERA_ERROR_INVALID_PARAMETER;
2554         }
2555         sock_fd = pc->cb_info->fd;
2556         int get_width;
2557         int get_height;
2558
2559         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2560         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2561
2562         if (ret == CAMERA_ERROR_NONE) {
2563                 muse_camera_msg_get(get_width, pc->cb_info->recv_msg);
2564                 muse_camera_msg_get(get_height, pc->cb_info->recv_msg);
2565                 *width = get_width;
2566                 *height = get_height;
2567         }
2568         LOGD("ret : 0x%x", ret);
2569         return ret;
2570 }
2571
2572 int camera_set_display_rotation(camera_h camera, camera_rotation_e rotation)
2573 {
2574         if( camera == NULL){
2575                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2576                 return CAMERA_ERROR_INVALID_PARAMETER;
2577         }
2578
2579         int ret = CAMERA_ERROR_NONE;
2580         camera_cli_s *pc = (camera_cli_s *)camera;
2581         muse_camera_api_e api = MUSE_CAMERA_API_SET_DISPLAY_ROTATION;
2582         int sock_fd;
2583         if (pc->cb_info == NULL) {
2584                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2585                 return CAMERA_ERROR_INVALID_PARAMETER;
2586         }
2587         sock_fd = pc->cb_info->fd;
2588         int set_rotation = (int)rotation;
2589
2590         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2591         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_rotation);
2592         LOGD("ret : 0x%x", ret);
2593         return ret;
2594 }
2595
2596 int camera_get_display_rotation(camera_h camera, camera_rotation_e *rotation)
2597 {
2598         if( camera == NULL || rotation == NULL ){
2599                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2600                 return CAMERA_ERROR_INVALID_PARAMETER;
2601         }
2602
2603         int ret = CAMERA_ERROR_NONE;
2604
2605         camera_cli_s *pc = (camera_cli_s *)camera;
2606         muse_camera_api_e api = MUSE_CAMERA_API_GET_DISPLAY_ROTATION;
2607         int sock_fd;
2608         if (pc->cb_info == NULL) {
2609                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2610                 return CAMERA_ERROR_INVALID_PARAMETER;
2611         }
2612         sock_fd = pc->cb_info->fd;
2613         int get_rotation;
2614
2615         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2616         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2617
2618         if (ret == CAMERA_ERROR_NONE) {
2619                 muse_camera_msg_get(get_rotation, pc->cb_info->recv_msg);
2620                 *rotation = (camera_rotation_e)get_rotation;
2621         }
2622         LOGD("ret : 0x%x", ret);
2623         return ret;
2624 }
2625
2626 int camera_set_display_flip(camera_h camera, camera_flip_e flip)
2627 {
2628         if( camera == NULL){
2629                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2630                 return CAMERA_ERROR_INVALID_PARAMETER;
2631         }
2632
2633         int ret = CAMERA_ERROR_NONE;
2634
2635         camera_cli_s *pc = (camera_cli_s *)camera;
2636         muse_camera_api_e api = MUSE_CAMERA_API_SET_DISPLAY_FLIP;
2637         int sock_fd;
2638         if (pc->cb_info == NULL) {
2639                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2640                 return CAMERA_ERROR_INVALID_PARAMETER;
2641         }
2642         sock_fd = pc->cb_info->fd;
2643         int set_flip = (int)flip;
2644
2645         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2646         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_flip);
2647         LOGD("ret : 0x%x", ret);
2648         return ret;
2649 }
2650
2651 int camera_get_display_flip(camera_h camera, camera_flip_e *flip)
2652 {
2653         if( camera == NULL || flip == NULL ){
2654                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2655                 return CAMERA_ERROR_INVALID_PARAMETER;
2656         }
2657
2658         int ret = CAMERA_ERROR_NONE;
2659
2660         camera_cli_s *pc = (camera_cli_s *)camera;
2661         muse_camera_api_e api = MUSE_CAMERA_API_GET_DISPLAY_FLIP;
2662         int sock_fd;
2663         if (pc->cb_info == NULL) {
2664                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2665                 return CAMERA_ERROR_INVALID_PARAMETER;
2666         }
2667         sock_fd = pc->cb_info->fd;
2668         int get_flip;
2669
2670         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2671         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2672
2673         if (ret == CAMERA_ERROR_NONE) {
2674                 muse_camera_msg_get(get_flip, pc->cb_info->recv_msg);
2675                 *flip = (camera_flip_e)get_flip;
2676         }
2677         LOGD("ret : 0x%x", ret);
2678         return ret;
2679 }
2680
2681 int camera_set_display_visible(camera_h camera, bool visible)
2682 {
2683         if( camera == NULL){
2684                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2685                 return CAMERA_ERROR_INVALID_PARAMETER;
2686         }
2687
2688         int ret = CAMERA_ERROR_NONE;
2689
2690         camera_cli_s *pc = (camera_cli_s *)camera;
2691         muse_camera_api_e api = MUSE_CAMERA_API_SET_DISPLAY_VISIBLE;
2692         int set_visible = (int)visible;
2693         int sock_fd;
2694         if (pc->cb_info == NULL) {
2695                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2696                 return CAMERA_ERROR_INVALID_PARAMETER;
2697         }
2698         sock_fd = pc->cb_info->fd;
2699
2700         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2701         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_visible);
2702         LOGD("ret : 0x%x", ret);
2703         return ret;
2704 }
2705
2706 int camera_is_display_visible(camera_h camera, bool* visible)
2707 {
2708         if( camera == NULL || visible == NULL){
2709                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2710                 return CAMERA_ERROR_INVALID_PARAMETER;
2711         }
2712
2713         int ret = CAMERA_ERROR_NONE;
2714
2715         camera_cli_s *pc = (camera_cli_s *)camera;
2716         muse_camera_api_e api = MUSE_CAMERA_API_IS_DISPLAY_VISIBLE;
2717         int sock_fd;
2718         if (pc->cb_info == NULL) {
2719                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2720                 return CAMERA_ERROR_INVALID_PARAMETER;
2721         }
2722         sock_fd = pc->cb_info->fd;
2723         int get_visible;
2724
2725         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2726         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2727
2728         if (ret == CAMERA_ERROR_NONE) {
2729                 muse_camera_msg_get(get_visible, pc->cb_info->recv_msg);
2730                 *visible = (bool)get_visible;
2731         }
2732         LOGD("ret : 0x%x", ret);
2733         return ret;
2734 }
2735
2736 int camera_set_display_mode(camera_h camera, camera_display_mode_e mode)
2737 {
2738         if (camera == NULL) {
2739                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2740                 return CAMERA_ERROR_INVALID_PARAMETER;
2741         }
2742
2743         int ret = CAMERA_ERROR_NONE;
2744         int set_mode = (int)mode;
2745
2746         camera_cli_s *pc = (camera_cli_s *)camera;
2747         muse_camera_api_e api = MUSE_CAMERA_API_SET_DISPLAY_MODE;
2748         int sock_fd;
2749         if (pc->cb_info == NULL) {
2750                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2751                 return CAMERA_ERROR_INVALID_PARAMETER;
2752         }
2753         sock_fd = pc->cb_info->fd;
2754
2755         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2756         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
2757         LOGD("ret : 0x%x", ret);
2758         return ret;
2759 }
2760
2761 int camera_get_display_mode(camera_h camera, camera_display_mode_e* mode)
2762 {
2763         if( camera == NULL || mode == NULL){
2764                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2765                 return CAMERA_ERROR_INVALID_PARAMETER;
2766         }
2767
2768         int ret = CAMERA_ERROR_NONE;
2769
2770         camera_cli_s *pc = (camera_cli_s *)camera;
2771         muse_camera_api_e api = MUSE_CAMERA_API_GET_DISPLAY_MODE;
2772         int sock_fd;
2773         if (pc->cb_info == NULL) {
2774                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2775                 return CAMERA_ERROR_INVALID_PARAMETER;
2776         }
2777         sock_fd = pc->cb_info->fd;
2778         int get_mode;
2779
2780         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2781         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2782
2783         if (ret == CAMERA_ERROR_NONE) {
2784                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
2785                 *mode = (camera_display_mode_e)get_mode;
2786         }
2787         LOGD("ret : 0x%x", ret);
2788         return ret;
2789 }
2790
2791 int camera_get_capture_resolution(camera_h camera, int *width, int *height)
2792 {
2793         if( camera == NULL || width== NULL || height == NULL){
2794                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2795                 return CAMERA_ERROR_INVALID_PARAMETER;
2796         }
2797         int ret = CAMERA_ERROR_NONE;
2798
2799         camera_cli_s *pc = (camera_cli_s *)camera;
2800         muse_camera_api_e api = MUSE_CAMERA_API_GET_CAPTURE_RESOLUTION;
2801         int sock_fd;
2802         if (pc->cb_info == NULL) {
2803                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2804                 return CAMERA_ERROR_INVALID_PARAMETER;
2805         }
2806         sock_fd = pc->cb_info->fd;
2807         int get_width;
2808         int get_height;
2809
2810         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2811         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2812
2813         if (ret == CAMERA_ERROR_NONE) {
2814                 muse_camera_msg_get(get_width, pc->cb_info->recv_msg);
2815                 muse_camera_msg_get(get_height, pc->cb_info->recv_msg);
2816                 *width = get_width;
2817                 *height = get_height;
2818         }
2819         LOGD("ret : 0x%x", ret);
2820         return ret;
2821 }
2822
2823 int camera_get_capture_format(camera_h camera, camera_pixel_format_e *format)
2824 {
2825         if( camera == NULL || format == NULL){
2826                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2827                 return CAMERA_ERROR_INVALID_PARAMETER;
2828         }
2829         int ret = CAMERA_ERROR_NONE;
2830
2831         camera_cli_s *pc = (camera_cli_s *)camera;
2832         muse_camera_api_e api = MUSE_CAMERA_API_GET_CAPTURE_FORMAT;
2833         int get_format;
2834         int sock_fd;
2835         if (pc->cb_info == NULL) {
2836                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2837                 return CAMERA_ERROR_INVALID_PARAMETER;
2838         }
2839         sock_fd = pc->cb_info->fd;
2840
2841         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2842         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2843
2844         if (ret == CAMERA_ERROR_NONE) {
2845                 muse_camera_msg_get(get_format, pc->cb_info->recv_msg);
2846                 *format = (camera_pixel_format_e)get_format;
2847         }
2848         LOGD("ret : 0x%x", ret);
2849         return ret;
2850 }
2851
2852 int camera_get_preview_format(camera_h camera, camera_pixel_format_e *format)
2853 {
2854         if( camera == NULL || format == NULL){
2855                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2856                 return CAMERA_ERROR_INVALID_PARAMETER;
2857         }
2858
2859         int ret = CAMERA_ERROR_NONE;
2860
2861         camera_cli_s *pc = (camera_cli_s *)camera;
2862         muse_camera_api_e api = MUSE_CAMERA_API_GET_PREVIEW_FORMAT;
2863         int get_format;
2864         int sock_fd;
2865         if (pc->cb_info == NULL) {
2866                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2867                 return CAMERA_ERROR_INVALID_PARAMETER;
2868         }
2869         sock_fd = pc->cb_info->fd;
2870
2871         LOGD("Enter, remote_handle : %x", pc->remote_handle);
2872         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2873
2874         if (ret == CAMERA_ERROR_NONE) {
2875                 muse_camera_msg_get(get_format, pc->cb_info->recv_msg);
2876                 *format = (camera_pixel_format_e)get_format;
2877         }
2878         LOGD("ret : 0x%x", ret);
2879         return ret;
2880 }
2881
2882 int camera_set_preview_cb(camera_h camera, camera_preview_cb callback, void* user_data)
2883 {
2884         if (camera == NULL || callback == NULL) {
2885                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2886                 return CAMERA_ERROR_INVALID_PARAMETER;
2887         }
2888         int ret = CAMERA_ERROR_NONE;
2889
2890         camera_cli_s *pc = (camera_cli_s *)camera;
2891         int sock_fd;
2892         if (pc->cb_info == NULL) {
2893                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2894                 return CAMERA_ERROR_INVALID_PARAMETER;
2895         }
2896         sock_fd = pc->cb_info->fd;
2897         muse_camera_api_e api = MUSE_CAMERA_API_SET_PREVIEW_CB;
2898
2899         LOGD("Enter, handle :%x", pc->remote_handle);
2900
2901         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_PREVIEW] = callback;
2902         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_PREVIEW] = user_data;
2903
2904         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2905         LOGD("ret : 0x%x", ret);
2906         return ret;
2907 }
2908
2909 int camera_unset_preview_cb(camera_h camera)
2910 {
2911         if (camera == NULL) {
2912                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2913                 return CAMERA_ERROR_INVALID_PARAMETER;
2914         }
2915
2916         int ret = CAMERA_ERROR_NONE;
2917
2918         camera_cli_s *pc = (camera_cli_s *)camera;
2919         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_PREVIEW_CB;
2920
2921         LOGD("Enter, handle :%x", pc->remote_handle);
2922
2923         int sock_fd;
2924         if (pc->cb_info == NULL) {
2925                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2926                 return CAMERA_ERROR_INVALID_PARAMETER;
2927         }
2928         sock_fd = pc->cb_info->fd;
2929         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_PREVIEW] = (void *)NULL;
2930         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_PREVIEW] = (void *)NULL;
2931
2932         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2933         LOGD("ret : 0x%x", ret);
2934         return ret;
2935 }
2936
2937 int camera_set_media_packet_preview_cb(camera_h camera, camera_media_packet_preview_cb callback, void* user_data)
2938 {
2939         if (camera == NULL) {
2940                 LOGE("INVALID_PARAMETER(0x%08x) - handle", CAMERA_ERROR_INVALID_PARAMETER);
2941                 return CAMERA_ERROR_INVALID_PARAMETER;
2942         }
2943
2944         if (camera_is_supported_media_packet_preview_cb(camera) == false) {
2945                 LOGE("NOT SUPPORTED");
2946                 return CAMERA_ERROR_NOT_SUPPORTED;
2947         }
2948
2949         if (callback == NULL) {
2950                 LOGE("INVALID_PARAMETER(0x%08x) - callback", CAMERA_ERROR_INVALID_PARAMETER);
2951                 return CAMERA_ERROR_INVALID_PARAMETER;
2952         }
2953
2954         int ret = CAMERA_ERROR_NONE;
2955
2956         camera_cli_s *pc = (camera_cli_s *)camera;
2957         muse_camera_api_e api = MUSE_CAMERA_API_SET_MEDIA_PACKET_PREVIEW_CB;
2958
2959         LOGD("Enter, handle :%x", pc->remote_handle);
2960
2961         int sock_fd;
2962         if (pc->cb_info == NULL) {
2963                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2964                 return CAMERA_ERROR_INVALID_PARAMETER;
2965         }
2966         sock_fd = pc->cb_info->fd;
2967         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = callback;
2968         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = user_data;
2969
2970         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2971         LOGD("ret : 0x%x", ret);
2972         return ret;
2973 }
2974
2975 int camera_unset_media_packet_preview_cb(camera_h camera)
2976 {
2977         if (camera == NULL) {
2978                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
2979                 return CAMERA_ERROR_INVALID_PARAMETER;
2980         }
2981
2982         int ret = CAMERA_ERROR_NONE;
2983
2984         camera_cli_s *pc = (camera_cli_s *)camera;
2985         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_MEDIA_PACKET_PREVIEW_CB;
2986
2987         LOGD("Enter, handle :%x", pc->remote_handle);
2988
2989         int sock_fd;
2990         if (pc->cb_info == NULL) {
2991                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2992                 return CAMERA_ERROR_INVALID_PARAMETER;
2993         }
2994         sock_fd = pc->cb_info->fd;
2995         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = (void *)NULL;
2996         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = (void *)NULL;
2997
2998         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2999         LOGD("ret : 0x%x", ret);
3000         return ret;
3001 }
3002
3003 int camera_set_state_changed_cb(camera_h camera, camera_state_changed_cb callback, void* user_data)
3004 {
3005         if( camera == NULL || callback == NULL){
3006                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3007                 return CAMERA_ERROR_INVALID_PARAMETER;
3008         }
3009         int ret = CAMERA_ERROR_NONE;
3010
3011         camera_cli_s *pc = (camera_cli_s *)camera;
3012         muse_camera_api_e api = MUSE_CAMERA_API_SET_STATE_CHANGED_CB;
3013
3014         LOGD("Enter, handle :%x", pc->remote_handle);
3015
3016         int sock_fd;
3017         if (pc->cb_info == NULL) {
3018                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3019                 return CAMERA_ERROR_INVALID_PARAMETER;
3020         }
3021         sock_fd = pc->cb_info->fd;
3022         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = callback;
3023         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = user_data;
3024
3025         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3026         LOGD("ret : 0x%x", ret);
3027         return ret;
3028 }
3029 int camera_unset_state_changed_cb(camera_h camera)
3030 {
3031         if( camera == NULL){
3032                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3033                 return CAMERA_ERROR_INVALID_PARAMETER;
3034         }
3035         int ret = CAMERA_ERROR_NONE;
3036
3037         camera_cli_s *pc = (camera_cli_s *)camera;
3038         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_STATE_CHANGED_CB;
3039
3040         LOGD("Enter, handle :%x", pc->remote_handle);
3041
3042         int sock_fd;
3043         if (pc->cb_info == NULL) {
3044                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3045                 return CAMERA_ERROR_INVALID_PARAMETER;
3046         }
3047         sock_fd = pc->cb_info->fd;
3048         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = (void *)NULL;
3049         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = (void *)NULL;
3050
3051         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3052         LOGD("ret : 0x%x", ret);
3053         return ret;
3054 }
3055
3056 int camera_set_interrupted_cb(camera_h camera, camera_interrupted_cb callback, void *user_data)
3057 {
3058         if( camera == NULL || callback == NULL){
3059                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3060                 return CAMERA_ERROR_INVALID_PARAMETER;
3061         }
3062         int ret = CAMERA_ERROR_NONE;
3063
3064         camera_cli_s *pc = (camera_cli_s *)camera;
3065         muse_camera_api_e api = MUSE_CAMERA_API_SET_INTERRUPTED_CB;
3066
3067         LOGD("Enter, handle :%x", pc->remote_handle);
3068
3069         int sock_fd;
3070         if (pc->cb_info == NULL) {
3071                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3072                 return CAMERA_ERROR_INVALID_PARAMETER;
3073         }
3074         sock_fd = pc->cb_info->fd;
3075         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = callback;
3076         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = user_data;
3077
3078         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3079         LOGD("ret : 0x%x", ret);
3080         return ret;
3081 }
3082
3083 int camera_unset_interrupted_cb(camera_h camera)
3084 {
3085         if( camera == NULL){
3086                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3087                 return CAMERA_ERROR_INVALID_PARAMETER;
3088         }
3089         int ret = CAMERA_ERROR_NONE;
3090
3091         camera_cli_s *pc = (camera_cli_s *)camera;
3092         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_INTERRUPTED_CB;
3093
3094         LOGD("Enter, handle :%x", pc->remote_handle);
3095
3096         int sock_fd;
3097         if (pc->cb_info == NULL) {
3098                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3099                 return CAMERA_ERROR_INVALID_PARAMETER;
3100         }
3101         sock_fd = pc->cb_info->fd;
3102         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = (void *)NULL;
3103         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = (void *)NULL;
3104
3105         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3106         LOGD("ret : 0x%x", ret);
3107         return ret;
3108 }
3109
3110 int camera_set_focus_changed_cb(camera_h camera, camera_focus_changed_cb callback, void* user_data)
3111 {
3112         if( camera == NULL || callback == NULL){
3113                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3114                 return CAMERA_ERROR_INVALID_PARAMETER;
3115         }
3116         int ret = CAMERA_ERROR_NONE;
3117
3118         camera_cli_s *pc = (camera_cli_s *)camera;
3119         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOCUS_CHANGED_CB;
3120
3121         LOGD("Enter, handle :%x", pc->remote_handle);
3122
3123         int sock_fd;
3124         if (pc->cb_info == NULL) {
3125                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3126                 return CAMERA_ERROR_INVALID_PARAMETER;
3127         }
3128         sock_fd = pc->cb_info->fd;
3129         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = callback;
3130         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = user_data;
3131
3132         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3133         LOGD("ret : 0x%x", ret);
3134         return ret;
3135 }
3136
3137 int camera_unset_focus_changed_cb(camera_h camera)
3138 {
3139         if( camera == NULL){
3140                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3141                 return CAMERA_ERROR_INVALID_PARAMETER;
3142         }
3143         int ret = CAMERA_ERROR_NONE;
3144
3145         camera_cli_s *pc = (camera_cli_s *)camera;
3146         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_FOCUS_CHANGED_CB;
3147
3148         LOGD("Enter, handle :%x", pc->remote_handle);
3149
3150         int sock_fd;
3151         if (pc->cb_info == NULL) {
3152                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3153                 return CAMERA_ERROR_INVALID_PARAMETER;
3154         }
3155         sock_fd = pc->cb_info->fd;
3156         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = (void *)NULL;
3157         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = (void *)NULL;
3158
3159         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3160         LOGD("ret : 0x%x", ret);
3161         return ret;
3162 }
3163
3164 int camera_set_error_cb(camera_h camera, camera_error_cb callback, void *user_data)
3165 {
3166         if( camera == NULL || callback == NULL){
3167                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3168                 return CAMERA_ERROR_INVALID_PARAMETER;
3169         }
3170         int ret = CAMERA_ERROR_NONE;
3171
3172         camera_cli_s *pc = (camera_cli_s *)camera;
3173         muse_camera_api_e api = MUSE_CAMERA_API_SET_ERROR_CB;
3174
3175         LOGD("Enter, handle :%x", pc->remote_handle);
3176
3177         int sock_fd;
3178         if (pc->cb_info == NULL) {
3179                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3180                 return CAMERA_ERROR_INVALID_PARAMETER;
3181         }
3182         sock_fd = pc->cb_info->fd;
3183         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_ERROR] = callback;
3184         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_ERROR] = user_data;
3185
3186         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3187         LOGD("ret : 0x%x", ret);
3188         return ret;
3189 }
3190
3191 int camera_unset_error_cb(camera_h camera)
3192 {
3193         if( camera == NULL){
3194                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3195                 return CAMERA_ERROR_INVALID_PARAMETER;
3196         }
3197         int ret = CAMERA_ERROR_NONE;
3198
3199         camera_cli_s *pc = (camera_cli_s *)camera;
3200         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_ERROR_CB;
3201
3202         LOGD("Enter, handle :%x", pc->remote_handle);
3203
3204         int sock_fd;
3205         if (pc->cb_info == NULL) {
3206                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3207                 return CAMERA_ERROR_INVALID_PARAMETER;
3208         }
3209         sock_fd = pc->cb_info->fd;
3210         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_ERROR] = (void *)NULL;
3211         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_ERROR] = (void *)NULL;
3212
3213         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3214         LOGD("ret : 0x%x", ret);
3215         return ret;
3216 }
3217
3218 int camera_foreach_supported_preview_resolution(camera_h camera, camera_supported_preview_resolution_cb foreach_cb , void *user_data)
3219 {
3220         if( camera == NULL || foreach_cb == NULL){
3221                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3222                 return CAMERA_ERROR_INVALID_PARAMETER;
3223         }
3224         int ret = CAMERA_ERROR_NONE;
3225
3226         camera_cli_s *pc = (camera_cli_s *)camera;
3227         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_PREVIEW_RESOLUTION;
3228
3229         LOGD("Enter, handle :%x", pc->remote_handle);
3230
3231         int sock_fd;
3232         if (pc->cb_info == NULL) {
3233                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3234                 return CAMERA_ERROR_INVALID_PARAMETER;
3235         }
3236         sock_fd = pc->cb_info->fd;
3237         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_RESOLUTION] = foreach_cb;
3238         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_RESOLUTION] = user_data;
3239
3240         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3241         LOGD("ret : 0x%x", ret);
3242         return ret;
3243 }
3244
3245 int camera_foreach_supported_capture_resolution(camera_h camera, camera_supported_capture_resolution_cb foreach_cb , void *user_data)
3246 {
3247         if( camera == NULL || foreach_cb == NULL){
3248                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3249                 return CAMERA_ERROR_INVALID_PARAMETER;
3250         }
3251         int ret = CAMERA_ERROR_NONE;
3252
3253         camera_cli_s *pc = (camera_cli_s *)camera;
3254         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_CAPTURE_RESOLUTION;
3255
3256         LOGD("Enter, handle :%x", pc->remote_handle);
3257
3258         int sock_fd;
3259         if (pc->cb_info == NULL) {
3260                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3261                 return CAMERA_ERROR_INVALID_PARAMETER;
3262         }
3263         sock_fd = pc->cb_info->fd;
3264         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_RESOLUTION] = foreach_cb;
3265         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_RESOLUTION] = user_data;
3266
3267         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3268         LOGD("ret : 0x%x", ret);
3269         return ret;
3270 }
3271
3272 int camera_foreach_supported_capture_format(camera_h camera, camera_supported_capture_format_cb foreach_cb , void *user_data)
3273 {
3274         if( camera == NULL || foreach_cb == NULL){
3275                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3276                 return CAMERA_ERROR_INVALID_PARAMETER;
3277         }
3278         int ret = CAMERA_ERROR_NONE;
3279
3280         camera_cli_s *pc = (camera_cli_s *)camera;
3281         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_CAPTURE_FORMAT;
3282
3283         LOGD("Enter, handle :%x", pc->remote_handle);
3284
3285         int sock_fd;
3286         if (pc->cb_info == NULL) {
3287                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3288                 return CAMERA_ERROR_INVALID_PARAMETER;
3289         }
3290         sock_fd = pc->cb_info->fd;
3291         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_FORMAT] = foreach_cb;
3292         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_FORMAT] = user_data;
3293
3294         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3295         LOGD("ret : 0x%x", ret);
3296         return ret;
3297 }
3298
3299
3300 int camera_foreach_supported_preview_format(camera_h camera, camera_supported_preview_format_cb foreach_cb , void *user_data)
3301 {
3302         if( camera == NULL || foreach_cb == NULL){
3303                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3304                 return CAMERA_ERROR_INVALID_PARAMETER;
3305         }
3306         int ret = CAMERA_ERROR_NONE;
3307
3308         camera_cli_s *pc = (camera_cli_s *)camera;
3309         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_PREVIEW_FORMAT;
3310
3311         LOGD("Enter, handle :%x", pc->remote_handle);
3312
3313         int sock_fd;
3314         if (pc->cb_info == NULL) {
3315                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3316                 return CAMERA_ERROR_INVALID_PARAMETER;
3317         }
3318         sock_fd = pc->cb_info->fd;
3319         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_FORMAT] = foreach_cb;
3320         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_FORMAT] = user_data;
3321
3322         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3323         LOGD("ret : 0x%x", ret);
3324         return ret;
3325 }
3326
3327
3328 int camera_get_recommended_preview_resolution(camera_h camera, int *width, int *height)
3329 {
3330         if (camera == NULL || width == NULL || height == NULL) {
3331                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3332                 return CAMERA_ERROR_INVALID_PARAMETER;
3333         }
3334         int ret = CAMERA_ERROR_NONE;
3335
3336         camera_cli_s *pc = (camera_cli_s *)camera;
3337         muse_camera_api_e api = MUSE_CAMERA_API_GET_RECOMMENDED_PREVIEW_RESOLUTION;
3338         int sock_fd;
3339         if (pc->cb_info == NULL) {
3340                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3341                 return CAMERA_ERROR_INVALID_PARAMETER;
3342         }
3343         sock_fd = pc->cb_info->fd;
3344         int get_width;
3345         int get_height;
3346
3347         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3348         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3349
3350         if (ret == CAMERA_ERROR_NONE) {
3351                 muse_camera_msg_get(get_width, pc->cb_info->recv_msg);
3352                 muse_camera_msg_get(get_height, pc->cb_info->recv_msg);
3353                 *width = get_width;
3354                 *height = get_height;
3355         }
3356         LOGD("ret : 0x%x", ret);
3357         return ret;
3358 }
3359
3360
3361 int camera_attr_get_lens_orientation(camera_h camera, int *angle)
3362 {
3363         if( camera == NULL || angle == NULL){
3364                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3365                 return CAMERA_ERROR_INVALID_PARAMETER;
3366         }
3367         int ret = CAMERA_ERROR_NONE;
3368
3369         camera_cli_s *pc = (camera_cli_s *)camera;
3370         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_LENS_ORIENTATION;
3371         int sock_fd;
3372         if (pc->cb_info == NULL) {
3373                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3374                 return CAMERA_ERROR_INVALID_PARAMETER;
3375         }
3376         sock_fd = pc->cb_info->fd;
3377         int get_angle;
3378
3379         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3380         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3381
3382         if (ret == CAMERA_ERROR_NONE) {
3383                 muse_camera_msg_get(get_angle, pc->cb_info->recv_msg);
3384                 *angle = get_angle;
3385         }
3386         LOGD("ret : 0x%x", ret);
3387         return ret;
3388 }
3389
3390 int camera_attr_set_theater_mode(camera_h camera, camera_attr_theater_mode_e mode)
3391 {
3392         if (camera == NULL) {
3393                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3394                 return CAMERA_ERROR_INVALID_PARAMETER;
3395         }
3396         int ret = CAMERA_ERROR_NONE;
3397         camera_cli_s *pc = (camera_cli_s *)camera;
3398         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_THEATER_MODE;
3399         int sock_fd;
3400         if (pc->cb_info == NULL) {
3401                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3402                 return CAMERA_ERROR_INVALID_PARAMETER;
3403         }
3404         sock_fd = pc->cb_info->fd;
3405         int set_mode = (int)mode;
3406         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3407         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3408         LOGD("ret : 0x%x", ret);
3409         return ret;
3410 }
3411
3412 int camera_attr_get_theater_mode(camera_h camera, camera_attr_theater_mode_e *mode)
3413 {
3414         if (camera == NULL || mode == NULL) {
3415                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3416                 return CAMERA_ERROR_INVALID_PARAMETER;
3417         }
3418
3419         int ret = CAMERA_ERROR_NONE;
3420         camera_cli_s *pc = (camera_cli_s *)camera;
3421         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_THEATER_MODE;
3422         int sock_fd;
3423         if (pc->cb_info == NULL) {
3424                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3425                 return CAMERA_ERROR_INVALID_PARAMETER;
3426         }
3427         sock_fd = pc->cb_info->fd;
3428         int get_mode;
3429         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3430         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3431
3432         if (ret == CAMERA_ERROR_NONE) {
3433                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
3434                 *mode = (camera_attr_theater_mode_e)get_mode;
3435         }
3436         LOGD("ret : 0x%x", ret);
3437         return ret;
3438 }
3439
3440 int camera_attr_foreach_supported_theater_mode(camera_h camera, camera_attr_supported_theater_mode_cb foreach_cb, void *user_data)
3441 {
3442         if (camera == NULL || foreach_cb == NULL) {
3443                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3444                 return CAMERA_ERROR_INVALID_PARAMETER;
3445         }
3446         int ret = CAMERA_ERROR_NONE;
3447
3448         camera_cli_s *pc = (camera_cli_s *)camera;
3449         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_THEATER_MODE;
3450
3451         LOGD("Enter, handle :%x", pc->remote_handle);
3452
3453         int sock_fd;
3454         if (pc->cb_info == NULL) {
3455                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3456                 return CAMERA_ERROR_INVALID_PARAMETER;
3457         }
3458         sock_fd = pc->cb_info->fd;
3459         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_THEATER_MODE] = foreach_cb;
3460         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_THEATER_MODE] = user_data;
3461
3462         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3463
3464         LOGD("Finish, return :%x", ret);
3465
3466         return ret;
3467 }
3468
3469 int camera_attr_set_preview_fps(camera_h camera,  camera_attr_fps_e fps)
3470 {
3471         if( camera == NULL){
3472                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3473                 return CAMERA_ERROR_INVALID_PARAMETER;
3474         }
3475         int ret = CAMERA_ERROR_NONE;
3476         camera_cli_s *pc = (camera_cli_s *)camera;
3477         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_PREVIEW_FPS;
3478         int sock_fd;
3479         if (pc->cb_info == NULL) {
3480                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3481                 return CAMERA_ERROR_INVALID_PARAMETER;
3482         }
3483         sock_fd = pc->cb_info->fd;
3484         int set_fps = (int)fps;
3485         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3486         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_fps);
3487         LOGD("ret : 0x%x", ret);
3488         return ret;
3489 }
3490
3491
3492 int camera_attr_set_image_quality(camera_h camera,  int quality)
3493 {
3494         if( camera == NULL){
3495                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3496                 return CAMERA_ERROR_INVALID_PARAMETER;
3497         }
3498         int ret = CAMERA_ERROR_NONE;
3499
3500         camera_cli_s *pc = (camera_cli_s *)camera;
3501         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_IMAGE_QUALITY;
3502         int sock_fd;
3503         if (pc->cb_info == NULL) {
3504                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3505                 return CAMERA_ERROR_INVALID_PARAMETER;
3506         }
3507         sock_fd = pc->cb_info->fd;
3508         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3509         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, quality);
3510         LOGD("ret : 0x%x", ret);
3511         return ret;
3512 }
3513
3514 int camera_attr_get_preview_fps(camera_h camera,  camera_attr_fps_e *fps)
3515 {
3516         if( camera == NULL || fps == NULL){
3517                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3518                 return CAMERA_ERROR_INVALID_PARAMETER;
3519         }
3520         int ret = CAMERA_ERROR_NONE;
3521
3522         camera_cli_s *pc = (camera_cli_s *)camera;
3523         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_PREVIEW_FPS;
3524         int get_fps;
3525         int sock_fd;
3526         if (pc->cb_info == NULL) {
3527                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3528                 return CAMERA_ERROR_INVALID_PARAMETER;
3529         }
3530         sock_fd = pc->cb_info->fd;
3531
3532         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3533         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3534
3535         if (ret == CAMERA_ERROR_NONE) {
3536                 muse_camera_msg_get(get_fps, pc->cb_info->recv_msg);
3537                 *fps = (camera_attr_fps_e)get_fps;
3538         }
3539         LOGD("ret : 0x%x", ret);
3540         return ret;
3541 }
3542
3543
3544 int camera_attr_get_image_quality(camera_h camera, int *quality)
3545 {
3546         if( camera == NULL || quality == NULL){
3547                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3548                 return CAMERA_ERROR_INVALID_PARAMETER;
3549         }
3550         int ret = CAMERA_ERROR_NONE;
3551
3552         camera_cli_s *pc = (camera_cli_s *)camera;
3553         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_IMAGE_QUALITY;
3554         int sock_fd;
3555         if (pc->cb_info == NULL) {
3556                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3557                 return CAMERA_ERROR_INVALID_PARAMETER;
3558         }
3559         sock_fd = pc->cb_info->fd;
3560         int get_quality;
3561         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3562         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3563
3564         if (ret == CAMERA_ERROR_NONE) {
3565                 muse_camera_msg_get(get_quality, pc->cb_info->recv_msg);
3566                 *quality = get_quality;
3567         }
3568         LOGD("ret : 0x%x", ret);
3569         return ret;
3570 }
3571
3572
3573 int camera_attr_set_zoom(camera_h camera, int zoom)
3574 {
3575         if( camera == NULL){
3576                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3577                 return CAMERA_ERROR_INVALID_PARAMETER;
3578         }
3579         int ret = CAMERA_ERROR_NONE;
3580
3581         camera_cli_s *pc = (camera_cli_s *)camera;
3582         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_ZOOM;
3583         int sock_fd;
3584         if (pc->cb_info == NULL) {
3585                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3586                 return CAMERA_ERROR_INVALID_PARAMETER;
3587         }
3588         sock_fd = pc->cb_info->fd;
3589
3590         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3591         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, zoom);
3592         LOGD("ret : 0x%x", ret);
3593         return ret;
3594 }
3595
3596 int camera_attr_set_af_mode(camera_h camera,  camera_attr_af_mode_e mode)
3597 {
3598         if( camera == NULL){
3599                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3600                 return CAMERA_ERROR_INVALID_PARAMETER;
3601         }
3602         int ret = CAMERA_ERROR_NONE;
3603
3604         camera_cli_s *pc = (camera_cli_s *)camera;
3605         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_AF_MODE;
3606         int sock_fd;
3607         if (pc->cb_info == NULL) {
3608                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3609                 return CAMERA_ERROR_INVALID_PARAMETER;
3610         }
3611         sock_fd = pc->cb_info->fd;
3612         int set_mode = (int)mode;
3613         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3614         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3615         LOGD("ret : 0x%x", ret);
3616         return ret;
3617 }
3618
3619 int camera_attr_set_af_area(camera_h camera, int x, int y)
3620 {
3621         if( camera == NULL){
3622                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3623                 return CAMERA_ERROR_INVALID_PARAMETER;
3624         }
3625         int ret = CAMERA_ERROR_NONE;
3626         camera_cli_s *pc = (camera_cli_s *)camera;
3627         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_AF_AREA;
3628         int sock_fd = pc->cb_info->fd;
3629         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3630         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, x, INT, y);
3631         LOGD("ret : 0x%x", ret);
3632         return ret;
3633 }
3634
3635
3636 int camera_attr_clear_af_area(camera_h camera)
3637 {
3638         if( camera == NULL){
3639                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3640                 return CAMERA_ERROR_INVALID_PARAMETER;
3641         }
3642         int ret = CAMERA_ERROR_NONE;
3643
3644         camera_cli_s *pc = (camera_cli_s *)camera;
3645         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_CLEAR_AF_AREA;
3646         int sock_fd;
3647         if (pc->cb_info == NULL) {
3648                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3649                 return CAMERA_ERROR_INVALID_PARAMETER;
3650         }
3651         sock_fd = pc->cb_info->fd;
3652         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3653         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3654         LOGD("ret : 0x%x", ret);
3655         return ret;
3656 }
3657
3658
3659 int camera_attr_set_exposure_mode(camera_h camera,  camera_attr_exposure_mode_e mode)
3660 {
3661         if( camera == NULL){
3662                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3663                 return CAMERA_ERROR_INVALID_PARAMETER;
3664         }
3665
3666         if (mode < CAMERA_ATTR_EXPOSURE_MODE_OFF || mode > CAMERA_ATTR_EXPOSURE_MODE_CUSTOM) {
3667                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3668                 return CAMERA_ERROR_INVALID_PARAMETER;
3669         }
3670
3671         int ret = CAMERA_ERROR_NONE;
3672         camera_cli_s *pc = (camera_cli_s *)camera;
3673         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EXPOSURE_MODE;
3674         int set_mode = (int)mode;
3675         int sock_fd;
3676         if (pc->cb_info == NULL) {
3677                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3678                 return CAMERA_ERROR_INVALID_PARAMETER;
3679         }
3680         sock_fd = pc->cb_info->fd;
3681         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3682         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3683         LOGD("ret : 0x%x", ret);
3684         return ret;
3685 }
3686
3687
3688 int camera_attr_set_exposure(camera_h camera, int value)
3689 {
3690         if( camera == NULL){
3691                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3692                 return CAMERA_ERROR_INVALID_PARAMETER;
3693         }
3694         int ret = CAMERA_ERROR_NONE;
3695
3696         camera_cli_s *pc = (camera_cli_s *)camera;
3697         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EXPOSURE;
3698         int sock_fd;
3699         if (pc->cb_info == NULL) {
3700                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3701                 return CAMERA_ERROR_INVALID_PARAMETER;
3702         }
3703         sock_fd = pc->cb_info->fd;
3704
3705         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3706         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, value);
3707         LOGD("ret : 0x%x", ret);
3708         return ret;
3709 }
3710
3711
3712 int camera_attr_set_iso(camera_h camera, camera_attr_iso_e iso)
3713 {
3714         if( camera == NULL){
3715                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3716                 return CAMERA_ERROR_INVALID_PARAMETER;
3717         }
3718         int ret = CAMERA_ERROR_NONE;
3719
3720         camera_cli_s *pc = (camera_cli_s *)camera;
3721         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_ISO;
3722         int sock_fd;
3723         if (pc->cb_info == NULL) {
3724                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3725                 return CAMERA_ERROR_INVALID_PARAMETER;
3726         }
3727         sock_fd = pc->cb_info->fd;
3728         int set_iso = (int)iso;
3729         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3730         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_iso);
3731         LOGD("ret : 0x%x", ret);
3732         return ret;
3733 }
3734
3735
3736 int camera_attr_set_brightness(camera_h camera, int level)
3737 {
3738         if( camera == NULL){
3739                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3740                 return CAMERA_ERROR_INVALID_PARAMETER;
3741         }
3742         int ret = CAMERA_ERROR_NONE;
3743
3744         camera_cli_s *pc = (camera_cli_s *)camera;
3745         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_BRIGHTNESS;
3746         int sock_fd;
3747         if (pc->cb_info == NULL) {
3748                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3749                 return CAMERA_ERROR_INVALID_PARAMETER;
3750         }
3751         sock_fd = pc->cb_info->fd;
3752
3753         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3754         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, level);
3755         LOGD("ret : 0x%x", ret);
3756         return ret;
3757 }
3758
3759
3760 int camera_attr_set_contrast(camera_h camera, int level)
3761 {
3762         if( camera == NULL){
3763                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3764                 return CAMERA_ERROR_INVALID_PARAMETER;
3765         }
3766         int ret = CAMERA_ERROR_NONE;
3767
3768         camera_cli_s *pc = (camera_cli_s *)camera;
3769         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_CONTRAST;
3770         int sock_fd;
3771         if (pc->cb_info == NULL) {
3772                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3773                 return CAMERA_ERROR_INVALID_PARAMETER;
3774         }
3775         sock_fd = pc->cb_info->fd;
3776
3777         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3778         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, level);
3779         LOGD("ret : 0x%x", ret);
3780         return ret;
3781 }
3782
3783
3784 int camera_attr_set_whitebalance(camera_h camera, camera_attr_whitebalance_e wb)
3785 {
3786         if (camera == NULL) {
3787                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3788                 return CAMERA_ERROR_INVALID_PARAMETER;
3789         }
3790
3791         if (wb < CAMERA_ATTR_WHITE_BALANCE_NONE || wb > CAMERA_ATTR_WHITE_BALANCE_CUSTOM) {
3792                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_NOT_SUPPORTED);
3793                 return CAMERA_ERROR_NOT_SUPPORTED;
3794         }
3795
3796         int ret = CAMERA_ERROR_NONE;
3797
3798         camera_cli_s *pc = (camera_cli_s *)camera;
3799         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_WHITEBALANCE;
3800         int sock_fd;
3801         if (pc->cb_info == NULL) {
3802                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3803                 return CAMERA_ERROR_INVALID_PARAMETER;
3804         }
3805         sock_fd = pc->cb_info->fd;
3806         int set_whitebalance = (int)wb;
3807         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3808         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_whitebalance);
3809         LOGD("ret : 0x%x", ret);
3810         return ret;
3811 }
3812
3813
3814 int camera_attr_set_effect(camera_h camera, camera_attr_effect_mode_e effect)
3815 {
3816         if( camera == NULL){
3817                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3818                 return CAMERA_ERROR_INVALID_PARAMETER;
3819         }
3820         int ret = CAMERA_ERROR_NONE;
3821
3822         camera_cli_s *pc = (camera_cli_s *)camera;
3823         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EFFECT;
3824         int sock_fd;
3825         if (pc->cb_info == NULL) {
3826                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3827                 return CAMERA_ERROR_INVALID_PARAMETER;
3828         }
3829         sock_fd = pc->cb_info->fd;
3830         int set_effect = (int)effect;
3831         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3832         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_effect);
3833         LOGD("ret : 0x%x", ret);
3834         return ret;
3835 }
3836
3837
3838 int camera_attr_set_scene_mode(camera_h camera, camera_attr_scene_mode_e mode)
3839 {
3840         if( camera == NULL){
3841                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3842                 return CAMERA_ERROR_INVALID_PARAMETER;
3843         }
3844         int ret = CAMERA_ERROR_NONE;
3845
3846         camera_cli_s *pc = (camera_cli_s *)camera;
3847         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_SCENE_MODE;
3848         int sock_fd;
3849         if (pc->cb_info == NULL) {
3850                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3851                 return CAMERA_ERROR_INVALID_PARAMETER;
3852         }
3853         sock_fd = pc->cb_info->fd;
3854         int set_mode = (int)mode;
3855         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3856         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3857         LOGD("ret : 0x%x", ret);
3858         return ret;
3859 }
3860
3861
3862 int camera_attr_enable_tag(camera_h camera, bool enable)
3863 {
3864         if( camera == NULL){
3865                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3866                 return CAMERA_ERROR_INVALID_PARAMETER;
3867         }
3868         int ret = CAMERA_ERROR_NONE;
3869         camera_cli_s *pc = (camera_cli_s *)camera;
3870         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_TAG;
3871         int sock_fd;
3872         if (pc->cb_info == NULL) {
3873                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3874                 return CAMERA_ERROR_INVALID_PARAMETER;
3875         }
3876         sock_fd = pc->cb_info->fd;
3877         int set_enable = (int)enable;
3878
3879         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3880         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
3881         LOGD("ret : 0x%x", ret);
3882         return ret;
3883 }
3884
3885
3886 int camera_attr_set_tag_image_description(camera_h camera, const char *description)
3887 {
3888         if( camera == NULL){
3889                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3890                 return CAMERA_ERROR_INVALID_PARAMETER;
3891         }
3892         if( description == NULL){
3893                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3894                 return CAMERA_ERROR_INVALID_PARAMETER;
3895         }
3896         int ret = CAMERA_ERROR_NONE;
3897         camera_cli_s *pc = (camera_cli_s *)camera;
3898         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_TAG_IMAGE_DESCRIPTION;
3899         int sock_fd;
3900         if (pc->cb_info == NULL) {
3901                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3902                 return CAMERA_ERROR_INVALID_PARAMETER;
3903         }
3904         sock_fd = pc->cb_info->fd;
3905         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3906         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, STRING, description);
3907         LOGD("ret : 0x%x", ret);
3908         return ret;
3909 }
3910
3911
3912 int camera_attr_set_tag_orientation(camera_h camera,  camera_attr_tag_orientation_e orientation)
3913 {
3914         if( camera == NULL){
3915                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3916                 return CAMERA_ERROR_INVALID_PARAMETER;
3917         }
3918         int ret = CAMERA_ERROR_NONE;
3919         camera_cli_s *pc = (camera_cli_s *)camera;
3920         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_TAG_ORIENTATION;
3921         int sock_fd;
3922         if (pc->cb_info == NULL) {
3923                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3924                 return CAMERA_ERROR_INVALID_PARAMETER;
3925         }
3926         sock_fd = pc->cb_info->fd;
3927         int set_orientation = (int)orientation;
3928
3929         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3930         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_orientation);
3931         LOGD("ret : 0x%x", ret);
3932         return ret;
3933 }
3934
3935
3936 int camera_attr_set_tag_software(camera_h camera,  const char *software)
3937 {
3938         if( camera == NULL){
3939                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3940                 return CAMERA_ERROR_INVALID_PARAMETER;
3941         }
3942         if( software == NULL){
3943                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3944                 return CAMERA_ERROR_INVALID_PARAMETER;
3945         }
3946         int ret = CAMERA_ERROR_NONE;
3947         camera_cli_s *pc = (camera_cli_s *)camera;
3948         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_TAG_SOFTWARE;
3949         int sock_fd;
3950         if (pc->cb_info == NULL) {
3951                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3952                 return CAMERA_ERROR_INVALID_PARAMETER;
3953         }
3954         sock_fd = pc->cb_info->fd;
3955         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3956         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, STRING, software);
3957         LOGD("ret : 0x%x", ret);
3958         return ret;
3959 }
3960
3961
3962 int camera_attr_set_geotag(camera_h camera, double latitude , double longitude, double altitude)
3963 {
3964         if( camera == NULL){
3965                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3966                 return CAMERA_ERROR_INVALID_PARAMETER;
3967         }
3968         int ret = CAMERA_ERROR_NONE;
3969         camera_cli_s *pc = (camera_cli_s *)camera;
3970         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_GEOTAG;
3971         int sock_fd;
3972         if (pc->cb_info == NULL) {
3973                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3974                 return CAMERA_ERROR_INVALID_PARAMETER;
3975         }
3976         sock_fd = pc->cb_info->fd;
3977         double set_geotag[3] = { latitude, longitude, altitude };
3978
3979         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3980         muse_camera_msg_send_array(api, sock_fd, pc->cb_info, ret,
3981                                                                         set_geotag, sizeof(set_geotag), sizeof(double));
3982         LOGD("ret : 0x%x", ret);
3983         return ret;
3984 }
3985
3986
3987 int camera_attr_remove_geotag(camera_h camera)
3988 {
3989         if( camera == NULL){
3990                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3991                 return CAMERA_ERROR_INVALID_PARAMETER;
3992         }
3993         int ret = CAMERA_ERROR_NONE;
3994         camera_cli_s *pc = (camera_cli_s *)camera;
3995         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_REMOVE_GEOTAG;
3996         int sock_fd;
3997         if (pc->cb_info == NULL) {
3998                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3999                 return CAMERA_ERROR_INVALID_PARAMETER;
4000         }
4001         sock_fd = pc->cb_info->fd;
4002         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4003         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4004         LOGD("ret : 0x%x", ret);
4005         return ret;
4006 }
4007
4008
4009 int camera_attr_set_flash_mode(camera_h camera, camera_attr_flash_mode_e mode)
4010 {
4011         if( camera == NULL){
4012                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4013                 return CAMERA_ERROR_INVALID_PARAMETER;
4014         }
4015         int ret = CAMERA_ERROR_NONE;
4016         camera_cli_s *pc = (camera_cli_s *)camera;
4017         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_FLASH_MODE;
4018         int sock_fd;
4019         if (pc->cb_info == NULL) {
4020                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4021                 return CAMERA_ERROR_INVALID_PARAMETER;
4022         }
4023         sock_fd = pc->cb_info->fd;
4024         int set_mode = (int)mode;
4025
4026         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4027         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
4028         LOGD("ret : 0x%x", ret);
4029         return ret;
4030 }
4031
4032
4033 int camera_attr_get_zoom(camera_h camera, int *zoom)
4034 {
4035         if( camera == NULL || zoom == NULL){
4036                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4037                 return CAMERA_ERROR_INVALID_PARAMETER;
4038         }
4039         int ret = CAMERA_ERROR_NONE;
4040
4041         camera_cli_s *pc = (camera_cli_s *)camera;
4042         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_ZOOM;
4043         int get_zoom;
4044         int sock_fd;
4045         if (pc->cb_info == NULL) {
4046                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4047                 return CAMERA_ERROR_INVALID_PARAMETER;
4048         }
4049         sock_fd = pc->cb_info->fd;
4050
4051         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4052         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4053
4054         if (ret == CAMERA_ERROR_NONE) {
4055                 muse_camera_msg_get(get_zoom, pc->cb_info->recv_msg);
4056                 *zoom = get_zoom;
4057         }
4058         LOGD("ret : 0x%x", ret);
4059         return ret;
4060 }
4061
4062
4063 int camera_attr_get_zoom_range(camera_h camera, int *min, int *max)
4064 {
4065         if( camera == NULL || min == NULL || max == NULL ){
4066                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4067                 return CAMERA_ERROR_INVALID_PARAMETER;
4068         }
4069         int ret = CAMERA_ERROR_NONE;
4070         camera_cli_s *pc = (camera_cli_s *)camera;
4071         int sock_fd;
4072         if (pc->cb_info == NULL) {
4073                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4074                 return CAMERA_ERROR_INVALID_PARAMETER;
4075         }
4076         sock_fd = pc->cb_info->fd;
4077         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_ZOOM_RANGE;
4078         int get_min;
4079         int get_max;
4080
4081         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4082         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4083
4084         if (ret == CAMERA_ERROR_NONE) {
4085                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4086                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4087                 *min = get_min;
4088                 *max = get_max;
4089         }
4090         LOGD("ret : 0x%x", ret);
4091         return ret;
4092 }
4093
4094
4095 int camera_attr_get_af_mode( camera_h camera,  camera_attr_af_mode_e *mode)
4096 {
4097         if( camera == NULL || mode == NULL){
4098                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4099                 return CAMERA_ERROR_INVALID_PARAMETER;
4100         }
4101         int ret = CAMERA_ERROR_NONE;
4102         camera_cli_s *pc = (camera_cli_s *)camera;
4103         int sock_fd;
4104         if (pc->cb_info == NULL) {
4105                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4106                 return CAMERA_ERROR_INVALID_PARAMETER;
4107         }
4108         sock_fd = pc->cb_info->fd;
4109         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_AF_MODE;
4110         int get_mode;
4111
4112         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4113         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4114
4115         if (ret == CAMERA_ERROR_NONE) {
4116                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4117                 *mode = (camera_attr_af_mode_e)get_mode;
4118         }
4119         LOGD("ret : 0x%x", ret);
4120         return ret;
4121 }
4122
4123
4124 int camera_attr_get_exposure_mode( camera_h camera, camera_attr_exposure_mode_e *mode)
4125 {
4126         if( camera == NULL|| mode == NULL){
4127                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4128                 return CAMERA_ERROR_INVALID_PARAMETER;
4129         }
4130         int ret = CAMERA_ERROR_NONE;
4131         camera_cli_s *pc = (camera_cli_s *)camera;
4132         int sock_fd;
4133         if (pc->cb_info == NULL) {
4134                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4135                 return CAMERA_ERROR_INVALID_PARAMETER;
4136         }
4137         sock_fd = pc->cb_info->fd;
4138         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EXPOSURE_MODE;
4139         int get_mode;
4140
4141         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4142         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4143
4144         if (ret == CAMERA_ERROR_NONE) {
4145                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4146                 *mode = (camera_attr_exposure_mode_e)get_mode;
4147         }
4148         LOGD("ret : 0x%x", ret);
4149         return ret;
4150 }
4151
4152 int camera_attr_get_exposure(camera_h camera, int *value)
4153 {
4154         if( camera == NULL || value == NULL){
4155                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4156                 return CAMERA_ERROR_INVALID_PARAMETER;
4157         }
4158         int ret = CAMERA_ERROR_NONE;
4159         camera_cli_s *pc = (camera_cli_s *)camera;
4160         int sock_fd;
4161         if (pc->cb_info == NULL) {
4162                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4163                 return CAMERA_ERROR_INVALID_PARAMETER;
4164         }
4165         sock_fd = pc->cb_info->fd;
4166         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EXPOSURE;
4167         int get_value;
4168
4169         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4170         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4171
4172         if (ret == CAMERA_ERROR_NONE) {
4173                 muse_camera_msg_get(get_value, pc->cb_info->recv_msg);
4174                 *value = get_value;
4175         }
4176         LOGD("ret : 0x%x", ret);
4177         return ret;
4178 }
4179
4180
4181 int camera_attr_get_exposure_range(camera_h camera, int *min, int *max)
4182 {
4183         if( camera == NULL || min == NULL || max == NULL ){
4184                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4185                 return CAMERA_ERROR_INVALID_PARAMETER;
4186         }
4187         int ret = CAMERA_ERROR_NONE;
4188         camera_cli_s *pc = (camera_cli_s *)camera;
4189         int sock_fd;
4190         if (pc->cb_info == NULL) {
4191                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4192                 return CAMERA_ERROR_INVALID_PARAMETER;
4193         }
4194         sock_fd = pc->cb_info->fd;
4195         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EXPOSURE_RANGE;
4196         int get_min;
4197         int get_max;
4198
4199         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4200         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4201
4202         if (ret == CAMERA_ERROR_NONE) {
4203                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4204                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4205                 *min = get_min;
4206                 *max = get_max;
4207         }
4208         LOGD("ret : 0x%x", ret);
4209         return ret;
4210 }
4211
4212
4213 int camera_attr_get_iso( camera_h camera,  camera_attr_iso_e *iso)
4214 {
4215         if( camera == NULL || iso == NULL){
4216                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4217                 return CAMERA_ERROR_INVALID_PARAMETER;
4218         }
4219         int ret = CAMERA_ERROR_NONE;
4220         camera_cli_s *pc = (camera_cli_s *)camera;
4221         int sock_fd;
4222         if (pc->cb_info == NULL) {
4223                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4224                 return CAMERA_ERROR_INVALID_PARAMETER;
4225         }
4226         sock_fd = pc->cb_info->fd;
4227         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_ISO;
4228         int get_iso;
4229
4230         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4231         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4232
4233         if (ret == CAMERA_ERROR_NONE) {
4234                 muse_camera_msg_get(get_iso, pc->cb_info->recv_msg);
4235                 *iso = (camera_attr_iso_e)get_iso;
4236         }
4237         LOGD("ret : 0x%x", ret);
4238         return ret;
4239 }
4240
4241
4242 int camera_attr_get_brightness(camera_h camera,  int *level)
4243 {
4244         if( camera == NULL || level == NULL){
4245                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4246                 return CAMERA_ERROR_INVALID_PARAMETER;
4247         }
4248         int ret = CAMERA_ERROR_NONE;
4249         camera_cli_s *pc = (camera_cli_s *)camera;
4250         int sock_fd;
4251         if (pc->cb_info == NULL) {
4252                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4253                 return CAMERA_ERROR_INVALID_PARAMETER;
4254         }
4255         sock_fd = pc->cb_info->fd;
4256         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_BRIGHTNESS;
4257         int get_level;
4258
4259         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4260         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4261
4262         if (ret == CAMERA_ERROR_NONE) {
4263                 muse_camera_msg_get(get_level, pc->cb_info->recv_msg);
4264                 *level = get_level;
4265         }
4266         LOGD("ret : 0x%x", ret);
4267         return ret;
4268 }
4269
4270
4271 int camera_attr_get_brightness_range(camera_h camera, int *min, int *max)
4272 {
4273         if( camera == NULL || min == NULL || max == NULL ){
4274                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4275                 return CAMERA_ERROR_INVALID_PARAMETER;
4276         }
4277         int ret = CAMERA_ERROR_NONE;
4278         camera_cli_s *pc = (camera_cli_s *)camera;
4279         int sock_fd;
4280         if (pc->cb_info == NULL) {
4281                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4282                 return CAMERA_ERROR_INVALID_PARAMETER;
4283         }
4284         sock_fd = pc->cb_info->fd;
4285         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_BRIGHTNESS_RANGE;
4286         int get_min;
4287         int get_max;
4288
4289         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4290         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4291
4292         if (ret == CAMERA_ERROR_NONE) {
4293                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4294                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4295                 *min = get_min;
4296                 *max = get_max;
4297         }
4298         LOGD("ret : 0x%x", ret);
4299         return ret;
4300 }
4301
4302
4303 int camera_attr_get_contrast(camera_h camera,  int *level)
4304 {
4305         if( camera == NULL || level == NULL){
4306                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4307                 return CAMERA_ERROR_INVALID_PARAMETER;
4308         }
4309         int ret = CAMERA_ERROR_NONE;
4310         camera_cli_s *pc = (camera_cli_s *)camera;
4311         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_CONTRAST;
4312         int sock_fd;
4313         if (pc->cb_info == NULL) {
4314                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4315                 return CAMERA_ERROR_INVALID_PARAMETER;
4316         }
4317         sock_fd = pc->cb_info->fd;
4318         int get_level;
4319
4320         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4321         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4322
4323         if (ret == CAMERA_ERROR_NONE) {
4324                 muse_camera_msg_get(get_level, pc->cb_info->recv_msg);
4325                 *level = get_level;
4326         }
4327         LOGD("ret : 0x%x", ret);
4328         return ret;
4329 }
4330
4331
4332 int camera_attr_get_contrast_range(camera_h camera, int *min , int *max)
4333 {
4334         if( camera == NULL || min == NULL || max == NULL ){
4335                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4336                 return CAMERA_ERROR_INVALID_PARAMETER;
4337         }
4338         int ret = CAMERA_ERROR_NONE;
4339         camera_cli_s *pc = (camera_cli_s *)camera;
4340         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_CONTRAST_RANGE;
4341         int sock_fd;
4342         if (pc->cb_info == NULL) {
4343                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4344                 return CAMERA_ERROR_INVALID_PARAMETER;
4345         }
4346         sock_fd = pc->cb_info->fd;
4347         int get_min;
4348         int get_max;
4349
4350         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4351         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4352
4353         if (ret == CAMERA_ERROR_NONE) {
4354                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4355                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4356                 *min = get_min;
4357                 *max = get_max;
4358         }
4359         LOGD("ret : 0x%x", ret);
4360         return ret;
4361 }
4362
4363
4364 int camera_attr_get_whitebalance(camera_h camera,  camera_attr_whitebalance_e *wb)
4365 {
4366         if( camera == NULL || wb == NULL){
4367                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4368                 return CAMERA_ERROR_INVALID_PARAMETER;
4369         }
4370         int ret = CAMERA_ERROR_NONE;
4371         camera_cli_s *pc = (camera_cli_s *)camera;
4372         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_WHITEBALANCE;
4373         int sock_fd;
4374         if (pc->cb_info == NULL) {
4375                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4376                 return CAMERA_ERROR_INVALID_PARAMETER;
4377         }
4378         sock_fd = pc->cb_info->fd;
4379         int get_wb;
4380
4381         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4382         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4383
4384         if (ret == CAMERA_ERROR_NONE) {
4385                 muse_camera_msg_get(get_wb, pc->cb_info->recv_msg);
4386                 *wb = (camera_attr_whitebalance_e)get_wb;
4387         }
4388         LOGD("ret : 0x%x", ret);
4389         return ret;
4390 }
4391
4392
4393 int camera_attr_get_effect(camera_h camera, camera_attr_effect_mode_e *effect)
4394 {
4395         if( camera == NULL || effect == NULL ){
4396                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4397                 return CAMERA_ERROR_INVALID_PARAMETER;
4398         }
4399
4400         int ret = CAMERA_ERROR_NONE;
4401         camera_cli_s *pc = (camera_cli_s *)camera;
4402         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EFFECT;
4403         int sock_fd;
4404         if (pc->cb_info == NULL) {
4405                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4406                 return CAMERA_ERROR_INVALID_PARAMETER;
4407         }
4408         sock_fd = pc->cb_info->fd;
4409         int get_effect;
4410
4411         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4412         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4413
4414         if (ret == CAMERA_ERROR_NONE) {
4415                 muse_camera_msg_get(get_effect, pc->cb_info->recv_msg);
4416                 *effect = (camera_attr_effect_mode_e)get_effect;
4417         }
4418         LOGD("ret : 0x%x", ret);
4419         return ret;
4420 }
4421
4422
4423 int camera_attr_get_scene_mode(camera_h camera,  camera_attr_scene_mode_e *mode)
4424 {
4425         if( camera == NULL || mode == NULL){
4426                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4427                 return CAMERA_ERROR_INVALID_PARAMETER;
4428         }
4429
4430         int ret = CAMERA_ERROR_NONE;
4431         camera_cli_s *pc = (camera_cli_s *)camera;
4432         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_SCENE_MODE;
4433         int sock_fd;
4434         if (pc->cb_info == NULL) {
4435                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4436                 return CAMERA_ERROR_INVALID_PARAMETER;
4437         }
4438         sock_fd = pc->cb_info->fd;
4439         int get_mode;
4440
4441         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4442         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4443
4444         if (ret == CAMERA_ERROR_NONE) {
4445                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4446                 *mode = (camera_attr_scene_mode_e)get_mode;
4447         }
4448         LOGD("ret : 0x%x", ret);
4449         return ret;
4450 }
4451
4452
4453 int camera_attr_is_enabled_tag(camera_h camera,  bool *enable)
4454 {
4455         if( camera == NULL || enable == NULL){
4456                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4457                 return CAMERA_ERROR_INVALID_PARAMETER;
4458         }
4459
4460         int ret = CAMERA_ERROR_NONE;
4461         camera_cli_s *pc = (camera_cli_s *)camera;
4462         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_TAG;
4463         int sock_fd;
4464         if (pc->cb_info == NULL) {
4465                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4466                 return CAMERA_ERROR_INVALID_PARAMETER;
4467         }
4468         sock_fd = pc->cb_info->fd;
4469         int get_enabled;
4470
4471         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4472         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4473
4474         if (ret == CAMERA_ERROR_NONE) {
4475                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
4476                 *enable = (bool)get_enabled;
4477         }
4478         LOGD("ret : 0x%x", ret);
4479         return ret;
4480 }
4481
4482
4483 int camera_attr_get_tag_image_description(camera_h camera,  char **description)
4484 {
4485         if( camera == NULL || description == NULL){
4486                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4487                 return CAMERA_ERROR_INVALID_PARAMETER;
4488         }
4489
4490         int ret = CAMERA_ERROR_NONE;
4491         camera_cli_s *pc = (camera_cli_s *)camera;
4492         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_TAG_IMAGE_DESCRIPTION;
4493         int sock_fd;
4494         if (pc->cb_info == NULL) {
4495                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4496                 return CAMERA_ERROR_INVALID_PARAMETER;
4497         }
4498         sock_fd = pc->cb_info->fd;
4499         char get_description[MUSE_CAMERA_MSG_MAX_LENGTH] = {0,};
4500
4501         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4502         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4503
4504         if (ret == CAMERA_ERROR_NONE) {
4505                 muse_camera_msg_get_string(get_description, pc->cb_info->recv_msg);
4506                 *description = strdup(get_description);
4507         }
4508         LOGD("ret : 0x%x", ret);
4509         return ret;
4510 }
4511
4512
4513 int camera_attr_get_tag_orientation(camera_h camera, camera_attr_tag_orientation_e *orientation)
4514 {
4515         if( camera == NULL || orientation == NULL){
4516                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4517                 return CAMERA_ERROR_INVALID_PARAMETER;
4518         }
4519
4520         int ret = CAMERA_ERROR_NONE;
4521         camera_cli_s *pc = (camera_cli_s *)camera;
4522         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_TAG_ORIENTATION;
4523         int sock_fd;
4524         if (pc->cb_info == NULL) {
4525                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4526                 return CAMERA_ERROR_INVALID_PARAMETER;
4527         }
4528         sock_fd = pc->cb_info->fd;
4529         int get_orientation;
4530
4531         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4532         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4533
4534         if (ret == CAMERA_ERROR_NONE) {
4535                 muse_camera_msg_get(get_orientation, pc->cb_info->recv_msg);
4536                 *orientation = (camera_attr_tag_orientation_e)get_orientation;
4537                 LOGD("success, orientation : %d", *orientation);
4538         }
4539         LOGD("ret : 0x%x", ret);
4540         return ret;
4541 }
4542
4543
4544 int camera_attr_get_tag_software(camera_h camera, char **software)
4545 {
4546         if( camera == NULL || software == NULL ){
4547                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4548                 return CAMERA_ERROR_INVALID_PARAMETER;
4549         }
4550
4551         int ret = CAMERA_ERROR_NONE;
4552         camera_cli_s *pc = (camera_cli_s *)camera;
4553         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_TAG_SOFTWARE;
4554         int sock_fd;
4555         if (pc->cb_info == NULL) {
4556                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4557                 return CAMERA_ERROR_INVALID_PARAMETER;
4558         }
4559         sock_fd = pc->cb_info->fd;
4560         char get_software[MUSE_CAMERA_MSG_MAX_LENGTH] = {0,};
4561
4562         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4563         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4564
4565         if (ret == CAMERA_ERROR_NONE) {
4566                 muse_camera_msg_get_string(get_software, pc->cb_info->recv_msg);
4567                 *software = strdup(get_software);
4568         }
4569         LOGD("ret : 0x%x", ret);
4570         return ret;
4571 }
4572
4573
4574 int camera_attr_get_geotag(camera_h camera, double *latitude , double *longitude, double *altitude)
4575 {
4576         if( camera == NULL || latitude == NULL || longitude == NULL || altitude == NULL){
4577                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4578                 return CAMERA_ERROR_INVALID_PARAMETER;
4579         }
4580
4581         int ret = CAMERA_ERROR_NONE;
4582         camera_cli_s *pc = (camera_cli_s *)camera;
4583         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_GEOTAG;
4584         double get_geotag[3] = {0,};
4585         int sock_fd;
4586         if (pc->cb_info == NULL) {
4587                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4588                 return CAMERA_ERROR_INVALID_PARAMETER;
4589         }
4590         sock_fd = pc->cb_info->fd;
4591         int valid = 0;
4592         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4593         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4594
4595         if (ret == CAMERA_ERROR_NONE) {
4596                 muse_camera_msg_get_array(get_geotag, pc->cb_info->recv_msg);
4597                 *latitude = get_geotag[0];
4598                 *longitude = get_geotag[1];
4599                 *altitude = get_geotag[2];
4600         } else {
4601                 LOGE("Returned value is not valid : 0x%x", valid);
4602         }
4603
4604         LOGD("ret : 0x%x", ret);
4605
4606         return ret;
4607 }
4608
4609
4610 int camera_attr_get_flash_mode(camera_h camera,  camera_attr_flash_mode_e *mode)
4611 {
4612         if( camera == NULL || mode == NULL){
4613                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4614                 return CAMERA_ERROR_INVALID_PARAMETER;
4615         }
4616
4617         int ret = CAMERA_ERROR_NONE;
4618         camera_cli_s *pc = (camera_cli_s *)camera;
4619         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_FLASH_MODE;
4620         int sock_fd;
4621         if (pc->cb_info == NULL) {
4622                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4623                 return CAMERA_ERROR_INVALID_PARAMETER;
4624         }
4625         sock_fd = pc->cb_info->fd;
4626         int get_mode;
4627
4628         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4629         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4630
4631         if (ret == CAMERA_ERROR_NONE) {
4632                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4633                 *mode = (camera_attr_flash_mode_e)get_mode;
4634         }
4635         LOGD("ret : 0x%x", ret);
4636         return ret;
4637 }
4638
4639
4640 int camera_attr_foreach_supported_af_mode( camera_h camera, camera_attr_supported_af_mode_cb foreach_cb , void *user_data)
4641 {
4642         if( camera == NULL || foreach_cb == NULL){
4643                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4644                 return CAMERA_ERROR_INVALID_PARAMETER;
4645         }
4646         int ret = CAMERA_ERROR_NONE;
4647
4648         camera_cli_s *pc = (camera_cli_s *)camera;
4649         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_AF_MODE;
4650
4651         LOGD("Enter, handle :%x", pc->remote_handle);
4652
4653         int sock_fd;
4654         if (pc->cb_info == NULL) {
4655                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4656                 return CAMERA_ERROR_INVALID_PARAMETER;
4657         }
4658         sock_fd = pc->cb_info->fd;
4659         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_AF_MODE] = foreach_cb;
4660         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_AF_MODE] = user_data;
4661
4662         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4663         LOGD("ret : 0x%x", ret);
4664         return ret;
4665 }
4666
4667
4668 int camera_attr_foreach_supported_exposure_mode(camera_h camera, camera_attr_supported_exposure_mode_cb foreach_cb , void *user_data)
4669 {
4670         if( camera == NULL || foreach_cb == NULL){
4671                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4672                 return CAMERA_ERROR_INVALID_PARAMETER;
4673         }
4674         int ret = CAMERA_ERROR_NONE;
4675
4676         camera_cli_s *pc = (camera_cli_s *)camera;
4677         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_EXPOSURE_MODE;
4678
4679         LOGD("Enter, handle :%x", pc->remote_handle);
4680
4681         int sock_fd;
4682         if (pc->cb_info == NULL) {
4683                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4684                 return CAMERA_ERROR_INVALID_PARAMETER;
4685         }
4686         sock_fd = pc->cb_info->fd;
4687         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EXPOSURE_MODE] = foreach_cb;
4688         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EXPOSURE_MODE] = user_data;
4689
4690         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4691         LOGD("ret : 0x%x", ret);
4692         return ret;
4693 }
4694
4695
4696 int camera_attr_foreach_supported_iso( camera_h camera, camera_attr_supported_iso_cb foreach_cb , void *user_data)
4697 {
4698         if( camera == NULL || foreach_cb == NULL){
4699                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4700                 return CAMERA_ERROR_INVALID_PARAMETER;
4701         }
4702         int ret = CAMERA_ERROR_NONE;
4703
4704         camera_cli_s *pc = (camera_cli_s *)camera;
4705         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_ISO;
4706
4707         LOGD("Enter, handle :%x", pc->remote_handle);
4708
4709         int sock_fd;
4710         if (pc->cb_info == NULL) {
4711                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4712                 return CAMERA_ERROR_INVALID_PARAMETER;
4713         }
4714         sock_fd = pc->cb_info->fd;
4715         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_ISO] = foreach_cb;
4716         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_ISO] = user_data;
4717
4718         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4719         LOGD("ret : 0x%x", ret);
4720         return ret;
4721 }
4722
4723
4724 int camera_attr_foreach_supported_whitebalance(camera_h camera, camera_attr_supported_whitebalance_cb foreach_cb , void *user_data)
4725 {
4726         if( camera == NULL || foreach_cb == NULL){
4727                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4728                 return CAMERA_ERROR_INVALID_PARAMETER;
4729         }
4730         int ret = CAMERA_ERROR_NONE;
4731
4732         camera_cli_s *pc = (camera_cli_s *)camera;
4733         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_WHITEBALANCE;
4734
4735         LOGD("Enter, handle :%x", pc->remote_handle);
4736
4737         int sock_fd;
4738         if (pc->cb_info == NULL) {
4739                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4740                 return CAMERA_ERROR_INVALID_PARAMETER;
4741         }
4742         sock_fd = pc->cb_info->fd;
4743         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_WHITEBALANCE] = foreach_cb;
4744         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_WHITEBALANCE] = user_data;
4745
4746         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4747         LOGD("ret : 0x%x", ret);
4748         return ret;
4749 }
4750
4751
4752 int camera_attr_foreach_supported_effect(camera_h camera, camera_attr_supported_effect_cb foreach_cb , void *user_data)
4753 {
4754         if( camera == NULL || foreach_cb == NULL){
4755                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4756                 return CAMERA_ERROR_INVALID_PARAMETER;
4757         }
4758         int ret = CAMERA_ERROR_NONE;
4759
4760         camera_cli_s *pc = (camera_cli_s *)camera;
4761         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_EFFECT;
4762
4763         LOGD("Enter, handle :%x", pc->remote_handle);
4764
4765         int sock_fd;
4766         if (pc->cb_info == NULL) {
4767                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4768                 return CAMERA_ERROR_INVALID_PARAMETER;
4769         }
4770         sock_fd = pc->cb_info->fd;
4771         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EFFECT] = foreach_cb;
4772         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EFFECT] = user_data;
4773
4774         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4775         LOGD("ret : 0x%x", ret);
4776         return ret;
4777 }
4778
4779
4780 int camera_attr_foreach_supported_scene_mode(camera_h camera, camera_attr_supported_scene_mode_cb foreach_cb , void *user_data)
4781 {
4782         if( camera == NULL || foreach_cb == NULL){
4783                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4784                 return CAMERA_ERROR_INVALID_PARAMETER;
4785         }
4786         int ret = CAMERA_ERROR_NONE;
4787
4788         camera_cli_s *pc = (camera_cli_s *)camera;
4789         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_SCENE_MODE;
4790
4791         LOGD("Enter, handle :%x", pc->remote_handle);
4792
4793         int sock_fd;
4794         if (pc->cb_info == NULL) {
4795                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4796                 return CAMERA_ERROR_INVALID_PARAMETER;
4797         }
4798         sock_fd = pc->cb_info->fd;
4799         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_SCENE_MODE] = foreach_cb;
4800         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_SCENE_MODE] = user_data;
4801
4802         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4803         LOGD("ret : 0x%x", ret);
4804         return ret;
4805 }
4806
4807
4808 int camera_attr_foreach_supported_flash_mode(camera_h camera, camera_attr_supported_flash_mode_cb foreach_cb , void *user_data)
4809 {
4810         if( camera == NULL || foreach_cb == NULL){
4811                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4812                 return CAMERA_ERROR_INVALID_PARAMETER;
4813         }
4814         int ret = CAMERA_ERROR_NONE;
4815
4816         camera_cli_s *pc = (camera_cli_s *)camera;
4817         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FLASH_MODE;
4818
4819         LOGD("Enter, handle :%x", pc->remote_handle);
4820
4821         int sock_fd;
4822         if (pc->cb_info == NULL) {
4823                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4824                 return CAMERA_ERROR_INVALID_PARAMETER;
4825         }
4826         sock_fd = pc->cb_info->fd;
4827         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FLASH_MODE] = foreach_cb;
4828         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FLASH_MODE] = user_data;
4829
4830         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4831         LOGD("ret : 0x%x", ret);
4832         return ret;
4833 }
4834
4835
4836 int camera_attr_foreach_supported_fps(camera_h camera, camera_attr_supported_fps_cb foreach_cb , void *user_data)
4837 {
4838         if( camera == NULL || foreach_cb == NULL){
4839                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4840                 return CAMERA_ERROR_INVALID_PARAMETER;
4841         }
4842         int ret = CAMERA_ERROR_NONE;
4843
4844         camera_cli_s *pc = (camera_cli_s *)camera;
4845         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FPS;
4846         int sock_fd;
4847         if (pc->cb_info == NULL) {
4848                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4849                 return CAMERA_ERROR_INVALID_PARAMETER;
4850         }
4851         sock_fd = pc->cb_info->fd;
4852         LOGD("Enter, handle :%x", pc->remote_handle);
4853         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS] = foreach_cb;
4854         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS] = user_data;
4855
4856         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4857         LOGD("Enter, handle :%x", pc->remote_handle);
4858         return ret;
4859 }
4860
4861 int camera_attr_foreach_supported_fps_by_resolution(camera_h camera, int width, int height, camera_attr_supported_fps_cb foreach_cb, void *user_data)
4862 {
4863         if( camera == NULL || foreach_cb == NULL){
4864                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4865                 return CAMERA_ERROR_INVALID_PARAMETER;
4866         }
4867         int ret = CAMERA_ERROR_NONE;
4868
4869         camera_cli_s *pc = (camera_cli_s *)camera;
4870         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FPS_BY_RESOLUTION;
4871         int sock_fd;
4872         if (pc->cb_info == NULL) {
4873                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4874                 return CAMERA_ERROR_INVALID_PARAMETER;
4875         }
4876         sock_fd = pc->cb_info->fd;
4877         LOGD("Enter, handle :%x", pc->remote_handle);
4878         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS_BY_RESOLUTION] = foreach_cb;
4879         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS_BY_RESOLUTION] = user_data;
4880
4881         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, width, INT, height);
4882         LOGD("ret : 0x%x", ret);
4883         return ret;
4884 }
4885
4886 int camera_attr_foreach_supported_stream_flip(camera_h camera, camera_attr_supported_stream_flip_cb foreach_cb, void *user_data)
4887 {
4888         if( camera == NULL || foreach_cb == NULL){
4889                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4890                 return CAMERA_ERROR_INVALID_PARAMETER;
4891         }
4892         int ret = CAMERA_ERROR_NONE;
4893
4894         camera_cli_s *pc = (camera_cli_s *)camera;
4895         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_STREAM_FLIP;
4896         int sock_fd;
4897         if (pc->cb_info == NULL) {
4898                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4899                 return CAMERA_ERROR_INVALID_PARAMETER;
4900         }
4901         sock_fd = pc->cb_info->fd;
4902         LOGD("Enter, handle :%x", pc->remote_handle);
4903         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_FLIP] = foreach_cb;
4904         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_FLIP] = user_data;
4905
4906         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4907         LOGD("ret : 0x%x", ret);
4908         return ret;
4909 }
4910
4911
4912 int camera_attr_foreach_supported_stream_rotation(camera_h camera, camera_attr_supported_stream_rotation_cb foreach_cb, void *user_data)
4913 {
4914         if( camera == NULL || foreach_cb == NULL){
4915                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4916                 return CAMERA_ERROR_INVALID_PARAMETER;
4917         }
4918         int ret = CAMERA_ERROR_NONE;
4919
4920         camera_cli_s *pc = (camera_cli_s *)camera;
4921         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_STREAM_ROTATION;
4922         int sock_fd;
4923         if (pc->cb_info == NULL) {
4924                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4925                 return CAMERA_ERROR_INVALID_PARAMETER;
4926         }
4927         sock_fd = pc->cb_info->fd;
4928         LOGD("Enter, handle :%x", pc->remote_handle);
4929         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_ROTATION] = foreach_cb;
4930         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_ROTATION] = user_data;
4931
4932         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4933         LOGD("ret : 0x%x", ret);
4934         return ret;
4935 }
4936
4937
4938 int camera_attr_set_stream_rotation(camera_h camera , camera_rotation_e rotation)
4939 {
4940         if( camera == NULL){
4941                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4942                 return CAMERA_ERROR_INVALID_PARAMETER;
4943         }
4944
4945         int ret = CAMERA_ERROR_NONE;
4946         camera_cli_s *pc = (camera_cli_s *)camera;
4947         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_STREAM_ROTATION;
4948         int sock_fd;
4949         if (pc->cb_info == NULL) {
4950                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4951                 return CAMERA_ERROR_INVALID_PARAMETER;
4952         }
4953         sock_fd = pc->cb_info->fd;
4954         int set_rotation = (int)rotation;
4955
4956         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4957         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_rotation);
4958         LOGD("ret : 0x%x", ret);
4959         return ret;
4960 }
4961
4962
4963 int camera_attr_get_stream_rotation(camera_h camera , camera_rotation_e *rotation)
4964 {
4965         if( camera == NULL || rotation == NULL ){
4966                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4967                 return CAMERA_ERROR_INVALID_PARAMETER;
4968         }
4969
4970         int ret = CAMERA_ERROR_NONE;
4971         camera_cli_s *pc = (camera_cli_s *)camera;
4972         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_STREAM_ROTATION;
4973         int sock_fd;
4974         if (pc->cb_info == NULL) {
4975                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4976                 return CAMERA_ERROR_INVALID_PARAMETER;
4977         }
4978         sock_fd = pc->cb_info->fd;
4979         int get_rotation;
4980
4981         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4982         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4983
4984         if (ret == CAMERA_ERROR_NONE) {
4985                 muse_camera_msg_get(get_rotation, pc->cb_info->recv_msg);
4986                 *rotation = (camera_rotation_e)get_rotation;
4987         }
4988         LOGD("ret : 0x%x", ret);
4989         return ret;
4990 }
4991
4992
4993 int camera_attr_set_stream_flip(camera_h camera , camera_flip_e flip)
4994 {
4995         if( camera == NULL){
4996                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4997                 return CAMERA_ERROR_INVALID_PARAMETER;
4998         }
4999
5000         int ret = CAMERA_ERROR_NONE;
5001         camera_cli_s *pc = (camera_cli_s *)camera;
5002         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_STREAM_FLIP;
5003         int sock_fd;
5004         if (pc->cb_info == NULL) {
5005                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5006                 return CAMERA_ERROR_INVALID_PARAMETER;
5007         }
5008         sock_fd = pc->cb_info->fd;
5009         int set_flip = (int)flip;
5010
5011         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5012         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_flip);
5013         LOGD("ret : 0x%x", ret);
5014         return ret;
5015 }
5016
5017
5018 int camera_attr_get_stream_flip(camera_h camera , camera_flip_e *flip)
5019 {
5020         if( camera == NULL || flip == NULL ){
5021                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5022                 return CAMERA_ERROR_INVALID_PARAMETER;
5023         }
5024
5025         int ret = CAMERA_ERROR_NONE;
5026         camera_cli_s *pc = (camera_cli_s *)camera;
5027         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_STREAM_FLIP;
5028         int sock_fd;
5029         if (pc->cb_info == NULL) {
5030                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5031                 return CAMERA_ERROR_INVALID_PARAMETER;
5032         }
5033         sock_fd = pc->cb_info->fd;
5034         int get_flip;
5035
5036         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5037         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5038
5039         if (ret == CAMERA_ERROR_NONE) {
5040                 muse_camera_msg_get(get_flip, pc->cb_info->recv_msg);
5041                 *flip = (camera_flip_e)get_flip;
5042         }
5043         LOGD("ret : 0x%x", ret);
5044         return ret;
5045 }
5046
5047 int camera_attr_set_hdr_mode(camera_h camera, camera_attr_hdr_mode_e mode)
5048 {
5049         if( camera == NULL){
5050                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
5051                 return CAMERA_ERROR_INVALID_PARAMETER;
5052         }
5053
5054         int ret = CAMERA_ERROR_NONE;
5055         camera_cli_s *pc = (camera_cli_s *)camera;
5056         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_HDR_MODE;
5057         int sock_fd;
5058         if (pc->cb_info == NULL) {
5059                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5060                 return CAMERA_ERROR_INVALID_PARAMETER;
5061         }
5062         sock_fd = pc->cb_info->fd;
5063         int set_mode = (int)mode;
5064
5065         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5066         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
5067         LOGD("ret : 0x%x", ret);
5068         return ret;
5069 }
5070
5071
5072 int camera_attr_get_hdr_mode(camera_h camera, camera_attr_hdr_mode_e *mode)
5073 {
5074         if (camera == NULL) {
5075                 LOGE("INVALID_PARAMETER(0x%08x) - handle",CAMERA_ERROR_INVALID_PARAMETER);
5076                 return CAMERA_ERROR_INVALID_PARAMETER;
5077         }
5078         if (mode == NULL) {
5079                 LOGE("CAMERA_ERROR_NOT_SUPPORTED(0x%08x) - mode",CAMERA_ERROR_NOT_SUPPORTED);
5080                 return CAMERA_ERROR_NOT_SUPPORTED;
5081         }
5082         int ret = CAMERA_ERROR_NONE;
5083         camera_cli_s *pc = (camera_cli_s *)camera;
5084         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_HDR_MODE;
5085         int sock_fd;
5086         if (pc->cb_info == NULL) {
5087                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5088                 return CAMERA_ERROR_INVALID_PARAMETER;
5089         }
5090         sock_fd = pc->cb_info->fd;
5091         int get_mode;
5092
5093         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5094         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5095
5096         if (ret == CAMERA_ERROR_NONE) {
5097                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
5098                 *mode = (camera_attr_hdr_mode_e)get_mode;
5099         }
5100         LOGD("ret : 0x%x", ret);
5101         return ret;
5102 }
5103
5104
5105 bool camera_attr_is_supported_hdr_capture(camera_h camera)
5106 {
5107         if( camera == NULL){
5108                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5109                 return false;
5110         }
5111
5112         int ret = CAMERA_ERROR_NONE;
5113         camera_cli_s *pc = (camera_cli_s *)camera;
5114         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_HDR_CAPTURE;
5115         int sock_fd;
5116         if (pc->cb_info == NULL) {
5117                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5118                 return CAMERA_ERROR_INVALID_PARAMETER;
5119         }
5120         sock_fd = pc->cb_info->fd;
5121         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5122         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5123         LOGD("ret : 0x%x", ret);
5124         return (bool)ret;
5125 }
5126
5127
5128 int camera_attr_set_hdr_capture_progress_cb(camera_h camera, camera_attr_hdr_progress_cb callback, void* user_data)
5129 {
5130         if (camera == NULL) {
5131                 LOGE("INVALID_PARAMETER(0x%08x) - handle", CAMERA_ERROR_INVALID_PARAMETER);
5132                 return CAMERA_ERROR_INVALID_PARAMETER;
5133         }
5134         if (callback == NULL) {
5135                 LOGE("CAMERA_ERROR_NOT_SUPPORTED(0x%08x) - callback", CAMERA_ERROR_NOT_SUPPORTED);
5136                 return CAMERA_ERROR_NOT_SUPPORTED;
5137         }
5138         int ret = CAMERA_ERROR_NONE;
5139
5140         camera_cli_s *pc = (camera_cli_s *)camera;
5141         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_HDR_CAPTURE_PROGRESS_CB;
5142         int sock_fd;
5143         if (pc->cb_info == NULL) {
5144                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5145                 return CAMERA_ERROR_INVALID_PARAMETER;
5146         }
5147         sock_fd = pc->cb_info->fd;
5148         LOGD("Enter, handle :%x", pc->remote_handle);
5149
5150         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = callback;
5151         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = user_data;
5152
5153         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5154         LOGD("ret : 0x%x", ret);
5155         return ret;
5156 }
5157
5158
5159 int camera_attr_unset_hdr_capture_progress_cb(camera_h camera)
5160 {
5161         if( camera == NULL){
5162                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5163                 return CAMERA_ERROR_INVALID_PARAMETER;
5164         }
5165
5166         int ret = CAMERA_ERROR_NONE;
5167
5168         camera_cli_s *pc = (camera_cli_s *)camera;
5169         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_UNSET_HDR_CAPTURE_PROGRESS_CB;
5170         int sock_fd;
5171         if (pc->cb_info == NULL) {
5172                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5173                 return CAMERA_ERROR_INVALID_PARAMETER;
5174         }
5175         sock_fd = pc->cb_info->fd;
5176         LOGD("Enter, handle :%x", pc->remote_handle);
5177
5178         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = (void *)NULL;
5179         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = (void *)NULL;
5180
5181         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5182         LOGD("ret : 0x%x", ret);
5183         return ret;
5184 }
5185
5186
5187 int camera_attr_enable_anti_shake(camera_h camera, bool enable)
5188 {
5189         if (camera == NULL) {
5190                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5191                 return CAMERA_ERROR_INVALID_PARAMETER;
5192         }
5193
5194         int ret = CAMERA_ERROR_NONE;
5195         camera_cli_s *pc = (camera_cli_s *)camera;
5196         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_ANTI_SHAKE;
5197         int sock_fd;
5198         if (pc->cb_info == NULL) {
5199                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5200                 return CAMERA_ERROR_INVALID_PARAMETER;
5201         }
5202         sock_fd = pc->cb_info->fd;
5203         int set_enable = (int)enable;
5204
5205         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5206         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
5207         LOGD("ret : 0x%x", ret);
5208         return ret;
5209 }
5210
5211
5212 int camera_attr_is_enabled_anti_shake(camera_h camera , bool *enabled)
5213 {
5214         if (camera == NULL) {
5215                 LOGE("INVALID_PARAMETER(0x%08x) - handle", CAMERA_ERROR_INVALID_PARAMETER);
5216                 return CAMERA_ERROR_INVALID_PARAMETER;
5217         }
5218         if (enabled == NULL) {
5219                 LOGE("INVALID_PARAMETER(0x%08x) - enabled", CAMERA_ERROR_INVALID_PARAMETER);
5220                 return CAMERA_ERROR_NOT_SUPPORTED;
5221         }
5222         int ret = CAMERA_ERROR_NONE;
5223         camera_cli_s *pc = (camera_cli_s *)camera;
5224         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_ANTI_SHAKE;
5225         int sock_fd;
5226         if (pc->cb_info == NULL) {
5227                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5228                 return CAMERA_ERROR_INVALID_PARAMETER;
5229         }
5230         sock_fd = pc->cb_info->fd;
5231         int get_enabled;
5232
5233         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5234         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5235
5236         if (ret == CAMERA_ERROR_NONE) {
5237                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
5238                 *enabled = (bool)get_enabled;
5239         }
5240         LOGD("ret : 0x%x", ret);
5241         return ret;
5242 }
5243
5244
5245 bool camera_attr_is_supported_anti_shake(camera_h camera)
5246 {
5247
5248         if( camera == NULL){
5249                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5250                 return false;
5251         }
5252
5253         int ret = CAMERA_ERROR_NONE;
5254         camera_cli_s *pc = (camera_cli_s *)camera;
5255         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_ANTI_SHAKE;
5256         int sock_fd;
5257         if (pc->cb_info == NULL) {
5258                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5259                 return CAMERA_ERROR_INVALID_PARAMETER;
5260         }
5261         sock_fd = pc->cb_info->fd;
5262         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5263         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5264         LOGD("ret : 0x%x", ret);
5265         return ret;
5266 }
5267
5268
5269 int camera_attr_enable_video_stabilization(camera_h camera, bool enable)
5270 {
5271         if (camera == NULL) {
5272                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5273                 return CAMERA_ERROR_INVALID_PARAMETER;
5274         }
5275
5276         int ret = CAMERA_ERROR_NONE;
5277         camera_cli_s *pc = (camera_cli_s *)camera;
5278         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_VIDEO_STABILIZATION;
5279         int sock_fd;
5280         if (pc->cb_info == NULL) {
5281                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5282                 return CAMERA_ERROR_INVALID_PARAMETER;
5283         }
5284         sock_fd = pc->cb_info->fd;
5285         int set_enable = (int)enable;
5286
5287         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5288         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
5289         LOGD("ret : 0x%x", ret);
5290         return ret;
5291 }
5292
5293
5294 int camera_attr_is_enabled_video_stabilization(camera_h camera, bool *enabled)
5295 {
5296         if (camera == NULL) {
5297                 LOGE("INVALID_PARAMETER(0x%08x) - handle",CAMERA_ERROR_INVALID_PARAMETER);
5298                 return CAMERA_ERROR_INVALID_PARAMETER;
5299         }
5300         if (enabled == NULL) {
5301                 LOGE("INVALID_PARAMETER(0x%08x) - enabled",CAMERA_ERROR_INVALID_PARAMETER);
5302                 return CAMERA_ERROR_NOT_SUPPORTED;
5303         }
5304         int ret = CAMERA_ERROR_NONE;
5305         camera_cli_s *pc = (camera_cli_s *)camera;
5306         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_VIDEO_STABILIZATION;
5307         int sock_fd;
5308         if (pc->cb_info == NULL) {
5309                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5310                 return CAMERA_ERROR_INVALID_PARAMETER;
5311         }
5312         sock_fd = pc->cb_info->fd;
5313         int get_enabled;
5314
5315         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5316         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5317
5318         if (ret == CAMERA_ERROR_NONE) {
5319                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
5320                 *enabled = (bool)get_enabled;
5321         }
5322         LOGD("ret : 0x%x", ret);
5323         return ret;
5324 }
5325
5326
5327 bool camera_attr_is_supported_video_stabilization(camera_h camera)
5328 {
5329         if( camera == NULL){
5330                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5331                 return false;
5332         }
5333
5334         int ret = CAMERA_ERROR_NONE;
5335         camera_cli_s *pc = (camera_cli_s *)camera;
5336         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_VIDEO_STABILIZATION;
5337         int sock_fd;
5338         if (pc->cb_info == NULL) {
5339                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5340                 return CAMERA_ERROR_INVALID_PARAMETER;
5341         }
5342         sock_fd = pc->cb_info->fd;
5343         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5344         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5345         LOGD("ret : 0x%x", ret);
5346         return ret;
5347 }
5348
5349
5350 int camera_attr_enable_auto_contrast(camera_h camera, bool enable)
5351 {
5352         if( camera == NULL){
5353                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
5354                 return CAMERA_ERROR_INVALID_PARAMETER;
5355         }
5356
5357         int ret = CAMERA_ERROR_NONE;
5358         camera_cli_s *pc = (camera_cli_s *)camera;
5359         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_AUTO_CONTRAST;
5360         int sock_fd;
5361         if (pc->cb_info == NULL) {
5362                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5363                 return CAMERA_ERROR_INVALID_PARAMETER;
5364         }
5365         sock_fd = pc->cb_info->fd;
5366         int set_enable = (int)enable;
5367
5368         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5369         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
5370         LOGD("ret : 0x%x", ret);
5371         return ret;
5372 }
5373
5374
5375 int camera_attr_is_enabled_auto_contrast(camera_h camera, bool *enabled)
5376 {
5377         if (camera == NULL) {
5378                 LOGE("INVALID_PARAMETER(0x%08x) - handle", CAMERA_ERROR_INVALID_PARAMETER);
5379                 return CAMERA_ERROR_INVALID_PARAMETER;
5380         }
5381         if (enabled == NULL) {
5382                 LOGE("INVALID_PARAMETER(0x%08x) - enabled", CAMERA_ERROR_INVALID_PARAMETER);
5383                 return CAMERA_ERROR_INVALID_PARAMETER;
5384         }
5385         int ret = CAMERA_ERROR_NONE;
5386         camera_cli_s *pc = (camera_cli_s *)camera;
5387         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_AUTO_CONTRAST;
5388         int sock_fd;
5389         if (pc->cb_info == NULL) {
5390                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5391                 return CAMERA_ERROR_INVALID_PARAMETER;
5392         }
5393         sock_fd = pc->cb_info->fd;
5394         int get_enabled;
5395
5396         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5397         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5398
5399         if (ret == CAMERA_ERROR_NONE) {
5400                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
5401                 *enabled = (bool)get_enabled;
5402         }
5403         LOGD("ret : 0x%x", ret);
5404         return ret;
5405 }
5406
5407
5408 bool camera_attr_is_supported_auto_contrast(camera_h camera)
5409 {
5410         if( camera == NULL){
5411                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5412                 return false;
5413         }
5414
5415         int ret = CAMERA_ERROR_NONE;
5416         camera_cli_s *pc = (camera_cli_s *)camera;
5417         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_AUTO_CONTRAST;
5418         int sock_fd;
5419         if (pc->cb_info == NULL) {
5420                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5421                 return CAMERA_ERROR_INVALID_PARAMETER;
5422         }
5423         sock_fd = pc->cb_info->fd;
5424         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5425         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5426         LOGD("ret : 0x%x", ret);
5427         return ret;
5428 }
5429
5430
5431 int camera_attr_disable_shutter_sound(camera_h camera, bool disable)
5432 {
5433         if (camera == NULL) {
5434                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5435                 return CAMERA_ERROR_INVALID_PARAMETER;
5436         }
5437
5438         int ret = CAMERA_ERROR_NONE;
5439         camera_cli_s *pc = (camera_cli_s *)camera;
5440         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_DISABLE_SHUTTER_SOUND;
5441         int sock_fd;
5442         if (pc->cb_info == NULL) {
5443                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5444                 return CAMERA_ERROR_INVALID_PARAMETER;
5445         }
5446         sock_fd = pc->cb_info->fd;
5447         int set_disable = (int)disable;
5448
5449         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5450         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_disable);
5451         LOGD("ret : 0x%x", ret);
5452         return ret;
5453 }