📄 parset.c
字号:
if (vui_seq_parameters->overscan_info_present_flag)
{
len+=u_1 ("VUI: overscan_appropriate_flag", vui_seq_parameters->overscan_appropriate_flag, bitstream);
}
len+=u_1 ("VUI: video_signal_type_present_flag", vui_seq_parameters->video_signal_type_present_flag, bitstream);
if (vui_seq_parameters->video_signal_type_present_flag)
{
len+=u_v (3,"VUI: video_format", vui_seq_parameters->video_format, bitstream);
len+=u_1 ("VUI: video_full_range_flag", vui_seq_parameters->video_full_range_flag, bitstream);
len+=u_1 ("VUI: colour_description_present_flag", vui_seq_parameters->colour_description_present_flag, bitstream);
if (vui_seq_parameters->colour_description_present_flag)
{
len+=u_v (8,"VUI: colour_primaries", vui_seq_parameters->colour_primaries, bitstream);
len+=u_v (8,"VUI: transfer_characteristics", vui_seq_parameters->transfer_characteristics, bitstream);
len+=u_v (8,"VUI: matrix_coefficients", vui_seq_parameters->matrix_coefficients, bitstream);
}
}
len+=u_1 ("VUI: chroma_loc_info_present_flag", vui_seq_parameters->chroma_location_info_present_flag, bitstream);
if (vui_seq_parameters->chroma_location_info_present_flag)
{
len+=ue_v ("VUI: chroma_sample_loc_type_top_field", vui_seq_parameters->chroma_sample_loc_type_top_field, bitstream);
len+=ue_v ("VUI: chroma_sample_loc_type_bottom_field", vui_seq_parameters->chroma_sample_loc_type_bottom_field, bitstream);
}
len+=u_1 ("VUI: timing_info_present_flag", vui_seq_parameters->timing_info_present_flag, bitstream);
// timing parameters
if (vui_seq_parameters->timing_info_present_flag)
{
len+=u_v (32,"VUI: num_units_in_tick", vui_seq_parameters->num_units_in_tick, bitstream);
len+=u_v (32,"VUI: time_scale", vui_seq_parameters->time_scale, bitstream);
len+=u_1 ("VUI: fixed_frame_rate_flag", vui_seq_parameters->fixed_frame_rate_flag, bitstream);
}
// end of timing parameters
// nal_hrd_parameters_present_flag
len+=u_1 ("VUI: nal_hrd_parameters_present_flag", vui_seq_parameters->nal_hrd_parameters_present_flag, bitstream);
if ( vui_seq_parameters->nal_hrd_parameters_present_flag )
{
len += WriteHRDParameters(sps, bitstream);
}
// vcl_hrd_parameters_present_flag
len+=u_1 ("VUI: vcl_hrd_parameters_present_flag", vui_seq_parameters->vcl_hrd_parameters_present_flag, bitstream);
if ( vui_seq_parameters->vcl_hrd_parameters_present_flag )
{
len += WriteHRDParameters(sps, bitstream);
}
if ( vui_seq_parameters->nal_hrd_parameters_present_flag || vui_seq_parameters->vcl_hrd_parameters_present_flag )
{
len+=u_1 ("VUI: low_delay_hrd_flag", vui_seq_parameters->low_delay_hrd_flag, bitstream );
}
len+=u_1 ("VUI: pic_struct_present_flag", vui_seq_parameters->pic_struct_present_flag, bitstream);
len+=u_1 ("VUI: bitstream_restriction_flag", vui_seq_parameters->bitstream_restriction_flag, bitstream);
if (vui_seq_parameters->bitstream_restriction_flag)
{
len+=u_1 ("VUI: motion_vectors_over_pic_boundaries_flag", vui_seq_parameters->motion_vectors_over_pic_boundaries_flag, bitstream);
len+=ue_v ("VUI: max_bytes_per_pic_denom", vui_seq_parameters->max_bytes_per_pic_denom, bitstream);
len+=ue_v ("VUI: max_bits_per_mb_denom", vui_seq_parameters->max_bits_per_mb_denom, bitstream);
len+=ue_v ("VUI: log2_max_mv_length_horizontal", vui_seq_parameters->log2_max_mv_length_horizontal, bitstream);
len+=ue_v ("VUI: log2_max_mv_length_vertical", vui_seq_parameters->log2_max_mv_length_vertical, bitstream);
len+=ue_v ("VUI: num_reorder_frames", vui_seq_parameters->num_reorder_frames, bitstream);
len+=ue_v ("VUI: max_dec_frame_buffering", vui_seq_parameters->max_dec_frame_buffering, bitstream);
}
return len;
}
/*!
*************************************************************************************
* \brief
* Function body for SEI message NALU generation
*
* \return
* A NALU containing the SEI messages
*
*************************************************************************************
*/
NALU_t *GenerateSEImessage_NALU()
{
NALU_t *n = AllocNALU(64000);
int RBSPlen = 0;
int NALUlen;
byte rbsp[MAXRBSPSIZE];
RBSPlen = GenerateSEImessage_rbsp (NORMAL_SEI, rbsp);
NALUlen = RBSPtoNALU (rbsp, n, RBSPlen, NALU_TYPE_SEI, NALU_PRIORITY_DISPOSABLE, 0, 1);
n->startcodeprefix_len = 4;
return n;
}
/*!
*************************************************************************************
* \brief
* int GenerateSEImessage_rbsp (int, bufferingperiod_information_struct*, char*)
*
*
* \return
* size of the RBSP in bytes, negative in case of an error
*
* \note
*************************************************************************************
*/
int GenerateSEImessage_rbsp (int id, byte *rbsp)
{
Bitstream *bitstream;
int len = 0, LenInBytes;
assert (rbsp != NULL);
if ((bitstream=calloc(1, sizeof(Bitstream)))==NULL)
no_mem_exit("SeqParameterSet:bitstream");
// .. and use the rbsp provided (or allocated above) for the data
bitstream->streamBuffer = rbsp;
bitstream->bits_to_go = 8;
{
char sei_message[500] = "";
char uuid_message[9] = "RandomMSG"; // This is supposed to be Random
unsigned int i, message_size = strlen(params->SEIMessageText);
struct TIMEB tstruct;
ftime( &tstruct); // start time
if (message_size == 0)
{
message_size = 13;
strncpy(sei_message,"Empty Message",message_size);
}
else
strncpy(sei_message,params->SEIMessageText,message_size);
len+=u_v (8,"SEI: last_payload_type_byte", 5, bitstream);
message_size += 17;
while (message_size > 254)
{
len+=u_v (8,"SEI: ff_byte",255, bitstream);
message_size -= 255;
}
len+=u_v (8,"SEI: last_payload_size_byte",message_size, bitstream);
// Lets randomize uuid based on time
len+=u_v (32,"SEI: uuid_iso_iec_11578",(int) tstruct.timezone, bitstream);
len+=u_v (32,"SEI: uuid_iso_iec_11578",(int) tstruct.time*1000+tstruct.millitm, bitstream);
len+=u_v (32,"SEI: uuid_iso_iec_11578",(int) (uuid_message[0] << 24) + (uuid_message[1] << 16) + (uuid_message[2] << 8) + (uuid_message[3] << 0), bitstream);
len+=u_v (32,"SEI: uuid_iso_iec_11578",(int) (uuid_message[4] << 24) + (uuid_message[5] << 16) + (uuid_message[6] << 8) + (uuid_message[7] << 0), bitstream);
for (i = 0; i < strlen(sei_message); i++)
len+=u_v (8,"SEI: user_data_payload_byte",sei_message[i], bitstream);
len+=u_v (8,"SEI: user_data_payload_byte", 0, bitstream);
}
SODBtoRBSP(bitstream); // copies the last couple of bits into the byte buffer
LenInBytes=bitstream->byte_pos;
free(bitstream);
return LenInBytes;
}
/*!
*************************************************************************************
* \brief
* int WriteHRDParameters((seq_parameter_set_rbsp_t *sps, Bitstream *bitstream)
*
*
* \return
* size of the RBSP in bytes, negative in case of an error
*
* \note
*************************************************************************************
*/
int WriteHRDParameters(seq_parameter_set_rbsp_t *sps, Bitstream *bitstream)
{
// hrd_parameters()
int len = 0;
unsigned int SchedSelIdx = 0;
hrd_parameters_t *hrd = &(sps->vui_seq_parameters.nal_hrd_parameters);
len+=ue_v ("VUI: cpb_cnt_minus1", hrd->cpb_cnt_minus1, bitstream);
len+=u_v (4, "VUI: bit_rate_scale", hrd->bit_rate_scale, bitstream);
len+=u_v (4, "VUI: cpb_size_scale", hrd->cpb_size_scale, bitstream);
for( SchedSelIdx = 0; SchedSelIdx <= (hrd->cpb_cnt_minus1); SchedSelIdx++ )
{
len+=ue_v ("VUI: bit_rate_value_minus1", hrd->bit_rate_value_minus1[SchedSelIdx], bitstream);
len+=ue_v ("VUI: cpb_size_value_minus1", hrd->cpb_size_value_minus1[SchedSelIdx], bitstream);
len+=u_1 ("VUI: cbr_flag", hrd->cbr_flag[SchedSelIdx], bitstream);
}
len+=u_v (5, "VUI: initial_cpb_removal_delay_length_minus1", hrd->initial_cpb_removal_delay_length_minus1, bitstream);
len+=u_v (5, "VUI: cpb_removal_delay_length_minus1", hrd->cpb_removal_delay_length_minus1, bitstream);
len+=u_v (5, "VUI: dpb_output_delay_length_minus1", hrd->dpb_output_delay_length_minus1, bitstream);
len+=u_v (5, "VUI: time_offset_length", hrd->time_offset_length, bitstream);
return len;
}
/*!
*************************************************************************************
* \brief
* void GenerateVUIParameters(seq_parameter_set_rbsp_t *sps)
*
*
* \return
* none
*
* \note
*************************************************************************************
*/
void GenerateVUIParameters(seq_parameter_set_rbsp_t *sps)
{
unsigned int SchedSelIdx;
hrd_parameters_t *nal_hrd = &(sps->vui_seq_parameters.nal_hrd_parameters);
hrd_parameters_t *vcl_hrd = &(sps->vui_seq_parameters.vcl_hrd_parameters);
vui_seq_parameters_t *vui = &(sps->vui_seq_parameters);
VUIParameters *iVui = ¶ms->VUI;
vui->aspect_ratio_info_present_flag = (Boolean) iVui->aspect_ratio_info_present_flag;
vui->aspect_ratio_idc = (unsigned int) iVui->aspect_ratio_idc;
vui->sar_width = (unsigned int) iVui->sar_width;
vui->sar_height = (unsigned int) iVui->sar_height;
vui->overscan_info_present_flag = (Boolean) iVui->overscan_info_present_flag;
vui->overscan_appropriate_flag = (Boolean) iVui->overscan_appropriate_flag;
vui->video_signal_type_present_flag = (Boolean) iVui->video_signal_type_present_flag;
vui->video_format = (unsigned int) iVui->video_format;
vui->video_full_range_flag = (Boolean) iVui->video_full_range_flag;
vui->colour_description_present_flag = (Boolean) iVui->colour_description_present_flag;
vui->colour_primaries = (unsigned int) iVui->colour_primaries;
vui->transfer_characteristics = (unsigned int) iVui->transfer_characteristics;
vui->matrix_coefficients = (unsigned int) iVui->matrix_coefficients;
vui->chroma_location_info_present_flag = (Boolean) iVui->chroma_location_info_present_flag;
vui->chroma_sample_loc_type_top_field = (unsigned int) iVui->chroma_sample_loc_type_top_field;
vui->chroma_sample_loc_type_bottom_field = (unsigned int) iVui->chroma_sample_loc_type_bottom_field;
vui->timing_info_present_flag = (Boolean) iVui->timing_info_present_flag;
vui->num_units_in_tick = (unsigned int) iVui->num_units_in_tick;
vui->time_scale = (unsigned int) iVui->time_scale;
vui->fixed_frame_rate_flag = (Boolean) iVui->fixed_frame_rate_flag;
// NAL HRD parameters
vui->nal_hrd_parameters_present_flag = (Boolean) iVui->nal_hrd_parameters_present_flag;
nal_hrd->cpb_cnt_minus1 = (unsigned int) iVui->nal_cpb_cnt_minus1;
nal_hrd->bit_rate_scale = (unsigned int) iVui->nal_bit_rate_scale;
nal_hrd->cpb_size_scale = (unsigned int) iVui->nal_cpb_size_scale;
for ( SchedSelIdx = 0; SchedSelIdx <= nal_hrd->cpb_cnt_minus1; SchedSelIdx++ )
{
nal_hrd->bit_rate_value_minus1[SchedSelIdx] = (unsigned int) iVui->nal_bit_rate_value_minus1;
nal_hrd->cpb_size_value_minus1[SchedSelIdx] = (unsigned int) iVui->nal_cpb_size_value_minus1;
nal_hrd->cbr_flag[SchedSelIdx] = (unsigned int) iVui->nal_vbr_cbr_flag;
}
nal_hrd->initial_cpb_removal_delay_length_minus1 = (unsigned int) iVui->nal_initial_cpb_removal_delay_length_minus1;
nal_hrd->cpb_removal_delay_length_minus1 = (unsigned int) iVui->nal_cpb_removal_delay_length_minus1;
nal_hrd->dpb_output_delay_length_minus1 = (unsigned int) iVui->nal_dpb_output_delay_length_minus1;
nal_hrd->time_offset_length = (unsigned int) iVui->nal_time_offset_length;
// VCL HRD parameters
vui->vcl_hrd_parameters_present_flag = (Boolean) iVui->vcl_hrd_parameters_present_flag;
vcl_hrd->cpb_cnt_minus1 = (unsigned int) iVui->vcl_cpb_cnt_minus1;
vcl_hrd->bit_rate_scale = (unsigned int) iVui->vcl_bit_rate_scale;
vcl_hrd->cpb_size_scale = (unsigned int) iVui->vcl_cpb_size_scale;
for ( SchedSelIdx = 0; SchedSelIdx <= vcl_hrd->cpb_cnt_minus1; SchedSelIdx++ )
{
vcl_hrd->bit_rate_value_minus1[SchedSelIdx] = (unsigned int) iVui->vcl_bit_rate_value_minus1;
vcl_hrd->cpb_size_value_minus1[SchedSelIdx] = (unsigned int) iVui->vcl_cpb_size_value_minus1;
vcl_hrd->cbr_flag[SchedSelIdx] = (unsigned int) iVui->vcl_vbr_cbr_flag;
}
vcl_hrd->initial_cpb_removal_delay_length_minus1 = (unsigned int) iVui->vcl_initial_cpb_removal_delay_length_minus1;
vcl_hrd->cpb_removal_delay_length_minus1 = (unsigned int) iVui->vcl_cpb_removal_delay_length_minus1;
vcl_hrd->dpb_output_delay_length_minus1 = (unsigned int) iVui->vcl_dpb_output_delay_length_minus1;
vcl_hrd->time_offset_length = (unsigned int) iVui->vcl_time_offset_length;
vui->low_delay_hrd_flag = (Boolean) iVui->low_delay_hrd_flag;
vui->pic_struct_present_flag = (Boolean) iVui->pic_struct_present_flag;
vui->bitstream_restriction_flag = (Boolean) iVui->bitstream_restriction_flag;
vui->motion_vectors_over_pic_boundaries_flag = (Boolean) iVui->motion_vectors_over_pic_boundaries_flag;
vui->max_bytes_per_pic_denom = (unsigned int) iVui->max_bytes_per_pic_denom;
vui->max_bits_per_mb_denom = (unsigned int) iVui->max_bits_per_mb_denom;
vui->log2_max_mv_length_horizontal = (unsigned int) iVui->log2_max_mv_length_horizontal;
vui->log2_max_mv_length_vertical = (unsigned int) iVui->log2_max_mv_length_vertical;
vui->num_reorder_frames = (unsigned int) iVui->num_reorder_frames;
vui->max_dec_frame_buffering = (unsigned int) iVui->max_dec_frame_buffering;
// special case to signal the RGB format
if(params->rgb_input_flag && params->yuv_format==3)
{
printf ("VUI: writing Sequence Parameter VUI to signal RGB format\n");
vui->aspect_ratio_info_present_flag = FALSE;
vui->overscan_info_present_flag = FALSE;
vui->video_signal_type_present_flag = TRUE;
vui->video_format = 2;
vui->video_full_range_flag = TRUE;
vui->colour_description_present_flag = TRUE;
vui->colour_primaries = 2;
vui->transfer_characteristics = 2;
vui->matrix_coefficients = 0;
vui->chroma_location_info_present_flag = FALSE;
vui->timing_info_present_flag = FALSE;
vui->nal_hrd_parameters_present_flag = FALSE;
vui->vcl_hrd_parameters_present_flag = FALSE;
vui->pic_struct_present_flag = FALSE;
vui->bitstream_restriction_flag = FALSE;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -