unplugged-system/external/libavc/decoder/ih264d.h

1033 lines
32 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
*
* Copyright (C) 2015 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*****************************************************************************
* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
/*****************************************************************************/
/* */
/* File Name : ih264d.h */
/* */
/* Description : This file contains all the necessary structure and */
/* enumeration definitions needed for the Application */
/* Program Interface(API) of the Ittiam H264 ASP */
/* Decoder on Cortex A8 - Neon platform */
/* */
/* List of Functions : ih264d_api_function */
/* */
/* Issues / Problems : None */
/* */
/* Revision History : */
/* */
/* DD MM YYYY Author(s) Changes (Describe the changes made) */
/* 26 08 2010 100239(RCY) Draft */
/* */
/*****************************************************************************/
#ifndef _IH264D_H_
#define _IH264D_H_
#ifdef __cplusplus
extern "C" {
#endif
#include "iv.h"
#include "ivd.h"
/*****************************************************************************/
/* Constant Macros */
/*****************************************************************************/
#define IVD_ERROR_MASK 0xFF
/*****************************************************************************/
/* Function Macros */
/*****************************************************************************/
#define IS_IVD_CONCEALMENT_APPLIED(x) (x & (1 << IVD_APPLIEDCONCEALMENT))
#define IS_IVD_INSUFFICIENTDATA_ERROR(x) (x & (1 << IVD_INSUFFICIENTDATA))
#define IS_IVD_CORRUPTEDDATA_ERROR(x) (x & (1 << IVD_CORRUPTEDDATA))
#define IS_IVD_CORRUPTEDHEADER_ERROR(x) (x & (1 << IVD_CORRUPTEDHEADER))
#define IS_IVD_UNSUPPORTEDINPUT_ERROR(x) (x & (1 << IVD_UNSUPPORTEDINPUT))
#define IS_IVD_UNSUPPORTEDPARAM_ERROR(x) (x & (1 << IVD_UNSUPPORTEDPARAM))
#define IS_IVD_FATAL_ERROR(x) (x & (1 << IVD_FATALERROR))
#define IS_IVD_INVALID_BITSTREAM_ERROR(x) (x & (1 << IVD_INVALID_BITSTREAM))
#define IS_IVD_INCOMPLETE_BITSTREAM_ERROR(x) (x & (1 << IVD_INCOMPLETE_BITSTREAM))
/*****************************************************************************/
/* API Function Prototype */
/*****************************************************************************/
IV_API_CALL_STATUS_T ih264d_api_function(iv_obj_t *ps_handle, void *pv_api_ip,void *pv_api_op);
/*****************************************************************************/
/* Enums */
/*****************************************************************************/
/* Codec Error codes for H264 ASP Decoder */
typedef enum {
IH264D_VID_HDR_DEC_NUM_FRM_BUF_NOT_SUFFICIENT = IVD_DUMMY_ELEMENT_FOR_CODEC_EXTENSIONS + 1,
IH264D_FRAME_INFO_OP_BUF_NULL,
IH264D_INSUFFICIENT_METADATA_BUFFER,
}IH264D_ERROR_CODES_T;
/*****************************************************************************/
/* Extended Structures */
/*****************************************************************************/
/*****************************************************************************/
/* Delete Codec */
/*****************************************************************************/
typedef struct {
ivd_delete_ip_t s_ivd_delete_ip_t;
}ih264d_delete_ip_t;
typedef struct{
ivd_delete_op_t s_ivd_delete_op_t;
}ih264d_delete_op_t;
/*****************************************************************************/
/* Initialize decoder */
/*****************************************************************************/
typedef struct {
ivd_create_ip_t s_ivd_create_ip_t;
/**
* enable_frm_info
*/
UWORD32 u4_enable_frame_info;
}ih264d_create_ip_t;
typedef struct{
ivd_create_op_t s_ivd_create_op_t;
}ih264d_create_op_t;
/*****************************************************************************/
/* Video Decode */
/*****************************************************************************/
typedef struct {
ivd_video_decode_ip_t s_ivd_video_decode_ip_t;
/**
* 8x8 block QP map size
*/
UWORD32 u4_8x8_blk_qp_map_size;
/**
* 8x8 block QP map
*/
UWORD8 *pu1_8x8_blk_qp_map;
/**
* 8x8 block type map size
*/
UWORD32 u4_8x8_blk_type_map_size;
/**
* 8x8 block type map
*/
UWORD8 *pu1_8x8_blk_type_map;
}ih264d_video_decode_ip_t;
/*****************************************************************************/
/* QP and block type maps are defined for each 8x8 MB sub-block. */
/* QP can range from <0, 51> and block type can be INTER/INTRA/SKIP. */
/* */
/* Lets say, a frame has a total of m MBs (each 16x16). Since the QP */
/* and block type are defined for each 8x8 block, hence each MB has */
/* 4 entries giving m x 4 total entires for QP and block type map each. */
/* */
/* For example, for a frame of size 60x60 shown in the figure down, both */
/* maps (QP and MB type) have the same layout. */
/* Each block represents an 8x8 sub-block. Both width and height are aligned */
/* to next largest multiple of 8, 64 in this case. */
/* */
/* 0 8 16 24 32 40 48 56 64 */
/* 0 ------------------------------------------------ */
/* | 0th | 1st | 2nd | 3rd | 4th | 5th | 6th | 7th | */
/* 8 ------------------------------------------------ */
/* | 8th | 9th | 10th | - | - | - | - | - | */
/* 16 ------------------------------------------------ */
/* | - | - | - | - | - | - | - | - | */
/* 24 ------------------------------------------------ */
/* | - | - | - | - | - | - | - | - | */
/* 32 ------------------------------------------------ */
/* | - | - | - | - | - | - | - | - | */
/* 40 ------------------------------------------------ */
/* | - | - | - | - | - | - | - | - | */
/* 48 ------------------------------------------------ */
/* | - | - | - | - | - | - | - | - | */
/* 56 ------------------------------------------------ */
/* | - | - | - | - | - | - | - | - | */
/* 64 ------------------------------------------------ */
/* */
/*****************************************************************************/
typedef struct{
ivd_video_decode_op_t s_ivd_video_decode_op_t;
/**
* 8x8 block QP map size
*/
UWORD32 u4_8x8_blk_qp_map_size;
/**
* 8x8 block QP map
*/
UWORD8 *pu1_8x8_blk_qp_map;
/**
* 8x8 block type map size
*/
UWORD32 u4_8x8_blk_type_map_size;
/**
* 8x8 block type map
*/
UWORD8 *pu1_8x8_blk_type_map;
}ih264d_video_decode_op_t;
/*****************************************************************************/
/* Get Display Frame */
/*****************************************************************************/
typedef struct
{
ivd_get_display_frame_ip_t s_ivd_get_display_frame_ip_t;
}ih264d_get_display_frame_ip_t;
typedef struct
{
ivd_get_display_frame_op_t s_ivd_get_display_frame_op_t;
}ih264d_get_display_frame_op_t;
/*****************************************************************************/
/* Set Display Frame */
/*****************************************************************************/
typedef struct
{
ivd_set_display_frame_ip_t s_ivd_set_display_frame_ip_t;
}ih264d_set_display_frame_ip_t;
typedef struct
{
ivd_set_display_frame_op_t s_ivd_set_display_frame_op_t;
}ih264d_set_display_frame_op_t;
/*****************************************************************************/
/* Release Display Buffers */
/*****************************************************************************/
typedef struct
{
ivd_rel_display_frame_ip_t s_ivd_rel_display_frame_ip_t;
}ih264d_rel_display_frame_ip_t;
typedef struct
{
ivd_rel_display_frame_op_t s_ivd_rel_display_frame_op_t;
}ih264d_rel_display_frame_op_t;
typedef enum {
/** Set number of cores/threads to be used */
IH264D_CMD_CTL_SET_NUM_CORES = IVD_CMD_CTL_CODEC_SUBCMD_START,
/** Set processor details */
IH264D_CMD_CTL_SET_PROCESSOR = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x001,
/** Get display buffer dimensions */
IH264D_CMD_CTL_GET_BUFFER_DIMENSIONS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x100,
/** Get VUI parameters */
IH264D_CMD_CTL_GET_VUI_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x101,
/** Enable/disable GPU, supported on select platforms */
IH264D_CMD_CTL_GPU_ENABLE_DISABLE = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x200,
/** Set degrade level */
IH264D_CMD_CTL_DEGRADE = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x300,
/** Get SEI MDCV parameters */
IH264D_CMD_CTL_GET_SEI_MDCV_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x301,
/** Get SEI CLL parameters */
IH264D_CMD_CTL_GET_SEI_CLL_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x302,
/** Get SEI AVE parameters */
IH264D_CMD_CTL_GET_SEI_AVE_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x303,
/** Get SEI CCV parameters */
IH264D_CMD_CTL_GET_SEI_CCV_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x304,
/** Get SEI SII parameters */
IH264D_CMD_CTL_GET_SEI_SII_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x305,
/** Get SEI FGC parameters */
IH264D_CMD_CTL_GET_SEI_FGC_PARAMS = IVD_CMD_CTL_CODEC_SUBCMD_START + 0x306
}IH264D_CMD_CTL_SUB_CMDS;
/*****************************************************************************/
/* Video control Flush */
/*****************************************************************************/
typedef struct{
ivd_ctl_flush_ip_t s_ivd_ctl_flush_ip_t;
}ih264d_ctl_flush_ip_t;
typedef struct{
ivd_ctl_flush_op_t s_ivd_ctl_flush_op_t;
}ih264d_ctl_flush_op_t;
/*****************************************************************************/
/* Video control reset */
/*****************************************************************************/
typedef struct{
ivd_ctl_reset_ip_t s_ivd_ctl_reset_ip_t;
}ih264d_ctl_reset_ip_t;
typedef struct{
ivd_ctl_reset_op_t s_ivd_ctl_reset_op_t;
}ih264d_ctl_reset_op_t;
/*****************************************************************************/
/* Video control Set Params */
/*****************************************************************************/
typedef struct {
ivd_ctl_set_config_ip_t s_ivd_ctl_set_config_ip_t;
}ih264d_ctl_set_config_ip_t;
typedef struct{
ivd_ctl_set_config_op_t s_ivd_ctl_set_config_op_t;
}ih264d_ctl_set_config_op_t;
/*****************************************************************************/
/* Video control:Get Buf Info */
/*****************************************************************************/
typedef struct{
ivd_ctl_getbufinfo_ip_t s_ivd_ctl_getbufinfo_ip_t;
}ih264d_ctl_getbufinfo_ip_t;
typedef struct{
ivd_ctl_getbufinfo_op_t s_ivd_ctl_getbufinfo_op_t;
}ih264d_ctl_getbufinfo_op_t;
/*****************************************************************************/
/* Video control:Getstatus Call */
/*****************************************************************************/
typedef struct{
ivd_ctl_getstatus_ip_t s_ivd_ctl_getstatus_ip_t;
}ih264d_ctl_getstatus_ip_t;
typedef struct{
ivd_ctl_getstatus_op_t s_ivd_ctl_getstatus_op_t;
}ih264d_ctl_getstatus_op_t;
/*****************************************************************************/
/* Video control:Get Version Info */
/*****************************************************************************/
typedef struct{
ivd_ctl_getversioninfo_ip_t s_ivd_ctl_getversioninfo_ip_t;
}ih264d_ctl_getversioninfo_ip_t;
typedef struct{
ivd_ctl_getversioninfo_op_t s_ivd_ctl_getversioninfo_op_t;
}ih264d_ctl_getversioninfo_op_t;
typedef struct{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub_cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
/**
* Pictures that are are degraded
* 0 : No degrade
* 1 : Only on non-reference frames
* 2 : Use interval specified by u4_nondegrade_interval
* 3 : All non-key frames
* 4 : All frames
*/
WORD32 i4_degrade_pics;
/**
* Interval for pictures which are completely decoded without any degradation
*/
WORD32 i4_nondegrade_interval;
/**
* bit position (lsb is zero): Type of degradation
* 1 : Disable deblocking
* 2 : Faster inter prediction filters
* 3 : Fastest inter prediction filters
*/
WORD32 i4_degrade_type;
}ih264d_ctl_degrade_ip_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
}ih264d_ctl_degrade_op_t;
typedef struct{
UWORD32 u4_size;
IVD_API_COMMAND_TYPE_T e_cmd;
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
UWORD32 u4_disable_deblk_level;
}ih264d_ctl_disable_deblock_ip_t;
typedef struct{
UWORD32 u4_size;
UWORD32 u4_error_code;
}ih264d_ctl_disable_deblock_op_t;
typedef struct{
UWORD32 u4_size;
IVD_API_COMMAND_TYPE_T e_cmd;
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
UWORD32 u4_num_cores;
}ih264d_ctl_set_num_cores_ip_t;
typedef struct{
UWORD32 u4_size;
UWORD32 u4_error_code;
}ih264d_ctl_set_num_cores_op_t;
typedef struct
{
/**
* i4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
/**
* Processor type
*/
UWORD32 u4_arch;
/**
* SOC type
*/
UWORD32 u4_soc;
/**
* num_cores
*/
UWORD32 u4_num_cores;
}ih264d_ctl_set_processor_ip_t;
typedef struct
{
/**
* i4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
}ih264d_ctl_set_processor_op_t;
typedef struct{
UWORD32 u4_size;
IVD_API_COMMAND_TYPE_T e_cmd;
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
}ih264d_ctl_get_frame_dimensions_ip_t;
typedef struct{
UWORD32 u4_size;
UWORD32 u4_error_code;
UWORD32 u4_x_offset[3];
UWORD32 u4_y_offset[3];
UWORD32 u4_disp_wd[3];
UWORD32 u4_disp_ht[3];
UWORD32 u4_buffer_wd[3];
UWORD32 u4_buffer_ht[3];
}ih264d_ctl_get_frame_dimensions_op_t;
typedef struct
{
UWORD32 u4_size;
IVD_API_COMMAND_TYPE_T e_cmd;
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
}ih264d_ctl_get_vui_params_ip_t;
typedef struct
{
UWORD32 u4_size;
UWORD32 u4_error_code;
UWORD8 u1_aspect_ratio_idc;
UWORD16 u2_sar_width;
UWORD16 u2_sar_height;
UWORD8 u1_overscan_appropriate_flag;
UWORD8 u1_video_format;
UWORD8 u1_video_full_range_flag;
UWORD8 u1_colour_primaries;
UWORD8 u1_tfr_chars;
UWORD8 u1_matrix_coeffs;
UWORD8 u1_cr_top_field;
UWORD8 u1_cr_bottom_field;
UWORD32 u4_num_units_in_tick;
UWORD32 u4_time_scale;
UWORD8 u1_fixed_frame_rate_flag;
UWORD8 u1_nal_hrd_params_present;
UWORD8 u1_vcl_hrd_params_present;
UWORD8 u1_low_delay_hrd_flag;
UWORD8 u1_pic_struct_present_flag;
UWORD8 u1_bitstream_restriction_flag;
UWORD8 u1_mv_over_pic_boundaries_flag;
UWORD32 u4_max_bytes_per_pic_denom;
UWORD32 u4_max_bits_per_mb_denom;
UWORD32 u4_log2_max_mv_length_horz;
UWORD32 u4_log2_max_mv_length_vert;
UWORD32 u4_num_reorder_frames;
UWORD32 u4_max_dec_frame_buffering;
}ih264d_ctl_get_vui_params_op_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub_cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
}ih264d_ctl_get_sei_mdcv_params_ip_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
/**
* Array to store the display_primaries_x values
*/
UWORD16 au2_display_primaries_x[NUM_SEI_MDCV_PRIMARIES];
/**
* Array to store the display_primaries_y values
*/
UWORD16 au2_display_primaries_y[NUM_SEI_MDCV_PRIMARIES];
/**
* Variable to store the white point x value
*/
UWORD16 u2_white_point_x;
/**
* Variable to store the white point y value
*/
UWORD16 u2_white_point_y;
/**
* Variable to store the max display mastering luminance value
*/
UWORD32 u4_max_display_mastering_luminance;
/**
* Variable to store the min display mastering luminance value
*/
UWORD32 u4_min_display_mastering_luminance;
}ih264d_ctl_get_sei_mdcv_params_op_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub_cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
}ih264d_ctl_get_sei_cll_params_ip_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
/**
* The maximum pixel intensity of all samples
*/
UWORD16 u2_max_content_light_level;
/**
* The average pixel intensity of all samples
*/
UWORD16 u2_max_pic_average_light_level;
} ih264d_ctl_get_sei_cll_params_op_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub_cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
}ih264d_ctl_get_sei_ave_params_ip_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
/**
* specifies the environmental illluminance of the ambient viewing environment
*/
UWORD32 u4_ambient_illuminance;
/*
* specify the normalized x chromaticity coordinates of the
* environmental ambient light in the nominal viewing environment
*/
UWORD16 u2_ambient_light_x;
/*
* specify the normalized y chromaticity coordinates of the
* environmental ambient light in the nominal viewing environment
*/
UWORD16 u2_ambient_light_y;
} ih264d_ctl_get_sei_ave_params_op_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub_cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
}ih264d_ctl_get_sei_ccv_params_ip_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
/*
* Flag used to control persistence of CCV SEI messages
*/
UWORD8 u1_ccv_cancel_flag;
/*
* specifies the persistence of the CCV SEI message for the current layer
*/
UWORD8 u1_ccv_persistence_flag;
/*
* specifies the presence of syntax elements ccv_primaries_x and ccv_primaries_y
*/
UWORD8 u1_ccv_primaries_present_flag;
/*
* specifies that the syntax element ccv_min_luminance_value is present
*/
UWORD8 u1_ccv_min_luminance_value_present_flag;
/*
* specifies that the syntax element ccv_max_luminance_value is present
*/
UWORD8 u1_ccv_max_luminance_value_present_flag;
/*
* specifies that the syntax element ccv_avg_luminance_value is present
*/
UWORD8 u1_ccv_avg_luminance_value_present_flag;
/*
* shall be equal to 0 in bitstreams conforming to this version. Other values
* for reserved_zero_2bits are reserved for future use
*/
UWORD8 u1_ccv_reserved_zero_2bits;
/*
* specify the normalized x chromaticity coordinates of the colour
* primary component c of the nominal content colour volume
*/
WORD32 ai4_ccv_primaries_x[NUM_SEI_CCV_PRIMARIES];
/*
* specify the normalized y chromaticity coordinates of the colour
* primary component c of the nominal content colour volume
*/
WORD32 ai4_ccv_primaries_y[NUM_SEI_CCV_PRIMARIES];
/*
* specifies the normalized minimum luminance value
*/
UWORD32 u4_ccv_min_luminance_value;
/*
* specifies the normalized maximum luminance value
*/
UWORD32 u4_ccv_max_luminance_value;
/*
* specifies the normalized average luminance value
*/
UWORD32 u4_ccv_avg_luminance_value;
} ih264d_ctl_get_sei_ccv_params_op_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub_cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
} ih264d_ctl_get_sei_sii_params_ip_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
/**
* specifies if the sei sii is enabled
*/
UWORD8 u1_shutter_interval_info_present_flag;
/**
* specifies the shutter interval temporal sub-layer index
* of the current picture
*/
UWORD32 u4_sii_sub_layer_idx;
/**
* specify the number of time units that pass in one second
*/
UWORD32 u4_sii_time_scale;
/**
* specifies that the indicated shutter interval is the same for all
* pictures in the coded video sequence
*/
UWORD8 u1_fixed_shutter_interval_within_cvs_flag;
/**
* specifies the the number of time units of a clock operating at the
* frequency sii_time_scale Hz that corresponds to the indicated shutter
* interval of each picture in the coded video sequence
*/
UWORD32 u4_sii_num_units_in_shutter_interval;
/**
* sii_max_sub_layers_minus1 plus 1 specifies the maximum number of
* shutter interval temporal sub-layers indexes that may be present
* in the coded video sequence
*/
UWORD8 u1_sii_max_sub_layers_minus1;
/**
* specifies the number of time units of a clock operating at the
* frequency sii_time_scale Hz that corresponds to the shutter
* interval of each picture in the coded video sequence
*/
UWORD32 au4_sub_layer_num_units_in_shutter_interval[SII_MAX_SUB_LAYERS];
} ih264d_ctl_get_sei_sii_params_op_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* cmd
*/
IVD_API_COMMAND_TYPE_T e_cmd;
/**
* sub_cmd
*/
IVD_CONTROL_API_COMMAND_TYPE_T e_sub_cmd;
} ih264d_ctl_get_sei_fgc_params_ip_t;
typedef struct
{
/**
* u4_size
*/
UWORD32 u4_size;
/**
* error_code
*/
UWORD32 u4_error_code;
/**
* Flag to control the presence of FGC SEI params
*/
UWORD8 u1_film_grain_characteristics_cancel_flag;
/**
* Specifies the pic order count
*/
WORD32 i4_poc;
/**
* Specifies IDR pic ID
*/
UWORD32 u4_idr_pic_id;
/**
* Specifies film grain model for simulation
*/
UWORD8 u1_film_grain_model_id;
/**
* Specifies separate color format for decoded samples and grain
*/
UWORD8 u1_separate_colour_description_present_flag;
/**
* Specifies the bit depth used for the luma component
*/
UWORD8 u1_film_grain_bit_depth_luma_minus8;
/**
* Specifies the bit depth used for the Cb and Cr components
*/
UWORD8 u1_film_grain_bit_depth_chroma_minus8;
/**
* Specifies the colour space of the FGC in SEI
*/
UWORD8 u1_film_grain_full_range_flag;
/**
* Specifies the colour space of the FGC in SEI
*/
UWORD8 u1_film_grain_colour_primaries;
/**
* Specifies the colour space of the FGC in SEI
*/
UWORD8 u1_film_grain_transfer_characteristics;
/**
* Specifies the colour space of the FGC in SEI
*/
UWORD8 u1_film_grain_matrix_coefficients;
/**
* identifies the blending mode used to blend the simulated film grain with the decoded images
*/
UWORD8 u1_blending_mode_id;
/**
* Specifies a scale factor used in the film grain characterization equations
*/
UWORD8 u1_log2_scale_factor;
/**
* Indicates whether film grain is modelled or not on the colour component
*/
UWORD8 au1_comp_model_present_flag[SEI_FGC_NUM_COLOUR_COMPONENTS];
/**
* Specifies the number of intensity intervals for which
* a specific set of model values has been estimated
*/
UWORD8 au1_num_intensity_intervals_minus1[SEI_FGC_NUM_COLOUR_COMPONENTS];
/**
* Specifies the number of model values present for each intensity interval in which
* the film grain has been modelled
*/
UWORD8 au1_num_model_values_minus1[SEI_FGC_NUM_COLOUR_COMPONENTS];
/**
* Specifies the lower bound of the interval of intensity levels for which
* the set of model values applies
*/
UWORD8 au1_intensity_interval_lower_bound[SEI_FGC_NUM_COLOUR_COMPONENTS]
[SEI_FGC_MAX_NUM_INTENSITY_INTERVALS];
/**
* Specifies the upper bound of the interval of intensity levels for which
* the set of model values applies
*/
UWORD8 au1_intensity_interval_upper_bound[SEI_FGC_NUM_COLOUR_COMPONENTS]
[SEI_FGC_MAX_NUM_INTENSITY_INTERVALS];
/**
* Represents each one of the model values present for
* the colour component and intensity interval
*/
WORD32 ai4_comp_model_value[SEI_FGC_NUM_COLOUR_COMPONENTS][SEI_FGC_MAX_NUM_INTENSITY_INTERVALS]
[SEI_FGC_MAX_NUM_MODEL_VALUES];
/**
* Specifies the persistence of the film grain characteristics SEI message
*/
UWORD32 u4_film_grain_characteristics_repetition_period;
} ih264d_ctl_get_sei_fgc_params_op_t;
#ifdef __cplusplus
} /* closing brace for extern "C" */
#endif
#endif /* _IH264D_H_ */