Encoder added support for VUI params

SPS will now include vui params
Removed a trailing space in ih264e_api.c

Change-Id: I67a57741689206e571e9a83f7e3360149f87e06a
This commit is contained in:
Hamsalekha S 2015-07-30 16:20:35 +05:30
parent 2eaba5ebd1
commit 4202606c70
5 changed files with 145 additions and 6 deletions

View file

@ -3473,7 +3473,7 @@ static WORD32 ih264e_fill_num_mem_rec(void *pv_api_ip, void *pv_api_op)
ps_mem_rec = &ps_mem_rec_base[MEM_REC_MB_INFO_NMB]; ps_mem_rec = &ps_mem_rec_base[MEM_REC_MB_INFO_NMB];
{ {
ps_mem_rec->u4_mem_size = MAX_PROCESS_CTXT * max_mb_cols * ps_mem_rec->u4_mem_size = MAX_PROCESS_CTXT * max_mb_cols *
(sizeof(mb_info_nmb_t) + MB_SIZE * MB_SIZE (sizeof(mb_info_nmb_t) + MB_SIZE * MB_SIZE
* sizeof(UWORD8)); * sizeof(UWORD8));
} }
DEBUG("\nMemory record Id %d = %d \n", MEM_REC_MB_INFO_NMB, ps_mem_rec->u4_mem_size); DEBUG("\nMemory record Id %d = %d \n", MEM_REC_MB_INFO_NMB, ps_mem_rec->u4_mem_size);

View file

