Decoder: Added support for exporting VUI params
am: d5953ced23
Change-Id: I01485a055330902830f64850c1ddfa2ce4b8ce25
This commit is contained in:
commit
a1fa8e86e8
4 changed files with 168 additions and 1 deletions
|
|
@ -429,6 +429,45 @@ typedef struct{
|
|||
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;
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* closing brace for extern "C" */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -135,6 +135,10 @@ UWORD32 ih264d_get_extra_mem_external(UWORD32 width, UWORD32 height);
|
|||
WORD32 ih264d_get_frame_dimensions(iv_obj_t *dec_hdl,
|
||||
void *pv_api_ip,
|
||||
void *pv_api_op);
|
||||
WORD32 ih264d_get_vui_params(iv_obj_t *dec_hdl,
|
||||
void *pv_api_ip,
|
||||
void *pv_api_op);
|
||||
|
||||
WORD32 ih264d_set_num_cores(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op);
|
||||
|
||||
WORD32 ih264d_deblock_display(dec_struct_t *ps_dec);
|
||||
|
|
@ -743,7 +747,36 @@ static IV_API_CALL_STATUS_T api_check_struct_sanity(iv_obj_t *ps_handle,
|
|||
|
||||
break;
|
||||
}
|
||||
case IH264D_CMD_CTL_GET_VUI_PARAMS:
|
||||
{
|
||||
ih264d_ctl_get_vui_params_ip_t *ps_ip;
|
||||
ih264d_ctl_get_vui_params_op_t *ps_op;
|
||||
|
||||
ps_ip =
|
||||
(ih264d_ctl_get_vui_params_ip_t *)pv_api_ip;
|
||||
ps_op =
|
||||
(ih264d_ctl_get_vui_params_op_t *)pv_api_op;
|
||||
|
||||
if(ps_ip->u4_size
|
||||
!= sizeof(ih264d_ctl_get_vui_params_ip_t))
|
||||
{
|
||||
ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
|
||||
ps_op->u4_error_code |=
|
||||
IVD_IP_API_STRUCT_SIZE_INCORRECT;
|
||||
return IV_FAIL;
|
||||
}
|
||||
|
||||
if(ps_op->u4_size
|
||||
!= sizeof(ih264d_ctl_get_vui_params_op_t))
|
||||
{
|
||||
ps_op->u4_error_code |= 1 << IVD_UNSUPPORTEDPARAM;
|
||||
ps_op->u4_error_code |=
|
||||
IVD_OP_API_STRUCT_SIZE_INCORRECT;
|
||||
return IV_FAIL;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case IH264D_CMD_CTL_SET_NUM_CORES:
|
||||
{
|
||||
ih264d_ctl_set_num_cores_ip_t *ps_ip;
|
||||
|
|
@ -3214,6 +3247,11 @@ WORD32 ih264d_ctl(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
|
|||
ret = ih264d_get_frame_dimensions(dec_hdl, (void *)pv_api_ip,
|
||||
(void *)pv_api_op);
|
||||
break;
|
||||
case IH264D_CMD_CTL_GET_VUI_PARAMS:
|
||||
ret = ih264d_get_vui_params(dec_hdl, (void *)pv_api_ip,
|
||||
(void *)pv_api_op);
|
||||
break;
|
||||
|
||||
case IH264D_CMD_CTL_SET_PROCESSOR:
|
||||
ret = ih264d_set_processor(dec_hdl, (void *)pv_api_ip,
|
||||
(void *)pv_api_op);
|
||||
|
|
@ -3441,6 +3479,72 @@ WORD32 ih264d_get_frame_dimensions(iv_obj_t *dec_hdl,
|
|||
|
||||
}
|
||||
|
||||
WORD32 ih264d_get_vui_params(iv_obj_t *dec_hdl,
|
||||
void *pv_api_ip,
|
||||
void *pv_api_op)
|
||||
{
|
||||
ih264d_ctl_get_vui_params_ip_t *ps_ip;
|
||||
ih264d_ctl_get_vui_params_op_t *ps_op;
|
||||
dec_struct_t *ps_dec = dec_hdl->pv_codec_handle;
|
||||
dec_seq_params_t *ps_sps;
|
||||
vui_t *ps_vui;
|
||||
WORD32 i;
|
||||
UWORD32 u4_size;
|
||||
|
||||
ps_ip = (ih264d_ctl_get_vui_params_ip_t *)pv_api_ip;
|
||||
ps_op = (ih264d_ctl_get_vui_params_op_t *)pv_api_op;
|
||||
UNUSED(ps_ip);
|
||||
|
||||
u4_size = ps_op->u4_size;
|
||||
memset(ps_op, 0, sizeof(ih264d_ctl_get_vui_params_op_t));
|
||||
ps_op->u4_size = u4_size;
|
||||
|
||||
if(NULL == ps_dec->ps_cur_sps)
|
||||
{
|
||||
ps_op->u4_error_code = ERROR_VUI_PARAMS_NOT_FOUND;
|
||||
return IV_FAIL;
|
||||
}
|
||||
|
||||
ps_sps = ps_dec->ps_cur_sps;
|
||||
if((0 == ps_sps->u1_is_valid)
|
||||
|| (0 == ps_sps->u1_vui_parameters_present_flag))
|
||||
{
|
||||
ps_op->u4_error_code = ERROR_VUI_PARAMS_NOT_FOUND;
|
||||
return IV_FAIL;
|
||||
}
|
||||
|
||||
ps_vui = &ps_sps->s_vui;
|
||||
|
||||
ps_op->u1_aspect_ratio_idc = ps_vui->u1_aspect_ratio_idc;
|
||||
ps_op->u2_sar_width = ps_vui->u2_sar_width;
|
||||
ps_op->u2_sar_height = ps_vui->u2_sar_height;
|
||||
ps_op->u1_overscan_appropriate_flag = ps_vui->u1_overscan_appropriate_flag;
|
||||
ps_op->u1_video_format = ps_vui->u1_video_format;
|
||||
ps_op->u1_video_full_range_flag = ps_vui->u1_video_full_range_flag;
|
||||
ps_op->u1_colour_primaries = ps_vui->u1_colour_primaries;
|
||||
ps_op->u1_tfr_chars = ps_vui->u1_tfr_chars;
|
||||
ps_op->u1_matrix_coeffs = ps_vui->u1_matrix_coeffs;
|
||||
ps_op->u1_cr_top_field = ps_vui->u1_cr_top_field;
|
||||
ps_op->u1_cr_bottom_field = ps_vui->u1_cr_bottom_field;
|
||||
ps_op->u4_num_units_in_tick = ps_vui->u4_num_units_in_tick;
|
||||
ps_op->u4_time_scale = ps_vui->u4_time_scale;
|
||||
ps_op->u1_fixed_frame_rate_flag = ps_vui->u1_fixed_frame_rate_flag;
|
||||
ps_op->u1_nal_hrd_params_present = ps_vui->u1_nal_hrd_params_present;
|
||||
ps_op->u1_vcl_hrd_params_present = ps_vui->u1_vcl_hrd_params_present;
|
||||
ps_op->u1_low_delay_hrd_flag = ps_vui->u1_low_delay_hrd_flag;
|
||||
ps_op->u1_pic_struct_present_flag = ps_vui->u1_pic_struct_present_flag;
|
||||
ps_op->u1_bitstream_restriction_flag = ps_vui->u1_bitstream_restriction_flag;
|
||||
ps_op->u1_mv_over_pic_boundaries_flag = ps_vui->u1_mv_over_pic_boundaries_flag;
|
||||
ps_op->u4_max_bytes_per_pic_denom = ps_vui->u4_max_bytes_per_pic_denom;
|
||||
ps_op->u4_max_bits_per_mb_denom = ps_vui->u4_max_bits_per_mb_denom;
|
||||
ps_op->u4_log2_max_mv_length_horz = ps_vui->u4_log2_max_mv_length_horz;
|
||||
ps_op->u4_log2_max_mv_length_vert = ps_vui->u4_log2_max_mv_length_vert;
|
||||
ps_op->u4_num_reorder_frames = ps_vui->u4_num_reorder_frames;
|
||||
ps_op->u4_max_dec_frame_buffering = ps_vui->u4_max_dec_frame_buffering;
|
||||
|
||||
return IV_SUCCESS;
|
||||
}
|
||||
|
||||
WORD32 ih264d_set_num_cores(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op)
|
||||
{
|
||||
ih264d_ctl_set_num_cores_ip_t *ps_ip;
|
||||
|
|
|
|||
|
|
@ -112,7 +112,8 @@ typedef enum
|
|||
ERROR_PIC_NUM_IS_REPEATED = 0x92,
|
||||
ERROR_IN_LAST_SLICE_OF_PIC = 0x93,
|
||||
ERROR_NEW_FRAME_EXPECTED = 0x94,
|
||||
ERROR_INCOMPLETE_FRAME = 0x95
|
||||
ERROR_INCOMPLETE_FRAME = 0x95,
|
||||
ERROR_VUI_PARAMS_NOT_FOUND = 0x96
|
||||
|
||||
} h264_decoder_error_code_t;
|
||||
|
||||
|
|
|
|||
|
|
@ -2607,7 +2607,30 @@ int main(WORD32 argc, CHAR *argv[])
|
|||
*/
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/* Get VUI parameters */
|
||||
/*************************************************************************/
|
||||
{
|
||||
|
||||
ih264d_ctl_get_vui_params_ip_t s_ctl_get_vui_params_ip;
|
||||
ih264d_ctl_get_vui_params_op_t s_ctl_get_vui_params_op;
|
||||
|
||||
s_ctl_get_vui_params_ip.e_cmd = IVD_CMD_VIDEO_CTL;
|
||||
s_ctl_get_vui_params_ip.e_sub_cmd =
|
||||
(IVD_CONTROL_API_COMMAND_TYPE_T)IH264D_CMD_CTL_GET_VUI_PARAMS;
|
||||
s_ctl_get_vui_params_ip.u4_size =
|
||||
sizeof(ih264d_ctl_get_vui_params_ip_t);
|
||||
s_ctl_get_vui_params_op.u4_size =
|
||||
sizeof(ih264d_ctl_get_vui_params_op_t);
|
||||
|
||||
ret = ivd_api_function((iv_obj_t *)codec_obj, (void *)&s_ctl_get_vui_params_ip,
|
||||
(void *)&s_ctl_get_vui_params_op);
|
||||
if(IV_SUCCESS != ret)
|
||||
{
|
||||
sprintf(ac_error_str, "Error in Get VUI params");
|
||||
//codec_exit(ac_error_str);
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************/
|
||||
/* Set the decoder in frame decode mode. It was set in header decode */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue