view libtwamr/bits2prm.c @ 605:63f774192906

gsmhr_decoder_twts002_in(): set BFI=1 SID=1 for invalid SID When a received TW-TS-002 RTP payload indicates invalid SID, which of the 3 possible BFI/SID combinations should we pass to our internal ETSI-based speech decoder or TFO engine? Our original code passed BFI=0 SID=1, but upon further reflection, BFI=1 SID=1 is a better choice. In the corner case where received invalid SID is fed to a full decoder in homed state, setting BFI=1 allows that decoder to emit zeros on PCM and stay homed, instead of launching into full decoding.
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 04 Dec 2025 21:01:46 +0000
parents f931e704adc5
children
line wrap: on
line source

/*
 * A cleaner reimplementation of AMR Bits2prm() function.
 */

#include "typedef.h"
#include "namespace.h"
#include "bitno.h"
#include "bits2prm.h"

void Bits2prm(enum Mode mode, const Word16 bits[], Word16 prm[])
{
	const Word16 *p = bits;
	const Word16 *t = bitno[mode];
	unsigned nparam = prmno[mode];
	unsigned n, m, acc;

	for (n = 0; n < nparam; n++) {
		acc = 0;
		for (m = 0; m < *t; m++) {
			acc <<= 1;
			if (*p)
				acc |= 1;
			p++;
		}
		prm[n] = acc;
		t++;
	}
}