• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2010 Samsung Electronics Co. LTD
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 _SSBSIP_MFC_API_H_
18 #define _SSBSIP_MFC_API_H_
19 
20 /*--------------------------------------------------------------------------------*/
21 /* Definition                                                                     */
22 /*--------------------------------------------------------------------------------*/
23 #define MAX_DECODER_INPUT_BUFFER_SIZE  (1024 * 3072)
24 #define MAX_ENCODER_OUTPUT_BUFFER_SIZE (1024 * 3072)
25 
26 #define MMAP_BUFFER_SIZE_MMAP          (70*1024*1024)
27 
28 #define S5PC110_MFC_DEV_NAME           "/dev/s3c-mfc"
29 
30 /*--------------------------------------------------------------------------------*/
31 /* Structure and Type                                                             */
32 /*--------------------------------------------------------------------------------*/
33 typedef enum {
34     H264_DEC,
35     VC1_DEC,     /* VC1 advaced Profile decoding  */
36     MPEG4_DEC,
37     XVID_DEC,
38     MPEG1_DEC,
39     MPEG2_DEC,
40     H263_DEC,
41     VC1RCV_DEC,  /* VC1 simple/main profile decoding  */
42     FIMV1_DEC,
43     FIMV2_DEC,
44     FIMV3_DEC,
45     FIMV4_DEC,
46     H264_ENC,
47     MPEG4_ENC,
48     H263_ENC,
49     UNKNOWN_TYPE
50 } SSBSIP_MFC_CODEC_TYPE;
51 
52 typedef enum {
53     DONT_CARE = 0,
54     I_FRAME = 1,
55     NOT_CODED = 2
56 } SSBSIP_MFC_FORCE_SET_FRAME_TYPE;
57 
58 typedef enum {
59     NV12_LINEAR = 0,
60     NV12_TILE
61 } SSBSIP_MFC_INSTRM_MODE_TYPE;
62 
63 typedef enum {
64     NO_CACHE = 0,
65     CACHE = 1
66 } SSBIP_MFC_BUFFER_TYPE;
67 
68 typedef enum {
69     MFC_DEC_SETCONF_POST_ENABLE = 1,
70     MFC_DEC_SETCONF_EXTRA_BUFFER_NUM,
71     MFC_DEC_SETCONF_DISPLAY_DELAY,
72     MFC_DEC_SETCONF_IS_LAST_FRAME,
73     MFC_DEC_SETCONF_SLICE_ENABLE,
74     MFC_DEC_SETCONF_CRC_ENABLE,
75     MFC_DEC_SETCONF_FIMV1_WIDTH_HEIGHT,
76     MFC_DEC_SETCONF_FRAME_TAG,
77     MFC_DEC_GETCONF_CRC_DATA,
78     MFC_DEC_GETCONF_BUF_WIDTH_HEIGHT,
79     MFC_DEC_GETCONF_CROP_INFO,
80     MFC_DEC_GETCONF_FRAME_TAG
81 } SSBSIP_MFC_DEC_CONF;
82 
83 typedef enum {
84     MFC_ENC_SETCONF_FRAME_TYPE = 100,
85     MFC_ENC_SETCONF_CHANGE_FRAME_RATE,
86     MFC_ENC_SETCONF_CHANGE_BIT_RATE,
87     MFC_ENC_SETCONF_FRAME_TAG,
88     MFC_ENC_SETCONF_ALLOW_FRAME_SKIP,
89     MFC_ENC_GETCONF_FRAME_TAG
90 } SSBSIP_MFC_ENC_CONF;
91 
92 typedef enum {
93     MFC_GETOUTBUF_STATUS_NULL = 0,
94     MFC_GETOUTBUF_DECODING_ONLY = 1,
95     MFC_GETOUTBUF_DISPLAY_DECODING,
96     MFC_GETOUTBUF_DISPLAY_ONLY,
97     MFC_GETOUTBUF_DISPLAY_END
98 } SSBSIP_MFC_DEC_OUTBUF_STATUS;
99 
100 typedef enum {
101     MFC_FRAME_TYPE_NOT_CODED,
102     MFC_FRAME_TYPE_I_FRAME,
103     MFC_FRAME_TYPE_P_FRAME,
104     MFC_FRAME_TYPE_B_FRAME,
105     MFC_FRAME_TYPE_OTHERS
106 } SSBSIP_MFC_FRAME_TYPE;
107 
108 typedef enum {
109     MFC_RET_OK                      = 1,
110     MFC_RET_FAIL                    = -1000,
111     MFC_RET_OPEN_FAIL               = -1001,
112     MFC_RET_CLOSE_FAIL              = -1002,
113 
114     MFC_RET_DEC_INIT_FAIL           = -2000,
115     MFC_RET_DEC_EXE_TIME_OUT        = -2001,
116     MFC_RET_DEC_EXE_ERR             = -2002,
117     MFC_RET_DEC_GET_INBUF_FAIL      = -2003,
118     MFC_RET_DEC_SET_INBUF_FAIL      = -2004,
119     MFC_RET_DEC_GET_OUTBUF_FAIL     = -2005,
120     MFC_RET_DEC_GET_CONF_FAIL       = -2006,
121     MFC_RET_DEC_SET_CONF_FAIL       = -2007,
122 
123     MFC_RET_ENC_INIT_FAIL           = -3000,
124     MFC_RET_ENC_EXE_TIME_OUT        = -3001,
125     MFC_RET_ENC_EXE_ERR             = -3002,
126     MFC_RET_ENC_GET_INBUF_FAIL      = -3003,
127     MFC_RET_ENC_SET_INBUF_FAIL      = -3004,
128     MFC_RET_ENC_GET_OUTBUF_FAIL     = -3005,
129     MFC_RET_ENC_SET_OUTBUF_FAIL     = -3006,
130     MFC_RET_ENC_GET_CONF_FAIL       = -3007,
131     MFC_RET_ENC_SET_CONF_FAIL       = -3008,
132 
133     MFC_RET_INVALID_PARAM           = -4000
134 } SSBSIP_MFC_ERROR_CODE;
135 
136 typedef struct {
137     void *YPhyAddr;                     // [OUT] physical address of Y
138     void *CPhyAddr;                     // [OUT] physical address of CbCr
139     void *YVirAddr;                     // [OUT] virtual address of Y
140     void *CVirAddr;                     // [OUT] virtual address of CbCr
141 
142     int img_width;                      // [OUT] width of real image
143     int img_height;                     // [OUT] height of real image
144     int buf_width;                      // [OUT] width aligned to 16
145     int buf_height;                     // [OUT] height alighed to 16
146 
147     int timestamp_top;                  // [OUT] timestamp of top filed(This is used for interlaced stream)
148     int timestamp_bottom;               // [OUT] timestamp of bottom filed(This is used for interlaced stream)
149     int consumedByte;                   // [OUT] the number of byte consumed during decoding
150     int res_change;                     // [OUT] whether resolution is changed or not. 0: not change, 1: increased, 2: decreased
151     int crop_top_offset;                // [OUT] crop information, top_offset
152     int crop_bottom_offset;             // [OUT] crop information, bottom_offset
153     int crop_left_offset;               // [OUT] crop information, left_offset
154     int crop_right_offset;              // [OUT] crop information, right_offset
155 } SSBSIP_MFC_DEC_OUTPUT_INFO;
156 
157 typedef struct {
158     void *YPhyAddr;                     // [IN/OUT] physical address of Y
159     void *CPhyAddr;                     // [IN/OUT] physical address of CbCr
160     void *YVirAddr;                     // [IN/OUT] virtual address of Y
161     void *CVirAddr;                     // [IN/OUT] virtual address of CbCr
162     int YSize;                          // [IN/OUT] input size of Y data
163     int CSize;                          // [IN/OUT] input size of CbCr data
164 } SSBSIP_MFC_ENC_INPUT_INFO;
165 
166 typedef struct {
167     unsigned int dataSize;              // [OUT] encoded data size(without header)
168     unsigned int headerSize;            // [OUT] encoded header size
169     unsigned int frameType;             // [OUT] frame type of encoded stream
170     void *StrmPhyAddr;                  // [OUT] physical address of Y
171     void *StrmVirAddr;                  // [OUT] virtual address of Y
172     void *encodedYPhyAddr;              // [OUT] physical address of Y which is flushed
173     void *encodedCPhyAddr;              // [OUT] physical address of C which is flushed
174 } SSBSIP_MFC_ENC_OUTPUT_INFO;
175 
176 typedef struct {
177     // common parameters
178     SSBSIP_MFC_CODEC_TYPE codecType;    // [IN] codec type
179     int SourceWidth;                    // [IN] width of video to be encoded
180     int SourceHeight;                   // [IN] height of video to be encoded
181     int IDRPeriod;                      // [IN] GOP number(interval of I-frame)
182     int SliceMode;                      // [IN] Multi slice mode
183     int RandomIntraMBRefresh;           // [IN] cyclic intra refresh
184     int EnableFRMRateControl;           // [IN] frame based rate control enable
185     int Bitrate;                        // [IN] rate control parameter(bit rate)
186     int FrameQp;                        // [IN] The quantization parameter of the frame
187     int FrameQp_P;                      // [IN] The quantization parameter of the P frame
188     int QSCodeMax;                      // [IN] Maximum Quantization value
189     int QSCodeMin;                      // [IN] Minimum Quantization value
190     int CBRPeriodRf;                    // [IN] Reaction coefficient parameter for rate control
191     int PadControlOn;                   // [IN] Enable padding control
192     int LumaPadVal;                     // [IN] Luma pel value used to fill padding area
193     int CbPadVal;                       // [IN] CB pel value used to fill padding area
194     int CrPadVal;                       // [IN] CR pel value used to fill padding area
195     int FrameMap;                       // [IN] Encoding input mode(tile mode or linear mode)
196 
197     // H.264 specific parameters
198     int ProfileIDC;                     // [IN] profile
199     int LevelIDC;                       // [IN] level
200     int FrameQp_B;                      // [IN] The quantization parameter of the B frame
201     int FrameRate;                      // [IN] rate control parameter(frame rate)
202     int SliceArgument;                  // [IN] MB number or byte number
203     int NumberBFrames;                  // [IN] The number of consecutive B frame inserted
204     int NumberReferenceFrames;          // [IN] The number of reference pictures used
205     int NumberRefForPframes;            // [IN] The number of reference pictures used for encoding P pictures
206     int LoopFilterDisable;              // [IN] disable the loop filter
207     int LoopFilterAlphaC0Offset;        // [IN] Alpha & C0 offset for H.264 loop filter
208     int LoopFilterBetaOffset;           // [IN] Beta offset for H.264 loop filter
209     int SymbolMode;                     // [IN] The mode of entropy coding(CABAC, CAVLC)
210     int PictureInterlace;               // [IN] Enables the interlace mode
211     int Transform8x8Mode;               // [IN] Allow 8x8 transform(This is allowed only for high profile)
212     int EnableMBRateControl;            // [IN] Enable macroblock-level rate control
213     int DarkDisable;                    // [IN] Disable adaptive rate control on dark region
214     int SmoothDisable;                  // [IN] Disable adaptive rate control on smooth region
215     int StaticDisable;                  // [IN] Disable adaptive rate control on static region
216     int ActivityDisable;                // [IN] Disable adaptive rate control on high activity region
217 } SSBSIP_MFC_ENC_H264_PARAM;
218 
219 typedef struct {
220     // common parameters
221     SSBSIP_MFC_CODEC_TYPE codecType;    // [IN] codec type
222     int SourceWidth;                    // [IN] width of video to be encoded
223     int SourceHeight;                   // [IN] height of video to be encoded
224     int IDRPeriod;                      // [IN] GOP number(interval of I-frame)
225     int SliceMode;                      // [IN] Multi slice mode
226     int RandomIntraMBRefresh;           // [IN] cyclic intra refresh
227     int EnableFRMRateControl;           // [IN] frame based rate control enable
228     int Bitrate;                        // [IN] rate control parameter(bit rate)
229     int FrameQp;                        // [IN] The quantization parameter of the frame
230     int FrameQp_P;                      // [IN] The quantization parameter of the P frame
231     int QSCodeMax;                      // [IN] Maximum Quantization value
232     int QSCodeMin;                      // [IN] Minimum Quantization value
233     int CBRPeriodRf;                    // [IN] Reaction coefficient parameter for rate control
234     int PadControlOn;                   // [IN] Enable padding control
235     int LumaPadVal;                     // [IN] Luma pel value used to fill padding area
236     int CbPadVal;                       // [IN] CB pel value used to fill padding area
237     int CrPadVal;                       // [IN] CR pel value used to fill padding area
238     int FrameMap;                       // [IN] Encoding input mode(tile mode or linear mode)
239 
240     // MPEG4 specific parameters
241     int ProfileIDC;                     // [IN] profile
242     int LevelIDC;                       // [IN] level
243     int FrameQp_B;                      // [IN] The quantization parameter of the B frame
244     int TimeIncreamentRes;              // [IN] frame rate
245     int VopTimeIncreament;              // [IN] frame rate
246     int SliceArgument;                  // [IN] MB number or byte number
247     int NumberBFrames;                  // [IN] The number of consecutive B frame inserted
248     int DisableQpelME;                  // [IN] disable quarter-pixel motion estimation
249 } SSBSIP_MFC_ENC_MPEG4_PARAM;
250 
251 typedef struct {
252     // common parameters
253     SSBSIP_MFC_CODEC_TYPE codecType;    // [IN] codec type
254     int SourceWidth;                    // [IN] width of video to be encoded
255     int SourceHeight;                   // [IN] height of video to be encoded
256     int IDRPeriod;                      // [IN] GOP number(interval of I-frame)
257     int SliceMode;                      // [IN] Multi slice mode
258     int RandomIntraMBRefresh;           // [IN] cyclic intra refresh
259     int EnableFRMRateControl;           // [IN] frame based rate control enable
260     int Bitrate;                        // [IN] rate control parameter(bit rate)
261     int FrameQp;                        // [IN] The quantization parameter of the frame
262     int FrameQp_P;                      // [IN] The quantization parameter of the P frame
263     int QSCodeMax;                      // [IN] Maximum Quantization value
264     int QSCodeMin;                      // [IN] Minimum Quantization value
265     int CBRPeriodRf;                    // [IN] Reaction coefficient parameter for rate control
266     int PadControlOn;                   // [IN] Enable padding control
267     int LumaPadVal;                     // [IN] Luma pel value used to fill padding area
268     int CbPadVal;                       // [IN] CB pel value used to fill padding area
269     int CrPadVal;                       // [IN] CR pel value used to fill padding area
270     int FrameMap;                       // [IN] Encoding input mode(tile mode or linear mode)
271 
272     // H.263 specific parameters
273     int FrameRate;                      // [IN] rate control parameter(frame rate)
274 } SSBSIP_MFC_ENC_H263_PARAM;
275 
276 typedef struct {
277     int width;
278     int height;
279     int buf_width;
280     int buf_height;
281 } SSBSIP_MFC_IMG_RESOLUTION;
282 
283 typedef struct {
284     int crop_top_offset;
285     int crop_bottom_offset;
286     int crop_left_offset;
287     int crop_right_offset;
288 } SSBSIP_MFC_CROP_INFORMATION;
289 
290 #ifdef __cplusplus
291 extern "C" {
292 #endif
293 
294 /*--------------------------------------------------------------------------------*/
295 /* Decoding APIs                                                                  */
296 /*--------------------------------------------------------------------------------*/
297 void *SsbSipMfcDecOpen(void *value);
298 SSBSIP_MFC_ERROR_CODE SsbSipMfcDecInit(void *openHandle, SSBSIP_MFC_CODEC_TYPE codec_type, int Frameleng);
299 SSBSIP_MFC_ERROR_CODE SsbSipMfcDecExe(void *openHandle, int lengthBufFill);
300 SSBSIP_MFC_ERROR_CODE SsbSipMfcDecClose(void *openHandle);
301 
302 void *SsbSipMfcDecGetInBuf(void *openHandle, void **phyInBuf, int inputBufferSize);
303 SSBSIP_MFC_ERROR_CODE SsbSipMfcDecSetInBuf(void *openHandle, void *phyInBuf, void *virInBuf, int inputBufferSize);
304 
305 SSBSIP_MFC_DEC_OUTBUF_STATUS SsbSipMfcDecGetOutBuf(void *openHandle, SSBSIP_MFC_DEC_OUTPUT_INFO *output_info);
306 
307 SSBSIP_MFC_ERROR_CODE SsbSipMfcDecSetConfig(void *openHandle, SSBSIP_MFC_DEC_CONF conf_type, void *value);
308 SSBSIP_MFC_ERROR_CODE SsbSipMfcDecGetConfig(void *openHandle, SSBSIP_MFC_DEC_CONF conf_type, void *value);
309 
310 /*--------------------------------------------------------------------------------*/
311 /* Encoding APIs                                                                  */
312 /*--------------------------------------------------------------------------------*/
313 void *SsbSipMfcEncOpen(void *value);
314 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncInit(void *openHandle, void *param);
315 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncExe(void *openHandle);
316 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncClose(void *openHandle);
317 
318 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetSize(void *openHandle, SSBSIP_MFC_CODEC_TYPE codecType, int nWidth, int nHeight);
319 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetInBuf(void *openHandle, SSBSIP_MFC_ENC_INPUT_INFO *input_info);
320 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetInBuf(void *openHandle, SSBSIP_MFC_ENC_INPUT_INFO *input_info);
321 
322 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetOutBuf(void *openHandle, SSBSIP_MFC_ENC_OUTPUT_INFO *output_info);
323 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetOutBuf (void *openHandle, void *phyOutbuf, void *virOutbuf, int outputBufferSize);
324 
325 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncSetConfig(void *openHandle, SSBSIP_MFC_ENC_CONF conf_type, void *value);
326 SSBSIP_MFC_ERROR_CODE SsbSipMfcEncGetConfig(void *openHandle, SSBSIP_MFC_ENC_CONF conf_type, void *value);
327 
328 #ifdef __cplusplus
329 }
330 #endif
331 
332 #endif /* _SSBSIP_MFC_API_H_ */
333