3de83f22d1c34015131d64caf221795a1c93a012
[platform/core/multimedia/mmsvc-camera.git] / muse / include / muse_camera.h
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 #ifndef __MUSE_CAMERA_H__
18 #define __MUSE_CAMERA_H__
19
20 #ifdef _cplusplus
21 extern "C" {
22 #endif
23
24 /**
25   * @file muse_camera.h
26   * @brief This file contains the muse camera API for framework, related structures and enumerations.
27   */
28
29 #include <stdbool.h>
30 #include <glib.h>
31 #include <stdio.h>
32 #include <tbm_bufmgr.h>
33
34
35 /**
36  * @brief Enumeration for the muse camera apis.
37  */
38 typedef enum {
39         MUSE_CAMERA_API_CREATE, /* 0 */
40         MUSE_CAMERA_API_DESTROY,
41         MUSE_CAMERA_API_START_PREVIEW,
42         MUSE_CAMERA_API_STOP_PREVIEW,
43         MUSE_CAMERA_API_START_CAPTURE,
44         MUSE_CAMERA_API_SUPPORT_CONTINUOUS_CAPTURE, /* 5 */
45         MUSE_CAMERA_API_START_CONTINUOUS_CAPTURE,
46         MUSE_CAMERA_API_STOP_CONTINUOUS_CAPTURE,
47         MUSE_CAMERA_API_SUPPORT_FACE_DETECTION,
48         MUSE_CAMERA_API_SUPPORT_ZERO_SHUTTER_LAG,
49         MUSE_CAMERA_API_SUPPORT_MEDIA_PACKET_PREVIEW_CB, /* 10 */
50         MUSE_CAMERA_API_GET_DEVICE_COUNT,
51         MUSE_CAMERA_API_START_FACE_DETECTION,
52         MUSE_CAMERA_API_STOP_FACE_DETECTION,
53         MUSE_CAMERA_API_GET_STATE,
54         MUSE_CAMERA_API_START_FOCUSING, /* 15 */
55         MUSE_CAMERA_API_CANCEL_FOCUSING,
56         MUSE_CAMERA_API_SET_DISPLAY,
57         MUSE_CAMERA_API_SET_PREVIEW_RESOLUTION,
58         MUSE_CAMERA_API_SET_CAPTURE_RESOLUTION,
59         MUSE_CAMERA_API_SET_CAPTURE_FORMAT, /* 20 */
60         MUSE_CAMERA_API_SET_PREVIEW_FORMAT,
61         MUSE_CAMERA_API_GET_PREVIEW_RESOLUTION,
62         MUSE_CAMERA_API_SET_DISPLAY_ROTATION,
63         MUSE_CAMERA_API_GET_DISPLAY_ROTATION,
64         MUSE_CAMERA_API_SET_DISPLAY_FLIP, /* 25 */
65         MUSE_CAMERA_API_GET_DISPLAY_FLIP,
66         MUSE_CAMERA_API_SET_DISPLAY_VISIBLE,
67         MUSE_CAMERA_API_IS_DISPLAY_VISIBLE,
68         MUSE_CAMERA_API_SET_DISPLAY_MODE,
69         MUSE_CAMERA_API_GET_DISPLAY_MODE, /* 30 */
70         MUSE_CAMERA_API_GET_CAPTURE_RESOLUTION,
71         MUSE_CAMERA_API_GET_CAPTURE_FORMAT,
72         MUSE_CAMERA_API_GET_PREVIEW_FORMAT,
73         MUSE_CAMERA_API_GET_FACING_DIRECTION,
74         MUSE_CAMERA_API_GET_FLASH_STATE, /* 35 */
75         MUSE_CAMERA_API_SET_PREVIEW_CB,
76         MUSE_CAMERA_API_UNSET_PREVIEW_CB,
77         MUSE_CAMERA_API_SET_MEDIA_PACKET_PREVIEW_CB,
78         MUSE_CAMERA_API_UNSET_MEDIA_PACKET_PREVIEW_CB,
79         MUSE_CAMERA_API_SET_STATE_CHANGED_CB, /* 40 */
80         MUSE_CAMERA_API_UNSET_STATE_CHANGED_CB,
81         MUSE_CAMERA_API_SET_INTERRUPTED_CB,
82         MUSE_CAMERA_API_UNSET_INTERRUPTED_CB,
83         MUSE_CAMERA_API_SET_FOCUS_CHANGED_CB,
84         MUSE_CAMERA_API_UNSET_FOCUS_CHANGED_CB, /* 45 */
85         MUSE_CAMERA_API_SET_ERROR_CB,
86         MUSE_CAMERA_API_UNSET_ERROR_CB,
87         MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_PREVIEW_RESOLUTION,
88         MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_CAPTURE_RESOLUTION,
89         MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_CAPTURE_FORMAT, /* 50 */
90         MUSE_CAMERA_API_SET_FOREACH_SUPPORTED_PREVIEW_FORMAT,
91         MUSE_CAMERA_API_GET_RECOMMENDED_PREVIEW_RESOLUTION,
92         MUSE_CAMERA_API_ATTR_GET_LENS_ORIENTATION,
93         MUSE_CAMERA_API_ATTR_SET_THEATER_MODE,
94         MUSE_CAMERA_API_ATTR_GET_THEATER_MODE, /* 55 */
95         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_THEATER_MODE,
96         MUSE_CAMERA_API_ATTR_SET_PREVIEW_FPS,
97         MUSE_CAMERA_API_ATTR_SET_IMAGE_QUALITY,
98         MUSE_CAMERA_API_ATTR_GET_PREVIEW_FPS,
99         MUSE_CAMERA_API_ATTR_GET_IMAGE_QUALITY, /* 60 */
100         MUSE_CAMERA_API_ATTR_SET_ZOOM,
101         MUSE_CAMERA_API_ATTR_SET_AF_MODE,
102         MUSE_CAMERA_API_ATTR_SET_AF_AREA,
103         MUSE_CAMERA_API_ATTR_CLEAR_AF_AREA,
104         MUSE_CAMERA_API_ATTR_SET_EXPOSURE_MODE, /* 65 */
105         MUSE_CAMERA_API_ATTR_SET_EXPOSURE,
106         MUSE_CAMERA_API_ATTR_SET_ISO,
107         MUSE_CAMERA_API_ATTR_SET_BRIGHTNESS,
108         MUSE_CAMERA_API_ATTR_SET_CONTRAST,
109         MUSE_CAMERA_API_ATTR_SET_WHITEBALANCE, /* 70 */
110         MUSE_CAMERA_API_ATTR_SET_EFFECT,
111         MUSE_CAMERA_API_ATTR_SET_SCENE_MODE,
112         MUSE_CAMERA_API_ATTR_ENABLE_TAG,
113         MUSE_CAMERA_API_ATTR_SET_TAG_IMAGE_DESCRIPTION,
114         MUSE_CAMERA_API_ATTR_SET_TAG_ORIENTATION, /* 75 */
115         MUSE_CAMERA_API_ATTR_SET_TAG_SOFTWARE,
116         MUSE_CAMERA_API_ATTR_SET_GEOTAG,
117         MUSE_CAMERA_API_ATTR_REMOVE_GEOTAG,
118         MUSE_CAMERA_API_ATTR_SET_FLASH_MODE,
119         MUSE_CAMERA_API_ATTR_GET_ZOOM, /* 80 */
120         MUSE_CAMERA_API_ATTR_GET_ZOOM_RANGE,
121         MUSE_CAMERA_API_ATTR_GET_AF_MODE,
122         MUSE_CAMERA_API_ATTR_GET_EXPOSURE_MODE,
123         MUSE_CAMERA_API_ATTR_GET_EXPOSURE,
124         MUSE_CAMERA_API_ATTR_GET_EXPOSURE_RANGE, /* 85 */
125         MUSE_CAMERA_API_ATTR_GET_ISO,
126         MUSE_CAMERA_API_ATTR_GET_BRIGHTNESS,
127         MUSE_CAMERA_API_ATTR_GET_BRIGHTNESS_RANGE,
128         MUSE_CAMERA_API_ATTR_GET_CONTRAST,
129         MUSE_CAMERA_API_ATTR_GET_CONTRAST_RANGE, /* 90 */
130         MUSE_CAMERA_API_ATTR_GET_WHITEBALANCE,
131         MUSE_CAMERA_API_ATTR_GET_EFFECT,
132         MUSE_CAMERA_API_ATTR_GET_SCENE_MODE,
133         MUSE_CAMERA_API_ATTR_IS_ENABLED_TAG,
134         MUSE_CAMERA_API_ATTR_GET_TAG_IMAGE_DESCRIPTION, /* 95 */
135         MUSE_CAMERA_API_ATTR_GET_TAG_ORIENTATION,
136         MUSE_CAMERA_API_ATTR_GET_TAG_SOFTWARE,
137         MUSE_CAMERA_API_ATTR_GET_GEOTAG,
138         MUSE_CAMERA_API_ATTR_GET_FLASH_MODE,
139         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_AF_MODE, /* 100 */
140         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_EXPOSURE_MODE,
141         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_ISO,
142         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_WHITEBALANCE,
143         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_EFFECT,
144         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_SCENE_MODE, /* 105 */
145         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FLASH_MODE,
146         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FPS,
147         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_FPS_BY_RESOLUTION,
148         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_STREAM_FLIP,
149         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_STREAM_ROTATION, /* 110 */
150         MUSE_CAMERA_API_ATTR_SET_STREAM_ROTATION,
151         MUSE_CAMERA_API_ATTR_GET_STREAM_ROTATION,
152         MUSE_CAMERA_API_ATTR_SET_STREAM_FLIP,
153         MUSE_CAMERA_API_ATTR_GET_STREAM_FLIP,
154         MUSE_CAMERA_API_ATTR_SET_HDR_MODE, /* 115 */
155         MUSE_CAMERA_API_ATTR_GET_HDR_MODE,
156         MUSE_CAMERA_API_ATTR_IS_SUPPORTED_HDR_CAPTURE,
157         MUSE_CAMERA_API_ATTR_SET_HDR_CAPTURE_PROGRESS_CB,
158         MUSE_CAMERA_API_ATTR_UNSET_HDR_CAPTURE_PROGRESS_CB,
159         MUSE_CAMERA_API_ATTR_ENABLE_ANTI_SHAKE, /* 120 */
160         MUSE_CAMERA_API_ATTR_IS_ENABLED_ANTI_SHAKE,
161         MUSE_CAMERA_API_ATTR_IS_SUPPORTED_ANTI_SHAKE,
162         MUSE_CAMERA_API_ATTR_ENABLE_VIDEO_STABILIZATION,
163         MUSE_CAMERA_API_ATTR_IS_ENABLED_VIDEO_STABILIZATION,
164         MUSE_CAMERA_API_ATTR_IS_SUPPORTED_VIDEO_STABILIZATION, /* 125 */
165         MUSE_CAMERA_API_ATTR_ENABLE_AUTO_CONTRAST,
166         MUSE_CAMERA_API_ATTR_IS_ENABLED_AUTO_CONTRAST,
167         MUSE_CAMERA_API_ATTR_IS_SUPPORTED_AUTO_CONTRAST,
168         MUSE_CAMERA_API_ATTR_DISABLE_SHUTTER_SOUND,
169         MUSE_CAMERA_API_ATTR_GET_ENCODED_PREVIEW_BITRATE, /* 130 */
170         MUSE_CAMERA_API_ATTR_SET_ENCODED_PREVIEW_BITRATE,
171         MUSE_CAMERA_API_ATTR_GET_ENCODED_PREVIEW_GOP_INTERVAL,
172         MUSE_CAMERA_API_ATTR_SET_ENCODED_PREVIEW_GOP_INTERVAL,
173         MUSE_CAMERA_API_ATTR_SET_PAN,
174         MUSE_CAMERA_API_ATTR_GET_PAN, /* 135 */
175         MUSE_CAMERA_API_ATTR_GET_PAN_RANGE,
176         MUSE_CAMERA_API_ATTR_SET_TILT,
177         MUSE_CAMERA_API_ATTR_GET_TILT,
178         MUSE_CAMERA_API_ATTR_GET_TILT_RANGE,
179         MUSE_CAMERA_API_ATTR_SET_PTZ_TYPE, /* 140 */
180         MUSE_CAMERA_API_ATTR_FOREACH_SUPPORTED_PTZ_TYPE,
181         MUSE_CAMERA_API_SET_DISPLAY_ROI_AREA,
182         MUSE_CAMERA_API_GET_DISPLAY_ROI_AREA,
183         MUSE_CAMERA_API_RETURN_BUFFER,
184         MUSE_CAMERA_API_PREVIEW_CB_RETURN, /* 145 */
185         MUSE_CAMERA_API_SET_DISPLAY_REUSE_HINT,
186         MUSE_CAMERA_API_GET_DISPLAY_REUSE_HINT,
187         MUSE_CAMERA_API_CHANGE_DEVICE,
188         MUSE_CAMERA_API_GET_DEVICE_STATE,
189
190         MUSE_CAMERA_API_MAX
191 } muse_camera_api_e;
192
193 /**
194  * @brief Enumeration for the muse camera API class.
195  */
196 typedef enum {
197         MUSE_CAMERA_API_CLASS_IMMEDIATE,
198         MUSE_CAMERA_API_CLASS_THREAD_SUB,
199         MUSE_CAMERA_API_CLASS_NUM
200 } muse_camera_api_class_e;
201
202 /**
203  * @brief Enumeration for the muse camera events.
204  */
205 typedef enum {
206         MUSE_CAMERA_EVENT_TYPE_STATE_CHANGE, /* 0 */
207         MUSE_CAMERA_EVENT_TYPE_FOCUS_CHANGE,
208         MUSE_CAMERA_EVENT_TYPE_CAPTURE_COMPLETE,
209         MUSE_CAMERA_EVENT_TYPE_PREVIEW,
210         MUSE_CAMERA_EVENT_TYPE_MEDIA_PACKET_PREVIEW,
211         MUSE_CAMERA_EVENT_TYPE_CAPTURE, /* 5 */
212         MUSE_CAMERA_EVENT_TYPE_ERROR,
213         MUSE_CAMERA_EVENT_TYPE_HDR_PROGRESS,
214         MUSE_CAMERA_EVENT_TYPE_INTERRUPTED,
215         MUSE_CAMERA_EVENT_TYPE_FACE_DETECTION,
216         MUSE_CAMERA_EVENT_TYPE_VIDEO_FRAME_RENDER_ERROR, /* 10 */
217         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_RESOLUTION,
218         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_RESOLUTION,
219         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_CAPTURE_FORMAT,
220         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PREVIEW_FORMAT,
221         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_THEATER_MODE, /* 15 */
222         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_AF_MODE,
223         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EXPOSURE_MODE,
224         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_ISO,
225         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_WHITEBALANCE,
226         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_EFFECT, /* 20 */
227         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_SCENE_MODE,
228         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FLASH_MODE,
229         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS,
230         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_FPS_BY_RESOLUTION,
231         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_FLIP, /* 25 */
232         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_STREAM_ROTATION,
233         MUSE_CAMERA_EVENT_TYPE_FOREACH_SUPPORTED_PTZ_TYPE,
234         MUSE_CAMERA_EVENT_TYPE_NUM /* 28 */
235 } muse_camera_event_e;
236
237 /**
238  * @brief Enumeration for the muse camera events class.
239  */
240 typedef enum {
241         MUSE_CAMERA_EVENT_CLASS_THREAD_MAIN,
242         MUSE_CAMERA_EVENT_CLASS_THREAD_SUB,
243         MUSE_CAMERA_EVENT_CLASS_NUM
244 } muse_camera_event_class_e;
245
246 /**
247  * @brief Enumeration for the muse camera get type list.
248  */
249 typedef enum {
250         MUSE_CAMERA_GET_TYPE_NONE,
251         MUSE_CAMERA_GET_TYPE_INT,
252         MUSE_CAMERA_GET_TYPE_INT_PAIR,
253         MUSE_CAMERA_GET_TYPE_ARRAY,
254         MUSE_CAMERA_GET_TYPE_STRING,
255         MUSE_CAMERA_GET_TYPE_POINTER,
256         MUSE_CAMERA_GET_TYPE
257 } muse_camera_get_type_e;
258
259 /**
260  * @brief Enumeration for the integer type list.
261  */
262 typedef enum {
263         MUSE_CAMERA_GET_INT_STATE = 0,
264         MUSE_CAMERA_GET_INT_DEVICE_COUNT,
265         MUSE_CAMERA_GET_INT_FACING_DIRECTION,
266         MUSE_CAMERA_GET_INT_LENS_ORIENTATION,
267         MUSE_CAMERA_GET_INT_PREVIEW_RESOLUTION,
268         MUSE_CAMERA_GET_INT_PREVIEW_FORMAT,
269         MUSE_CAMERA_GET_INT_PREVIEW_FPS,
270         MUSE_CAMERA_GET_INT_RECOMMENDED_PREVIEW_RESOLUTION,
271         MUSE_CAMERA_GET_INT_CAPTURE_RESOLUTION,
272         MUSE_CAMERA_GET_INT_CAPTURE_FORMAT,
273         MUSE_CAMERA_GET_INT_DISPLAY_FLIP,
274         MUSE_CAMERA_GET_INT_DISPLAY_MODE,
275         MUSE_CAMERA_GET_INT_DISPLAY_REUSE_HINT,
276         MUSE_CAMERA_GET_INT_DISPLAY_ROTATION,
277         MUSE_CAMERA_GET_INT_DISPLAY_VISIBLE,
278         MUSE_CAMERA_GET_INT_THEATER_MODE,
279         MUSE_CAMERA_GET_INT_FLASH_MODE,
280         MUSE_CAMERA_GET_INT_AF_MODE,
281         MUSE_CAMERA_GET_INT_ISO,
282         MUSE_CAMERA_GET_INT_BRIGHTNESS,
283         MUSE_CAMERA_GET_INT_CONTRAST,
284         MUSE_CAMERA_GET_INT_EFFECT,
285         MUSE_CAMERA_GET_INT_SCENE_MODE,
286         MUSE_CAMERA_GET_INT_WHITE_BALANCE,
287         MUSE_CAMERA_GET_INT_EXPOSURE,
288         MUSE_CAMERA_GET_INT_EXPOSURE_MODE,
289         MUSE_CAMERA_GET_INT_HDR_MODE,
290         MUSE_CAMERA_GET_INT_IMAGE_QUALITY,
291         MUSE_CAMERA_GET_INT_STREAM_FLIP,
292         MUSE_CAMERA_GET_INT_STREAM_ROTATION,
293         MUSE_CAMERA_GET_INT_TAG_ORIENTATION,
294         MUSE_CAMERA_GET_INT_ZOOM,
295         MUSE_CAMERA_GET_INT_PAN,
296         MUSE_CAMERA_GET_INT_TILT,
297         MUSE_CAMERA_GET_INT_ENABLED_ANTI_SHAKE,
298         MUSE_CAMERA_GET_INT_ENABLED_AUTO_CONTRAST,
299         MUSE_CAMERA_GET_INT_ENABLED_TAG,
300         MUSE_CAMERA_GET_INT_ENABLED_VIDEO_STABILIZATION,
301         MUSE_CAMERA_GET_INT_ENCODED_PREVIEW_BITRATE,
302         MUSE_CAMERA_GET_INT_ENCODED_PREVIEW_GOP_INTERVAL,
303         MUSE_CAMERA_GET_INT_NUM
304 } muse_camera_get_int_e;
305
306 /**
307  * @brief Enumeration for the integer pair type list.
308  */
309 typedef enum {
310         MUSE_CAMERA_GET_INT_PAIR_ZOOM_RANGE,
311         MUSE_CAMERA_GET_INT_PAIR_BRIGHTNESS_RANGE,
312         MUSE_CAMERA_GET_INT_PAIR_CONTRAST_RANGE,
313         MUSE_CAMERA_GET_INT_PAIR_EXPOSURE_RANGE,
314         MUSE_CAMERA_GET_INT_PAIR_PAN_RANGE,
315         MUSE_CAMERA_GET_INT_PAIR_TILT_RANGE,
316         MUSE_CAMERA_GET_INT_PAIR_NUM
317 } muse_camera_get_int_pair_e;
318
319
320 /**
321  * @brief Enumeration for the string type list.
322  */
323 typedef enum {
324         MUSE_CAMERA_GET_STRING_TAG_IMAGE_DESCRIPTION,
325         MUSE_CAMERA_GET_STRING_TAG_SOFTWARE,
326         MUSE_CAMERA_GET_STRING_NUM
327 } muse_camera_get_string_e;
328
329 typedef struct {
330         tbm_bo bo;
331         int key;
332         void *internal_buffer;
333         tbm_bo data_bo;
334         bool is_capture;
335 } muse_camera_export_data;
336
337
338 /**
339  * @brief The structure type for muse camera errors.
340  */
341 typedef enum {
342         MUSE_CAMERA_ERROR_INVALID = -1,
343         MUSE_CAMERA_ERROR_NONE = 1,
344 } muse_camera_error_e;
345
346 /**
347  * @brief Definition for the callback event id.
348  */
349 #define MUSE_CAMERA_CB_EVENT    MUSE_CAMERA_API_MAX + 1 /* 148 */
350
351 /**
352  * @brief Definition for the max message length.
353  */
354 #define MUSE_CAMERA_MSG_MAX_LENGTH              512
355
356 /**
357  * @brief Definition for device state change signal
358  */
359 #define MM_CAMCORDER_DBUS_OBJECT                "/org/tizen/MMCamcorder"
360 #define MM_CAMCORDER_DBUS_INTERFACE_CAMERA      "org.tizen.MMCamcorder.Camera"
361 #define MM_CAMCORDER_DBUS_SIGNAL_STATE_CHANGED  "DeviceStateChanged"
362
363
364 #ifdef __cplusplus
365 }
366 #endif
367 #endif                          /* __MUSE_CAMERA_H__ */