MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / parse_rps

Function parse_rps

libavformat/hevc.c:561–626  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

559}
560
561static int parse_rps(GetBitContext *gb, unsigned int rps_idx,
562 unsigned int num_rps,
563 unsigned int num_delta_pocs[HEVC_MAX_SHORT_TERM_REF_PIC_SETS])
564{
565 unsigned int i;
566
567 if (rps_idx && get_bits1(gb)) { // inter_ref_pic_set_prediction_flag
568 /* this should only happen for slice headers, and this isn't one */
569 if (rps_idx >= num_rps)
570 return AVERROR_INVALIDDATA;
571
572 skip_bits1 (gb); // delta_rps_sign
573 get_ue_golomb_long(gb); // abs_delta_rps_minus1
574
575 num_delta_pocs[rps_idx] = 0;
576
577 /*
578 * From libavcodec/hevc_ps.c:
579 *
580 * if (is_slice_header) {
581 * //foo
582 * } else
583 * rps_ridx = &sps->st_rps[rps - sps->st_rps - 1];
584 *
585 * where:
586 * rps: &sps->st_rps[rps_idx]
587 * sps->st_rps: &sps->st_rps[0]
588 * is_slice_header: rps_idx == num_rps
589 *
590 * thus:
591 * if (num_rps != rps_idx)
592 * rps_ridx = &sps->st_rps[rps_idx - 1];
593 *
594 * NumDeltaPocs[RefRpsIdx]: num_delta_pocs[rps_idx - 1]
595 */
596 for (i = 0; i <= num_delta_pocs[rps_idx - 1]; i++) {
597 uint8_t use_delta_flag = 0;
598 uint8_t used_by_curr_pic_flag = get_bits1(gb);
599 if (!used_by_curr_pic_flag)
600 use_delta_flag = get_bits1(gb);
601
602 if (used_by_curr_pic_flag || use_delta_flag)
603 num_delta_pocs[rps_idx]++;
604 }
605 } else {
606 unsigned int num_negative_pics = get_ue_golomb_long(gb);
607 unsigned int num_positive_pics = get_ue_golomb_long(gb);
608
609 if ((num_positive_pics + (uint64_t)num_negative_pics) * 2 > get_bits_left(gb))
610 return AVERROR_INVALIDDATA;
611
612 num_delta_pocs[rps_idx] = num_negative_pics + num_positive_pics;
613
614 for (i = 0; i < num_negative_pics; i++) {
615 get_ue_golomb_long(gb); // delta_poc_s0_minus1[rps_idx]
616 skip_bits1 (gb); // used_by_curr_pic_s0_flag[rps_idx]
617 }
618

Callers 1

hvcc_parse_spsFunction · 0.85

Calls 4

get_bits1Function · 0.85
skip_bits1Function · 0.85
get_ue_golomb_longFunction · 0.85
get_bits_leftFunction · 0.85

Tested by

no test coverage detected