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