Merge "Fixed warnings" into tizen
[platform/core/api/mediacodec.git] / include / media_codec_private.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_PRIVATE_H__
18 #define __TIZEN_MEDIA_CODEC_PRIVATE_H__
19
20 #include <tizen.h>
21 #include <stdint.h>
22
23 #include <media_codec.h>
24
25 #include <mm_types.h>
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 #ifdef LOG_TAG
32 #undef LOG_TAG
33 #endif
34 #define LOG_TAG "TIZEN_N_MEDIACODEC"
35
36
37 #define MEDIACODEC_CHECK_CONDITION(condition,error,msg)     \
38                 if(condition) {} else \
39                 { LOGE("[%s] %s(0x%08x)",__FUNCTION__, msg,error); return error;}; \
40
41 #define MEDIACODEC_INSTANCE_CHECK(mediacodec)   \
42         MEDIACODEC_CHECK_CONDITION(mediacodec != NULL, MEDIACODEC_ERROR_INVALID_PARAMETER,"MEDIACODEC_ERROR_INVALID_PARAMETER")
43
44 #define MEDIACODEC_STATE_CHECK(mediacodec,expected_state)       \
45         MEDIACODEC_CHECK_CONDITION(mediacodec->state == expected_state,MEDIACODEC_ERROR_INVALID_STATE,"MEDIACODEC_ERROR_INVALID_STATE")
46
47 #define MEDIACODEC_NULL_ARG_CHECK(arg)      \
48         MEDIACODEC_CHECK_CONDITION(arg != NULL,MEDIACODEC_ERROR_INVALID_PARAMETER,"MEDIACODEC_ERROR_INVALID_PARAMETER")
49
50 #define MEDIACODEC_SUPPORT_CHECK(arg)       \
51         MEDIACODEC_CHECK_CONDITION(arg != false, MEDIACODEC_ERROR_NOT_SUPPORTED_ON_DEVICE, "MEDIACODEC_ERROR_NOT_SUPPORTED_ON_DEVICE")
52 /**
53  * @brief Enumeration of media codec state
54  * @since_tizen 2.3
55  */
56 typedef enum
57 {
58     MEDIACODEC_STATE_NONE = 0,      /**< Media codec is not created */
59     MEDIACODEC_STATE_IDLE,          /**< Media codec is created, but not prepared */
60     MEDIACODEC_STATE_READY,         /**< Media codec is ready to process */
61     MEDIACODEC_STATE_EXCUTE,        /**< Media codec is executing media */
62 } mediacodec_state_e;
63
64 typedef enum
65 {
66     MEDIACODEC_SUPPORT_TYPE_OMX = 0x10,     /**< This is optional flag for using openmax il */
67     MEDIACODEC_SUPPORT_TYPE_GEN = 0x20      /**< This is optional flag for using general codec */
68 } mediacodec_internal_support_type_e;
69
70 typedef enum
71 {
72     MEDIACODEC_PORT_TYPE_GENERAL,
73     MEDIACODEC_PORT_TYPE_OMX,
74     MEDIACODEC_PORT_TYPE_GST,
75     MEDIACODEC_PORT_TYPE_MAX,
76 } mediacodec_port_type_e;
77
78 /**
79  * @brief Media Codec's format for configuring codec.
80  */
81 typedef struct _mediacodecformat_s {
82     // Video
83     int fps;
84     int height;
85     int width;
86     float aspect;
87     bool vfr;
88     int level;
89     int profile;
90
91     // Audio
92     int channels;
93     int samplerate;
94     int bitrate;
95
96     // Codec Extra Data
97     void * extradata;
98     unsigned int extrasize;
99 } mediacodec_format_s;
100
101 typedef struct _mediacodec_s {
102     MMHandleType mc_handle;
103     int state;
104     bool is_omx;
105     char *m_mime;
106
107     mediacodec_input_buffer_used_cb empty_buffer_cb;
108     void* empty_buffer_cb_userdata;
109     mediacodec_output_buffer_available_cb fill_buffer_cb;
110     void* fill_buffer_cb_userdata;
111     mediacodec_error_cb error_cb;
112     void* error_cb_userdata;
113     mediacodec_eos_cb eos_cb;
114     void* eos_cb_userdata;
115     mediacodec_buffer_status_cb buffer_status_cb;
116     void* buffer_status_cb_userdata;
117     mediacodec_supported_codec_cb supported_codec_cb;
118     void* supported_codec_cb_userdata;
119
120 } mediacodec_s;
121
122 bool __mediacodec_state_validate(mediacodec_h mediacodec, mediacodec_state_e threshold);
123
124 #ifdef __cplusplus
125 }
126 #endif
127
128 #endif /* __TIZEN_MEDIA_CODEC_PRIVATE_H__ */