osmux: Generate AMR OA payload paddings bits as 0

Some AMR format's payload size doesn't necessarily fit octet boundaries.
When AMR octet-aligned is used, padding bits are appended at the end to
fill the octet.
Until this patch, the padding bits where set with whatever payload fill
pattern was provided. Instead of doing so, better set the padding bits
to 0 to avoid conflicts when checking the received paytload later on,
since those bits are potentially be going to be set to 0 (eg when
converting to bandwidth-efficient).

Related: SYS#6161
Change-Id: I5bc68eb05c2f5500a259f4c73d14b51794f7f078
This commit is contained in:
Pau Espin 2022-10-25 12:30:58 +02:00
parent 389d7e061f
commit 30f0667a4d
2 changed files with 17 additions and 3 deletions

View File

@ -33,7 +33,13 @@ type enumerated AMRFT {
const integer c_AMRFT_len[9] := {12, 13, 15, 17, 19, 20, 26, 31, 5};
function f_amrft_payload_len(INT4b amr_ft) return integer {
return c_AMRFT_len[amr_ft];
return c_AMRFT_len[amr_ft];
}
const integer c_AMRFT_bits_len[9] := {95, 103, 118, 134, 148, 159, 204, 244, 39};
function f_amrft_payload_bits_len(INT4b amr_ft) return integer {
return c_AMRFT_bits_len[amr_ft];
}
type record RTP_AMR_Hdr {

View File

@ -374,12 +374,20 @@ private function f_txhandle_cid_add(OsmuxTxHandle hdl) runs on OSMUX_Emulation_C
log2str("No Space in TxHandleList for ", hdl.cid));
}
/* Generate correctly-sized AMR payload based on amr_ft, using tx_fixed_payload as a fill pattern. */
function f_osmux_gen_expected_rx_rtp_payload(INT4b amr_ft, octetstring tx_fixed_payload) return octetstring {
var integer payload_len_bits;
var integer payload_len;
var bitstring payload_truncated_bits;
var octetstring payload_truncated;
var integer i;
/* Generate the AMR payload as a bitstring, since some formats don't end up in octet boundary: */
payload_len_bits := f_amrft_payload_bits_len(amr_ft);
payload_truncated_bits := substr(oct2bit(tx_fixed_payload), 0, payload_len_bits);
/* Now convert it as an octet string filling final padding with zeroes: */
payload_len := f_amrft_payload_len(amr_ft);
payload_truncated := substr(tx_fixed_payload, 0, payload_len);
payload_truncated := bit2oct(f_pad_bit(payload_truncated_bits, payload_len*8, '0'B));
return payload_truncated;
}