summaryrefslogtreecommitdiff
path: root/system/embdrv/lc3_dec/Decoder/SideInformation.cpp
diff options
context:
space:
mode:
authorScott Lobdell <slobdell@google.com>2022-03-11 19:27:17 +0000
committerScott Lobdell <slobdell@google.com>2022-03-11 19:57:09 +0000
commitc9218ef1b82430a07d94f74c212a30e7ccc52975 (patch)
tree241b7fdeb6bdf1cf3af925ba8996f18faa8973d9 /system/embdrv/lc3_dec/Decoder/SideInformation.cpp
parenta26bda4d37221f2f7ef750b413502091e3bcddd4 (diff)
parent480d2270b269a0e47bf475eb439111f3f966e2a9 (diff)
Merge TP1A.220225.003
Change-Id: Id71ac466dbfe3707fe2e544ce22b1da8f474ec2b
Diffstat (limited to 'system/embdrv/lc3_dec/Decoder/SideInformation.cpp')
-rw-r--r--system/embdrv/lc3_dec/Decoder/SideInformation.cpp199
1 files changed, 0 insertions, 199 deletions
diff --git a/system/embdrv/lc3_dec/Decoder/SideInformation.cpp b/system/embdrv/lc3_dec/Decoder/SideInformation.cpp
deleted file mode 100644
index 4516aabf60..0000000000
--- a/system/embdrv/lc3_dec/Decoder/SideInformation.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * SideInformation.cpp
- *
- * Copyright 2021 HIMSA II K/S - www.himsa.com. Represented by EHIMA -
- * www.ehima.com
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "SideInformation.hpp"
-
-#include <cmath>
-
-#include "BitReader.hpp"
-
-namespace Lc3Dec {
-
-static const uint8_t nbits_bw_table[5] = {
- 0, 1, 2, 2, 3}; // see 3.4.2.4 Bandwidth interpretation (d09r02_F2F)
-
-SideInformation::SideInformation(uint16_t NF_, uint16_t NE_, uint8_t fs_ind_)
- : NF(NF_),
- NE(NE_),
- fs_ind(fs_ind_),
- nbits_bw(nbits_bw_table[fs_ind]),
- submodeMSB(0),
- submodeLSB(0) {}
-
-SideInformation::~SideInformation() {}
-
-void SideInformation::dec_split_st2VQ_CW(uint32_t cwRx, uint32_t szA,
- uint32_t szB, uint8_t& BEC_detect,
- int16_t& submodeLSB, int32_t& idxA,
- int32_t& idxBorGainLSB) {
- if (cwRx >= szB * szA) {
- idxA = 0;
- idxBorGainLSB = 0;
- submodeLSB = 0;
- BEC_detect = 1;
- return;
- }
- idxBorGainLSB = floor(cwRx / szA);
- idxA = cwRx - idxBorGainLSB * szA;
- submodeLSB = 0;
- idxBorGainLSB = idxBorGainLSB - 2;
- if (idxBorGainLSB < 0) {
- submodeLSB = 1;
- }
-
- idxBorGainLSB = idxBorGainLSB + 2 * submodeLSB;
- // BEC_detect = 0; // changed in comparision to specification -> variable is
- // handles as reference to overall BEC_detect
-}
-
-void SideInformation::run(const uint8_t* bytes, uint16_t& bp_side,
- uint8_t& mask_side, int16_t& P_BW, int16_t& lastnz,
- uint8_t& lsbMode, int16_t& gg_ind,
- int16_t& num_tns_filters, int16_t* rc_order,
- uint8_t& pitch_present, int16_t& pitch_index,
- int16_t& ltpf_active, int16_t& F_NF, int16_t& ind_LF,
- int16_t& ind_HF, int16_t& Gind, int16_t& LS_indA,
- int16_t& LS_indB, int32_t& idxA, int16_t& idxB,
-
- uint8_t& BEC_detect) {
- // 5.4.2.3 Side information
- /* Bandwidth */
- if (nbits_bw > 0) {
- P_BW = read_uint(bytes, &bp_side, &mask_side, nbits_bw);
- if (fs_ind < P_BW) {
- BEC_detect = 1;
- return;
- }
- } else {
- P_BW = 0;
- }
- /* Last non-zero tuple */
- nbits_lastnz = ceil(log2(NE / 2));
- int16_t tmp_lastnz = read_uint(bytes, &bp_side, &mask_side, nbits_lastnz);
- lastnz = (tmp_lastnz + 1) << 1;
- if (lastnz > NE) {
- /* consider this as bit error (BEC) */
- BEC_detect = 1;
- return;
- }
- /* LSB mode bit */
- lsbMode = read_bit(bytes, &bp_side, &mask_side);
- /* Global Gain */
- gg_ind = read_uint(bytes, &bp_side, &mask_side, 8);
- /* TNS activation flag */
- if (P_BW < 3) {
- num_tns_filters = 1;
- } else {
- num_tns_filters = 2;
- }
- rc_order[0] = 0; // not specified, but on the safe side
- rc_order[1] = 0; // not specified, but on the safe side
- for (uint8_t f = 0; f < num_tns_filters; f++) {
- rc_order[f] = read_bit(bytes, &bp_side, &mask_side);
- }
- /* Pitch present flag */
- pitch_present = read_bit(bytes, &bp_side, &mask_side);
- /* SNS-VQ integer bits */
- /* Read 5+5 bits of SNQ VQ decoding stage 1 according to Section 5.4.7.2.1
- * (d09r01) */
- /* Read 5+5 bits of SNQ VQ decoding stage 1 according to Section 3.4.7.2.1
- * (d09r02)(d09r02_F2F) */
- ind_LF = read_uint(bytes, &bp_side, &mask_side, 5); /* stage1 LF */
- ind_HF = read_uint(bytes, &bp_side, &mask_side, 5); /* stage1 HF */
-
- /* Read 28 bits of SNS VQ decoding stage 2 according to section 5.4.7.2.2
- * (d09r01) */
- // 3.4.7.2.2 Stage 2 SNS VQ decoding (d09r02_F2F)
- submodeMSB = read_bit(bytes, &bp_side, &mask_side);
- if (submodeMSB == 0) {
- Gind = read_uint(bytes, &bp_side, &mask_side, 1);
- } else {
- Gind = read_uint(bytes, &bp_side, &mask_side, 2);
- }
- LS_indA = read_bit(bytes, &bp_side, &mask_side); /* LS_indA 1 bit */
- if (submodeMSB == 0) {
- /* ‘regular’/’regular_lf’ demultiplexing, establish if shape_j is 0 or 1 */
- uint32_t tmp = read_uint(bytes, &bp_side, &mask_side, 13);
- tmp |= (read_uint(bytes, &bp_side, &mask_side, 12) << 13);
- int32_t idxBorGainLSB;
- //[ BEC_detect, submodeLSB, idxA, idxBorGainLSB ] = dec_split_st2VQ_CW(tmp,
- // 4780008U>>1, 14 );
- dec_split_st2VQ_CW(tmp, 4780008U >> 1, 14, BEC_detect, submodeLSB, idxA,
- idxBorGainLSB);
- if (BEC_detect) {
- // early exit to avoid unpredictable side-effects
- return;
- }
- if (submodeLSB != 0) {
- Gind = (Gind << 1) + idxBorGainLSB; /* for regular_lf */
- // just set some defined values (although nothing is specified for this
- // case)
- idxB = 0;
- LS_indB = 0;
- } else {
- idxB = idxBorGainLSB >> 1; /* for regular */
- LS_indB = idxBorGainLSB & 0x1;
- }
- } else {
- // Attention: the given reference intermediate results do not cover
- // this case -> tested with conformance tests only! (successful operation
- // observed already)
- /* outlier_* demultiplexing, establish if shape_j is 2 or 3 */
- int32_t tmp = read_uint(bytes, &bp_side, &mask_side, 12);
- tmp |=
- static_cast<int32_t>(read_uint(bytes, &bp_side, &mask_side, 12) << 12);
- idxA = tmp;
- // idxB = -1; // removed in pseudo-code of d09r02_F2F
- submodeLSB = 0;
- // this intialization does not seem to be correct here
- // (just from code reading; context of pseudo-code in specification is not
- // clear)
- // BEC_detect = 0;
- if (tmp >= static_cast<int32_t>((30316544U >> 1) + 1549824U)) {
- BEC_detect = 1;
- return;
- } else {
- tmp -= static_cast<int32_t>(30316544U >> 1);
- if (tmp >= 0) {
- submodeLSB = 1;
- Gind = (Gind << 1) + (tmp & 0x1);
- idxA = tmp >> 1;
- }
- }
- }
-
- /* LTPF data */
- if (pitch_present != 0) {
- ltpf_active = read_uint(bytes, &bp_side, &mask_side, 1);
- pitch_index = read_uint(bytes, &bp_side, &mask_side, 9);
- }
-
- /* Noise Level */
- F_NF = read_uint(bytes, &bp_side, &mask_side, 3);
-}
-
-void SideInformation::registerDatapoints(DatapointContainer* datapoints) {
- if (nullptr != datapoints) {
- datapoints->addDatapoint("nbits_lastnz", &nbits_lastnz,
- sizeof(nbits_lastnz));
- datapoints->addDatapoint("submodeMSB", &submodeMSB, sizeof(submodeMSB));
- }
-}
-
-} // namespace Lc3Dec