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

Function read_sbr_grid

libavcodec/aacsbr.c:609–749  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

607};
608
609static int read_sbr_grid(AACContext *ac, SpectralBandReplication *sbr,
610 GetBitContext *gb, SBRData *ch_data)
611{
612 int i;
613 unsigned bs_pointer = 0;
614 // frameLengthFlag ? 15 : 16; 960 sample length frames unsupported; this value is numTimeSlots
615 int abs_bord_trail = 16;
616 int num_rel_lead, num_rel_trail;
617 unsigned bs_num_env_old = ch_data->bs_num_env;
618
619 ch_data->bs_freq_res[0] = ch_data->bs_freq_res[ch_data->bs_num_env];
620 ch_data->bs_amp_res = sbr->bs_amp_res_header;
621 ch_data->t_env_num_env_old = ch_data->t_env[bs_num_env_old];
622
623 switch (ch_data->bs_frame_class = get_bits(gb, 2)) {
624 case FIXFIX:
625 ch_data->bs_num_env = 1 << get_bits(gb, 2);
626 num_rel_lead = ch_data->bs_num_env - 1;
627 if (ch_data->bs_num_env == 1)
628 ch_data->bs_amp_res = 0;
629
630 if (ch_data->bs_num_env > 4) {
631 av_log(ac->avctx, AV_LOG_ERROR,
632 "Invalid bitstream, too many SBR envelopes in FIXFIX type SBR frame: %d\n",
633 ch_data->bs_num_env);
634 return -1;
635 }
636
637 ch_data->t_env[0] = 0;
638 ch_data->t_env[ch_data->bs_num_env] = abs_bord_trail;
639
640 abs_bord_trail = (abs_bord_trail + (ch_data->bs_num_env >> 1)) /
641 ch_data->bs_num_env;
642 for (i = 0; i < num_rel_lead; i++)
643 ch_data->t_env[i + 1] = ch_data->t_env[i] + abs_bord_trail;
644
645 ch_data->bs_freq_res[1] = get_bits1(gb);
646 for (i = 1; i < ch_data->bs_num_env; i++)
647 ch_data->bs_freq_res[i + 1] = ch_data->bs_freq_res[1];
648 break;
649 case FIXVAR:
650 abs_bord_trail += get_bits(gb, 2);
651 num_rel_trail = get_bits(gb, 2);
652 ch_data->bs_num_env = num_rel_trail + 1;
653 ch_data->t_env[0] = 0;
654 ch_data->t_env[ch_data->bs_num_env] = abs_bord_trail;
655
656 for (i = 0; i < num_rel_trail; i++)
657 ch_data->t_env[ch_data->bs_num_env - 1 - i] =
658 ch_data->t_env[ch_data->bs_num_env - i] - 2 * get_bits(gb, 2) - 2;
659
660 bs_pointer = get_bits(gb, ceil_log2[ch_data->bs_num_env]);
661
662 for (i = 0; i < ch_data->bs_num_env; i++)
663 ch_data->bs_freq_res[ch_data->bs_num_env - i] = get_bits1(gb);
664 break;
665 case VARFIX:
666 ch_data->t_env[0] = get_bits(gb, 2);

Callers 2

Calls 4

get_bitsFunction · 0.85
av_logFunction · 0.85
get_bits1Function · 0.85
get_bits1_vectorFunction · 0.85

Tested by

no test coverage detected