📄 sei.c
字号:
* the image pointer
*
************************************************************************
*/
void interpret_progressive_refinement_start_info( byte* payload, int size, ImageParameters *img )
{
int progressive_refinement_id, num_refinement_steps_minus1;
Bitstream* buf;
buf = malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
progressive_refinement_id = ue_v("SEI: progressive_refinement_id" , buf);
num_refinement_steps_minus1 = ue_v("SEI: num_refinement_steps_minus1", buf);
#ifdef PRINT_PROGRESSIVE_REFINEMENT_START_INFO
printf("Progressive refinement segment start SEI message\n");
printf("progressive_refinement_id = %d\n", progressive_refinement_id);
printf("num_refinement_steps_minus1 = %d\n", num_refinement_steps_minus1);
#endif
free (buf);
#ifdef PRINT_PROGRESSIVE_REFINEMENT_START_INFO
#undef PRINT_PROGRESSIVE_REFINEMENT_START_INFO
#endif
}
/*!
************************************************************************
* \brief
* Interpret the Progressive refinement segment end 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_progressive_refinement_end_info( byte* payload, int size, ImageParameters *img )
{
int progressive_refinement_id;
Bitstream* buf;
buf = malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
progressive_refinement_id = ue_v("SEI: progressive_refinement_id" , buf);
#ifdef PRINT_PROGRESSIVE_REFINEMENT_END_INFO
printf("Progressive refinement segment end SEI message\n");
printf("progressive_refinement_id = %d\n", progressive_refinement_id);
#endif
free (buf);
#ifdef PRINT_PROGRESSIVE_REFINEMENT_END_INFO
#undef PRINT_PROGRESSIVE_REFINEMENT_END_INFO
#endif
}
/*!
************************************************************************
* \brief
* Interpret the Motion-constrained slice group set 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_motion_constrained_slice_group_set_info( byte* payload, int size, ImageParameters *img )
{
int num_slice_groups_minus1, slice_group_id, exact_match_flag, pan_scan_rect_flag, pan_scan_rect_id;
int i;
int sliceGroupSize;
Bitstream* buf;
buf = malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
UsedBits = 0;
num_slice_groups_minus1 = ue_v("SEI: num_slice_groups_minus1" , buf);
sliceGroupSize = CeilLog2( num_slice_groups_minus1 + 1 );
#ifdef PRINT_MOTION_CONST_SLICE_GROUP_SET_INFO
printf("Motion-constrained slice group set SEI message\n");
printf("num_slice_groups_minus1 = %d\n", num_slice_groups_minus1);
#endif
for (i=0; i<=num_slice_groups_minus1;i++)
{
slice_group_id = u_v (sliceGroupSize, "SEI: slice_group_id" , buf) ;
#ifdef PRINT_MOTION_CONST_SLICE_GROUP_SET_INFO
printf("slice_group_id = %d\n", slice_group_id);
#endif
}
exact_match_flag = u_1("SEI: exact_match_flag" , buf);
pan_scan_rect_flag = u_1("SEI: pan_scan_rect_flag" , buf);
#ifdef PRINT_MOTION_CONST_SLICE_GROUP_SET_INFO
printf("exact_match_flag = %d\n", exact_match_flag);
printf("pan_scan_rect_flag = %d\n", pan_scan_rect_flag);
#endif
if (pan_scan_rect_flag)
{
pan_scan_rect_id = ue_v("SEI: pan_scan_rect_id" , buf);
#ifdef PRINT_MOTION_CONST_SLICE_GROUP_SET_INFO
printf("pan_scan_rect_id = %d\n", pan_scan_rect_id);
#endif
}
free (buf);
#ifdef PRINT_MOTION_CONST_SLICE_GROUP_SET_INFO
#undef PRINT_MOTION_CONST_SLICE_GROUP_SET_INFO
#endif
}
/*!
************************************************************************
* \brief
* Interpret the film grain 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_film_grain_characteristics_info( byte* payload, int size, ImageParameters *img )
{
int film_grain_characteristics_cancel_flag;
int model_id, separate_colour_description_present_flag;
int film_grain_bit_depth_luma_minus8, film_grain_bit_depth_chroma_minus8, film_grain_full_range_flag, film_grain_colour_primaries, film_grain_transfer_characteristics, film_grain_matrix_coefficients;
int blending_mode_id, log2_scale_factor, comp_model_present_flag[3];
int num_intensity_intervals_minus1, num_model_values_minus1;
int intensity_interval_lower_bound, intensity_interval_upper_bound;
int comp_model_value;
int film_grain_characteristics_repetition_period;
int c, i, j;
Bitstream* buf;
buf = malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
film_grain_characteristics_cancel_flag = u_1("SEI: film_grain_characteristics_cancel_flag", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("film_grain_characteristics_cancel_flag = %d\n", film_grain_characteristics_cancel_flag);
#endif
if(!film_grain_characteristics_cancel_flag)
{
model_id = u_v(2, "SEI: model_id", buf);
separate_colour_description_present_flag = u_1("SEI: separate_colour_description_present_flag", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("model_id = %d\n", model_id);
printf("separate_colour_description_present_flag = %d\n", separate_colour_description_present_flag);
#endif
if (separate_colour_description_present_flag)
{
film_grain_bit_depth_luma_minus8 = u_v(3, "SEI: film_grain_bit_depth_luma_minus8", buf);
film_grain_bit_depth_chroma_minus8 = u_v(3, "SEI: film_grain_bit_depth_chroma_minus8", buf);
film_grain_full_range_flag = u_v(1, "SEI: film_grain_full_range_flag", buf);
film_grain_colour_primaries = u_v(8, "SEI: film_grain_colour_primaries", buf);
film_grain_transfer_characteristics = u_v(8, "SEI: film_grain_transfer_characteristics", buf);
film_grain_matrix_coefficients = u_v(8, "SEI: film_grain_matrix_coefficients", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("film_grain_bit_depth_luma_minus8 = %d\n", film_grain_bit_depth_luma_minus8);
printf("film_grain_bit_depth_chroma_minus8 = %d\n", film_grain_bit_depth_chroma_minus8);
printf("film_grain_full_range_flag = %d\n", film_grain_full_range_flag);
printf("film_grain_colour_primaries = %d\n", film_grain_colour_primaries);
printf("film_grain_transfer_characteristics = %d\n", film_grain_transfer_characteristics);
printf("film_grain_matrix_coefficients = %d\n", film_grain_matrix_coefficients);
#endif
}
blending_mode_id = u_v(2, "SEI: blending_mode_id", buf);
log2_scale_factor = u_v(4, "SEI: log2_scale_factor", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("blending_mode_id = %d\n", blending_mode_id);
printf("log2_scale_factor = %d\n", log2_scale_factor);
#endif
for (c = 0; c < 3; c ++)
{
comp_model_present_flag[c] = u_1("SEI: comp_model_present_flag", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("comp_model_present_flag = %d\n", comp_model_present_flag[c]);
#endif
}
for (c = 0; c < 3; c ++)
if (comp_model_present_flag[c])
{
num_intensity_intervals_minus1 = u_v(8, "SEI: num_intensity_intervals_minus1", buf);
num_model_values_minus1 = u_v(3, "SEI: num_model_values_minus1", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("num_intensity_intervals_minus1 = %d\n", num_intensity_intervals_minus1);
printf("num_model_values_minus1 = %d\n", num_model_values_minus1);
#endif
for (i = 0; i <= num_intensity_intervals_minus1; i ++)
{
intensity_interval_lower_bound = u_v(8, "SEI: intensity_interval_lower_bound", buf);
intensity_interval_upper_bound = u_v(8, "SEI: intensity_interval_upper_bound", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("intensity_interval_lower_bound = %d\n", intensity_interval_lower_bound);
printf("intensity_interval_upper_bound = %d\n", intensity_interval_upper_bound);
#endif
for (j = 0; j <= num_model_values_minus1; j++)
{
comp_model_value = se_v("SEI: comp_model_value", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("comp_model_value = %d\n", comp_model_value);
#endif
}
}
}
film_grain_characteristics_repetition_period = ue_v("SEI: film_grain_characteristics_repetition_period", buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
printf("film_grain_characteristics_repetition_period = %d\n", film_grain_characteristics_repetition_period);
#endif
}
free (buf);
#ifdef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
#undef PRINT_FILM_GRAIN_CHARACTERISTICS_INFO
#endif
}
/*!
************************************************************************
* \brief
* Interpret the deblocking filter display preference 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_deblocking_filter_display_preference_info( byte* payload, int size, ImageParameters *img )
{
int deblocking_display_preference_cancel_flag;
int display_prior_to_deblocking_preferred_flag, dec_frame_buffering_constraint_flag, deblocking_display_preference_repetition_period;
Bitstream* buf;
buf = malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
deblocking_display_preference_cancel_flag = u_1("SEI: deblocking_display_preference_cancel_flag", buf);
#ifdef PRINT_DEBLOCKING_FILTER_DISPLAY_PREFERENCE_INFO
printf("deblocking_display_preference_cancel_flag = %d\n", deblocking_display_preference_cancel_flag);
#endif
if(!deblocking_display_preference_cancel_flag)
{
display_prior_to_deblocking_preferred_flag = u_1("SEI: display_prior_to_deblocking_preferred_flag", buf);
dec_frame_buffering_constraint_flag = u_1("SEI: dec_frame_buffering_constraint_flag", buf);
deblocking_display_preference_repetition_period = ue_v("SEI: deblocking_display_preference_repetition_period", buf);
#ifdef PRINT_DEBLOCKING_FILTER_DISPLAY_PREFERENCE_INFO
printf("display_prior_to_deblocking_preferred_flag = %d\n", display_prior_to_deblocking_preferred_flag);
printf("dec_frame_buffering_constraint_flag = %d\n", dec_frame_buffering_constraint_flag);
printf("deblocking_display_preference_repetition_period = %d\n", deblocking_display_preference_repetition_period);
#endif
}
free (buf);
#ifdef PRINT_DEBLOCKING_FILTER_DISPLAY_PREFERENCE_INFO
#undef PRINT_DEBLOCKING_FILTER_DISPLAY_PREFERENCE_INFO
#endif
}
/*!
************************************************************************
* \brief
* Interpret the stereo video info 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_stereo_video_info_info( byte* payload, int size, ImageParameters *img )
{
int field_views_flags;
int top_field_is_left_view_flag, current_frame_is_left_view_flag, next_frame_is_second_view_flag;
int left_view_self_contained_flag;
int right_view_self_contained_flag;
Bitstream* buf;
buf = malloc(sizeof(Bitstream));
buf->bitstream_length = size;
buf->streamBuffer = payload;
buf->frame_bitoffset = 0;
field_views_flags = u_1("SEI: field_views_flags", buf);
#ifdef PRINT_STEREO_VIDEO_INFO_INFO
printf("field_views_flags = %d\n", field_views_flags);
#endif
if (field_views_flags)
{
top_field_is_left_view_flag = u_1("SEI: top_field_is_left_view_flag", buf);
#ifdef PRINT_STEREO_VIDEO_INFO_INFO
printf("top_field_is_left_view_flag = %d\n", top_field_is_left_view_flag);
#endif
}
else
{
current_frame_is_left_view_flag = u_1("SEI: current_frame_is_left_view_flag", buf);
next_frame_is_second_view_flag = u_1("SEI: next_frame_is_second_view_flag", buf);
#ifdef PRINT_STEREO_VIDEO_INFO_INFO
printf("current_frame_is_left_view_flag = %d\n", current_frame_is_left_view_flag);
printf("next_frame_is_second_view_flag = %d\n", next_frame_is_second_view_flag);
#endif
}
left_view_self_contained_flag = u_1("SEI: left_view_self_contained_flag", buf);
right_view_self_contained_flag = u_1("SEI: right_view_self_contained_flag", buf);
#ifdef PRINT_STEREO_VIDEO_INFO_INFO
printf("left_view_self_contained_flag = %d\n", left_view_self_contained_flag);
printf("right_view_self_contained_flag = %d\n", right_view_self_contained_flag);
#endif
free (buf);
#ifdef PRINT_STEREO_VIDEO_INFO_INFO
#undef PRINT_STEREO_VIDEO_INFO_INFO
#endif
}
/*!
************************************************************************
* \brief
* Interpret the Reserved 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_reserved_info( byte* payload, int size, ImageParameters *img )
{
int offset = 0;
byte payload_byte;
#ifdef PRINT_RESERVED_INFO
printf("Reserved SEI message\n");
#endif
while (offset < size)
{
payload_byte = payload[offset];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -