Release version 0.2.25
[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 (callback == NULL) {
2945                 LOGE("INVALID_PARAMETER(0x%08x) - callback", CAMERA_ERROR_INVALID_PARAMETER);
2946                 return CAMERA_ERROR_NOT_SUPPORTED;
2947         }
2948
2949         int ret = CAMERA_ERROR_NONE;
2950
2951         camera_cli_s *pc = (camera_cli_s *)camera;
2952         muse_camera_api_e api = MUSE_CAMERA_API_SET_MEDIA_PACKET_PREVIEW_CB;
2953
2954         LOGD("Enter, handle :%x", pc->remote_handle);
2955
2956         int sock_fd;
2957         if (pc->cb_info == NULL) {
2958                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2959                 return CAMERA_ERROR_INVALID_PARAMETER;
2960         }
2961         sock_fd = pc->cb_info->fd;
2962         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = callback;
2963         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = user_data;
2964
2965         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2966         LOGD("ret : 0x%x", ret);
2967         return ret;
2968 }
2969
2970 int camera_unset_media_packet_preview_cb(camera_h camera)
2971 {
2972         if (camera == NULL) {
2973                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
2974                 return CAMERA_ERROR_INVALID_PARAMETER;
2975         }
2976
2977         int ret = CAMERA_ERROR_NONE;
2978
2979         camera_cli_s *pc = (camera_cli_s *)camera;
2980         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_MEDIA_PACKET_PREVIEW_CB;
2981
2982         LOGD("Enter, handle :%x", pc->remote_handle);
2983
2984         int sock_fd;
2985         if (pc->cb_info == NULL) {
2986                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
2987                 return CAMERA_ERROR_INVALID_PARAMETER;
2988         }
2989         sock_fd = pc->cb_info->fd;
2990         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = (void *)NULL;
2991         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW] = (void *)NULL;
2992
2993         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
2994         LOGD("ret : 0x%x", ret);
2995         return ret;
2996 }
2997
2998 int camera_set_state_changed_cb(camera_h camera, camera_state_changed_cb callback, void* user_data)
2999 {
3000         if( camera == NULL || callback == NULL){
3001                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3002                 return CAMERA_ERROR_INVALID_PARAMETER;
3003         }
3004         int ret = CAMERA_ERROR_NONE;
3005
3006         camera_cli_s *pc = (camera_cli_s *)camera;
3007         muse_camera_api_e api = MUSE_CAMERA_API_SET_STATE_CHANGED_CB;
3008
3009         LOGD("Enter, handle :%x", pc->remote_handle);
3010
3011         int sock_fd;
3012         if (pc->cb_info == NULL) {
3013                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3014                 return CAMERA_ERROR_INVALID_PARAMETER;
3015         }
3016         sock_fd = pc->cb_info->fd;
3017         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = callback;
3018         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = user_data;
3019
3020         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3021         LOGD("ret : 0x%x", ret);
3022         return ret;
3023 }
3024 int camera_unset_state_changed_cb(camera_h camera)
3025 {
3026         if( camera == NULL){
3027                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3028                 return CAMERA_ERROR_INVALID_PARAMETER;
3029         }
3030         int ret = CAMERA_ERROR_NONE;
3031
3032         camera_cli_s *pc = (camera_cli_s *)camera;
3033         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_STATE_CHANGED_CB;
3034
3035         LOGD("Enter, handle :%x", pc->remote_handle);
3036
3037         int sock_fd;
3038         if (pc->cb_info == NULL) {
3039                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3040                 return CAMERA_ERROR_INVALID_PARAMETER;
3041         }
3042         sock_fd = pc->cb_info->fd;
3043         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = (void *)NULL;
3044         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE] = (void *)NULL;
3045
3046         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3047         LOGD("ret : 0x%x", ret);
3048         return ret;
3049 }
3050
3051 int camera_set_interrupted_cb(camera_h camera, camera_interrupted_cb callback, void *user_data)
3052 {
3053         if( camera == NULL || callback == NULL){
3054                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3055                 return CAMERA_ERROR_INVALID_PARAMETER;
3056         }
3057         int ret = CAMERA_ERROR_NONE;
3058
3059         camera_cli_s *pc = (camera_cli_s *)camera;
3060         muse_camera_api_e api = MUSE_CAMERA_API_SET_INTERRUPTED_CB;
3061
3062         LOGD("Enter, handle :%x", pc->remote_handle);
3063
3064         int sock_fd;
3065         if (pc->cb_info == NULL) {
3066                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3067                 return CAMERA_ERROR_INVALID_PARAMETER;
3068         }
3069         sock_fd = pc->cb_info->fd;
3070         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = callback;
3071         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = user_data;
3072
3073         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3074         LOGD("ret : 0x%x", ret);
3075         return ret;
3076 }
3077
3078 int camera_unset_interrupted_cb(camera_h camera)
3079 {
3080         if( camera == NULL){
3081                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3082                 return CAMERA_ERROR_INVALID_PARAMETER;
3083         }
3084         int ret = CAMERA_ERROR_NONE;
3085
3086         camera_cli_s *pc = (camera_cli_s *)camera;
3087         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_INTERRUPTED_CB;
3088
3089         LOGD("Enter, handle :%x", pc->remote_handle);
3090
3091         int sock_fd;
3092         if (pc->cb_info == NULL) {
3093                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3094                 return CAMERA_ERROR_INVALID_PARAMETER;
3095         }
3096         sock_fd = pc->cb_info->fd;
3097         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = (void *)NULL;
3098         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_INTERRUPTED] = (void *)NULL;
3099
3100         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3101         LOGD("ret : 0x%x", ret);
3102         return ret;
3103 }
3104
3105 int camera_set_focus_changed_cb(camera_h camera, camera_focus_changed_cb callback, void* user_data)
3106 {
3107         if( camera == NULL || callback == NULL){
3108                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3109                 return CAMERA_ERROR_INVALID_PARAMETER;
3110         }
3111         int ret = CAMERA_ERROR_NONE;
3112
3113         camera_cli_s *pc = (camera_cli_s *)camera;
3114         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOCUS_CHANGED_CB;
3115
3116         LOGD("Enter, handle :%x", pc->remote_handle);
3117
3118         int sock_fd;
3119         if (pc->cb_info == NULL) {
3120                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3121                 return CAMERA_ERROR_INVALID_PARAMETER;
3122         }
3123         sock_fd = pc->cb_info->fd;
3124         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = callback;
3125         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = user_data;
3126
3127         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3128         LOGD("ret : 0x%x", ret);
3129         return ret;
3130 }
3131
3132 int camera_unset_focus_changed_cb(camera_h camera)
3133 {
3134         if( camera == NULL){
3135                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3136                 return CAMERA_ERROR_INVALID_PARAMETER;
3137         }
3138         int ret = CAMERA_ERROR_NONE;
3139
3140         camera_cli_s *pc = (camera_cli_s *)camera;
3141         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_FOCUS_CHANGED_CB;
3142
3143         LOGD("Enter, handle :%x", pc->remote_handle);
3144
3145         int sock_fd;
3146         if (pc->cb_info == NULL) {
3147                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3148                 return CAMERA_ERROR_INVALID_PARAMETER;
3149         }
3150         sock_fd = pc->cb_info->fd;
3151         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = (void *)NULL;
3152         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE] = (void *)NULL;
3153
3154         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3155         LOGD("ret : 0x%x", ret);
3156         return ret;
3157 }
3158
3159 int camera_set_error_cb(camera_h camera, camera_error_cb callback, void *user_data)
3160 {
3161         if( camera == NULL || callback == NULL){
3162                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3163                 return CAMERA_ERROR_INVALID_PARAMETER;
3164         }
3165         int ret = CAMERA_ERROR_NONE;
3166
3167         camera_cli_s *pc = (camera_cli_s *)camera;
3168         muse_camera_api_e api = MUSE_CAMERA_API_SET_ERROR_CB;
3169
3170         LOGD("Enter, handle :%x", pc->remote_handle);
3171
3172         int sock_fd;
3173         if (pc->cb_info == NULL) {
3174                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3175                 return CAMERA_ERROR_INVALID_PARAMETER;
3176         }
3177         sock_fd = pc->cb_info->fd;
3178         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_ERROR] = callback;
3179         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_ERROR] = user_data;
3180
3181         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3182         LOGD("ret : 0x%x", ret);
3183         return ret;
3184 }
3185
3186 int camera_unset_error_cb(camera_h camera)
3187 {
3188         if( camera == NULL){
3189                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3190                 return CAMERA_ERROR_INVALID_PARAMETER;
3191         }
3192         int ret = CAMERA_ERROR_NONE;
3193
3194         camera_cli_s *pc = (camera_cli_s *)camera;
3195         muse_camera_api_e api = MUSE_CAMERA_API_UNSET_ERROR_CB;
3196
3197         LOGD("Enter, handle :%x", pc->remote_handle);
3198
3199         int sock_fd;
3200         if (pc->cb_info == NULL) {
3201                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3202                 return CAMERA_ERROR_INVALID_PARAMETER;
3203         }
3204         sock_fd = pc->cb_info->fd;
3205         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_ERROR] = (void *)NULL;
3206         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_ERROR] = (void *)NULL;
3207
3208         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3209         LOGD("ret : 0x%x", ret);
3210         return ret;
3211 }
3212
3213 int camera_foreach_supported_preview_resolution(camera_h camera, camera_supported_preview_resolution_cb foreach_cb , void *user_data)
3214 {
3215         if( camera == NULL || foreach_cb == NULL){
3216                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3217                 return CAMERA_ERROR_INVALID_PARAMETER;
3218         }
3219         int ret = CAMERA_ERROR_NONE;
3220
3221         camera_cli_s *pc = (camera_cli_s *)camera;
3222         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_PREVIEW_RESOLUTION;
3223
3224         LOGD("Enter, handle :%x", pc->remote_handle);
3225
3226         int sock_fd;
3227         if (pc->cb_info == NULL) {
3228                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3229                 return CAMERA_ERROR_INVALID_PARAMETER;
3230         }
3231         sock_fd = pc->cb_info->fd;
3232         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_RESOLUTION] = foreach_cb;
3233         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_RESOLUTION] = user_data;
3234
3235         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3236         LOGD("ret : 0x%x", ret);
3237         return ret;
3238 }
3239
3240 int camera_foreach_supported_capture_resolution(camera_h camera, camera_supported_capture_resolution_cb foreach_cb , void *user_data)
3241 {
3242         if( camera == NULL || foreach_cb == NULL){
3243                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3244                 return CAMERA_ERROR_INVALID_PARAMETER;
3245         }
3246         int ret = CAMERA_ERROR_NONE;
3247
3248         camera_cli_s *pc = (camera_cli_s *)camera;
3249         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_CAPTURE_RESOLUTION;
3250
3251         LOGD("Enter, handle :%x", pc->remote_handle);
3252
3253         int sock_fd;
3254         if (pc->cb_info == NULL) {
3255                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3256                 return CAMERA_ERROR_INVALID_PARAMETER;
3257         }
3258         sock_fd = pc->cb_info->fd;
3259         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_RESOLUTION] = foreach_cb;
3260         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_RESOLUTION] = user_data;
3261
3262         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3263         LOGD("ret : 0x%x", ret);
3264         return ret;
3265 }
3266
3267 int camera_foreach_supported_capture_format(camera_h camera, camera_supported_capture_format_cb foreach_cb , void *user_data)
3268 {
3269         if( camera == NULL || foreach_cb == NULL){
3270                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3271                 return CAMERA_ERROR_INVALID_PARAMETER;
3272         }
3273         int ret = CAMERA_ERROR_NONE;
3274
3275         camera_cli_s *pc = (camera_cli_s *)camera;
3276         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_CAPTURE_FORMAT;
3277
3278         LOGD("Enter, handle :%x", pc->remote_handle);
3279
3280         int sock_fd;
3281         if (pc->cb_info == NULL) {
3282                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3283                 return CAMERA_ERROR_INVALID_PARAMETER;
3284         }
3285         sock_fd = pc->cb_info->fd;
3286         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_FORMAT] = foreach_cb;
3287         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_FORMAT] = user_data;
3288
3289         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3290         LOGD("ret : 0x%x", ret);
3291         return ret;
3292 }
3293
3294
3295 int camera_foreach_supported_preview_format(camera_h camera, camera_supported_preview_format_cb foreach_cb , void *user_data)
3296 {
3297         if( camera == NULL || foreach_cb == NULL){
3298                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3299                 return CAMERA_ERROR_INVALID_PARAMETER;
3300         }
3301         int ret = CAMERA_ERROR_NONE;
3302
3303         camera_cli_s *pc = (camera_cli_s *)camera;
3304         muse_camera_api_e api = MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_PREVIEW_FORMAT;
3305
3306         LOGD("Enter, handle :%x", pc->remote_handle);
3307
3308         int sock_fd;
3309         if (pc->cb_info == NULL) {
3310                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3311                 return CAMERA_ERROR_INVALID_PARAMETER;
3312         }
3313         sock_fd = pc->cb_info->fd;
3314         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_FORMAT] = foreach_cb;
3315         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_FORMAT] = user_data;
3316
3317         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3318         LOGD("ret : 0x%x", ret);
3319         return ret;
3320 }
3321
3322
3323 int camera_get_recommended_preview_resolution(camera_h camera, int *width, int *height)
3324 {
3325         if (camera == NULL || width == NULL || height == NULL) {
3326                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3327                 return CAMERA_ERROR_INVALID_PARAMETER;
3328         }
3329         int ret = CAMERA_ERROR_NONE;
3330
3331         camera_cli_s *pc = (camera_cli_s *)camera;
3332         muse_camera_api_e api = MUSE_CAMERA_API_GET_RECOMMENDED_PREVIEW_RESOLUTION;
3333         int sock_fd;
3334         if (pc->cb_info == NULL) {
3335                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3336                 return CAMERA_ERROR_INVALID_PARAMETER;
3337         }
3338         sock_fd = pc->cb_info->fd;
3339         int get_width;
3340         int get_height;
3341
3342         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3343         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3344
3345         if (ret == CAMERA_ERROR_NONE) {
3346                 muse_camera_msg_get(get_width, pc->cb_info->recv_msg);
3347                 muse_camera_msg_get(get_height, pc->cb_info->recv_msg);
3348                 *width = get_width;
3349                 *height = get_height;
3350         }
3351         LOGD("ret : 0x%x", ret);
3352         return ret;
3353 }
3354
3355
3356 int camera_attr_get_lens_orientation(camera_h camera, int *angle)
3357 {
3358         if( camera == NULL || angle == NULL){
3359                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3360                 return CAMERA_ERROR_INVALID_PARAMETER;
3361         }
3362         int ret = CAMERA_ERROR_NONE;
3363
3364         camera_cli_s *pc = (camera_cli_s *)camera;
3365         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_LENS_ORIENTATION;
3366         int sock_fd;
3367         if (pc->cb_info == NULL) {
3368                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3369                 return CAMERA_ERROR_INVALID_PARAMETER;
3370         }
3371         sock_fd = pc->cb_info->fd;
3372         int get_angle;
3373
3374         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3375         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3376
3377         if (ret == CAMERA_ERROR_NONE) {
3378                 muse_camera_msg_get(get_angle, pc->cb_info->recv_msg);
3379                 *angle = get_angle;
3380         }
3381         LOGD("ret : 0x%x", ret);
3382         return ret;
3383 }
3384
3385 int camera_attr_set_theater_mode(camera_h camera, camera_attr_theater_mode_e mode)
3386 {
3387         if (camera == NULL) {
3388                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3389                 return CAMERA_ERROR_INVALID_PARAMETER;
3390         }
3391         int ret = CAMERA_ERROR_NONE;
3392         camera_cli_s *pc = (camera_cli_s *)camera;
3393         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_THEATER_MODE;
3394         int sock_fd;
3395         if (pc->cb_info == NULL) {
3396                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3397                 return CAMERA_ERROR_INVALID_PARAMETER;
3398         }
3399         sock_fd = pc->cb_info->fd;
3400         int set_mode = (int)mode;
3401         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3402         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3403         LOGD("ret : 0x%x", ret);
3404         return ret;
3405 }
3406
3407 int camera_attr_get_theater_mode(camera_h camera, camera_attr_theater_mode_e *mode)
3408 {
3409         if (camera == NULL || mode == NULL) {
3410                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3411                 return CAMERA_ERROR_INVALID_PARAMETER;
3412         }
3413
3414         int ret = CAMERA_ERROR_NONE;
3415         camera_cli_s *pc = (camera_cli_s *)camera;
3416         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_THEATER_MODE;
3417         int sock_fd;
3418         if (pc->cb_info == NULL) {
3419                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3420                 return CAMERA_ERROR_INVALID_PARAMETER;
3421         }
3422         sock_fd = pc->cb_info->fd;
3423         int get_mode;
3424         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3425         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3426
3427         if (ret == CAMERA_ERROR_NONE) {
3428                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
3429                 *mode = (camera_attr_theater_mode_e)get_mode;
3430         }
3431         LOGD("ret : 0x%x", ret);
3432         return ret;
3433 }
3434
3435 int camera_attr_foreach_supported_theater_mode(camera_h camera, camera_attr_supported_theater_mode_cb foreach_cb, void *user_data)
3436 {
3437         if (camera == NULL || foreach_cb == NULL) {
3438                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3439                 return CAMERA_ERROR_INVALID_PARAMETER;
3440         }
3441         int ret = CAMERA_ERROR_NONE;
3442
3443         camera_cli_s *pc = (camera_cli_s *)camera;
3444         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_THEATER_MODE;
3445
3446         LOGD("Enter, handle :%x", pc->remote_handle);
3447
3448         int sock_fd;
3449         if (pc->cb_info == NULL) {
3450                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3451                 return CAMERA_ERROR_INVALID_PARAMETER;
3452         }
3453         sock_fd = pc->cb_info->fd;
3454         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_THEATER_MODE] = foreach_cb;
3455         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_THEATER_MODE] = user_data;
3456
3457         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3458
3459         LOGD("Finish, return :%x", ret);
3460
3461         return ret;
3462 }
3463
3464 int camera_attr_set_preview_fps(camera_h camera,  camera_attr_fps_e fps)
3465 {
3466         if( camera == NULL){
3467                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3468                 return CAMERA_ERROR_INVALID_PARAMETER;
3469         }
3470         int ret = CAMERA_ERROR_NONE;
3471         camera_cli_s *pc = (camera_cli_s *)camera;
3472         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_PREVIEW_FPS;
3473         int sock_fd;
3474         if (pc->cb_info == NULL) {
3475                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3476                 return CAMERA_ERROR_INVALID_PARAMETER;
3477         }
3478         sock_fd = pc->cb_info->fd;
3479         int set_fps = (int)fps;
3480         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3481         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_fps);
3482         LOGD("ret : 0x%x", ret);
3483         return ret;
3484 }
3485
3486
3487 int camera_attr_set_image_quality(camera_h camera,  int quality)
3488 {
3489         if( camera == NULL){
3490                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3491                 return CAMERA_ERROR_INVALID_PARAMETER;
3492         }
3493         int ret = CAMERA_ERROR_NONE;
3494
3495         camera_cli_s *pc = (camera_cli_s *)camera;
3496         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_IMAGE_QUALITY;
3497         int sock_fd;
3498         if (pc->cb_info == NULL) {
3499                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3500                 return CAMERA_ERROR_INVALID_PARAMETER;
3501         }
3502         sock_fd = pc->cb_info->fd;
3503         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3504         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, quality);
3505         LOGD("ret : 0x%x", ret);
3506         return ret;
3507 }
3508
3509 int camera_attr_get_preview_fps(camera_h camera,  camera_attr_fps_e *fps)
3510 {
3511         if( camera == NULL || fps == NULL){
3512                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3513                 return CAMERA_ERROR_INVALID_PARAMETER;
3514         }
3515         int ret = CAMERA_ERROR_NONE;
3516
3517         camera_cli_s *pc = (camera_cli_s *)camera;
3518         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_PREVIEW_FPS;
3519         int get_fps;
3520         int sock_fd;
3521         if (pc->cb_info == NULL) {
3522                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3523                 return CAMERA_ERROR_INVALID_PARAMETER;
3524         }
3525         sock_fd = pc->cb_info->fd;
3526
3527         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3528         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3529
3530         if (ret == CAMERA_ERROR_NONE) {
3531                 muse_camera_msg_get(get_fps, pc->cb_info->recv_msg);
3532                 *fps = (camera_attr_fps_e)get_fps;
3533         }
3534         LOGD("ret : 0x%x", ret);
3535         return ret;
3536 }
3537
3538
3539 int camera_attr_get_image_quality(camera_h camera, int *quality)
3540 {
3541         if( camera == NULL || quality == NULL){
3542                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3543                 return CAMERA_ERROR_INVALID_PARAMETER;
3544         }
3545         int ret = CAMERA_ERROR_NONE;
3546
3547         camera_cli_s *pc = (camera_cli_s *)camera;
3548         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_IMAGE_QUALITY;
3549         int sock_fd;
3550         if (pc->cb_info == NULL) {
3551                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3552                 return CAMERA_ERROR_INVALID_PARAMETER;
3553         }
3554         sock_fd = pc->cb_info->fd;
3555         int get_quality;
3556         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3557         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3558
3559         if (ret == CAMERA_ERROR_NONE) {
3560                 muse_camera_msg_get(get_quality, pc->cb_info->recv_msg);
3561                 *quality = get_quality;
3562         }
3563         LOGD("ret : 0x%x", ret);
3564         return ret;
3565 }
3566
3567
3568 int camera_attr_set_zoom(camera_h camera, int zoom)
3569 {
3570         if( camera == NULL){
3571                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3572                 return CAMERA_ERROR_INVALID_PARAMETER;
3573         }
3574         int ret = CAMERA_ERROR_NONE;
3575
3576         camera_cli_s *pc = (camera_cli_s *)camera;
3577         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_ZOOM;
3578         int sock_fd;
3579         if (pc->cb_info == NULL) {
3580                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3581                 return CAMERA_ERROR_INVALID_PARAMETER;
3582         }
3583         sock_fd = pc->cb_info->fd;
3584
3585         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3586         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, zoom);
3587         LOGD("ret : 0x%x", ret);
3588         return ret;
3589 }
3590
3591 int camera_attr_set_af_mode(camera_h camera,  camera_attr_af_mode_e mode)
3592 {
3593         if( camera == NULL){
3594                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3595                 return CAMERA_ERROR_INVALID_PARAMETER;
3596         }
3597         int ret = CAMERA_ERROR_NONE;
3598
3599         camera_cli_s *pc = (camera_cli_s *)camera;
3600         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_AF_MODE;
3601         int sock_fd;
3602         if (pc->cb_info == NULL) {
3603                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3604                 return CAMERA_ERROR_INVALID_PARAMETER;
3605         }
3606         sock_fd = pc->cb_info->fd;
3607         int set_mode = (int)mode;
3608         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3609         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3610         LOGD("ret : 0x%x", ret);
3611         return ret;
3612 }
3613
3614 int camera_attr_set_af_area(camera_h camera, int x, int y)
3615 {
3616         if( camera == NULL){
3617                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3618                 return CAMERA_ERROR_INVALID_PARAMETER;
3619         }
3620         int ret = CAMERA_ERROR_NONE;
3621         camera_cli_s *pc = (camera_cli_s *)camera;
3622         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_AF_AREA;
3623         int sock_fd = pc->cb_info->fd;
3624         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3625         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, x, INT, y);
3626         LOGD("ret : 0x%x", ret);
3627         return ret;
3628 }
3629
3630
3631 int camera_attr_clear_af_area(camera_h camera)
3632 {
3633         if( camera == NULL){
3634                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3635                 return CAMERA_ERROR_INVALID_PARAMETER;
3636         }
3637         int ret = CAMERA_ERROR_NONE;
3638
3639         camera_cli_s *pc = (camera_cli_s *)camera;
3640         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_CLEAR_AF_AREA;
3641         int sock_fd;
3642         if (pc->cb_info == NULL) {
3643                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3644                 return CAMERA_ERROR_INVALID_PARAMETER;
3645         }
3646         sock_fd = pc->cb_info->fd;
3647         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3648         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3649         LOGD("ret : 0x%x", ret);
3650         return ret;
3651 }
3652
3653
3654 int camera_attr_set_exposure_mode(camera_h camera,  camera_attr_exposure_mode_e mode)
3655 {
3656         if( camera == NULL){
3657                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3658                 return CAMERA_ERROR_INVALID_PARAMETER;
3659         }
3660
3661         if (mode < CAMERA_ATTR_EXPOSURE_MODE_OFF || mode > CAMERA_ATTR_EXPOSURE_MODE_CUSTOM) {
3662                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
3663                 return CAMERA_ERROR_INVALID_PARAMETER;
3664         }
3665
3666         int ret = CAMERA_ERROR_NONE;
3667         camera_cli_s *pc = (camera_cli_s *)camera;
3668         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EXPOSURE_MODE;
3669         int set_mode = (int)mode;
3670         int sock_fd;
3671         if (pc->cb_info == NULL) {
3672                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3673                 return CAMERA_ERROR_INVALID_PARAMETER;
3674         }
3675         sock_fd = pc->cb_info->fd;
3676         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3677         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3678         LOGD("ret : 0x%x", ret);
3679         return ret;
3680 }
3681
3682
3683 int camera_attr_set_exposure(camera_h camera, int value)
3684 {
3685         if( camera == NULL){
3686                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3687                 return CAMERA_ERROR_INVALID_PARAMETER;
3688         }
3689         int ret = CAMERA_ERROR_NONE;
3690
3691         camera_cli_s *pc = (camera_cli_s *)camera;
3692         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EXPOSURE;
3693         int sock_fd;
3694         if (pc->cb_info == NULL) {
3695                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3696                 return CAMERA_ERROR_INVALID_PARAMETER;
3697         }
3698         sock_fd = pc->cb_info->fd;
3699
3700         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3701         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, value);
3702         LOGD("ret : 0x%x", ret);
3703         return ret;
3704 }
3705
3706
3707 int camera_attr_set_iso(camera_h camera, camera_attr_iso_e iso)
3708 {
3709         if( camera == NULL){
3710                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3711                 return CAMERA_ERROR_INVALID_PARAMETER;
3712         }
3713         int ret = CAMERA_ERROR_NONE;
3714
3715         camera_cli_s *pc = (camera_cli_s *)camera;
3716         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_ISO;
3717         int sock_fd;
3718         if (pc->cb_info == NULL) {
3719                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3720                 return CAMERA_ERROR_INVALID_PARAMETER;
3721         }
3722         sock_fd = pc->cb_info->fd;
3723         int set_iso = (int)iso;
3724         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3725         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_iso);
3726         LOGD("ret : 0x%x", ret);
3727         return ret;
3728 }
3729
3730
3731 int camera_attr_set_brightness(camera_h camera, int level)
3732 {
3733         if( camera == NULL){
3734                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3735                 return CAMERA_ERROR_INVALID_PARAMETER;
3736         }
3737         int ret = CAMERA_ERROR_NONE;
3738
3739         camera_cli_s *pc = (camera_cli_s *)camera;
3740         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_BRIGHTNESS;
3741         int sock_fd;
3742         if (pc->cb_info == NULL) {
3743                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3744                 return CAMERA_ERROR_INVALID_PARAMETER;
3745         }
3746         sock_fd = pc->cb_info->fd;
3747
3748         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3749         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, level);
3750         LOGD("ret : 0x%x", ret);
3751         return ret;
3752 }
3753
3754
3755 int camera_attr_set_contrast(camera_h camera, int level)
3756 {
3757         if( camera == NULL){
3758                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3759                 return CAMERA_ERROR_INVALID_PARAMETER;
3760         }
3761         int ret = CAMERA_ERROR_NONE;
3762
3763         camera_cli_s *pc = (camera_cli_s *)camera;
3764         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_CONTRAST;
3765         int sock_fd;
3766         if (pc->cb_info == NULL) {
3767                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3768                 return CAMERA_ERROR_INVALID_PARAMETER;
3769         }
3770         sock_fd = pc->cb_info->fd;
3771
3772         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3773         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, level);
3774         LOGD("ret : 0x%x", ret);
3775         return ret;
3776 }
3777
3778
3779 int camera_attr_set_whitebalance(camera_h camera, camera_attr_whitebalance_e wb)
3780 {
3781         if (camera == NULL) {
3782                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3783                 return CAMERA_ERROR_INVALID_PARAMETER;
3784         }
3785
3786         if (wb < CAMERA_ATTR_WHITE_BALANCE_NONE || wb > CAMERA_ATTR_WHITE_BALANCE_CUSTOM) {
3787                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_NOT_SUPPORTED);
3788                 return CAMERA_ERROR_NOT_SUPPORTED;
3789         }
3790
3791         int ret = CAMERA_ERROR_NONE;
3792
3793         camera_cli_s *pc = (camera_cli_s *)camera;
3794         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_WHITEBALANCE;
3795         int sock_fd;
3796         if (pc->cb_info == NULL) {
3797                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3798                 return CAMERA_ERROR_INVALID_PARAMETER;
3799         }
3800         sock_fd = pc->cb_info->fd;
3801         int set_whitebalance = (int)wb;
3802         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3803         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_whitebalance);
3804         LOGD("ret : 0x%x", ret);
3805         return ret;
3806 }
3807
3808
3809 int camera_attr_set_effect(camera_h camera, camera_attr_effect_mode_e effect)
3810 {
3811         if( camera == NULL){
3812                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3813                 return CAMERA_ERROR_INVALID_PARAMETER;
3814         }
3815         int ret = CAMERA_ERROR_NONE;
3816
3817         camera_cli_s *pc = (camera_cli_s *)camera;
3818         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_EFFECT;
3819         int sock_fd;
3820         if (pc->cb_info == NULL) {
3821                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3822                 return CAMERA_ERROR_INVALID_PARAMETER;
3823         }
3824         sock_fd = pc->cb_info->fd;
3825         int set_effect = (int)effect;
3826         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3827         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_effect);
3828         LOGD("ret : 0x%x", ret);
3829         return ret;
3830 }
3831
3832
3833 int camera_attr_set_scene_mode(camera_h camera, camera_attr_scene_mode_e mode)
3834 {
3835         if( camera == NULL){
3836                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3837                 return CAMERA_ERROR_INVALID_PARAMETER;
3838         }
3839         int ret = CAMERA_ERROR_NONE;
3840
3841         camera_cli_s *pc = (camera_cli_s *)camera;
3842         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_SCENE_MODE;
3843         int sock_fd;
3844         if (pc->cb_info == NULL) {
3845                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3846                 return CAMERA_ERROR_INVALID_PARAMETER;
3847         }
3848         sock_fd = pc->cb_info->fd;
3849         int set_mode = (int)mode;
3850         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3851         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
3852         LOGD("ret : 0x%x", ret);
3853         return ret;
3854 }
3855
3856
3857 int camera_attr_enable_tag(camera_h camera, bool enable)
3858 {
3859         if( camera == NULL){
3860                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3861                 return CAMERA_ERROR_INVALID_PARAMETER;
3862         }
3863         int ret = CAMERA_ERROR_NONE;
3864         camera_cli_s *pc = (camera_cli_s *)camera;
3865         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_TAG;
3866         int sock_fd;
3867         if (pc->cb_info == NULL) {
3868                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3869                 return CAMERA_ERROR_INVALID_PARAMETER;
3870         }
3871         sock_fd = pc->cb_info->fd;
3872         int set_enable = (int)enable;
3873
3874         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3875         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
3876         LOGD("ret : 0x%x", ret);
3877         return ret;
3878 }
3879
3880
3881 int camera_attr_set_tag_image_description(camera_h camera, const char *description)
3882 {
3883         if( camera == NULL){
3884                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3885                 return CAMERA_ERROR_INVALID_PARAMETER;
3886         }
3887         if( description == NULL){
3888                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3889                 return CAMERA_ERROR_INVALID_PARAMETER;
3890         }
3891         int ret = CAMERA_ERROR_NONE;
3892         camera_cli_s *pc = (camera_cli_s *)camera;
3893         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_TAG_IMAGE_DESCRIPTION;
3894         int sock_fd;
3895         if (pc->cb_info == NULL) {
3896                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3897                 return CAMERA_ERROR_INVALID_PARAMETER;
3898         }
3899         sock_fd = pc->cb_info->fd;
3900         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3901         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, STRING, description);
3902         LOGD("ret : 0x%x", ret);
3903         return ret;
3904 }
3905
3906
3907 int camera_attr_set_tag_orientation(camera_h camera,  camera_attr_tag_orientation_e orientation)
3908 {
3909         if( camera == NULL){
3910                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3911                 return CAMERA_ERROR_INVALID_PARAMETER;
3912         }
3913         int ret = CAMERA_ERROR_NONE;
3914         camera_cli_s *pc = (camera_cli_s *)camera;
3915         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_TAG_ORIENTATION;
3916         int sock_fd;
3917         if (pc->cb_info == NULL) {
3918                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3919                 return CAMERA_ERROR_INVALID_PARAMETER;
3920         }
3921         sock_fd = pc->cb_info->fd;
3922         int set_orientation = (int)orientation;
3923
3924         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3925         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_orientation);
3926         LOGD("ret : 0x%x", ret);
3927         return ret;
3928 }
3929
3930
3931 int camera_attr_set_tag_software(camera_h camera,  const char *software)
3932 {
3933         if( camera == NULL){
3934                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3935                 return CAMERA_ERROR_INVALID_PARAMETER;
3936         }
3937         if( software == NULL){
3938                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3939                 return CAMERA_ERROR_INVALID_PARAMETER;
3940         }
3941         int ret = CAMERA_ERROR_NONE;
3942         camera_cli_s *pc = (camera_cli_s *)camera;
3943         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_TAG_SOFTWARE;
3944         int sock_fd;
3945         if (pc->cb_info == NULL) {
3946                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3947                 return CAMERA_ERROR_INVALID_PARAMETER;
3948         }
3949         sock_fd = pc->cb_info->fd;
3950         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3951         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, STRING, software);
3952         LOGD("ret : 0x%x", ret);
3953         return ret;
3954 }
3955
3956
3957 int camera_attr_set_geotag(camera_h camera, double latitude , double longitude, double altitude)
3958 {
3959         if( camera == NULL){
3960                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3961                 return CAMERA_ERROR_INVALID_PARAMETER;
3962         }
3963         int ret = CAMERA_ERROR_NONE;
3964         camera_cli_s *pc = (camera_cli_s *)camera;
3965         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_GEOTAG;
3966         int sock_fd;
3967         if (pc->cb_info == NULL) {
3968                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3969                 return CAMERA_ERROR_INVALID_PARAMETER;
3970         }
3971         sock_fd = pc->cb_info->fd;
3972         double set_geotag[3] = { latitude, longitude, altitude };
3973
3974         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3975         muse_camera_msg_send_array(api, sock_fd, pc->cb_info, ret,
3976                                                                         set_geotag, sizeof(set_geotag), sizeof(double));
3977         LOGD("ret : 0x%x", ret);
3978         return ret;
3979 }
3980
3981
3982 int camera_attr_remove_geotag(camera_h camera)
3983 {
3984         if( camera == NULL){
3985                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3986                 return CAMERA_ERROR_INVALID_PARAMETER;
3987         }
3988         int ret = CAMERA_ERROR_NONE;
3989         camera_cli_s *pc = (camera_cli_s *)camera;
3990         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_REMOVE_GEOTAG;
3991         int sock_fd;
3992         if (pc->cb_info == NULL) {
3993                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
3994                 return CAMERA_ERROR_INVALID_PARAMETER;
3995         }
3996         sock_fd = pc->cb_info->fd;
3997         LOGD("Enter, remote_handle : %x", pc->remote_handle);
3998         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
3999         LOGD("ret : 0x%x", ret);
4000         return ret;
4001 }
4002
4003
4004 int camera_attr_set_flash_mode(camera_h camera, camera_attr_flash_mode_e mode)
4005 {
4006         if( camera == NULL){
4007                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4008                 return CAMERA_ERROR_INVALID_PARAMETER;
4009         }
4010         int ret = CAMERA_ERROR_NONE;
4011         camera_cli_s *pc = (camera_cli_s *)camera;
4012         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_FLASH_MODE;
4013         int sock_fd;
4014         if (pc->cb_info == NULL) {
4015                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4016                 return CAMERA_ERROR_INVALID_PARAMETER;
4017         }
4018         sock_fd = pc->cb_info->fd;
4019         int set_mode = (int)mode;
4020
4021         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4022         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
4023         LOGD("ret : 0x%x", ret);
4024         return ret;
4025 }
4026
4027
4028 int camera_attr_get_zoom(camera_h camera, int *zoom)
4029 {
4030         if( camera == NULL || zoom == NULL){
4031                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4032                 return CAMERA_ERROR_INVALID_PARAMETER;
4033         }
4034         int ret = CAMERA_ERROR_NONE;
4035
4036         camera_cli_s *pc = (camera_cli_s *)camera;
4037         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_ZOOM;
4038         int get_zoom;
4039         int sock_fd;
4040         if (pc->cb_info == NULL) {
4041                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4042                 return CAMERA_ERROR_INVALID_PARAMETER;
4043         }
4044         sock_fd = pc->cb_info->fd;
4045
4046         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4047         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4048
4049         if (ret == CAMERA_ERROR_NONE) {
4050                 muse_camera_msg_get(get_zoom, pc->cb_info->recv_msg);
4051                 *zoom = get_zoom;
4052         }
4053         LOGD("ret : 0x%x", ret);
4054         return ret;
4055 }
4056
4057
4058 int camera_attr_get_zoom_range(camera_h camera, int *min, int *max)
4059 {
4060         if( camera == NULL || min == NULL || max == NULL ){
4061                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4062                 return CAMERA_ERROR_INVALID_PARAMETER;
4063         }
4064         int ret = CAMERA_ERROR_NONE;
4065         camera_cli_s *pc = (camera_cli_s *)camera;
4066         int sock_fd;
4067         if (pc->cb_info == NULL) {
4068                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4069                 return CAMERA_ERROR_INVALID_PARAMETER;
4070         }
4071         sock_fd = pc->cb_info->fd;
4072         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_ZOOM_RANGE;
4073         int get_min;
4074         int get_max;
4075
4076         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4077         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4078
4079         if (ret == CAMERA_ERROR_NONE) {
4080                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4081                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4082                 *min = get_min;
4083                 *max = get_max;
4084         }
4085         LOGD("ret : 0x%x", ret);
4086         return ret;
4087 }
4088
4089
4090 int camera_attr_get_af_mode( camera_h camera,  camera_attr_af_mode_e *mode)
4091 {
4092         if( camera == NULL || mode == NULL){
4093                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4094                 return CAMERA_ERROR_INVALID_PARAMETER;
4095         }
4096         int ret = CAMERA_ERROR_NONE;
4097         camera_cli_s *pc = (camera_cli_s *)camera;
4098         int sock_fd;
4099         if (pc->cb_info == NULL) {
4100                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4101                 return CAMERA_ERROR_INVALID_PARAMETER;
4102         }
4103         sock_fd = pc->cb_info->fd;
4104         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_AF_MODE;
4105         int get_mode;
4106
4107         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4108         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4109
4110         if (ret == CAMERA_ERROR_NONE) {
4111                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4112                 *mode = (camera_attr_af_mode_e)get_mode;
4113         }
4114         LOGD("ret : 0x%x", ret);
4115         return ret;
4116 }
4117
4118
4119 int camera_attr_get_exposure_mode( camera_h camera, camera_attr_exposure_mode_e *mode)
4120 {
4121         if( camera == NULL|| mode == NULL){
4122                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4123                 return CAMERA_ERROR_INVALID_PARAMETER;
4124         }
4125         int ret = CAMERA_ERROR_NONE;
4126         camera_cli_s *pc = (camera_cli_s *)camera;
4127         int sock_fd;
4128         if (pc->cb_info == NULL) {
4129                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4130                 return CAMERA_ERROR_INVALID_PARAMETER;
4131         }
4132         sock_fd = pc->cb_info->fd;
4133         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EXPOSURE_MODE;
4134         int get_mode;
4135
4136         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4137         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4138
4139         if (ret == CAMERA_ERROR_NONE) {
4140                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4141                 *mode = (camera_attr_exposure_mode_e)get_mode;
4142         }
4143         LOGD("ret : 0x%x", ret);
4144         return ret;
4145 }
4146
4147 int camera_attr_get_exposure(camera_h camera, int *value)
4148 {
4149         if( camera == NULL || value == NULL){
4150                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4151                 return CAMERA_ERROR_INVALID_PARAMETER;
4152         }
4153         int ret = CAMERA_ERROR_NONE;
4154         camera_cli_s *pc = (camera_cli_s *)camera;
4155         int sock_fd;
4156         if (pc->cb_info == NULL) {
4157                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4158                 return CAMERA_ERROR_INVALID_PARAMETER;
4159         }
4160         sock_fd = pc->cb_info->fd;
4161         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EXPOSURE;
4162         int get_value;
4163
4164         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4165         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4166
4167         if (ret == CAMERA_ERROR_NONE) {
4168                 muse_camera_msg_get(get_value, pc->cb_info->recv_msg);
4169                 *value = get_value;
4170         }
4171         LOGD("ret : 0x%x", ret);
4172         return ret;
4173 }
4174
4175
4176 int camera_attr_get_exposure_range(camera_h camera, int *min, int *max)
4177 {
4178         if( camera == NULL || min == NULL || max == NULL ){
4179                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4180                 return CAMERA_ERROR_INVALID_PARAMETER;
4181         }
4182         int ret = CAMERA_ERROR_NONE;
4183         camera_cli_s *pc = (camera_cli_s *)camera;
4184         int sock_fd;
4185         if (pc->cb_info == NULL) {
4186                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4187                 return CAMERA_ERROR_INVALID_PARAMETER;
4188         }
4189         sock_fd = pc->cb_info->fd;
4190         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EXPOSURE_RANGE;
4191         int get_min;
4192         int get_max;
4193
4194         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4195         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4196
4197         if (ret == CAMERA_ERROR_NONE) {
4198                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4199                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4200                 *min = get_min;
4201                 *max = get_max;
4202         }
4203         LOGD("ret : 0x%x", ret);
4204         return ret;
4205 }
4206
4207
4208 int camera_attr_get_iso( camera_h camera,  camera_attr_iso_e *iso)
4209 {
4210         if( camera == NULL || iso == NULL){
4211                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4212                 return CAMERA_ERROR_INVALID_PARAMETER;
4213         }
4214         int ret = CAMERA_ERROR_NONE;
4215         camera_cli_s *pc = (camera_cli_s *)camera;
4216         int sock_fd;
4217         if (pc->cb_info == NULL) {
4218                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4219                 return CAMERA_ERROR_INVALID_PARAMETER;
4220         }
4221         sock_fd = pc->cb_info->fd;
4222         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_ISO;
4223         int get_iso;
4224
4225         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4226         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4227
4228         if (ret == CAMERA_ERROR_NONE) {
4229                 muse_camera_msg_get(get_iso, pc->cb_info->recv_msg);
4230                 *iso = (camera_attr_iso_e)get_iso;
4231         }
4232         LOGD("ret : 0x%x", ret);
4233         return ret;
4234 }
4235
4236
4237 int camera_attr_get_brightness(camera_h camera,  int *level)
4238 {
4239         if( camera == NULL || level == NULL){
4240                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4241                 return CAMERA_ERROR_INVALID_PARAMETER;
4242         }
4243         int ret = CAMERA_ERROR_NONE;
4244         camera_cli_s *pc = (camera_cli_s *)camera;
4245         int sock_fd;
4246         if (pc->cb_info == NULL) {
4247                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4248                 return CAMERA_ERROR_INVALID_PARAMETER;
4249         }
4250         sock_fd = pc->cb_info->fd;
4251         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_BRIGHTNESS;
4252         int get_level;
4253
4254         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4255         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4256
4257         if (ret == CAMERA_ERROR_NONE) {
4258                 muse_camera_msg_get(get_level, pc->cb_info->recv_msg);
4259                 *level = get_level;
4260         }
4261         LOGD("ret : 0x%x", ret);
4262         return ret;
4263 }
4264
4265
4266 int camera_attr_get_brightness_range(camera_h camera, int *min, int *max)
4267 {
4268         if( camera == NULL || min == NULL || max == NULL ){
4269                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4270                 return CAMERA_ERROR_INVALID_PARAMETER;
4271         }
4272         int ret = CAMERA_ERROR_NONE;
4273         camera_cli_s *pc = (camera_cli_s *)camera;
4274         int sock_fd;
4275         if (pc->cb_info == NULL) {
4276                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4277                 return CAMERA_ERROR_INVALID_PARAMETER;
4278         }
4279         sock_fd = pc->cb_info->fd;
4280         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_BRIGHTNESS_RANGE;
4281         int get_min;
4282         int get_max;
4283
4284         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4285         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4286
4287         if (ret == CAMERA_ERROR_NONE) {
4288                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4289                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4290                 *min = get_min;
4291                 *max = get_max;
4292         }
4293         LOGD("ret : 0x%x", ret);
4294         return ret;
4295 }
4296
4297
4298 int camera_attr_get_contrast(camera_h camera,  int *level)
4299 {
4300         if( camera == NULL || level == NULL){
4301                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4302                 return CAMERA_ERROR_INVALID_PARAMETER;
4303         }
4304         int ret = CAMERA_ERROR_NONE;
4305         camera_cli_s *pc = (camera_cli_s *)camera;
4306         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_CONTRAST;
4307         int sock_fd;
4308         if (pc->cb_info == NULL) {
4309                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4310                 return CAMERA_ERROR_INVALID_PARAMETER;
4311         }
4312         sock_fd = pc->cb_info->fd;
4313         int get_level;
4314
4315         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4316         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4317
4318         if (ret == CAMERA_ERROR_NONE) {
4319                 muse_camera_msg_get(get_level, pc->cb_info->recv_msg);
4320                 *level = get_level;
4321         }
4322         LOGD("ret : 0x%x", ret);
4323         return ret;
4324 }
4325
4326
4327 int camera_attr_get_contrast_range(camera_h camera, int *min , int *max)
4328 {
4329         if( camera == NULL || min == NULL || max == NULL ){
4330                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4331                 return CAMERA_ERROR_INVALID_PARAMETER;
4332         }
4333         int ret = CAMERA_ERROR_NONE;
4334         camera_cli_s *pc = (camera_cli_s *)camera;
4335         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_CONTRAST_RANGE;
4336         int sock_fd;
4337         if (pc->cb_info == NULL) {
4338                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4339                 return CAMERA_ERROR_INVALID_PARAMETER;
4340         }
4341         sock_fd = pc->cb_info->fd;
4342         int get_min;
4343         int get_max;
4344
4345         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4346         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4347
4348         if (ret == CAMERA_ERROR_NONE) {
4349                 muse_camera_msg_get(get_min, pc->cb_info->recv_msg);
4350                 muse_camera_msg_get(get_max, pc->cb_info->recv_msg);
4351                 *min = get_min;
4352                 *max = get_max;
4353         }
4354         LOGD("ret : 0x%x", ret);
4355         return ret;
4356 }
4357
4358
4359 int camera_attr_get_whitebalance(camera_h camera,  camera_attr_whitebalance_e *wb)
4360 {
4361         if( camera == NULL || wb == NULL){
4362                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4363                 return CAMERA_ERROR_INVALID_PARAMETER;
4364         }
4365         int ret = CAMERA_ERROR_NONE;
4366         camera_cli_s *pc = (camera_cli_s *)camera;
4367         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_WHITEBALANCE;
4368         int sock_fd;
4369         if (pc->cb_info == NULL) {
4370                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4371                 return CAMERA_ERROR_INVALID_PARAMETER;
4372         }
4373         sock_fd = pc->cb_info->fd;
4374         int get_wb;
4375
4376         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4377         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4378
4379         if (ret == CAMERA_ERROR_NONE) {
4380                 muse_camera_msg_get(get_wb, pc->cb_info->recv_msg);
4381                 *wb = (camera_attr_whitebalance_e)get_wb;
4382         }
4383         LOGD("ret : 0x%x", ret);
4384         return ret;
4385 }
4386
4387
4388 int camera_attr_get_effect(camera_h camera, camera_attr_effect_mode_e *effect)
4389 {
4390         if( camera == NULL || effect == NULL ){
4391                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4392                 return CAMERA_ERROR_INVALID_PARAMETER;
4393         }
4394
4395         int ret = CAMERA_ERROR_NONE;
4396         camera_cli_s *pc = (camera_cli_s *)camera;
4397         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_EFFECT;
4398         int sock_fd;
4399         if (pc->cb_info == NULL) {
4400                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4401                 return CAMERA_ERROR_INVALID_PARAMETER;
4402         }
4403         sock_fd = pc->cb_info->fd;
4404         int get_effect;
4405
4406         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4407         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4408
4409         if (ret == CAMERA_ERROR_NONE) {
4410                 muse_camera_msg_get(get_effect, pc->cb_info->recv_msg);
4411                 *effect = (camera_attr_effect_mode_e)get_effect;
4412         }
4413         LOGD("ret : 0x%x", ret);
4414         return ret;
4415 }
4416
4417
4418 int camera_attr_get_scene_mode(camera_h camera,  camera_attr_scene_mode_e *mode)
4419 {
4420         if( camera == NULL || mode == NULL){
4421                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4422                 return CAMERA_ERROR_INVALID_PARAMETER;
4423         }
4424
4425         int ret = CAMERA_ERROR_NONE;
4426         camera_cli_s *pc = (camera_cli_s *)camera;
4427         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_SCENE_MODE;
4428         int sock_fd;
4429         if (pc->cb_info == NULL) {
4430                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4431                 return CAMERA_ERROR_INVALID_PARAMETER;
4432         }
4433         sock_fd = pc->cb_info->fd;
4434         int get_mode;
4435
4436         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4437         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4438
4439         if (ret == CAMERA_ERROR_NONE) {
4440                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4441                 *mode = (camera_attr_scene_mode_e)get_mode;
4442         }
4443         LOGD("ret : 0x%x", ret);
4444         return ret;
4445 }
4446
4447
4448 int camera_attr_is_enabled_tag(camera_h camera,  bool *enable)
4449 {
4450         if( camera == NULL || enable == NULL){
4451                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4452                 return CAMERA_ERROR_INVALID_PARAMETER;
4453         }
4454
4455         int ret = CAMERA_ERROR_NONE;
4456         camera_cli_s *pc = (camera_cli_s *)camera;
4457         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_TAG;
4458         int sock_fd;
4459         if (pc->cb_info == NULL) {
4460                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4461                 return CAMERA_ERROR_INVALID_PARAMETER;
4462         }
4463         sock_fd = pc->cb_info->fd;
4464         int get_enabled;
4465
4466         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4467         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4468
4469         if (ret == CAMERA_ERROR_NONE) {
4470                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
4471                 *enable = (bool)get_enabled;
4472         }
4473         LOGD("ret : 0x%x", ret);
4474         return ret;
4475 }
4476
4477
4478 int camera_attr_get_tag_image_description(camera_h camera,  char **description)
4479 {
4480         if( camera == NULL || description == NULL){
4481                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4482                 return CAMERA_ERROR_INVALID_PARAMETER;
4483         }
4484
4485         int ret = CAMERA_ERROR_NONE;
4486         camera_cli_s *pc = (camera_cli_s *)camera;
4487         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_TAG_IMAGE_DESCRIPTION;
4488         int sock_fd;
4489         if (pc->cb_info == NULL) {
4490                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4491                 return CAMERA_ERROR_INVALID_PARAMETER;
4492         }
4493         sock_fd = pc->cb_info->fd;
4494         char get_description[MUSE_CAMERA_MSG_MAX_LENGTH] = {0,};
4495
4496         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4497         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4498
4499         if (ret == CAMERA_ERROR_NONE) {
4500                 muse_camera_msg_get_string(get_description, pc->cb_info->recv_msg);
4501                 *description = strdup(get_description);
4502         }
4503         LOGD("ret : 0x%x", ret);
4504         return ret;
4505 }
4506
4507
4508 int camera_attr_get_tag_orientation(camera_h camera, camera_attr_tag_orientation_e *orientation)
4509 {
4510         if( camera == NULL || orientation == NULL){
4511                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4512                 return CAMERA_ERROR_INVALID_PARAMETER;
4513         }
4514
4515         int ret = CAMERA_ERROR_NONE;
4516         camera_cli_s *pc = (camera_cli_s *)camera;
4517         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_TAG_ORIENTATION;
4518         int sock_fd;
4519         if (pc->cb_info == NULL) {
4520                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4521                 return CAMERA_ERROR_INVALID_PARAMETER;
4522         }
4523         sock_fd = pc->cb_info->fd;
4524         int get_orientation;
4525
4526         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4527         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4528
4529         if (ret == CAMERA_ERROR_NONE) {
4530                 muse_camera_msg_get(get_orientation, pc->cb_info->recv_msg);
4531                 *orientation = (camera_attr_tag_orientation_e)get_orientation;
4532                 LOGD("success, orientation : %d", *orientation);
4533         }
4534         LOGD("ret : 0x%x", ret);
4535         return ret;
4536 }
4537
4538
4539 int camera_attr_get_tag_software(camera_h camera, char **software)
4540 {
4541         if( camera == NULL || software == NULL ){
4542                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4543                 return CAMERA_ERROR_INVALID_PARAMETER;
4544         }
4545
4546         int ret = CAMERA_ERROR_NONE;
4547         camera_cli_s *pc = (camera_cli_s *)camera;
4548         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_TAG_SOFTWARE;
4549         int sock_fd;
4550         if (pc->cb_info == NULL) {
4551                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4552                 return CAMERA_ERROR_INVALID_PARAMETER;
4553         }
4554         sock_fd = pc->cb_info->fd;
4555         char get_software[MUSE_CAMERA_MSG_MAX_LENGTH] = {0,};
4556
4557         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4558         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4559
4560         if (ret == CAMERA_ERROR_NONE) {
4561                 muse_camera_msg_get_string(get_software, pc->cb_info->recv_msg);
4562                 *software = strdup(get_software);
4563         }
4564         LOGD("ret : 0x%x", ret);
4565         return ret;
4566 }
4567
4568
4569 int camera_attr_get_geotag(camera_h camera, double *latitude , double *longitude, double *altitude)
4570 {
4571         if( camera == NULL || latitude == NULL || longitude == NULL || altitude == NULL){
4572                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4573                 return CAMERA_ERROR_INVALID_PARAMETER;
4574         }
4575
4576         int ret = CAMERA_ERROR_NONE;
4577         camera_cli_s *pc = (camera_cli_s *)camera;
4578         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_GEOTAG;
4579         double get_geotag[3] = {0,};
4580         int sock_fd;
4581         if (pc->cb_info == NULL) {
4582                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4583                 return CAMERA_ERROR_INVALID_PARAMETER;
4584         }
4585         sock_fd = pc->cb_info->fd;
4586         int valid = 0;
4587         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4588         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4589
4590         if (ret == CAMERA_ERROR_NONE) {
4591                 muse_camera_msg_get_array(get_geotag, pc->cb_info->recv_msg);
4592                 *latitude = get_geotag[0];
4593                 *longitude = get_geotag[1];
4594                 *altitude = get_geotag[2];
4595         } else {
4596                 LOGE("Returned value is not valid : 0x%x", valid);
4597         }
4598
4599         LOGD("ret : 0x%x", ret);
4600
4601         return ret;
4602 }
4603
4604
4605 int camera_attr_get_flash_mode(camera_h camera,  camera_attr_flash_mode_e *mode)
4606 {
4607         if( camera == NULL || mode == NULL){
4608                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4609                 return CAMERA_ERROR_INVALID_PARAMETER;
4610         }
4611
4612         int ret = CAMERA_ERROR_NONE;
4613         camera_cli_s *pc = (camera_cli_s *)camera;
4614         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_FLASH_MODE;
4615         int sock_fd;
4616         if (pc->cb_info == NULL) {
4617                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4618                 return CAMERA_ERROR_INVALID_PARAMETER;
4619         }
4620         sock_fd = pc->cb_info->fd;
4621         int get_mode;
4622
4623         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4624         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4625
4626         if (ret == CAMERA_ERROR_NONE) {
4627                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
4628                 *mode = (camera_attr_flash_mode_e)get_mode;
4629         }
4630         LOGD("ret : 0x%x", ret);
4631         return ret;
4632 }
4633
4634
4635 int camera_attr_foreach_supported_af_mode( camera_h camera, camera_attr_supported_af_mode_cb foreach_cb , void *user_data)
4636 {
4637         if( camera == NULL || foreach_cb == NULL){
4638                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4639                 return CAMERA_ERROR_INVALID_PARAMETER;
4640         }
4641         int ret = CAMERA_ERROR_NONE;
4642
4643         camera_cli_s *pc = (camera_cli_s *)camera;
4644         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_AF_MODE;
4645
4646         LOGD("Enter, handle :%x", pc->remote_handle);
4647
4648         int sock_fd;
4649         if (pc->cb_info == NULL) {
4650                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4651                 return CAMERA_ERROR_INVALID_PARAMETER;
4652         }
4653         sock_fd = pc->cb_info->fd;
4654         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_AF_MODE] = foreach_cb;
4655         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_AF_MODE] = user_data;
4656
4657         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4658         LOGD("ret : 0x%x", ret);
4659         return ret;
4660 }
4661
4662
4663 int camera_attr_foreach_supported_exposure_mode(camera_h camera, camera_attr_supported_exposure_mode_cb foreach_cb , void *user_data)
4664 {
4665         if( camera == NULL || foreach_cb == NULL){
4666                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4667                 return CAMERA_ERROR_INVALID_PARAMETER;
4668         }
4669         int ret = CAMERA_ERROR_NONE;
4670
4671         camera_cli_s *pc = (camera_cli_s *)camera;
4672         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_EXPOSURE_MODE;
4673
4674         LOGD("Enter, handle :%x", pc->remote_handle);
4675
4676         int sock_fd;
4677         if (pc->cb_info == NULL) {
4678                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4679                 return CAMERA_ERROR_INVALID_PARAMETER;
4680         }
4681         sock_fd = pc->cb_info->fd;
4682         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EXPOSURE_MODE] = foreach_cb;
4683         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EXPOSURE_MODE] = user_data;
4684
4685         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4686         LOGD("ret : 0x%x", ret);
4687         return ret;
4688 }
4689
4690
4691 int camera_attr_foreach_supported_iso( camera_h camera, camera_attr_supported_iso_cb foreach_cb , void *user_data)
4692 {
4693         if( camera == NULL || foreach_cb == NULL){
4694                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4695                 return CAMERA_ERROR_INVALID_PARAMETER;
4696         }
4697         int ret = CAMERA_ERROR_NONE;
4698
4699         camera_cli_s *pc = (camera_cli_s *)camera;
4700         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_ISO;
4701
4702         LOGD("Enter, handle :%x", pc->remote_handle);
4703
4704         int sock_fd;
4705         if (pc->cb_info == NULL) {
4706                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4707                 return CAMERA_ERROR_INVALID_PARAMETER;
4708         }
4709         sock_fd = pc->cb_info->fd;
4710         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_ISO] = foreach_cb;
4711         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_ISO] = user_data;
4712
4713         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4714         LOGD("ret : 0x%x", ret);
4715         return ret;
4716 }
4717
4718
4719 int camera_attr_foreach_supported_whitebalance(camera_h camera, camera_attr_supported_whitebalance_cb foreach_cb , void *user_data)
4720 {
4721         if( camera == NULL || foreach_cb == NULL){
4722                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4723                 return CAMERA_ERROR_INVALID_PARAMETER;
4724         }
4725         int ret = CAMERA_ERROR_NONE;
4726
4727         camera_cli_s *pc = (camera_cli_s *)camera;
4728         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_WHITEBALANCE;
4729
4730         LOGD("Enter, handle :%x", pc->remote_handle);
4731
4732         int sock_fd;
4733         if (pc->cb_info == NULL) {
4734                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4735                 return CAMERA_ERROR_INVALID_PARAMETER;
4736         }
4737         sock_fd = pc->cb_info->fd;
4738         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_WHITEBALANCE] = foreach_cb;
4739         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_WHITEBALANCE] = user_data;
4740
4741         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4742         LOGD("ret : 0x%x", ret);
4743         return ret;
4744 }
4745
4746
4747 int camera_attr_foreach_supported_effect(camera_h camera, camera_attr_supported_effect_cb foreach_cb , void *user_data)
4748 {
4749         if( camera == NULL || foreach_cb == NULL){
4750                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4751                 return CAMERA_ERROR_INVALID_PARAMETER;
4752         }
4753         int ret = CAMERA_ERROR_NONE;
4754
4755         camera_cli_s *pc = (camera_cli_s *)camera;
4756         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_EFFECT;
4757
4758         LOGD("Enter, handle :%x", pc->remote_handle);
4759
4760         int sock_fd;
4761         if (pc->cb_info == NULL) {
4762                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4763                 return CAMERA_ERROR_INVALID_PARAMETER;
4764         }
4765         sock_fd = pc->cb_info->fd;
4766         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EFFECT] = foreach_cb;
4767         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EFFECT] = user_data;
4768
4769         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4770         LOGD("ret : 0x%x", ret);
4771         return ret;
4772 }
4773
4774
4775 int camera_attr_foreach_supported_scene_mode(camera_h camera, camera_attr_supported_scene_mode_cb foreach_cb , void *user_data)
4776 {
4777         if( camera == NULL || foreach_cb == NULL){
4778                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4779                 return CAMERA_ERROR_INVALID_PARAMETER;
4780         }
4781         int ret = CAMERA_ERROR_NONE;
4782
4783         camera_cli_s *pc = (camera_cli_s *)camera;
4784         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_SCENE_MODE;
4785
4786         LOGD("Enter, handle :%x", pc->remote_handle);
4787
4788         int sock_fd;
4789         if (pc->cb_info == NULL) {
4790                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4791                 return CAMERA_ERROR_INVALID_PARAMETER;
4792         }
4793         sock_fd = pc->cb_info->fd;
4794         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_SCENE_MODE] = foreach_cb;
4795         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_SCENE_MODE] = user_data;
4796
4797         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4798         LOGD("ret : 0x%x", ret);
4799         return ret;
4800 }
4801
4802
4803 int camera_attr_foreach_supported_flash_mode(camera_h camera, camera_attr_supported_flash_mode_cb foreach_cb , void *user_data)
4804 {
4805         if( camera == NULL || foreach_cb == NULL){
4806                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4807                 return CAMERA_ERROR_INVALID_PARAMETER;
4808         }
4809         int ret = CAMERA_ERROR_NONE;
4810
4811         camera_cli_s *pc = (camera_cli_s *)camera;
4812         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FLASH_MODE;
4813
4814         LOGD("Enter, handle :%x", pc->remote_handle);
4815
4816         int sock_fd;
4817         if (pc->cb_info == NULL) {
4818                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4819                 return CAMERA_ERROR_INVALID_PARAMETER;
4820         }
4821         sock_fd = pc->cb_info->fd;
4822         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FLASH_MODE] = foreach_cb;
4823         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FLASH_MODE] = user_data;
4824
4825         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4826         LOGD("ret : 0x%x", ret);
4827         return ret;
4828 }
4829
4830
4831 int camera_attr_foreach_supported_fps(camera_h camera, camera_attr_supported_fps_cb foreach_cb , void *user_data)
4832 {
4833         if( camera == NULL || foreach_cb == NULL){
4834                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4835                 return CAMERA_ERROR_INVALID_PARAMETER;
4836         }
4837         int ret = CAMERA_ERROR_NONE;
4838
4839         camera_cli_s *pc = (camera_cli_s *)camera;
4840         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FPS;
4841         int sock_fd;
4842         if (pc->cb_info == NULL) {
4843                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4844                 return CAMERA_ERROR_INVALID_PARAMETER;
4845         }
4846         sock_fd = pc->cb_info->fd;
4847         LOGD("Enter, handle :%x", pc->remote_handle);
4848         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS] = foreach_cb;
4849         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS] = user_data;
4850
4851         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4852         LOGD("Enter, handle :%x", pc->remote_handle);
4853         return ret;
4854 }
4855
4856 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)
4857 {
4858         if( camera == NULL || foreach_cb == NULL){
4859                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4860                 return CAMERA_ERROR_INVALID_PARAMETER;
4861         }
4862         int ret = CAMERA_ERROR_NONE;
4863
4864         camera_cli_s *pc = (camera_cli_s *)camera;
4865         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FPS_BY_RESOLUTION;
4866         int sock_fd;
4867         if (pc->cb_info == NULL) {
4868                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4869                 return CAMERA_ERROR_INVALID_PARAMETER;
4870         }
4871         sock_fd = pc->cb_info->fd;
4872         LOGD("Enter, handle :%x", pc->remote_handle);
4873         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS_BY_RESOLUTION] = foreach_cb;
4874         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS_BY_RESOLUTION] = user_data;
4875
4876         muse_camera_msg_send2(api, sock_fd, pc->cb_info, ret, INT, width, INT, height);
4877         LOGD("ret : 0x%x", ret);
4878         return ret;
4879 }
4880
4881 int camera_attr_foreach_supported_stream_flip(camera_h camera, camera_attr_supported_stream_flip_cb foreach_cb, void *user_data)
4882 {
4883         if( camera == NULL || foreach_cb == NULL){
4884                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4885                 return CAMERA_ERROR_INVALID_PARAMETER;
4886         }
4887         int ret = CAMERA_ERROR_NONE;
4888
4889         camera_cli_s *pc = (camera_cli_s *)camera;
4890         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_STREAM_FLIP;
4891         int sock_fd;
4892         if (pc->cb_info == NULL) {
4893                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4894                 return CAMERA_ERROR_INVALID_PARAMETER;
4895         }
4896         sock_fd = pc->cb_info->fd;
4897         LOGD("Enter, handle :%x", pc->remote_handle);
4898         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_FLIP] = foreach_cb;
4899         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_FLIP] = user_data;
4900
4901         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4902         LOGD("ret : 0x%x", ret);
4903         return ret;
4904 }
4905
4906
4907 int camera_attr_foreach_supported_stream_rotation(camera_h camera, camera_attr_supported_stream_rotation_cb foreach_cb, void *user_data)
4908 {
4909         if( camera == NULL || foreach_cb == NULL){
4910                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4911                 return CAMERA_ERROR_INVALID_PARAMETER;
4912         }
4913         int ret = CAMERA_ERROR_NONE;
4914
4915         camera_cli_s *pc = (camera_cli_s *)camera;
4916         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_STREAM_ROTATION;
4917         int sock_fd;
4918         if (pc->cb_info == NULL) {
4919                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4920                 return CAMERA_ERROR_INVALID_PARAMETER;
4921         }
4922         sock_fd = pc->cb_info->fd;
4923         LOGD("Enter, handle :%x", pc->remote_handle);
4924         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_ROTATION] = foreach_cb;
4925         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_ROTATION] = user_data;
4926
4927         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4928         LOGD("ret : 0x%x", ret);
4929         return ret;
4930 }
4931
4932
4933 int camera_attr_set_stream_rotation(camera_h camera , camera_rotation_e rotation)
4934 {
4935         if( camera == NULL){
4936                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4937                 return CAMERA_ERROR_INVALID_PARAMETER;
4938         }
4939
4940         int ret = CAMERA_ERROR_NONE;
4941         camera_cli_s *pc = (camera_cli_s *)camera;
4942         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_STREAM_ROTATION;
4943         int sock_fd;
4944         if (pc->cb_info == NULL) {
4945                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4946                 return CAMERA_ERROR_INVALID_PARAMETER;
4947         }
4948         sock_fd = pc->cb_info->fd;
4949         int set_rotation = (int)rotation;
4950
4951         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4952         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_rotation);
4953         LOGD("ret : 0x%x", ret);
4954         return ret;
4955 }
4956
4957
4958 int camera_attr_get_stream_rotation(camera_h camera , camera_rotation_e *rotation)
4959 {
4960         if( camera == NULL || rotation == NULL ){
4961                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4962                 return CAMERA_ERROR_INVALID_PARAMETER;
4963         }
4964
4965         int ret = CAMERA_ERROR_NONE;
4966         camera_cli_s *pc = (camera_cli_s *)camera;
4967         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_STREAM_ROTATION;
4968         int sock_fd;
4969         if (pc->cb_info == NULL) {
4970                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4971                 return CAMERA_ERROR_INVALID_PARAMETER;
4972         }
4973         sock_fd = pc->cb_info->fd;
4974         int get_rotation;
4975
4976         LOGD("Enter, remote_handle : %x", pc->remote_handle);
4977         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
4978
4979         if (ret == CAMERA_ERROR_NONE) {
4980                 muse_camera_msg_get(get_rotation, pc->cb_info->recv_msg);
4981                 *rotation = (camera_rotation_e)get_rotation;
4982         }
4983         LOGD("ret : 0x%x", ret);
4984         return ret;
4985 }
4986
4987
4988 int camera_attr_set_stream_flip(camera_h camera , camera_flip_e flip)
4989 {
4990         if( camera == NULL){
4991                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
4992                 return CAMERA_ERROR_INVALID_PARAMETER;
4993         }
4994
4995         int ret = CAMERA_ERROR_NONE;
4996         camera_cli_s *pc = (camera_cli_s *)camera;
4997         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_STREAM_FLIP;
4998         int sock_fd;
4999         if (pc->cb_info == NULL) {
5000                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5001                 return CAMERA_ERROR_INVALID_PARAMETER;
5002         }
5003         sock_fd = pc->cb_info->fd;
5004         int set_flip = (int)flip;
5005
5006         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5007         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_flip);
5008         LOGD("ret : 0x%x", ret);
5009         return ret;
5010 }
5011
5012
5013 int camera_attr_get_stream_flip(camera_h camera , camera_flip_e *flip)
5014 {
5015         if( camera == NULL || flip == NULL ){
5016                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5017                 return CAMERA_ERROR_INVALID_PARAMETER;
5018         }
5019
5020         int ret = CAMERA_ERROR_NONE;
5021         camera_cli_s *pc = (camera_cli_s *)camera;
5022         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_STREAM_FLIP;
5023         int sock_fd;
5024         if (pc->cb_info == NULL) {
5025                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5026                 return CAMERA_ERROR_INVALID_PARAMETER;
5027         }
5028         sock_fd = pc->cb_info->fd;
5029         int get_flip;
5030
5031         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5032         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5033
5034         if (ret == CAMERA_ERROR_NONE) {
5035                 muse_camera_msg_get(get_flip, pc->cb_info->recv_msg);
5036                 *flip = (camera_flip_e)get_flip;
5037         }
5038         LOGD("ret : 0x%x", ret);
5039         return ret;
5040 }
5041
5042 int camera_attr_set_hdr_mode(camera_h camera, camera_attr_hdr_mode_e mode)
5043 {
5044         if( camera == NULL){
5045                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
5046                 return CAMERA_ERROR_INVALID_PARAMETER;
5047         }
5048
5049         int ret = CAMERA_ERROR_NONE;
5050         camera_cli_s *pc = (camera_cli_s *)camera;
5051         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_HDR_MODE;
5052         int sock_fd;
5053         if (pc->cb_info == NULL) {
5054                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5055                 return CAMERA_ERROR_INVALID_PARAMETER;
5056         }
5057         sock_fd = pc->cb_info->fd;
5058         int set_mode = (int)mode;
5059
5060         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5061         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_mode);
5062         LOGD("ret : 0x%x", ret);
5063         return ret;
5064 }
5065
5066
5067 int camera_attr_get_hdr_mode(camera_h camera, camera_attr_hdr_mode_e *mode)
5068 {
5069         if (camera == NULL) {
5070                 LOGE("INVALID_PARAMETER(0x%08x) - handle",CAMERA_ERROR_INVALID_PARAMETER);
5071                 return CAMERA_ERROR_INVALID_PARAMETER;
5072         }
5073         if (mode == NULL) {
5074                 LOGE("CAMERA_ERROR_NOT_SUPPORTED(0x%08x) - mode",CAMERA_ERROR_NOT_SUPPORTED);
5075                 return CAMERA_ERROR_NOT_SUPPORTED;
5076         }
5077         int ret = CAMERA_ERROR_NONE;
5078         camera_cli_s *pc = (camera_cli_s *)camera;
5079         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_GET_HDR_MODE;
5080         int sock_fd;
5081         if (pc->cb_info == NULL) {
5082                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5083                 return CAMERA_ERROR_INVALID_PARAMETER;
5084         }
5085         sock_fd = pc->cb_info->fd;
5086         int get_mode;
5087
5088         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5089         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5090
5091         if (ret == CAMERA_ERROR_NONE) {
5092                 muse_camera_msg_get(get_mode, pc->cb_info->recv_msg);
5093                 *mode = (camera_attr_hdr_mode_e)get_mode;
5094         }
5095         LOGD("ret : 0x%x", ret);
5096         return ret;
5097 }
5098
5099
5100 bool camera_attr_is_supported_hdr_capture(camera_h camera)
5101 {
5102         if( camera == NULL){
5103                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5104                 return false;
5105         }
5106
5107         int ret = CAMERA_ERROR_NONE;
5108         camera_cli_s *pc = (camera_cli_s *)camera;
5109         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_HDR_CAPTURE;
5110         int sock_fd;
5111         if (pc->cb_info == NULL) {
5112                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5113                 return CAMERA_ERROR_INVALID_PARAMETER;
5114         }
5115         sock_fd = pc->cb_info->fd;
5116         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5117         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5118         LOGD("ret : 0x%x", ret);
5119         return (bool)ret;
5120 }
5121
5122
5123 int camera_attr_set_hdr_capture_progress_cb(camera_h camera, camera_attr_hdr_progress_cb callback, void* user_data)
5124 {
5125         if (camera == NULL) {
5126                 LOGE("INVALID_PARAMETER(0x%08x) - handle", CAMERA_ERROR_INVALID_PARAMETER);
5127                 return CAMERA_ERROR_INVALID_PARAMETER;
5128         }
5129         if (callback == NULL) {
5130                 LOGE("CAMERA_ERROR_NOT_SUPPORTED(0x%08x) - callback", CAMERA_ERROR_NOT_SUPPORTED);
5131                 return CAMERA_ERROR_NOT_SUPPORTED;
5132         }
5133         int ret = CAMERA_ERROR_NONE;
5134
5135         camera_cli_s *pc = (camera_cli_s *)camera;
5136         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_SET_HDR_CAPTURE_PROGRESS_CB;
5137         int sock_fd;
5138         if (pc->cb_info == NULL) {
5139                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5140                 return CAMERA_ERROR_INVALID_PARAMETER;
5141         }
5142         sock_fd = pc->cb_info->fd;
5143         LOGD("Enter, handle :%x", pc->remote_handle);
5144
5145         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = callback;
5146         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = user_data;
5147
5148         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5149         LOGD("ret : 0x%x", ret);
5150         return ret;
5151 }
5152
5153
5154 int camera_attr_unset_hdr_capture_progress_cb(camera_h camera)
5155 {
5156         if( camera == NULL){
5157                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5158                 return CAMERA_ERROR_INVALID_PARAMETER;
5159         }
5160
5161         int ret = CAMERA_ERROR_NONE;
5162
5163         camera_cli_s *pc = (camera_cli_s *)camera;
5164         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_UNSET_HDR_CAPTURE_PROGRESS_CB;
5165         int sock_fd;
5166         if (pc->cb_info == NULL) {
5167                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5168                 return CAMERA_ERROR_INVALID_PARAMETER;
5169         }
5170         sock_fd = pc->cb_info->fd;
5171         LOGD("Enter, handle :%x", pc->remote_handle);
5172
5173         pc->cb_info->user_cb[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = (void *)NULL;
5174         pc->cb_info->user_data[MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS] = (void *)NULL;
5175
5176         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5177         LOGD("ret : 0x%x", ret);
5178         return ret;
5179 }
5180
5181
5182 int camera_attr_enable_anti_shake(camera_h camera, bool enable)
5183 {
5184         if (camera == NULL) {
5185                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5186                 return CAMERA_ERROR_INVALID_PARAMETER;
5187         }
5188
5189         int ret = CAMERA_ERROR_NONE;
5190         camera_cli_s *pc = (camera_cli_s *)camera;
5191         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_ANTI_SHAKE;
5192         int sock_fd;
5193         if (pc->cb_info == NULL) {
5194                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5195                 return CAMERA_ERROR_INVALID_PARAMETER;
5196         }
5197         sock_fd = pc->cb_info->fd;
5198         int set_enable = (int)enable;
5199
5200         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5201         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
5202         LOGD("ret : 0x%x", ret);
5203         return ret;
5204 }
5205
5206
5207 int camera_attr_is_enabled_anti_shake(camera_h camera , bool *enabled)
5208 {
5209         if (camera == NULL) {
5210                 LOGE("INVALID_PARAMETER(0x%08x) - handle", CAMERA_ERROR_INVALID_PARAMETER);
5211                 return CAMERA_ERROR_INVALID_PARAMETER;
5212         }
5213         if (enabled == NULL) {
5214                 LOGE("INVALID_PARAMETER(0x%08x) - enabled", CAMERA_ERROR_INVALID_PARAMETER);
5215                 return CAMERA_ERROR_NOT_SUPPORTED;
5216         }
5217         int ret = CAMERA_ERROR_NONE;
5218         camera_cli_s *pc = (camera_cli_s *)camera;
5219         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_ANTI_SHAKE;
5220         int sock_fd;
5221         if (pc->cb_info == NULL) {
5222                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5223                 return CAMERA_ERROR_INVALID_PARAMETER;
5224         }
5225         sock_fd = pc->cb_info->fd;
5226         int get_enabled;
5227
5228         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5229         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5230
5231         if (ret == CAMERA_ERROR_NONE) {
5232                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
5233                 *enabled = (bool)get_enabled;
5234         }
5235         LOGD("ret : 0x%x", ret);
5236         return ret;
5237 }
5238
5239
5240 bool camera_attr_is_supported_anti_shake(camera_h camera)
5241 {
5242
5243         if( camera == NULL){
5244                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5245                 return false;
5246         }
5247
5248         int ret = CAMERA_ERROR_NONE;
5249         camera_cli_s *pc = (camera_cli_s *)camera;
5250         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_ANTI_SHAKE;
5251         int sock_fd;
5252         if (pc->cb_info == NULL) {
5253                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5254                 return CAMERA_ERROR_INVALID_PARAMETER;
5255         }
5256         sock_fd = pc->cb_info->fd;
5257         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5258         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5259         LOGD("ret : 0x%x", ret);
5260         return ret;
5261 }
5262
5263
5264 int camera_attr_enable_video_stabilization(camera_h camera, bool enable)
5265 {
5266         if (camera == NULL) {
5267                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5268                 return CAMERA_ERROR_INVALID_PARAMETER;
5269         }
5270
5271         int ret = CAMERA_ERROR_NONE;
5272         camera_cli_s *pc = (camera_cli_s *)camera;
5273         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_VIDEO_STABILIZATION;
5274         int sock_fd;
5275         if (pc->cb_info == NULL) {
5276                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5277                 return CAMERA_ERROR_INVALID_PARAMETER;
5278         }
5279         sock_fd = pc->cb_info->fd;
5280         int set_enable = (int)enable;
5281
5282         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5283         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
5284         LOGD("ret : 0x%x", ret);
5285         return ret;
5286 }
5287
5288
5289 int camera_attr_is_enabled_video_stabilization(camera_h camera, bool *enabled)
5290 {
5291         if (camera == NULL) {
5292                 LOGE("INVALID_PARAMETER(0x%08x) - handle",CAMERA_ERROR_INVALID_PARAMETER);
5293                 return CAMERA_ERROR_INVALID_PARAMETER;
5294         }
5295         if (enabled == NULL) {
5296                 LOGE("INVALID_PARAMETER(0x%08x) - enabled",CAMERA_ERROR_INVALID_PARAMETER);
5297                 return CAMERA_ERROR_NOT_SUPPORTED;
5298         }
5299         int ret = CAMERA_ERROR_NONE;
5300         camera_cli_s *pc = (camera_cli_s *)camera;
5301         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_VIDEO_STABILIZATION;
5302         int sock_fd;
5303         if (pc->cb_info == NULL) {
5304                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5305                 return CAMERA_ERROR_INVALID_PARAMETER;
5306         }
5307         sock_fd = pc->cb_info->fd;
5308         int get_enabled;
5309
5310         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5311         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5312
5313         if (ret == CAMERA_ERROR_NONE) {
5314                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
5315                 *enabled = (bool)get_enabled;
5316         }
5317         LOGD("ret : 0x%x", ret);
5318         return ret;
5319 }
5320
5321
5322 bool camera_attr_is_supported_video_stabilization(camera_h camera)
5323 {
5324         if( camera == NULL){
5325                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5326                 return false;
5327         }
5328
5329         int ret = CAMERA_ERROR_NONE;
5330         camera_cli_s *pc = (camera_cli_s *)camera;
5331         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_VIDEO_STABILIZATION;
5332         int sock_fd;
5333         if (pc->cb_info == NULL) {
5334                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5335                 return CAMERA_ERROR_INVALID_PARAMETER;
5336         }
5337         sock_fd = pc->cb_info->fd;
5338         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5339         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5340         LOGD("ret : 0x%x", ret);
5341         return ret;
5342 }
5343
5344
5345 int camera_attr_enable_auto_contrast(camera_h camera, bool enable)
5346 {
5347         if( camera == NULL){
5348                 LOGE("INVALID_PARAMETER(0x%08x)", CAMERA_ERROR_INVALID_PARAMETER);
5349                 return CAMERA_ERROR_INVALID_PARAMETER;
5350         }
5351
5352         int ret = CAMERA_ERROR_NONE;
5353         camera_cli_s *pc = (camera_cli_s *)camera;
5354         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_ENABLE_AUTO_CONTRAST;
5355         int sock_fd;
5356         if (pc->cb_info == NULL) {
5357                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5358                 return CAMERA_ERROR_INVALID_PARAMETER;
5359         }
5360         sock_fd = pc->cb_info->fd;
5361         int set_enable = (int)enable;
5362
5363         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5364         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_enable);
5365         LOGD("ret : 0x%x", ret);
5366         return ret;
5367 }
5368
5369
5370 int camera_attr_is_enabled_auto_contrast(camera_h camera, bool *enabled)
5371 {
5372         if (camera == NULL) {
5373                 LOGE("INVALID_PARAMETER(0x%08x) - handle", CAMERA_ERROR_INVALID_PARAMETER);
5374                 return CAMERA_ERROR_INVALID_PARAMETER;
5375         }
5376         if (enabled == NULL) {
5377                 LOGE("INVALID_PARAMETER(0x%08x) - enabled", CAMERA_ERROR_INVALID_PARAMETER);
5378                 return CAMERA_ERROR_INVALID_PARAMETER;
5379         }
5380         int ret = CAMERA_ERROR_NONE;
5381         camera_cli_s *pc = (camera_cli_s *)camera;
5382         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_ENABLED_AUTO_CONTRAST;
5383         int sock_fd;
5384         if (pc->cb_info == NULL) {
5385                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5386                 return CAMERA_ERROR_INVALID_PARAMETER;
5387         }
5388         sock_fd = pc->cb_info->fd;
5389         int get_enabled;
5390
5391         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5392         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5393
5394         if (ret == CAMERA_ERROR_NONE) {
5395                 muse_camera_msg_get(get_enabled, pc->cb_info->recv_msg);
5396                 *enabled = (bool)get_enabled;
5397         }
5398         LOGD("ret : 0x%x", ret);
5399         return ret;
5400 }
5401
5402
5403 bool camera_attr_is_supported_auto_contrast(camera_h camera)
5404 {
5405         if( camera == NULL){
5406                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5407                 return false;
5408         }
5409
5410         int ret = CAMERA_ERROR_NONE;
5411         camera_cli_s *pc = (camera_cli_s *)camera;
5412         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_IS_SUPPORTED_AUTO_CONTRAST;
5413         int sock_fd;
5414         if (pc->cb_info == NULL) {
5415                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5416                 return CAMERA_ERROR_INVALID_PARAMETER;
5417         }
5418         sock_fd = pc->cb_info->fd;
5419         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5420         muse_camera_msg_send(api, sock_fd, pc->cb_info, ret);
5421         LOGD("ret : 0x%x", ret);
5422         return ret;
5423 }
5424
5425
5426 int camera_attr_disable_shutter_sound(camera_h camera, bool disable)
5427 {
5428         if (camera == NULL) {
5429                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5430                 return CAMERA_ERROR_INVALID_PARAMETER;
5431         }
5432
5433         int ret = CAMERA_ERROR_NONE;
5434         camera_cli_s *pc = (camera_cli_s *)camera;
5435         muse_camera_api_e api = MUSE_CAMERA_API_ATTR_DISABLE_SHUTTER_SOUND;
5436         int sock_fd;
5437         if (pc->cb_info == NULL) {
5438                 LOGE("INVALID_PARAMETER(0x%08x)",CAMERA_ERROR_INVALID_PARAMETER);
5439                 return CAMERA_ERROR_INVALID_PARAMETER;
5440         }
5441         sock_fd = pc->cb_info->fd;
5442         int set_disable = (int)disable;
5443
5444         LOGD("Enter, remote_handle : %x", pc->remote_handle);
5445         muse_camera_msg_send1(api, sock_fd, pc->cb_info, ret, INT, set_disable);
5446         LOGD("ret : 0x%x", ret);
5447         return ret;
5448 }