Attention is currently required from: neels, laforge.
falconia has posted comments on this change. ( https://gerrit.osmocom.org/c/libosmo-abis/+/32078 )
Change subject: osmo_rtp2trau() for FR & EFR: correctly handle the no-data case ......................................................................
Patch Set 1:
(2 comments)
File src/trau/trau_rtp_conv.c:
https://gerrit.osmocom.org/c/libosmo-abis/+/32078/comment/1e7ed5a4_a883df1a PS1, Line 282: } else if (data_len == 0) { : /* C1 .. C5: idle speech */ : tf->c_bits[0] = 0; : tf->c_bits[1] = 1; : tf->c_bits[2] = 1; : tf->c_bits[3] = 1; : tf->c_bits[4] = 0; Please read the rules of TS 48.060, particularly sections 6.5.2 and 6.5.3. Here is a bullet-point summary of these rules:
* In the case of DL, for both FR and EFR, there is no choice: the TRAU must send an idle speech frame, which is distinguished from a regular speech frame by a unique C1..C5 pattern.
* In the case of UL for EFR, the CCU must send a regular EFR speech frame (not idle speech frame) with BFI=1 - once again, no choice given.
* In the case of UL for FR, the CCU has the option of sending either a regular speech frame with BFI=1 or an idle speech frame.
Thus there is only one case where we as implementors get a choice: the case of FR UL. My patch implements the option of sending BFI=1, consistently with EFR when such behaviour is required. So let's decide on this issue first, before arguing over code structure: should we send a speech frame with BFI=1 or an idle speech frame in this case?
Also @laforge wrote:
Basically above where the "FIXME: Generate SID frames?" comment is (which is no longer a FIXME then.
This FIXME is fixed, and that comment removed, in the second patch of the series.
https://gerrit.osmocom.org/c/libosmo-abis/+/32078/comment/b866177b_87816889 PS1, Line 441: if (data_len == 0 && tf->dir == OSMO_TRAU_DIR_DL) {
(wondering as above: why only for DL?)
In the present case (EFR codec) the answer to the "why" question is straightforward: because TS 48.060 section 6.5.3 says so.