blob: 7c762966d564cd987a20659cddbe13da047b0e3e [file] [log] [blame]
Hamsalekha S8d3d3032015-03-13 21:24:58 +05301/******************************************************************************
2 *
3 * Copyright (C) 2015 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at:
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *****************************************************************************
18 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*/
20/*****************************************************************************/
21/* */
22/* File Name : ih264d.h */
23/* */
24/* Description : This file contains all the necessary structure and */
25/* enumeration definitions needed for the Application */
26/* Program Interface(API) of the Ittiam H264 ASP */
27/* Decoder on Cortex A8 - Neon platform */
28/* */
29/* List of Functions : ih264d_api_function */
30/* */
31/* Issues / Problems : None */
32/* */
33/* Revision History : */
34/* */
35/* DD MM YYYY Author(s) Changes (Describe the changes made) */
36/* 26 08 2010 100239(RCY) Draft */
37/* */
38/*****************************************************************************/
39
40#ifndef _IH264D_H_
41#define _IH264D_H_
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46#include "iv.h"
47#include "ivd.h"
48
49
50/*****************************************************************************/
51/* Constant Macros */
52/*****************************************************************************/
53
54/*****************************************************************************/
55/* Function Macros */
56/*****************************************************************************/
57#define IS_IVD_CONCEALMENT_APPLIED(x) (x & (1 << IVD_APPLIEDCONCEALMENT))
58#define IS_IVD_INSUFFICIENTDATA_ERROR(x) (x & (1 << IVD_INSUFFICIENTDATA))
59#define IS_IVD_CORRUPTEDDATA_ERROR(x) (x & (1 << IVD_CORRUPTEDDATA))
60#define IS_IVD_CORRUPTEDHEADER_ERROR(x) (x & (1 << IVD_CORRUPTEDHEADER))
61#define IS_IVD_UNSUPPORTEDINPUT_ERROR(x) (x & (1 << IVD_UNSUPPORTEDINPUT))
62#define IS_IVD_UNSUPPORTEDPARAM_ERROR(x) (x & (1 << IVD_UNSUPPORTEDPARAM))
63#define IS_IVD_FATAL_ERROR(x) (x & (1 << IVD_FATALERROR))
64#define IS_IVD_INVALID_BITSTREAM_ERROR(x) (x & (1 << IVD_INVALID_BITSTREAM))
65#define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x) (x & (1 << IVD_INCOMPLETE_BITSTREAM))
66
67
68/*****************************************************************************/
69/* API Function Prototype */
70/*****************************************************************************/
71IV_API_CALL_STATUS_T ih264d_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op);
72
73/*****************************************************************************/
74/* Enums */
75/*****************************************************************************/
76/* Codec Error codes for H264 ASP Decoder */
77
78typedef enum {
79
80 IH264D_VID_HDR_DEC_NUM_FRM_BUF_NOT_SUFFICIENT = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1,
Hamsalekha S8d3d3032015-03-13 21:24:58 +053081
82}IH264D_ERROR_CODES_T;
83
84/*****************************************************************************/
85/* Extended Structures */
86/*****************************************************************************/
87
Harish Mahendrakar34b3e472015-08-04 09:55:15 +053088
Hamsalekha S8d3d3032015-03-13 21:24:58 +053089/*****************************************************************************/
Harish Mahendrakar34b3e472015-08-04 09:55:15 +053090/* Delete Codec */
Hamsalekha S8d3d3032015-03-13 21:24:58 +053091/*****************************************************************************/
92
93
94typedef struct {
Harish Mahendrakar34b3e472015-08-04 09:55:15 +053095 ivd_delete_ip_t s_ivd_delete_ip_t;
96}ih264d_delete_ip_t;
Hamsalekha S8d3d3032015-03-13 21:24:58 +053097
98
99typedef struct{
Harish Mahendrakar34b3e472015-08-04 09:55:15 +0530100 ivd_delete_op_t s_ivd_delete_op_t;
101}ih264d_delete_op_t;
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530102
103
104/*****************************************************************************/
105/* Initialize decoder */
106/*****************************************************************************/
107
108
109typedef struct {
Harish Mahendrakar34b3e472015-08-04 09:55:15 +0530110 ivd_create_ip_t s_ivd_create_ip_t;
111}ih264d_create_ip_t;
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530112
113
114typedef struct{
Harish Mahendrakar34b3e472015-08-04 09:55:15 +0530115 ivd_create_op_t s_ivd_create_op_t;
116}ih264d_create_op_t;
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530117
118
119/*****************************************************************************/
120/* Video Decode */
121/*****************************************************************************/
122
123
124typedef struct {
125 ivd_video_decode_ip_t s_ivd_video_decode_ip_t;
126}ih264d_video_decode_ip_t;
127
128
129typedef struct{
130 ivd_video_decode_op_t s_ivd_video_decode_op_t;
131}ih264d_video_decode_op_t;
132
133
134/*****************************************************************************/
135/* Get Display Frame */
136/*****************************************************************************/
137
138
139typedef struct
140{
141 ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t;
142}ih264d_get_display_frame_ip_t;
143
144
145typedef struct
146{
147 ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t;
148}ih264d_get_display_frame_op_t;
149
150/*****************************************************************************/
151/* Set Display Frame */
152/*****************************************************************************/
153
154
155typedef struct
156{
157 ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t;
158}ih264d_set_display_frame_ip_t;
159
160
161typedef struct
162{
163 ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t;
164}ih264d_set_display_frame_op_t;
165
166/*****************************************************************************/
167/* Release Display Buffers */
168/*****************************************************************************/
169
170
171typedef struct
172{
173 ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t;
174}ih264d_rel_display_frame_ip_t;
175
176
177typedef struct
178{
179 ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t;
180}ih264d_rel_display_frame_op_t;
181
182
183typedef enum {
184 /** Set number of cores/threads to be used */
185 IH264D_CMD_CTL_SET_NUM_CORES = IVD_CMD_CTL_CODEC_SUBCMD_START,
186
187 /** Set processor details */
188 IH264D_CMD_CTL_SET_PROCESSOR = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001,
189
190 /** Get display buffer dimensions */
191 IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x100,
192
193 /** Get VUI parameters */
194 IH264D_CMD_CTL_GET_VUI_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101,
195
196 /** Enable/disable GPU, supported on select platforms */
197 IH264D_CMD_CTL_GPU_ENABLE_DISABLE = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x200,
198
199 /** Set degrade level */
200 IH264D_CMD_CTL_DEGRADE = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x300
201}IH264D_CMD_CTL_SUB_CMDS;
202/*****************************************************************************/
203/* Video control Flush */
204/*****************************************************************************/
205
206
207typedef struct{
208 ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t;
209}ih264d_ctl_flush_ip_t;
210
211
212typedef struct{
213 ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t;
214}ih264d_ctl_flush_op_t;
215
216/*****************************************************************************/
217/* Video control reset */
218/*****************************************************************************/
219
220
221typedef struct{
222 ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t;
223}ih264d_ctl_reset_ip_t;
224
225
226typedef struct{
227 ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t;
228}ih264d_ctl_reset_op_t;
229
230
231/*****************************************************************************/
232/* Video control Set Params */
233/*****************************************************************************/
234
235
236typedef struct {
237 ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t;
238}ih264d_ctl_set_config_ip_t;
239
240
241typedef struct{
242 ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t;
243}ih264d_ctl_set_config_op_t;
244
245/*****************************************************************************/
246/* Video control:Get Buf Info */
247/*****************************************************************************/
248
249
250typedef struct{
251 ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t;
252}ih264d_ctl_getbufinfo_ip_t;
253
254
255
256typedef struct{
257 ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t;
258}ih264d_ctl_getbufinfo_op_t;
259
260
261/*****************************************************************************/
262/* Video control:Getstatus Call */
263/*****************************************************************************/
264
265
266typedef struct{
267 ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t;
268}ih264d_ctl_getstatus_ip_t;
269
270
271
272typedef struct{
273 ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t;
274}ih264d_ctl_getstatus_op_t;
275
276
277/*****************************************************************************/
278/* Video control:Get Version Info */
279/*****************************************************************************/
280
281
282typedef struct{
283 ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t;
284}ih264d_ctl_getversioninfo_ip_t;
285
286
287
288typedef struct{
289 ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t;
290}ih264d_ctl_getversioninfo_op_t;
291
292typedef struct{
293
294 /**
295 * u4_size
296 */
297 UWORD32 u4_size;
298
299 /**
300 * cmd
301 */
302 IVD_API_COMMAND_TYPE_T e_cmd;
303
304 /**
305 * sub_cmd
306 */
307 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
308
309 /**
310 * Pictures that are are degraded
311 * 0 : No degrade
312 * 1 : Only on non-reference frames
313 * 2 : Use interval specified by u4_nondegrade_interval
314 * 3 : All non-key frames
315 * 4 : All frames
316 */
317 WORD32 i4_degrade_pics;
318
319 /**
320 * Interval for pictures which are completely decoded without any degradation
321 */
322 WORD32 i4_nondegrade_interval;
323
324 /**
325 * bit position (lsb is zero): Type of degradation
326 * 1 : Disable deblocking
327 * 2 : Faster inter prediction filters
328 * 3 : Fastest inter prediction filters
329 */
330 WORD32 i4_degrade_type;
331
332}ih264d_ctl_degrade_ip_t;
333
334typedef struct
335{
336 /**
337 * u4_size
338 */
339 UWORD32 u4_size;
340
341 /**
342 * error_code
343 */
344 UWORD32 u4_error_code;
345}ih264d_ctl_degrade_op_t;
346
347typedef struct{
348 UWORD32 u4_size;
349 IVD_API_COMMAND_TYPE_T e_cmd;
350 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
351 UWORD32 u4_disable_deblk_level;
352}ih264d_ctl_disable_deblock_ip_t;
353
354typedef struct{
355 UWORD32 u4_size;
356 UWORD32 u4_error_code;
357}ih264d_ctl_disable_deblock_op_t;
358
359
360typedef struct{
361 UWORD32 u4_size;
362 IVD_API_COMMAND_TYPE_T e_cmd;
363 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
364 UWORD32 u4_num_cores;
365}ih264d_ctl_set_num_cores_ip_t;
366
367typedef struct{
368 UWORD32 u4_size;
369 UWORD32 u4_error_code;
370}ih264d_ctl_set_num_cores_op_t;
371
372typedef struct
373{
374 /**
375 * i4_size
376 */
377 UWORD32 u4_size;
378 /**
379 * cmd
380 */
381 IVD_API_COMMAND_TYPE_T e_cmd;
382 /**
383 * sub cmd
384 */
385 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
386 /**
387 * Processor type
388 */
389 UWORD32 u4_arch;
390 /**
391 * SOC type
392 */
393 UWORD32 u4_soc;
394
395 /**
396 * num_cores
397 */
398 UWORD32 u4_num_cores;
399
400}ih264d_ctl_set_processor_ip_t;
401
402typedef struct
403{
404 /**
405 * i4_size
406 */
407 UWORD32 u4_size;
408 /**
409 * error_code
410 */
411 UWORD32 u4_error_code;
412}ih264d_ctl_set_processor_op_t;
413
414typedef struct{
415 UWORD32 u4_size;
416 IVD_API_COMMAND_TYPE_T e_cmd;
417 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
418}ih264d_ctl_get_frame_dimensions_ip_t;
419
420
421typedef struct{
422 UWORD32 u4_size;
423 UWORD32 u4_error_code;
424 UWORD32 u4_x_offset[3];
425 UWORD32 u4_y_offset[3];
426 UWORD32 u4_disp_wd[3];
427 UWORD32 u4_disp_ht[3];
428 UWORD32 u4_buffer_wd[3];
429 UWORD32 u4_buffer_ht[3];
430}ih264d_ctl_get_frame_dimensions_op_t;
431
Harish Mahendrakard5953ce2016-04-26 16:20:31 +0530432typedef struct
433{
434 UWORD32 u4_size;
435 IVD_API_COMMAND_TYPE_T e_cmd;
436 IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
437}ih264d_ctl_get_vui_params_ip_t;
438
439typedef struct
440{
441 UWORD32 u4_size;
442 UWORD32 u4_error_code;
443 UWORD8 u1_aspect_ratio_idc;
444 UWORD16 u2_sar_width;
445 UWORD16 u2_sar_height;
446 UWORD8 u1_overscan_appropriate_flag;
447 UWORD8 u1_video_format;
448 UWORD8 u1_video_full_range_flag;
449 UWORD8 u1_colour_primaries;
450 UWORD8 u1_tfr_chars;
451 UWORD8 u1_matrix_coeffs;
452 UWORD8 u1_cr_top_field;
453 UWORD8 u1_cr_bottom_field;
454 UWORD32 u4_num_units_in_tick;
455 UWORD32 u4_time_scale;
456 UWORD8 u1_fixed_frame_rate_flag;
457 UWORD8 u1_nal_hrd_params_present;
458 UWORD8 u1_vcl_hrd_params_present;
459 UWORD8 u1_low_delay_hrd_flag;
460 UWORD8 u1_pic_struct_present_flag;
461 UWORD8 u1_bitstream_restriction_flag;
462 UWORD8 u1_mv_over_pic_boundaries_flag;
463 UWORD32 u4_max_bytes_per_pic_denom;
464 UWORD32 u4_max_bits_per_mb_denom;
465 UWORD32 u4_log2_max_mv_length_horz;
466 UWORD32 u4_log2_max_mv_length_vert;
467 UWORD32 u4_num_reorder_frames;
468 UWORD32 u4_max_dec_frame_buffering;
469}ih264d_ctl_get_vui_params_op_t;
470
Hamsalekha S8d3d3032015-03-13 21:24:58 +0530471#ifdef __cplusplus
472} /* closing brace for extern "C" */
473#endif
474#endif /* _IH264D_H_ */