Lines Matching refs:bs

184 bitstream_start(bitstream *bs)
186 bs->max_size_in_dword = BITSTREAM_ALLOCATE_STEPPING;
187 bs->buffer = calloc(bs->max_size_in_dword * sizeof(int), 1);
188 bs->bit_offset = 0;
192 bitstream_end(bitstream *bs)
194 int pos = (bs->bit_offset >> 5);
195 int bit_offset = (bs->bit_offset & 0x1f);
199 bs->buffer[pos] = va_swap32((bs->buffer[pos] << bit_left));
204 bitstream_put_ui(bitstream *bs, unsigned int val, int size_in_bits)
206 int pos = (bs->bit_offset >> 5);
207 int bit_offset = (bs->bit_offset & 0x1f);
213 bs->bit_offset += size_in_bits;
216 bs->buffer[pos] = (bs->buffer[pos] << size_in_bits | val);
219 bs->buffer[pos] = (bs->buffer[pos] << bit_left) | (val >> size_in_bits);
220 bs->buffer[pos] = va_swap32(bs->buffer[pos]);
222 if (pos + 1 == bs->max_size_in_dword) {
223 bs->max_size_in_dword += BITSTREAM_ALLOCATE_STEPPING;
224 bs->buffer = realloc(bs->buffer, bs->max_size_in_dword * sizeof(unsigned int));
227 bs->buffer[pos + 1] = val;
232 bitstream_put_ue(bitstream *bs, unsigned int val)
242 bitstream_put_ui(bs, 0, size_in_bits - 1); // leading zero
243 bitstream_put_ui(bs, val, size_in_bits);
247 bitstream_put_se(bitstream *bs, int val)
256 bitstream_put_ue(bs, new_val);
260 bitstream_byte_aligning(bitstream *bs, int bit)
262 int bit_offset = (bs->bit_offset & 0x7);
276 bitstream_put_ui(bs, new_val, bit_left);
280 rbsp_trailing_bits(bitstream *bs)
282 bitstream_put_ui(bs, 1, 1);
283 bitstream_byte_aligning(bs, 0);
286 static void nal_start_code_prefix(bitstream *bs)
288 bitstream_put_ui(bs, 0x00000001, 32);
291 static void nal_header(bitstream *bs, int nal_ref_idc, int nal_unit_type)
293 bitstream_put_ui(bs, 0, 1); /* forbidden_zero_bit: 0 */
294 bitstream_put_ui(bs, nal_ref_idc, 2);
295 bitstream_put_ui(bs, nal_unit_type, 5);
298 static void sps_rbsp(bitstream *bs)
307 bitstream_put_ui(bs, profile_idc, 8); /* profile_idc */
308 bitstream_put_ui(bs, !!(constraint_set_flag & 1), 1); /* constraint_set0_flag */
309 bitstream_put_ui(bs, !!(constraint_set_flag & 2), 1); /* constraint_set1_flag */
310 bitstream_put_ui(bs, !!(constraint_set_flag & 4), 1); /* constraint_set2_flag */
311 bitstream_put_ui(bs, !!(constraint_set_flag & 8), 1); /* constraint_set3_flag */
312 bitstream_put_ui(bs, 0, 4); /* reserved_zero_4bits */
313 bitstream_put_ui(bs, seq_param.level_idc, 8); /* level_idc */
314 bitstream_put_ue(bs, seq_param.seq_parameter_set_id); /* seq_parameter_set_id */
317 bitstream_put_ue(bs, 1); /* chroma_format_idc = 1, 4:2:0 */
318 bitstream_put_ue(bs, 0); /* bit_depth_luma_minus8 */
319 bitstream_put_ue(bs, 0); /* bit_depth_chroma_minus8 */
320 bitstream_put_ui(bs, 0, 1); /* qpprime_y_zero_transform_bypass_flag */
321 bitstream_put_ui(bs, 0, 1); /* seq_scaling_matrix_present_flag */
324 bitstream_put_ue(bs, seq_param.seq_fields.bits.log2_max_frame_num_minus4); /* log2_max_frame_num_minus4 */
325 bitstream_put_ue(bs, seq_param.seq_fields.bits.pic_order_cnt_type); /* pic_order_cnt_type */
328 bitstream_put_ue(bs, seq_param.seq_fields.bits.log2_max_pic_order_cnt_lsb_minus4); /* log2_max_pic_order_cnt_lsb_minus4 */
333 bitstream_put_ue(bs, seq_param.max_num_ref_frames); /* num_ref_frames */
334 bitstream_put_ui(bs, 0, 1); /* gaps_in_frame_num_value_allowed_flag */
336 bitstream_put_ue(bs, seq_param.picture_width_in_mbs - 1); /* pic_width_in_mbs_minus1 */
337 bitstream_put_ue(bs, seq_param.picture_height_in_mbs - 1); /* pic_height_in_map_units_minus1 */
338 bitstream_put_ui(bs, seq_param.seq_fields.bits.frame_mbs_only_flag, 1); /* frame_mbs_only_flag */
344 bitstream_put_ui(bs, seq_param.seq_fields.bits.direct_8x8_inference_flag, 1); /* direct_8x8_inference_flag */
345 bitstream_put_ui(bs, seq_param.frame_cropping_flag, 1); /* frame_cropping_flag */
348 bitstream_put_ue(bs, seq_param.frame_crop_left_offset); /* frame_crop_left_offset */
349 bitstream_put_ue(bs, seq_param.frame_crop_right_offset); /* frame_crop_right_offset */
350 bitstream_put_ue(bs, seq_param.frame_crop_top_offset); /* frame_crop_top_offset */
351 bitstream_put_ue(bs, seq_param.frame_crop_bottom_offset); /* frame_crop_bottom_offset */
356 bitstream_put_ui(bs, 0, 1); /* vui_parameters_present_flag */
358 bitstream_put_ui(bs, 1, 1); /* vui_parameters_present_flag */
359 bitstream_put_ui(bs, 0, 1); /* aspect_ratio_info_present_flag */
360 bitstream_put_ui(bs, 0, 1); /* overscan_info_present_flag */
361 bitstream_put_ui(bs, 0, 1); /* video_signal_type_present_flag */
362 bitstream_put_ui(bs, 0, 1); /* chroma_loc_info_present_flag */
363 bitstream_put_ui(bs, 1, 1); /* timing_info_present_flag */
365 bitstream_put_ui(bs, 15, 32);
366 bitstream_put_ui(bs, 900, 32);
367 bitstream_put_ui(bs, 1, 1);
369 bitstream_put_ui(bs, 1, 1); /* nal_hrd_parameters_present_flag */
372 bitstream_put_ue(bs, 0); /* cpb_cnt_minus1 */
373 bitstream_put_ui(bs, 4, 4); /* bit_rate_scale */
374 bitstream_put_ui(bs, 6, 4); /* cpb_size_scale */
376 bitstream_put_ue(bs, frame_bitrate - 1); /* bit_rate_value_minus1[0] */
377 bitstream_put_ue(bs, frame_bitrate*8 - 1); /* cpb_size_value_minus1[0] */
378 bitstream_put_ui(bs, 1, 1); /* cbr_flag[0] */
380 bitstream_put_ui(bs, 23, 5); /* initial_cpb_removal_delay_length_minus1 */
381 bitstream_put_ui(bs, 23, 5); /* cpb_removal_delay_length_minus1 */
382 bitstream_put_ui(bs, 23, 5); /* dpb_output_delay_length_minus1 */
383 bitstream_put_ui(bs, 23, 5); /* time_offset_length */
385 bitstream_put_ui(bs, 0, 1); /* vcl_hrd_parameters_present_flag */
386 bitstream_put_ui(bs, 0, 1); /* low_delay_hrd_flag */
388 bitstream_put_ui(bs, 0, 1); /* pic_struct_present_flag */
389 bitstream_put_ui(bs, 0, 1); /* bitstream_restriction_flag */
392 rbsp_trailing_bits(bs); /* rbsp_trailing_bits */
396 static void pps_rbsp(bitstream *bs)
398 bitstream_put_ue(bs, pic_param.pic_parameter_set_id); /* pic_parameter_set_id */
399 bitstream_put_ue(bs, pic_param.seq_parameter_set_id); /* seq_parameter_set_id */
401 bitstream_put_ui(bs, pic_param.pic_fields.bits.entropy_coding_mode_flag, 1); /* entropy_coding_mode_flag */
403 bitstream_put_ui(bs, 0, 1); /* pic_order_present_flag: 0 */
405 bitstream_put_ue(bs, 0); /* num_slice_groups_minus1 */
407 bitstream_put_ue(bs, pic_param.num_ref_idx_l0_active_minus1); /* num_ref_idx_l0_active_minus1 */
408 bitstream_put_ue(bs, pic_param.num_ref_idx_l1_active_minus1); /* num_ref_idx_l1_active_minus1 1 */
410 bitstream_put_ui(bs, pic_param.pic_fields.bits.weighted_pred_flag, 1); /* weighted_pred_flag: 0 */
411 bitstream_put_ui(bs, pic_param.pic_fields.bits.weighted_bipred_idc, 2); /* weighted_bipred_idc: 0 */
413 bitstream_put_se(bs, pic_param.pic_init_qp - 26); /* pic_init_qp_minus26 */
414 bitstream_put_se(bs, 0); /* pic_init_qs_minus26 */
415 bitstream_put_se(bs, 0); /* chroma_qp_index_offset */
417 bitstream_put_ui(bs, pic_param.pic_fields.bits.deblocking_filter_control_present_flag, 1); /* deblocking_filter_control_present_flag */
418 bitstream_put_ui(bs, 0, 1); /* constrained_intra_pred_flag */
419 bitstream_put_ui(bs, 0, 1); /* redundant_pic_cnt_present_flag */
422 bitstream_put_ui(bs, pic_param.pic_fields.bits.transform_8x8_mode_flag, 1); /*transform_8x8_mode_flag */
423 bitstream_put_ui(bs, 0, 1); /* pic_scaling_matrix_present_flag */
424 bitstream_put_se(bs, pic_param.second_chroma_qp_index_offset ); /*second_chroma_qp_index_offset */
426 rbsp_trailing_bits(bs);
433 bitstream bs;
435 bitstream_start(&bs);
436 nal_start_code_prefix(&bs);
437 nal_header(&bs, NAL_REF_IDC_HIGH, NAL_PPS);
438 pps_rbsp(&bs);
439 bitstream_end(&bs);
441 *header_buffer = (unsigned char *)bs.buffer;
442 return bs.bit_offset;
448 bitstream bs;
450 bitstream_start(&bs);
451 nal_start_code_prefix(&bs);
452 nal_header(&bs, NAL_REF_IDC_HIGH, NAL_SPS);
453 sps_rbsp(&bs);
454 bitstream_end(&bs);
456 *header_buffer = (unsigned char *)bs.buffer;
457 return bs.bit_offset;