📄 sei.cpp
字号:
*/
void interpret_subsequence_info( byte* payload, int size, ImageParameters *img )
{
Bitstream* buf;
int sub_seq_layer_num, sub_seq_id, first_ref_pic_flag, leading_non_ref_pic_flag, last_pic_flag,
sub_seq_frame_num_flag, sub_seq_frame_num;
buf =(Bitstream *) malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
sub_seq_layer_num = ue_v("SEI: sub_seq_layer_num" , buf);
sub_seq_id = ue_v("SEI: sub_seq_id" , buf);
first_ref_pic_flag = u_1 ("SEI: first_ref_pic_flag" , buf);
leading_non_ref_pic_flag = u_1 ("SEI: leading_non_ref_pic_flag", buf);
last_pic_flag = u_1 ("SEI: last_pic_flag" , buf);
sub_seq_frame_num_flag = u_1 ("SEI: sub_seq_frame_num_flag" , buf);
if (sub_seq_frame_num_flag)
{
sub_seq_frame_num = ue_v("SEI: sub_seq_frame_num" , buf);
}
free(buf);
}
/*!
************************************************************************
* \brief
* Interpret the Sub-sequence layer characteristics SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_subsequence_layer_characteristics_info( byte* payload, int size, ImageParameters *img )
{
Bitstream* buf;
long num_sub_layers, accurate_statistics_flag, average_bit_rate, average_frame_rate;
int i;
buf =(Bitstream *) malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
num_sub_layers = 1 + ue_v("SEI: num_sub_layers_minus1", buf);
for (i=0; i<num_sub_layers; i++)
{
accurate_statistics_flag = u_1( "SEI: accurate_statistics_flag", buf);
average_bit_rate = u_v(16,"SEI: average_bit_rate" , buf);
average_frame_rate = u_v(16,"SEI: average_frame_rate" , buf);
}
free (buf);
}
/*!
************************************************************************
* \brief
* Interpret the Sub-sequence characteristics SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_subsequence_characteristics_info( byte* payload, int size, ImageParameters *img )
{
Bitstream* buf;
int i;
int sub_seq_layer_num, sub_seq_id, duration_flag, average_rate_flag, accurate_statistics_flag;
unsigned long sub_seq_duration, average_bit_rate, average_frame_rate;
int num_referenced_subseqs, ref_sub_seq_layer_num, ref_sub_seq_id, ref_sub_seq_direction;
buf =(Bitstream *) malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
sub_seq_layer_num = ue_v("SEI: sub_seq_layer_num", buf);
sub_seq_id = ue_v("SEI: sub_seq_id", buf);
duration_flag = u_1 ("SEI: duration_flag", buf);
if ( duration_flag )
{
sub_seq_duration = u_v (32, "SEI: duration_flag", buf);
}
average_rate_flag = u_1 ("SEI: average_rate_flag", buf);
if ( average_rate_flag )
{
accurate_statistics_flag = u_1 ( "SEI: accurate_statistics_flag", buf);
average_bit_rate = u_v (16, "SEI: average_bit_rate", buf);
average_frame_rate = u_v (16, "SEI: average_frame_rate", buf);
}
num_referenced_subseqs = ue_v("SEI: num_referenced_subseqs", buf);
for (i=0; i<num_referenced_subseqs; i++)
{
ref_sub_seq_layer_num = ue_v("SEI: ref_sub_seq_layer_num", buf);
ref_sub_seq_id = ue_v("SEI: ref_sub_seq_id", buf);
ref_sub_seq_direction = u_1 ("SEI: ref_sub_seq_direction", buf);
}
free( buf );
}
/*!
************************************************************************
* \brief
* Interpret the Scene information SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_scene_information( byte* payload, int size, ImageParameters *img )
{
Bitstream* buf;
int scene_id, scene_transition_type, second_scene_id;
buf =(Bitstream *) malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
scene_id = ue_v("SEI: scene_id" , buf);
scene_transition_type = ue_v("SEI: scene_transition_type", buf);
if ( scene_transition_type > 3 )
{
second_scene_id = ue_v("SEI: scene_transition_type", buf);;
}
free( buf );
}
/*!
************************************************************************
* \brief
* Interpret the Filler payload SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_filler_payload_info( byte* payload, int size, ImageParameters *img )
{
int offset = 0;
byte payload_cnt = 0;
while (offset<size)
{
if (payload[offset] == 0xFF)
{
payload_cnt++;
}
}
}
/*!
************************************************************************
* \brief
* Interpret the User data unregistered SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_user_data_unregistered_info( byte* payload, int size, ImageParameters *img )
{
int offset = 0;
byte payload_byte;
assert (size<16);
while (offset < size)
{
payload_byte = payload[offset];
offset ++;
}
}
/*!
************************************************************************
* \brief
* Interpret the User data registered by ITU-T T.35 SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_user_data_registered_itu_t_t35_info( byte* payload, int size, ImageParameters *img )
{
int offset = 0;
byte itu_t_t35_country_code, itu_t_t35_country_code_extension_byte, payload_byte;
itu_t_t35_country_code = payload[offset];
offset++;
if(itu_t_t35_country_code == 0xFF)
{
itu_t_t35_country_code_extension_byte = payload[offset];
offset++;
}
while (offset < size)
{
payload_byte = payload[offset];
offset ++;
}
}
/*!
************************************************************************
* \brief
* Interpret the Pan scan rectangle SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_pan_scan_rect_info( byte* payload, int size, ImageParameters *img )
{
int pan_scan_rect_id, pan_scan_rect_left_offset, pan_scan_rect_right_offset;
int pan_scan_rect_top_offset, pan_scan_rect_bottom_offset;
Bitstream* buf;
buf =(Bitstream *) malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
pan_scan_rect_id = ue_v("SEI: pan_scan_rect_id", buf);
pan_scan_rect_left_offset = se_v("SEI: pan_scan_rect_left_offset" , buf);
pan_scan_rect_right_offset = se_v("SEI: pan_scan_rect_right_offset" , buf);
pan_scan_rect_top_offset = se_v("SEI: pan_scan_rect_top_offset" , buf);
pan_scan_rect_bottom_offset = se_v("SEI: pan_scan_rect_bottom_offset", buf);
free (buf);
}
/*!
************************************************************************
* \brief
* Interpret the Random access point SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_random_access_info( byte* payload, int size, ImageParameters *img )
{
int recovery_frame_cnt, exact_match_flag, broken_link_flag, changing_slice_group_idc;
Bitstream* buf;
buf =(Bitstream *) malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
recovery_frame_cnt = ue_v( "SEI: recovery_frame_cnt" , buf);
exact_match_flag = u_1 ( "SEI: exact_match_flag" , buf);
broken_link_flag = u_1 ( "SEI: broken_link_flag" , buf);
changing_slice_group_idc = u_v ( 2, "SEI: changing_slice_group_idc", buf);
free (buf);
}
/*!
************************************************************************
* \brief
* Interpret the Decoded Picture Buffer Management Repetition SEI message
* \param payload
* a pointer that point to the sei payload
* \param size
* the size of the sei message
* \param img
* the image pointer
*
************************************************************************
*/
void interpret_dec_ref_pic_marking_repetition_info( byte* payload, int size, ImageParameters *img )
{
int original_idr_flag, original_frame_num;
DecRefPicMarking_t *tmp_drpm;
DecRefPicMarking_t *old_drpm;
int old_idr_flag , old_no_output_of_prior_pics_flag, old_long_term_reference_flag , old_adaptive_ref_pic_buffering_flag;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -