tizen 2.3.1 release
[framework/multimedia/libmm-player.git] / src / include / mm_player_internal.h
1 /*
2  * libmm-player
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: JongHyuk Choi <jhchoi.choi@samsung.com>, YeJin Cho <cho.yejin@samsung.com>,
7  * Seungbae Shin <seungbae.shin@samsung.com>, YoungHwan An <younghwan_.an@samsung.com>
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  */
22
23 #ifndef __MM_PLAYER_INTERNAL_H__
24 #define __MM_PLAYER_INTERNAL_H__
25
26 #include <mm_types.h>
27
28 #ifdef __cplusplus
29         extern "C" {
30 #endif
31
32 /**
33         @addtogroup PLAYER-INTERNAL
34         @{
35
36         @par
37         <div><table>
38         <tr>
39         <td>PROPERTY</td>
40         <td>TYPE</td>
41         <td>VALID TYPE</td>
42         <td>DEFAULT VALUE</td>
43         </tr>
44         <tr>
45         <td>"display_roi_x"</td>
46         <td>int</td>
47         <td>range</td>
48         <td>0</td>
49         </tr>
50         <tr>
51         <td>"display_roi_y"</td>
52         <td>int</td>
53         <td>range</td>
54         <td>0</td>
55         </tr>
56         <tr>
57         <td>"display_roi_width"</td>
58         <td>int</td>
59         <td>range</td>
60         <td>640</td>
61         </tr>
62         <tr>
63         <td>"display_roi_height"</td>
64         <td>int</td>
65         <td>range</td>
66         <td>480</td>
67         </tr>
68         <tr>
69         <td>"display_method"</td>
70         <td>int</td>
71         <td>range</td>
72         <td>MM_DISPLAY_METHOD_LETTER_BOX</td>
73         </tr>
74         <tr>
75         <td>"sound_volume_type"</td>
76         <td>int</td>
77         <td>range</td>
78         <td>MM_SOUND_VOLUME_TYPE_CALL</td>
79         </tr>
80         <tr>
81         <td>"sound_route"</td>
82         <td>int</td>
83         <td>range</td>
84         <td>MM_AUDIOROUTE_USE_EXTERNAL_SETTING</td>
85         </tr>
86         <tr>
87         <td>"sound_stop_when_unplugged"</td>
88         <td>int</td>
89         <td>range</td>
90         </tr>
91         </table></div>
92
93 */
94
95 /*
96  * Enumerations of video colorspace
97  */
98 typedef enum {
99     MM_PLAYER_COLORSPACE_I420 = 0,              /**< I420 format - planer */
100     MM_PLAYER_COLORSPACE_RGB888,                        /**< RGB888 pixel format */
101     MM_PLAYER_COLORSPACE_NV12_TILED,            /**< Customized color format */
102     MM_PLAYER_COLORSPACE_NV12,
103 }MMPlayerVideoColorspace;
104
105 typedef struct
106 {
107         unsigned char *data;                                    /* capture image buffer */
108         int size;                                                               /* capture image size */
109         MMPlayerVideoColorspace fmt;                    /* color space type */
110         unsigned int width;                                             /* width of captured image */
111         unsigned int height;                                    /* height of captured image */
112         unsigned int orientation;                               /* content orientation */
113 }MMPlayerVideoCapture;
114
115 /**
116  * Buffer need data callback function type.
117  *
118  * @param       size            [in]    size required for the buffer playback
119  * @param       user_param      [in]    User defined parameter which is passed when set
120  *                                                              to need data callback
121  *
122  * @return      This callback function have to return MM_ERROR_NONE.
123  */
124 typedef bool    (*mm_player_buffer_need_data_callback) (unsigned int size, void *user_param);
125
126 /**
127  * Buffer enough data callback function type.
128  *
129  * @param       user_param      [in]    User defined parameter which is passed when set
130  *                                                              to enough data callback
131  *
132  * @return      This callback function have to return MM_ERROR_NONE.
133  */
134 typedef bool    (*mm_player_buffer_enough_data_callback) (void *user_param);
135
136 /**
137  * Buffer seek data callback function type.
138  *
139  * @param       offset                  [in]    offset for the buffer playback
140  * @param       user_param              [in]    User defined parameter which is passed when set
141  *                                                                      to seek data callback
142  *
143  * @return      This callback function have to return MM_ERROR_NONE.
144  */
145 typedef bool    (*mm_player_buffer_seek_data_callback) (unsigned long long offset, void *user_param);
146
147 /**
148  * Video stream callback function type.
149  *
150  * @param       stream          [in]    Reference pointer to video frame data
151  * @param       stream_size     [in]    Size of video frame data
152  * @param       user_param      [in]    User defined parameter which is passed when set
153  *                                                              video stream callback
154  * @param       width           [in]    width of video frame
155  * @param       height          [in]    height of video frame
156  *
157  * @return      This callback function have to return MM_ERROR_NONE.
158  */
159 typedef bool    (*mm_player_video_stream_callback) (void *stream, void *user_param);
160
161 /**
162  * Audio stream callback function type.
163  *
164  * @param       stream          [in]    Reference pointer to audio frame data
165  * @param       stream_size     [in]    Size of audio frame data
166  * @param       user_param      [in]    User defined parameter which is passed when set
167  *                                                              audio stream callback
168  *
169  * @return      This callback function have to return MM_ERROR_NONE.
170  */
171 typedef bool    (*mm_player_video_capture_callback) (void *stream, int stream_size, void *user_param);
172
173 /**
174  * Video frame render error callback function type.
175  *
176  * @param       error_id        [in]    cause of error
177  * @param       user_param      [in]    User defined parameter which is passed when set
178  *                                                              video frame render error callback
179  *
180  * @return      This callback function have to return MM_ERROR_NONE.
181  */
182 typedef bool    (*mm_player_video_frame_render_error_callback) (void *error_id, void *user_param);
183
184 /**
185  * This function is to set play speed for playback.
186  *
187  * @param       player          [in]    Handle of player.
188  * @param       ratio           [in]    Speed for playback.
189  *
190  * @return      This function returns zero on success, or negative value with error
191  *                      code
192  * @remark      The current supported range is from -64x to 64x.
193  *              But, the quailty is dependent on codec performance.
194  *              And, the sound is muted under normal speed and more than double speed.
195  * @see
196  * @since
197  */
198 int mm_player_set_play_speed(MMHandleType player, float rate);
199
200 /**
201  * This function set callback function for receiving video stream from player.
202  *
203  * @param       player          [in]    Handle of player.
204  * @param       callback        [in]    Video stream callback function.
205  * @param       user_param      [in]    User parameter.
206  *
207  * @return      This function returns zero on success, or negative value with error
208  *                      code.
209  * @remark
210  * @see         mm_player_video_stream_callback mm_player_set_audio_stream_callback
211  * @since
212  */
213 int mm_player_set_video_stream_callback(MMHandleType player, mm_player_video_stream_callback callback, void *user_param);
214
215 /**
216  * This function is to capture video frame.
217  *
218  * @param       player          [in]    Handle of player.
219  *
220  * @return      This function returns zero on success, or negative value with error
221  *                      code.
222  *
223  * @remark      Captured buffer is sent asynchronously through message callback with MM_MESSAGE_VIDEO_CAPTURED.
224  *                      And, application should free the captured buffer directly.
225  * @see         MM_MESSAGE_VIDEO_CAPTURED
226  * @since
227  */
228 int mm_player_do_video_capture(MMHandleType player);
229
230 /**
231  * This function set callback function for receiving need data message from player.
232  *
233  * @param       player          [in]    Handle of player.
234  * @param       callback        [in]    Need data callback function.
235  * @param       user_param      [in]    User parameter.
236  *
237  * @return      This function returns zero on success, or negative value with error
238  *                      code.
239  * @remark
240  * @see         mm_player_set_buffer_enough_data_callback
241  * @since
242  */
243 int mm_player_set_buffer_need_data_callback(MMHandleType player, mm_player_buffer_need_data_callback callback , void *user_param);
244
245 /**
246  * This function set callback function for receiving enough data message from player.
247  *
248  * @param       player          [in]    Handle of player.
249  * @param       callback        [in]    Enough data callback function.
250  * @param       user_param      [in]    User parameter.
251  *
252  * @return      This function returns zero on success, or negative value with error
253  *                      code.
254  * @remark
255  * @see         mm_player_set_buffer_need_data_callback
256  * @since
257  */
258 int mm_player_set_buffer_enough_data_callback(MMHandleType player, mm_player_buffer_enough_data_callback callback, void *user_param);
259
260 /**
261  * This function set callback function for receiving seek data message from player.
262  *
263  * @param       player          [in]    Handle of player.
264  * @param       callback        [in]    Seek data callback function.
265  * @param       user_param      [in]    User parameter.
266  *
267  * @return      This function returns zero on success, or negative value with error
268  *                      code.
269  * @remark
270  * @see
271  * @since
272  */
273 int mm_player_set_buffer_seek_data_callback(MMHandleType player, mm_player_buffer_seek_data_callback callback, void *user_param);
274
275 /**
276  * This function set callback function for putting data into player.
277  *
278  * @param       player          [in]    Handle of player.
279  * @param       buf                     [in]    data to push into player
280  * @param       size                    [in]    buffer size to push
281  *
282  * @return      This function returns zero on success, or negative value with error
283  *                      code.
284  * @remark
285  * @see
286  * @since
287  */
288 int mm_player_push_buffer(MMHandleType player, unsigned char *buf, int size);
289
290 /**
291  * This function changes the previous videosink plugin for a new one
292  *
293  * @param       player                  [in]    Handle of player.
294  * @param       display_surface_type    [in]    display surface type to set
295  * @param       display_overlay                 [in]    display overlay to set
296  *
297  * @return      This function returns zero on success, or negative value with error
298  *                      code.
299  * @remark
300  * @see
301  * @since
302  */
303 int mm_player_change_videosink(MMHandleType player, MMDisplaySurfaceType display_surface_type, void *display_overlay);
304
305 /**
306         @}
307  */
308
309 #ifdef __cplusplus
310         }
311 #endif
312
313 #endif  /* __MM_PLAYER_INTERNAL_H__ */