@ -136,6 +136,82 @@ static WORD32 ih264e_generate_nal_unit_header(bitstrm_t *ps_bitstrm,
return(return_status); return(return_status);
} }
/**
******************************************************************************
*
* @brief Generates VUI (Video usability information)
*
* @par Description
* This function generates VUI header as per the spec
*
* @param[in] ps_bitstrm
* pointer to bitstream context (handle)
*
* @param[in] ps_vui
* pointer to structure containing VUI data
*
* @return success or failure error code
*
******************************************************************************
*/
WORD32 ih264e_generate_vui(bitstrm_t *ps_bitstrm, vui_t *ps_vui)
{
WORD32 return_status = IH264E_SUCCESS;
/* aspect_ratio_info_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_aspect_ratio_info_present_flag, 1, return_status, "aspect_ratio_info_present_flag");
/* overscan_info_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_overscan_info_present_flag, 1, return_status, "overscan_info_present_flag");
/* video_signal_type_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_video_signal_type_present_flag, 1, return_status, "video_signal_type_present_flag");
/* chroma_loc_info_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_chroma_loc_info_present_flag, 1, return_status, "chroma_loc_info_present_flag");
/* timing_info_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_vui_timing_info_present_flag, 1, return_status, "timing_info_present_flag");
/* nal_hrd_parameters_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_nal_hrd_parameters_present_flag, 1, return_status, "nal_hrd_parameters_present_flag");
/* vcl_hrd_parameters_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_vcl_hrd_parameters_present_flag, 1, return_status, "vcl_hrd_parameters_present_flag");
/* pic_struct_present_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_pic_struct_present_flag, 1, return_status, "pic_struct_present_flag");
/* bitstream_restriction_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_bitstream_restriction_flag, 1, return_status, "bitstream_restriction_flag");
if(ps_vui->u1_bitstream_restriction_flag == 1)
{
/* motion_vectors_over_pic_boundaries_flag */
PUT_BITS(ps_bitstrm, ps_vui->u1_motion_vectors_over_pic_boundaries_flag, 1, return_status, "motion_vectors_over_pic_boundaries_flag");
/* max_bytes_per_pic_denom */
PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_bytes_per_pic_denom,return_status,"max_bytes_per_pic_denom");
/* max_bits_per_mb_denom */
PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_bits_per_mb_denom,return_status,"max_bits_per_mb_denom");
/* log2_max_mv_length_horizontal */
PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_log2_max_mv_length_horizontal,return_status,"log2_max_mv_length_horizontal");
/* log2_max_mv_length_vertical */
PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_log2_max_mv_length_vertical,return_status,"log2_max_mv_length_vertical");
/* max_num_reorder_frames */
PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_num_reorder_frames,return_status,"max_num_reorder_frames");
/* max_dec_frame_buffering */
PUT_BITS_UEV(ps_bitstrm,ps_vui->u1_max_dec_frame_buffering,return_status,"max_dec_frame_buffering");
}
return return_status;
}
/** /**
****************************************************************************** ******************************************************************************
@ -151,11 +227,14 @@ static WORD32 ih264e_generate_nal_unit_header(bitstrm_t *ps_bitstrm,
* @param[in] ps_sps * @param[in] ps_sps
* pointer to structure containing SPS data * pointer to structure containing SPS data
* *
* @param[in] ps_vui
* pointer to structure containing VUI data
*
* @return success or failure error code * @return success or failure error code
* *
****************************************************************************** ******************************************************************************
*/ */
WORD32 ih264e_generate_sps(bitstrm_t *ps_bitstrm, sps_t *ps_sps) WORD32 ih264e_generate_sps(bitstrm_t *ps_bitstrm, sps_t *ps_sps, vui_t *ps_vui)
{ {
WORD32 return_status = IH264E_SUCCESS; WORD32 return_status = IH264E_SUCCESS;
WORD32 i; WORD32 i;
@ -297,6 +376,7 @@ WORD32 ih264e_generate_sps(bitstrm_t *ps_bitstrm, sps_t *ps_sps)
if (ps_sps->i1_vui_parameters_present_flag) if (ps_sps->i1_vui_parameters_present_flag)
{ {
/* Add vui parameters to the bitstream */; /* Add vui parameters to the bitstream */;
return_status |= ih264e_generate_vui(ps_bitstrm, ps_vui);
} }
/* rbsp trailing bits */ /* rbsp trailing bits */
@ -637,6 +717,58 @@ WORD32 ih264e_generate_slice_header(bitstrm_t *ps_bitstrm,
return return_status; return return_status;
} }
/**
******************************************************************************
*
* @brief Populates VUI structure
*
* @par Description
* Populates VUI structure for its use in header generation
*
* @param[in] ps_codec
* pointer to encoder context
*
* @param[out] ps_vui
* pointer to vui params that needs to be populated
*
* @return success or failure error code
*
******************************************************************************
*/
IH264E_ERROR_T ih264e_populate_vui(codec_t *ps_codec, vui_t *ps_vui)
{
sps_t *ps_sps;
ps_sps = ps_codec->ps_sps_base + ps_codec->i4_sps_id;
ps_vui->u1_aspect_ratio_info_present_flag = 0;
ps_vui->u1_overscan_info_present_flag = 0;
ps_vui->u1_video_signal_type_present_flag = 0;
ps_vui->u1_chroma_loc_info_present_flag = 0;
ps_vui->u1_vui_timing_info_present_flag = 0;
ps_vui->u1_nal_hrd_parameters_present_flag = 0;
ps_vui->u1_vcl_hrd_parameters_present_flag = 0;
ps_vui->u1_pic_struct_present_flag = 0;
ps_vui->u1_bitstream_restriction_flag = 1;
ps_vui->u1_motion_vectors_over_pic_boundaries_flag = 1;
ps_vui->u1_max_bytes_per_pic_denom = 0;
ps_vui->u1_max_bits_per_mb_denom = 0;
ps_vui->u1_log2_max_mv_length_horizontal = 16;
ps_vui->u1_log2_max_mv_length_vertical = 16;
if(ps_codec->s_cfg.u4_num_bframes == 0)
{
ps_vui->u1_num_reorder_frames = 0;
}
else
{
ps_vui->u1_num_reorder_frames = 1;
}
ps_vui->u1_max_dec_frame_buffering = ps_sps->u1_max_num_ref_frames;
return 0;
}
/** /**
@ -824,11 +956,12 @@ IH264E_ERROR_T ih264e_populate_sps(codec_t *ps_codec, sps_t *ps_sps)
} }
/* vui params */ /* vui params */
ps_sps->i1_vui_parameters_present_flag = 0; ps_sps->i1_vui_parameters_present_flag = 1;
if (ps_sps->i1_vui_parameters_present_flag) if (ps_sps->i1_vui_parameters_present_flag)
{ {
/* populate vui params */ /* populate vui params */
ih264e_populate_vui(ps_codec,&(ps_codec->s_vui));
} }
return i4_err_code; return i4_err_code;

View file

@ -101,7 +101,8 @@
WORD32 ih264e_generate_sps WORD32 ih264e_generate_sps
( (
bitstrm_t *ps_bitstrm, bitstrm_t *ps_bitstrm,
sps_t *ps_sps sps_t *ps_sps,
vui_t *ps_vui
); );
/** /**

View file

@ -181,7 +181,7 @@ IH264E_ERROR_T ih264e_generate_sps_pps(codec_t *ps_codec)
ps_entropy->i4_error_code = IH264E_SUCCESS; ps_entropy->i4_error_code = IH264E_SUCCESS;
/* generate sps */ /* generate sps */
ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps); ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps, &ps_codec->s_vui);
/* generate pps */ /* generate pps */
ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps); ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps);
@ -371,7 +371,7 @@ IH264E_ERROR_T ih264e_entropy(process_ctxt_t *ps_proc)
if (1 == ps_entropy->i4_gen_header) if (1 == ps_entropy->i4_gen_header)
{ {
/* generate sps */ /* generate sps */
ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps); ps_entropy->i4_error_code |= ih264e_generate_sps(ps_bitstrm, ps_sps, &ps_codec->s_vui);
/* generate pps */ /* generate pps */
ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps); ps_entropy->i4_error_code |= ih264e_generate_pps(ps_bitstrm, ps_pps, ps_sps);

View file

@ -2617,6 +2617,11 @@ struct _codec_t
*/ */
rate_control_ctxt_t s_rate_control; rate_control_ctxt_t s_rate_control;
/**
* VUI structure
*/
vui_t s_vui;
/** /**
* input buffer queue * input buffer queue
*/ */