Remove dead codes
[platform/core/api/mediacodec.git] / include / media_codec_port.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 __TIZEN_MEDIA_CODEC_PORT_H__
18 #define __TIZEN_MEDIA_CODEC_PORT_H__
19
20 #include <tizen.h>
21 #include <glib.h>
22 #include <dlfcn.h>
23 #include <gst/gst.h>
24
25 #include <media_codec.h>
26 #include <media_codec_queue.h>
27 #include <media_codec_bitstream.h>
28 #include <media_codec_spec_emul.h>
29 #include <media_codec_ini.h>
30
31
32 /*===========================================================================================
33 |                                                                                                                                                                                      |
34 |  GLOBAL DEFINITIONS AND DECLARATIONS FOR MODULE                                                                                      |
35 |                                                                                                                                                                                      |
36 ========================================================================================== */
37
38 /*---------------------------------------------------------------------------
39 |    GLOBAL #defines:                                                                                                                    |
40 ---------------------------------------------------------------------------*/
41 #define CHECK_BIT(x, y) (((x) >> (y)) & 0x01)
42 #define GET_IS_ENCODER(x) CHECK_BIT(x, 0)
43 #define GET_IS_DECODER(x) CHECK_BIT(x, 1)
44 #define GET_IS_HW(x) CHECK_BIT(x, 2)
45 #define GET_IS_SW(x) CHECK_BIT(x, 3)
46 /*
47 #define GET_IS_OMX(x) CHECK_BIT(x, 4)
48 #define GET_IS_GEN(x) CHECK_BIT(x, 5)
49 */
50
51 #if 1
52 #define MEDIACODEC_FENTER();
53 #define MEDIACODEC_FLEAVE();
54 #else
55 #define MEDIACODEC_FENTER();    LOGW("%s Enter", __FUNCTION__);
56 #define MEDIACODEC_FLEAVE();    LOGW("%s Exit", __FUNCTION__);
57 #endif
58
59 /*---------------------------------------------------------------------------
60 |    GLOBAL CONSTANT DEFINITIONS:                                                                                          |
61 ---------------------------------------------------------------------------*/
62 /**
63  * @brief Enumerations of media codec port's retrun value
64  */
65 typedef enum {
66         MC_ERROR_NONE               =    0,
67         MC_ERROR                    =   -1,     /**< codec happens error */
68         MC_MEMORY_ERROR             =   -2,     /**< codec memory is not enough */
69         MC_PARAM_ERROR              =   -3,     /**< codec parameter is error */
70         MC_INVALID_ARG              =   -4,     /** < codec has invalid arguments */
71         MC_PERMISSION_DENIED        =   -5,
72         MC_INVALID_STATUS           =   -6,     /**< codec works at invalid status */
73         MC_NOT_SUPPORTED            =   -7,     /**< codec can't support this specific video format */
74         MC_INVALID_IN_BUF           =   -8,
75         MC_INVALID_OUT_BUF          =   -9,
76         MC_INTERNAL_ERROR           =   -10,
77         MC_HW_ERROR                 =   -11,    /**< codec happens hardware error */
78         MC_NOT_INITIALIZED          =   -12,
79         MC_INVALID_STREAM           =   -13,
80         MC_CODEC_NOT_FOUND          =   -14,
81         MC_ERROR_DECODE             =   -15,
82         MC_OUTPUT_BUFFER_EMPTY      =   -16,
83         MC_OUTPUT_BUFFER_OVERFLOW   =   -17,    /**< codec output buffer is overflow */
84         MC_MEMORY_ALLOCED           =   -18,    /**< codec has got memory and can decode one frame */
85         MC_COURRPTED_INI            =   -19,
86         MC_OUT_OF_MEMORY                        =       -20,    /**< when memory is not allocated */
87 } mc_ret_e;
88
89 typedef enum {
90         NONE,
91         L16,
92         ALAW,
93         ULAW,
94         AMR_NB,
95         AMR_WB,
96         G729,
97         AAC_LC,
98         AAC_HE,
99         AAC_HE_PS,
100         MP3,
101         VORBIS,
102         FLAC,
103         WMAV1,
104         WMAV2,
105         WMAPRO,
106         WMALSL,
107         OPUS,
108         H261,
109         H263,
110         H264,
111         MJPEG,
112         MPEG1,
113         MPEG2,
114         MPEG4,
115         HEVC,
116         VP8,
117         VP9,
118         VC1,
119         CODEC_NR_ITEMS
120 } codec_type_e;
121
122 /*---------------------------------------------------------------------------
123 |    GLOBAL DATA TYPE DEFINITIONS:                                                                                         |
124 ---------------------------------------------------------------------------*/
125 /**
126  * @brief Called when the dequeue input buffer done
127  * @details It will be invoked when mediacodec has released dequeue buffer.
128  * @param[in]   user_data  The user data passed from the callback registration function
129  * @pre It will be invoked when dequeue buffer process completed if you register this callback using mediacodec_set_dequeue_input_buffer_cb().
130  * @see mediacodec_set_dequeue_input_buffer_cb()
131  * @see mediacodec_unset_dequeue_input_buffer_cb()
132  */
133
134
135 typedef struct _mc_decoder_info_t mc_decoder_info_t;
136 typedef struct _mc_encoder_info_t mc_encoder_info_t;
137 typedef struct _mc_handle_t mc_handle_t;
138
139 typedef void (*mc_dequeue_input_buffer_cb)(media_packet_h pkt, void *user_data);
140 typedef void (*mc_empty_buffer_cb)(media_packet_h pkt, void *user_data);
141 typedef void (*mc_fill_buffer_cb)(media_packet_h pkt, void *user_data);
142 typedef void (*mc_error_cb)(mediacodec_error_e error, void *user_data);
143 typedef void (*mc_eos_cb)(void *user_data);
144 typedef void (*mc_buffer_status_cb)(mediacodec_status_e status, void *user_data);
145 typedef void (*mc_supported_codec_cb)(mediacodec_codec_type_e codec_type, void *user_data);
146
147 typedef enum {
148         _MEDIACODEC_EVENT_TYPE_COMPLETE,
149         _MEDIACODEC_EVENT_TYPE_EMPTYBUFFER,
150         _MEDIACODEC_EVENT_TYPE_FILLBUFFER,
151         _MEDIACODEC_EVENT_TYPE_ERROR,
152         _MEDIACODEC_EVENT_TYPE_EOS,
153         _MEDIACODEC_EVENT_TYPE_BUFFER_STATUS,
154         _MEDIACODEC_EVENT_TYPE_INTERNAL_FILLBUFFER,
155         _MEDIACODEC_EVENT_TYPE_NUM
156 } _mediacodec_event_e;
157
158
159 typedef enum _mc_codec_port_type_e {
160         CODEC_PORT_TYPE_GENERAL,
161         CODEC_PORT_TYPE_OMX,
162         CODEC_PORT_TYPE_GST,
163         CODEC_PORT_TYPE_MAX,
164 } mc_codec_port_type_e;
165
166 typedef struct mc_audio_port_definition_t {
167         gint samplerate;
168         gint channel;
169         gint bit_depth;
170         gint bitrate;
171 } mc_audio_port_definition_t;
172
173 typedef struct mc_video_port_definition_t {
174         gchar *format;
175         gint width;
176         gint height;
177         gint stride;
178         gint bitrate;
179         gint framerate;
180 } mc_video_port_definition_t;
181
182 /* Codec Private data */
183 struct _mc_handle_t {
184         int state;                                  /**<  mc current state */
185         bool is_encoder;
186         bool is_video;
187         bool is_hw;
188         bool is_prepared;
189
190         mediacodec_port_type_e port_type;
191         mediacodec_codec_type_e codec_id;
192
193         void *ports[2];
194         void *core;
195
196         union {
197                 mc_audio_port_definition_t audio;
198                 mc_video_port_definition_t video;
199         } info;
200
201         /* for process done cb */
202         void* user_cb[_MEDIACODEC_EVENT_TYPE_NUM];
203         void* user_data[_MEDIACODEC_EVENT_TYPE_NUM];
204
205         mc_codec_map_t encoder_map[MEDIA_CODEC_MAX_CODEC_TYPE];
206         mc_codec_map_t decoder_map[MEDIA_CODEC_MAX_CODEC_TYPE];
207
208         int num_supported_decoder;
209         int num_supported_encoder;
210
211         mc_ini_t *ini;
212 };
213
214 /*===========================================================================================
215 |                                                                                                                                                                                      |
216 |  GLOBAL FUNCTION PROTOTYPES                                                                                                                            |
217 |                                                                                                                                                                                      |
218 ========================================================================================== */
219
220 #ifdef __cplusplus
221 extern "C" {
222 #endif
223
224 int mc_create(MMHandleType *mediacodec);
225 int mc_destroy(MMHandleType mediacodec);
226
227 int mc_set_codec(MMHandleType mediacodec, mediacodec_codec_type_e codec_id, int flags);
228
229 int mc_set_vdec_info(MMHandleType mediacodec, int width, int height);
230 int mc_set_venc_info(MMHandleType mediacodec, int width, int height, int fps, int target_bits);
231
232 int mc_set_adec_info(MMHandleType mediacodec, int samplerate, int channel, int bit);
233 int mc_set_aenc_info(MMHandleType mediacodec, int samplerate, int channel, int bit,  int bitrate);
234
235 int mc_configure(MMHandleType mediacodec, media_format_h format, int flags);
236
237 int mc_prepare(MMHandleType mediacodec);
238 int mc_unprepare(MMHandleType mediacodec);
239
240 int mc_process_input(MMHandleType mediacodec, media_packet_h inbuf, uint64_t timeOutUs);
241 int mc_get_output(MMHandleType mediacodec, media_packet_h *outbuf, uint64_t timeOutUs);
242
243 int mc_flush_buffers(MMHandleType mediacodec);
244 int mc_get_supported_type(MMHandleType mediacodec, mediacodec_codec_type_e codec_type, bool encoder, int *support_type);
245
246 int mc_get_packet_pool(MMHandleType mediacodec, media_packet_pool_h *pool);
247
248 int mc_set_empty_buffer_cb(MMHandleType mediacodec, mediacodec_input_buffer_used_cb callback, void* user_data);
249 int mc_unset_empty_buffer_cb(MMHandleType mediacodec);
250
251 int mc_set_fill_buffer_cb(MMHandleType mediacodec, mediacodec_output_buffer_available_cb callback, void* user_data);
252 int mc_unset_fill_buffer_cb(MMHandleType mediacodec);
253
254 int mc_set_error_cb(MMHandleType mediacodec, mediacodec_error_cb callback, void* user_data);
255 int mc_unset_error_cb(MMHandleType mediacodec);
256
257 int mc_set_eos_cb(MMHandleType mediacodec, mediacodec_eos_cb callback, void* user_data);
258 int mc_unset_eos_cb(MMHandleType mediacodec);
259
260 int mc_set_buffer_status_cb(MMHandleType mediacodec, mediacodec_buffer_status_cb callback, void* user_data);
261 int mc_unset_buffer_status_cb(MMHandleType mediacodec);
262
263 int _mediacodec_foreach_supported_codec(mediacodec_supported_codec_cb callback, void* user_data);
264
265 void _mc_create_codec_map_from_ini(mc_handle_t *mc_handle, mc_codec_spec_t *spec_emul);
266 void _mc_create_codec_map_from_ini_static(mc_ini_t *ini, mc_codec_spec_t *spec_emul);
267 void _mc_create_decoder_map_from_ini(mc_handle_t *mc_handle);
268 void _mc_create_encoder_map_from_ini(mc_handle_t *mc_handle);
269
270 mediacodec_codec_type_e simple_to_codec_type_enumeration(codec_type_e codec_id);
271 codec_type_e codec_type_to_simple_enumeration(mediacodec_codec_type_e media_codec_id);
272
273 #ifdef __cplusplus
274 }
275 #endif
276
277 #endif /* __TIZEN_MEDIA_CODEC_PORT_H__ */