2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 #ifndef __TIZEN_MULTIMEDIA_CAMERA_PRIVATE_H__
18 #define __TIZEN_MULTIMEDIA_CAMERA_PRIVATE_H__
22 #include <camera_internal.h>
23 #include <media_bridge_internal.h>
24 #include <muse_core.h>
25 #include <muse_camera.h>
26 #include <mm_display_interface.h>
27 #include <mm_camcorder.h>
33 #define CAMERA_CB_TIMEOUT 4
34 #ifndef TIZEN_FEATURE_NO_TIMEOUT_FOR_PREVIEW
35 #define CAMERA_CB_TIMEOUT_FOR_PREVIEW 10
37 #define CAMERA_CB_NO_TIMEOUT 0
38 #define CAMERA_FD_INIT -1
39 #define CAMERA_IS_FD_VALID(fd) (fd > CAMERA_FD_INIT)
40 #define CAMERA_MONITORING_INFO_STREAM_ID_PREVIEW -1
41 #define CAMERA_MONITORING_INFO_STREAM_ID_PREVIEW_MP -2
44 #define CAMERA_MSG_PARAM_SET(param, msg_type, set_value) { \
45 param.type = MUSE_TYPE_##msg_type; \
46 param.name = #set_value; \
47 param.value.value_##msg_type = set_value; \
50 #define CAMERA_MSG_PARAM_SET_ARRAY(param, msg_type, set_value, size) { \
51 param.type = MUSE_TYPE_##msg_type; \
52 param.name = #set_value; \
53 param.value.value_##msg_type = set_value; \
54 param.value_size = size; \
57 #define CAM_LOG_CRITICAL(format, args...) \
59 if (_camera_get_log_level() >= CAMERA_LOG_LEVEL_CRITICAL) \
60 LOGF(format, ##args); \
63 #define CAM_LOG_ERROR(format, args...) \
65 if (_camera_get_log_level() >= CAMERA_LOG_LEVEL_ERROR) \
66 LOGE(format, ##args); \
69 #define CAM_LOG_WARNING(format, args...) \
71 if (_camera_get_log_level() >= CAMERA_LOG_LEVEL_WARNING) \
72 LOGW(format, ##args); \
75 #define CAM_LOG_INFO(format, args...) \
77 if (_camera_get_log_level() >= CAMERA_LOG_LEVEL_INFO) \
78 LOGI(format, ##args); \
81 #define CAM_LOG_DEBUG(format, args...) \
83 if (_camera_get_log_level() >= CAMERA_LOG_LEVEL_DEBUG) \
84 LOGD(format, ##args); \
87 #define CAM_LOG_VERBOSE(format, args...) \
89 if (_camera_get_log_level() >= CAMERA_LOG_LEVEL_VERBOSE) \
90 LOGD("[V] "format, ##args); \
93 #define CAMERA_CHECK_HANDLE_RETURN(pc) \
95 if (!pc || !pc->cb_info) {\
96 CAM_LOG_ERROR("NULL handle[%p]", pc);\
101 #define CAMERA_CHECK_HANDLE_RETURN_VAL(pc, val) \
103 if (!pc || !pc->cb_info) {\
104 CAM_LOG_ERROR("NULL handle[%p]", pc);\
109 #define CAMERA_CHECK_THREAD_RETURN_VAL(thread_to_check, val, error_msg) \
111 if (thread_to_check == g_thread_self()) {\
112 CAM_LOG_ERROR(error_msg);\
119 CAMERA_MESSAGE_HANDLER_TYPE_GENERAL,
120 CAMERA_MESSAGE_HANDLER_TYPE_PREVIEW_CB,
121 CAMERA_MESSAGE_HANDLER_TYPE_CAPTURE_CB
125 CAMERA_LOG_LEVEL_CRITICAL = 0,
126 CAMERA_LOG_LEVEL_ERROR,
127 CAMERA_LOG_LEVEL_WARNING,
128 CAMERA_LOG_LEVEL_INFO,
129 CAMERA_LOG_LEVEL_DEBUG,
130 CAMERA_LOG_LEVEL_VERBOSE
133 typedef struct _camera_msg_handler_info_s {
141 } camera_msg_handler_info_s;
143 typedef struct _monitoring_info_sub_s {
144 unsigned long long frame_count;
145 gdouble elapsed_sec_accum;
146 gdouble elapsed_sec_peak;
147 } monitoring_info_sub_s;
149 typedef struct _camera_preview_cb_monitoring_info_s {
151 GTimer *timer_calling;
152 GTimer *timer_interval;
153 monitoring_info_sub_s *total;
154 monitoring_info_sub_s *interval;
155 } camera_preview_cb_monitoring_info_s;
157 typedef struct _camera_cb_info_s {
158 /* server connection */
161 gboolean is_server_connected;
163 /* message receive thread */
164 GThread *msg_recv_thread;
165 gint msg_recv_running;
166 gchar recv_msg[MUSE_MSG_MAX_LENGTH + 1];
167 GCond api_cond[MUSE_CAMERA_API_MAX];
168 GMutex api_lock[MUSE_CAMERA_API_MAX];
169 gint api_activating[MUSE_CAMERA_API_MAX];
170 gint api_waiting[MUSE_CAMERA_API_MAX];
171 gint api_ret[MUSE_CAMERA_API_MAX];
173 /* general message handler info */
174 camera_msg_handler_info_s msg_handler_info;
176 /* preview cb message handler info */
177 camera_msg_handler_info_s preview_cb_info;
179 /* capture cb message handler info */
180 camera_msg_handler_info_s capture_cb_info;
183 GList *idle_event_list;
186 gpointer user_cb[MUSE_CAMERA_EVENT_TYPE_NUM];
187 gpointer user_data[MUSE_CAMERA_EVENT_TYPE_NUM];
188 GMutex user_cb_lock[MUSE_CAMERA_EVENT_TYPE_NUM];
189 gboolean invoke_preview_cb;
193 gboolean user_buffer_supported;
194 tbm_bo bos[MUSE_NUM_FD];
195 tbm_fd fds[MUSE_NUM_FD];
198 media_format_h pkt_fmt;
202 camera_pixel_format_e preview_format;
205 muse_camera_display_info_s dp_info;
206 mm_display_interface_h dp_interface;
207 gboolean run_evas_render;
208 gboolean is_evas_render;
211 gint get_int[MUSE_CAMERA_GET_INT_NUM];
212 gint get_int_pair[MUSE_CAMERA_GET_INT_PAIR_NUM][2];
213 gchar get_string[MUSE_CAMERA_GET_STRING_NUM][MUSE_CAMERA_MSG_MAX_LENGTH];
214 gdouble get_geotag[3];
215 gint get_display_roi_area[4];
216 gint get_extra_preview_stream_format[4];
219 media_bridge_h bridge;
223 MMCamcorderVideoStreamDataType *stream_data;
224 camera_preview_cb_monitoring_info_s *monitoring_info_preview;
225 camera_preview_cb_monitoring_info_s *monitoring_info_preview_mp;
226 camera_preview_cb_monitoring_info_s *monitoring_info_preview_ex[MM_CAMCORDER_EXTRA_PREVIEW_STREAM_MAX];
232 typedef struct _camera_message_s {
233 gchar recv_msg[MUSE_CAMERA_MSG_MAX_LENGTH + 1];
234 muse_camera_api_e api;
235 muse_camera_event_e event;
236 muse_camera_event_class_e event_class;
237 int tfd[MUSE_NUM_FD];
240 typedef struct _camera_idle_event_s {
241 camera_cb_info_s *cb_info;
242 gchar recv_msg[MUSE_CAMERA_MSG_MAX_LENGTH + 1];
243 muse_camera_event_e event;
244 int tfd[MUSE_NUM_FD];
245 } camera_idle_event_s;
247 typedef struct _camera_cli_s {
248 intptr_t remote_handle;
249 camera_cb_info_s *cb_info;
252 typedef struct _camera_media_packet_data {
256 tbm_fd buffer_fd[MUSE_NUM_FD];
258 tbm_bo buffer_bo[BUFFER_MAX_PLANE_NUM];
261 } camera_media_packet_data;
263 typedef struct _camera_msg_param {
268 const char *value_STRING;
274 typedef struct _camera_cb_info {
281 int _camera_get_tbm_format(int in_format, uint32_t *out_format);
282 int _camera_get_media_packet_mimetype(int in_format, media_format_mimetype_e *mimetype);
283 void _camera_media_packet_dispose(media_packet_h pkt, void *user_data);
284 int _camera_start_evas_rendering(camera_h camera);
285 int _camera_stop_evas_rendering(camera_h camera, bool keep_screen);
286 int _camera_independent_request(int api, int device_type, const char *key, int *value);
287 int _camera_set_display(camera_h camera, mm_display_type_e type, void *display);
288 int _camera_create_private(camera_device_e device, bool is_network, camera_h *camera);
289 void _camera_msg_send(int api, int *fds, camera_cb_info_s *cb_info,
290 int *ret, int timeout);
291 void _camera_msg_send_param1(int api, camera_cb_info_s *cb_info,
292 int *ret, camera_msg_param *param, int timeout);
293 void _camera_msg_send_param2_int(int api, camera_cb_info_s *cb_info,
294 int *ret, camera_msg_param *param0, camera_msg_param *param1, int timeout);
295 void _camera_msg_return_buffer(int ret_fd, camera_cb_info_s *cb_info);
296 int _camera_client_wait_for_cb_return(muse_camera_api_e api, camera_cb_info_s *cb_info, int time_out);
297 void _camera_update_api_waiting(camera_cb_info_s *cb_info, int api, int value);
298 void _camera_send_message_get_return(camera_cb_info_s *cb_info, muse_camera_api_e api, char *msg,
299 int time_out, int *ret);
300 int _camera_get_log_level(void);
301 int _camera_attr_set_level(camera_h camera, muse_camera_api_e api, int level);
302 int _camera_attr_get_level(camera_h camera, muse_camera_api_e api, muse_camera_get_int_e get_index, int *level);
303 int _camera_attr_get_range(camera_h camera, muse_camera_api_e api, muse_camera_get_int_pair_e get_index, int *min, int *max);
304 bool __is_supported(camera_h camera, muse_camera_api_e api);
306 typedef bool (*camera_supported_cb_param1)(int param, void *user_data);
307 typedef bool (*camera_supported_cb_param2)(int param1, int param2, void *user_data);
313 #endif /* __TIZEN_MULTIMEDIA_CAMERA_PRIVATE_H__ */