xref: /rockchip-linux_mpp/inc/rk_type.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __RK_TYPE_H__
18*437bfbebSnyanmisaka #define __RK_TYPE_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include <stddef.h>
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka typedef unsigned char           RK_U8;
23*437bfbebSnyanmisaka typedef unsigned short          RK_U16;
24*437bfbebSnyanmisaka typedef unsigned int            RK_U32;
25*437bfbebSnyanmisaka typedef unsigned long           RK_ULONG;
26*437bfbebSnyanmisaka typedef RK_ULONG                RK_UL;
27*437bfbebSnyanmisaka typedef unsigned long long int  RK_U64;
28*437bfbebSnyanmisaka 
29*437bfbebSnyanmisaka typedef signed char             RK_S8;
30*437bfbebSnyanmisaka typedef signed short            RK_S16;
31*437bfbebSnyanmisaka typedef signed int              RK_S32;
32*437bfbebSnyanmisaka typedef signed long             RK_LONG;
33*437bfbebSnyanmisaka typedef RK_LONG                 RK_SL;
34*437bfbebSnyanmisaka typedef signed long long int    RK_S64;
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka typedef float                   RK_FLOAT;
37*437bfbebSnyanmisaka typedef double                  RK_DOUBLE;
38*437bfbebSnyanmisaka 
39*437bfbebSnyanmisaka typedef unsigned long           RK_SIZE_T;
40*437bfbebSnyanmisaka typedef unsigned int            RK_HANDLE;
41*437bfbebSnyanmisaka 
42*437bfbebSnyanmisaka typedef unsigned char           rk_u8;
43*437bfbebSnyanmisaka typedef unsigned short          rk_u16;
44*437bfbebSnyanmisaka typedef unsigned int            rk_u32;
45*437bfbebSnyanmisaka typedef unsigned long           rk_ulong;
46*437bfbebSnyanmisaka typedef rk_ulong                rk_ul;
47*437bfbebSnyanmisaka typedef unsigned long long int  rk_u64;
48*437bfbebSnyanmisaka 
49*437bfbebSnyanmisaka typedef signed char             rk_s8;
50*437bfbebSnyanmisaka typedef signed short            rk_s16;
51*437bfbebSnyanmisaka typedef signed int              rk_s32;
52*437bfbebSnyanmisaka typedef signed long             rk_long;
53*437bfbebSnyanmisaka typedef rk_long                 rk_sl;
54*437bfbebSnyanmisaka typedef signed long long int    rk_s64;
55*437bfbebSnyanmisaka 
56*437bfbebSnyanmisaka typedef float                   rk_float;
57*437bfbebSnyanmisaka typedef double                  rk_double;
58*437bfbebSnyanmisaka 
59*437bfbebSnyanmisaka typedef unsigned long           rk_size_t;
60*437bfbebSnyanmisaka typedef unsigned int            rk_handle;
61*437bfbebSnyanmisaka 
62*437bfbebSnyanmisaka typedef enum {
63*437bfbebSnyanmisaka     RK_FALSE = 0,
64*437bfbebSnyanmisaka     RK_TRUE  = 1,
65*437bfbebSnyanmisaka } RK_BOOL;
66*437bfbebSnyanmisaka 
67*437bfbebSnyanmisaka typedef enum {
68*437bfbebSnyanmisaka     rk_false = 0,
69*437bfbebSnyanmisaka     rk_true  = 1,
70*437bfbebSnyanmisaka } rk_bool;
71*437bfbebSnyanmisaka 
72*437bfbebSnyanmisaka #ifndef NULL
73*437bfbebSnyanmisaka #define NULL                    0L
74*437bfbebSnyanmisaka #endif
75*437bfbebSnyanmisaka 
76*437bfbebSnyanmisaka #define RK_RET                  RK_S32
77*437bfbebSnyanmisaka #define RK_NULL                 0L
78*437bfbebSnyanmisaka #define RK_OK                   0
79*437bfbebSnyanmisaka #define RK_NOK                  (-1)
80*437bfbebSnyanmisaka #define RK_SUCCESS              0
81*437bfbebSnyanmisaka #define RK_FAILURE              (-1)
82*437bfbebSnyanmisaka 
83*437bfbebSnyanmisaka #define RK_VOID                 void
84*437bfbebSnyanmisaka #define RK_UNUSED(x)            ((void)((x)))
85*437bfbebSnyanmisaka 
86*437bfbebSnyanmisaka #define rk_ret                  rk_s32
87*437bfbebSnyanmisaka #define rk_null                 0L
88*437bfbebSnyanmisaka #define rk_ok                   0
89*437bfbebSnyanmisaka #define rk_nok                  (-1)
90*437bfbebSnyanmisaka #define rk_success              0
91*437bfbebSnyanmisaka #define rk_failure              (-1)
92*437bfbebSnyanmisaka 
93*437bfbebSnyanmisaka #define rk_void                 void
94*437bfbebSnyanmisaka #define rk_unused(x)            ((void)((x)))
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka #ifndef MODULE_TAG
97*437bfbebSnyanmisaka #define MODULE_TAG              NULL
98*437bfbebSnyanmisaka #endif
99*437bfbebSnyanmisaka 
100*437bfbebSnyanmisaka /**
101*437bfbebSnyanmisaka  * @ingroup rk_mpi
102*437bfbebSnyanmisaka  * @brief The type of mpp context
103*437bfbebSnyanmisaka  * @details This type is used when calling mpp_init(), which including decoder,
104*437bfbebSnyanmisaka  *          encoder and Image Signal Process(ISP). So far decoder and encoder
105*437bfbebSnyanmisaka  *          are supported perfectly, and ISP will be supported in the future.
106*437bfbebSnyanmisaka  */
107*437bfbebSnyanmisaka typedef enum {
108*437bfbebSnyanmisaka     MPP_CTX_DEC,  /**< decoder */
109*437bfbebSnyanmisaka     MPP_CTX_ENC,  /**< encoder */
110*437bfbebSnyanmisaka     MPP_CTX_ISP,  /**< isp */
111*437bfbebSnyanmisaka     MPP_CTX_BUTT, /**< undefined */
112*437bfbebSnyanmisaka } MppCtxType;
113*437bfbebSnyanmisaka 
114*437bfbebSnyanmisaka /**
115*437bfbebSnyanmisaka  * @ingroup rk_mpi
116*437bfbebSnyanmisaka  * @brief Enumeration used to define the possible video compression codings.
117*437bfbebSnyanmisaka  *        sync with the omx_video.h
118*437bfbebSnyanmisaka  *
119*437bfbebSnyanmisaka  * @note  This essentially refers to file extensions. If the coding is
120*437bfbebSnyanmisaka  *        being used to specify the ENCODE type, then additional work
121*437bfbebSnyanmisaka  *        must be done to configure the exact flavor of the compression
122*437bfbebSnyanmisaka  *        to be used.  For decode cases where the user application can
123*437bfbebSnyanmisaka  *        not differentiate between MPEG-4 and H.264 bit streams, it is
124*437bfbebSnyanmisaka  *        up to the codec to handle this.
125*437bfbebSnyanmisaka  */
126*437bfbebSnyanmisaka typedef enum {
127*437bfbebSnyanmisaka     MPP_VIDEO_CodingUnused,             /**< Value when coding is N/A */
128*437bfbebSnyanmisaka     MPP_VIDEO_CodingAutoDetect,         /**< Autodetection of coding type */
129*437bfbebSnyanmisaka     MPP_VIDEO_CodingMPEG2,              /**< AKA: H.262 */
130*437bfbebSnyanmisaka     MPP_VIDEO_CodingH263,               /**< H.263 */
131*437bfbebSnyanmisaka     MPP_VIDEO_CodingMPEG4,              /**< MPEG-4 */
132*437bfbebSnyanmisaka     MPP_VIDEO_CodingWMV,                /**< Windows Media Video (WMV1,WMV2,WMV3)*/
133*437bfbebSnyanmisaka     MPP_VIDEO_CodingRV,                 /**< all versions of Real Video */
134*437bfbebSnyanmisaka     MPP_VIDEO_CodingAVC,                /**< H.264/AVC */
135*437bfbebSnyanmisaka     MPP_VIDEO_CodingMJPEG,              /**< Motion JPEG */
136*437bfbebSnyanmisaka     MPP_VIDEO_CodingVP8,                /**< VP8 */
137*437bfbebSnyanmisaka     MPP_VIDEO_CodingVP9,                /**< VP9 */
138*437bfbebSnyanmisaka     MPP_VIDEO_CodingVC1 = 0x01000000,   /**< Windows Media Video (WMV1,WMV2,WMV3)*/
139*437bfbebSnyanmisaka     MPP_VIDEO_CodingFLV1,               /**< Sorenson H.263 */
140*437bfbebSnyanmisaka     MPP_VIDEO_CodingDIVX3,              /**< DIVX3 */
141*437bfbebSnyanmisaka     MPP_VIDEO_CodingVP6,
142*437bfbebSnyanmisaka     MPP_VIDEO_CodingHEVC,               /**< H.265/HEVC */
143*437bfbebSnyanmisaka     MPP_VIDEO_CodingAVSPLUS,            /**< AVS+ */
144*437bfbebSnyanmisaka     MPP_VIDEO_CodingAVS,                /**< AVS profile=0x20 */
145*437bfbebSnyanmisaka     MPP_VIDEO_CodingAVS2,               /**< AVS2 */
146*437bfbebSnyanmisaka     MPP_VIDEO_CodingAV1,                /**< av1 */
147*437bfbebSnyanmisaka     MPP_VIDEO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
148*437bfbebSnyanmisaka     MPP_VIDEO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
149*437bfbebSnyanmisaka     MPP_VIDEO_CodingMax = 0x7FFFFFFF
150*437bfbebSnyanmisaka } MppCodingType;
151*437bfbebSnyanmisaka 
152*437bfbebSnyanmisaka /*
153*437bfbebSnyanmisaka  * All external interface object list here.
154*437bfbebSnyanmisaka  * The interface object is defined as void * for expandability
155*437bfbebSnyanmisaka  * The cross include between these objects will introduce extra
156*437bfbebSnyanmisaka  * compiling difficulty. So we move them together in this header.
157*437bfbebSnyanmisaka  *
158*437bfbebSnyanmisaka  * Object interface header list:
159*437bfbebSnyanmisaka  *
160*437bfbebSnyanmisaka  * MppCtx           - rk_mpi.h
161*437bfbebSnyanmisaka  * MppParam         - rk_mpi.h
162*437bfbebSnyanmisaka  *
163*437bfbebSnyanmisaka  * MppFrame         - mpp_frame.h
164*437bfbebSnyanmisaka  * MppPacket        - mpp_packet.h
165*437bfbebSnyanmisaka  *
166*437bfbebSnyanmisaka  * MppBuffer        - mpp_buffer.h
167*437bfbebSnyanmisaka  * MppBufferGroup   - mpp_buffer.h
168*437bfbebSnyanmisaka  *
169*437bfbebSnyanmisaka  * MppTask          - mpp_task.h
170*437bfbebSnyanmisaka  * MppMeta          - mpp_meta.h
171*437bfbebSnyanmisaka  */
172*437bfbebSnyanmisaka 
173*437bfbebSnyanmisaka typedef void* MppCtx;
174*437bfbebSnyanmisaka typedef void* MppParam;
175*437bfbebSnyanmisaka 
176*437bfbebSnyanmisaka typedef void* MppFrame;
177*437bfbebSnyanmisaka typedef void* MppPacket;
178*437bfbebSnyanmisaka 
179*437bfbebSnyanmisaka typedef void* MppBuffer;
180*437bfbebSnyanmisaka typedef void* MppBufferGroup;
181*437bfbebSnyanmisaka 
182*437bfbebSnyanmisaka typedef void* MppTask;
183*437bfbebSnyanmisaka typedef void* MppMeta;
184*437bfbebSnyanmisaka 
185*437bfbebSnyanmisaka /* KmppObjDef - mpp object name size and access table trie definition */
186*437bfbebSnyanmisaka typedef void* KmppObjDef;
187*437bfbebSnyanmisaka /* KmppObj    - mpp object for string name access and function access */
188*437bfbebSnyanmisaka typedef void* KmppObj;
189*437bfbebSnyanmisaka /* KmppShm    - mpp share memory for kernel / userspace transaction */
190*437bfbebSnyanmisaka typedef void* KmppShm;
191*437bfbebSnyanmisaka 
192*437bfbebSnyanmisaka /* kmpp transaction object */
193*437bfbebSnyanmisaka typedef void* KmppMeta;
194*437bfbebSnyanmisaka typedef void* KmppFrame;
195*437bfbebSnyanmisaka typedef void* KmppPacket;
196*437bfbebSnyanmisaka 
197*437bfbebSnyanmisaka typedef void* KmppBuffer;
198*437bfbebSnyanmisaka typedef void* KmppBufGrp;
199*437bfbebSnyanmisaka 
200*437bfbebSnyanmisaka /* MUST be the same to the KmppObjShm in rk-mpp-kobj.h */
201*437bfbebSnyanmisaka typedef struct KmppShmPtr_t {
202*437bfbebSnyanmisaka     /* uaddr - the userspace base address for userspace access */
203*437bfbebSnyanmisaka     union {
204*437bfbebSnyanmisaka         rk_u64 uaddr;
205*437bfbebSnyanmisaka         void *uptr;
206*437bfbebSnyanmisaka     };
207*437bfbebSnyanmisaka     /* kaddr - the kernel base address for kernel access */
208*437bfbebSnyanmisaka     union {
209*437bfbebSnyanmisaka         rk_u64 kaddr;
210*437bfbebSnyanmisaka         void *kptr;
211*437bfbebSnyanmisaka     };
212*437bfbebSnyanmisaka     /* DO NOT access reserved data only used by kernel */
213*437bfbebSnyanmisaka } KmppShmPtr;
214*437bfbebSnyanmisaka 
215*437bfbebSnyanmisaka #endif /*__RK_TYPE_H__*/
216