Commit ce75335b authored by Ray Essick's avatar Ray Essick Committed by android-build-merger
Browse files

Merge \\"Added support for parsing SEI parameters\\" am: 0626701e

am: 01989ee5

Change-Id: Ic0683d943494ee1cef047c4c1a9ea0e7331f395c
parents ea46b5ed 01989ee5
......@@ -219,6 +219,45 @@ typedef enum {
USER_DATA_MAX
} USER_DATA_SEI_TYPE_T;
/**
****************************************************************************
* SEI payload type
****************************************************************************
*/
enum
{
SEI_BUFFERING_PERIOD = 0,
SEI_PICTURE_TIMING = 1,
SEI_PAN_SCAN_RECT = 2,
SEI_FILLER_PAYLOAD = 3,
SEI_USER_DATA_REGISTERED_ITU_T_T35 = 4,
SEI_USER_DATA_UNREGISTERED = 5,
SEI_RECOVERY_POINT = 6,
SEI_SCENE_INFO = 9,
SEI_FULL_FRAME_SNAPSHOT = 15,
SEI_PROGRESSIVE_REFINEMENT_SEGMENT_START = 16,
SEI_PROGRESSIVE_REFINEMENT_SEGMENT_END = 17,
SEI_FILM_GRAIN_CHARACTERISTICS = 19,
SEI_POST_FILTER_HINT = 22,
SEI_TONE_MAPPING_INFO = 23,
SEI_FRAME_PACKING = 45,
SEI_DISPLAY_ORIENTATION = 47,
SEI_SOP_DESCRIPTION = 128,
SEI_ACTIVE_PARAMETER_SETS = 129,
SEI_DECODING_UNIT_INFO = 130,
SEI_TEMPORAL_LEVEL0_INDEX = 131,
SEI_DECODED_PICTURE_HASH = 132,
SEI_SCALABLE_NESTING = 133,
SEI_REGION_REFRESH_INFO = 134,
SEI_NO_DISPLAY = 135,
SEI_TIME_CODE = 136,
SEI_MASTERING_DISPLAY_COLOUR_VOLUME = 137,
SEI_SEGM_RECT_FRAME_PACKING = 138,
SEI_TEMP_MOTION_CONSTRAINED_TILE_SETS = 139,
SEI_CHROMA_SAMPLING_FILTER_HINT = 140,
SEI_KNEE_FUNCTION_INFO = 141
};
#define BIT_DEPTH 8
#define BIT_DEPTH_LUMA BIT_DEPTH
......
......@@ -414,8 +414,16 @@ UWORD32 ihevcd_bits_num_bits_remaining(bitstrm_t *ps_bitstrm)
3) + ps_bitstrm->u4_bit_ofst;
u4_size_in_bits = (UWORD32)(ps_bitstrm->pu1_buf_max -
ps_bitstrm->pu1_buf_base);
return (u4_size_in_bits - u4_bits_consumed);
ps_bitstrm->pu1_buf_base) - 8;
u4_size_in_bits <<= 3;
if(u4_size_in_bits > u4_bits_consumed)
{
return (u4_size_in_bits - u4_bits_consumed);
}
else
{
return 0;
}
}
/**
......
......@@ -203,6 +203,18 @@ static void ihevcd_fill_outargs(codec_t *ps_codec,
ps_dec_op->u4_output_present = 0;
ps_dec_op->u4_progressive_frame_flag = 1;
if(ps_codec->i4_sps_done)
{
sps_t *ps_sps = (ps_codec->s_parse.ps_sps_base + ps_codec->i4_sps_id);
profile_tier_lvl_info_t *ps_ptl;
ps_ptl = &ps_sps->s_ptl;
if((0 == ps_ptl->s_ptl_gen.i1_general_progressive_source_flag) &&
(1 == ps_ptl->s_ptl_gen.i1_general_interlaced_source_flag))
{
ps_dec_op->u4_progressive_frame_flag = 0;
}
}
ps_dec_op->u4_is_ref_flag = 1;
ps_dec_op->e_output_format = ps_codec->e_chroma_fmt;
ps_dec_op->u4_is_ref_flag = 1;
......@@ -224,7 +236,30 @@ static void ihevcd_fill_outargs(codec_t *ps_codec,
if(ps_codec->ps_disp_buf)
{
pic_buf_t *ps_disp_buf = ps_codec->ps_disp_buf;
sei_params_t *ps_sei = &ps_disp_buf->s_sei_params;
if(ps_sei->i1_sei_parameters_present_flag &&
ps_sei->i1_pic_timing_params_present_flag)
{
UWORD32 u4_pic_struct;
u4_pic_struct = ps_sei->s_pic_timing_sei_params.u4_pic_struct;
switch(u4_pic_struct)
{
case 1:
ps_dec_op->e4_fld_type = IV_TOP_FLD;
ps_dec_op->u4_progressive_frame_flag = 0;
break;
case 2:
ps_dec_op->e4_fld_type = IV_BOT_FLD;
ps_dec_op->u4_progressive_frame_flag = 0;
break;
case 0:
default:
ps_dec_op->e4_fld_type = IV_FLD_TYPE_DEFAULT;
ps_dec_op->u4_progressive_frame_flag = 1;
break;
}
}
ps_dec_op->u4_output_present = 1;
ps_dec_op->u4_ts = ps_disp_buf->u4_ts;
if((ps_codec->i4_flush_mode == 0) && (ps_codec->s_parse.i4_end_of_frame == 0))
......
......@@ -450,6 +450,16 @@ IHEVCD_ERROR_T ihevcd_nal_unit(codec_t *ps_codec)
DEBUG_PRINT_NAL_INFO(ps_codec, s_nal.i1_nal_unit_type);
break;
case NAL_PREFIX_SEI:
case NAL_SUFFIX_SEI:
if(IVD_DECODE_HEADER == ps_codec->i4_header_mode)
{
return IHEVCD_SLICE_IN_HEADER_MODE;
}
ret = ihevcd_parse_sei(ps_codec, &s_nal);
break;
case NAL_EOS :
ps_codec->i4_cra_as_first_pic = 1;
break;
......
This diff is collapsed.
......@@ -42,6 +42,13 @@ void ihevcd_copy_slice_hdr(codec_t *ps_codec, WORD32 slice_idx, WORD32 slice_idx
IHEVCD_ERROR_T ihevcd_parse_vps(codec_t *ps_codec);
IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec);
IHEVCD_ERROR_T ihevcd_parse_pps(codec_t *ps_codec);
IHEVCD_ERROR_T ihevcd_parse_sei(codec_t *ps_codec, nal_header_t *ps_nal);
IHEVCD_ERROR_T ihevcd_parse_pic_timing_sei(codec_t *ps_codec, sps_t *ps_sps);
IHEVCD_ERROR_T ihevcd_parse_buffering_period_sei(codec_t *ps_codec, sps_t *ps_sps);
IHEVCD_ERROR_T ihevcd_parse_time_code_sei(codec_t *ps_codec);
IHEVCD_ERROR_T ihevcd_parse_user_data_registered_itu_t_t35(codec_t *ps_codec, UWORD32 u4_payload_size);
IHEVCD_ERROR_T ihevcd_parse_active_parameter_sets_sei(codec_t *ps_codec, sps_t *ps_sps);
IHEVCD_ERROR_T ihevcd_read_rbsp_trailing_bits(codec_t *ps_codec, UWORD32 u4_bits_left);
IHEVCD_ERROR_T ihevcd_parse_slice_header(codec_t *ps_codec,
nal_header_t *ps_nal);
......
......@@ -1161,7 +1161,10 @@ typedef struct
*/
WORD32 i4_next_tu_ctb_cnt;
/**
* SEI parameters
*/
sei_params_t s_sei_params;
}parse_ctxt_t;
/**
......
......@@ -823,6 +823,27 @@ IHEVCD_ERROR_T ihevcd_parse_pic_init(codec_t *ps_codec)
pu1_buf = ps_cur_pic->pu1_chroma;
pu1_cur_pic_chroma = pu1_buf;
ps_cur_pic->s_sei_params.i1_sei_parameters_present_flag = 0;
if(ps_codec->s_parse.s_sei_params.i1_sei_parameters_present_flag)
{
sei_params_t *ps_sei = &ps_codec->s_parse.s_sei_params;
ps_cur_pic->s_sei_params = ps_codec->s_parse.s_sei_params;
/* Once sei_params is copied to pic_buf,
* mark sei_params in s_parse as not present,
* this ensures that future frames do not use this data again.
*/
ps_sei->i1_sei_parameters_present_flag = 0;
ps_sei->i1_user_data_registered_present_flag = 0;
ps_sei->i1_aud_present_flag = 0;
ps_sei->i1_time_code_present_flag = 0;
ps_sei->i1_buf_period_params_present_flag = 0;
ps_sei->i1_pic_timing_params_present_flag = 0;
ps_sei->i1_recovery_point_params_present_flag = 0;
ps_sei->i1_active_parameter_set = 0;
ps_sei->i4_sei_mastering_disp_colour_vol_params_present_flags = 0;
}
}
if(0 == ps_codec->u4_pic_cnt)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment