falconia submitted this change.
rtp2trau_hr16: use osmo_hr_check_sid()
The code in libosmotrau previously used its own local function
to check incoming 112-bit HRv1 frames against the possibility of
perfect SID (all 79 bits of SID field set to 1). However, there is
a public API function in libosmocodec that does the exact same job
- use the common library function.
Until recently, the implementation of osmo_hr_check_sid() in
libosmocodec was quite inefficient (the local version in libosmotrau
was faster) and contained a logic error in the handling of zero-length
input in the place of a received frame. However, both of these
defects in osmo_hr_check_sid() have now been fixed in libosmocore,
clearing the way for this common library function to be used.
Depends: Ib14204102c03c14d6c5aab42b0ffbef2c3dda3fd (libosmocore)
Change-Id: Ia8fe7e9ea65fadf7f5c136355ca8c24c89f09ef2
---
M TODO-RELEASE
M src/trau/trau_rtp_conv.c
2 files changed, 26 insertions(+), 19 deletions(-)
diff --git a/TODO-RELEASE b/TODO-RELEASE
index e3ad20a..515adef 100644
--- a/TODO-RELEASE
+++ b/TODO-RELEASE
@@ -9,3 +9,4 @@
#library what description / commit summary line
libosmotrau struct osmo_trau2rtp_state extended (ABI break)
libosmogsm >1.9.0 rtp_extensions.h new header
+libosmocodec >1.9.0 bugfix in osmo_hr_check_sid() in case length=0
diff --git a/src/trau/trau_rtp_conv.c b/src/trau/trau_rtp_conv.c
index 15d5a08..f347cca 100644
--- a/src/trau/trau_rtp_conv.c
+++ b/src/trau/trau_rtp_conv.c
@@ -162,8 +162,6 @@
FT_NO_DATA = 7,
};
-static const uint8_t rtp_hr_sid[14] = { 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
-
static void twtw002_hr16_set_extra_flags(uint8_t *out, const struct osmo_trau_frame *tf)
{
if (tf->c_bits[16]) /* DTXd */
@@ -446,21 +444,6 @@
return 0;
}
-/* does the RTP HR payload resemble a SID frame or not */
-static bool is_rtp_hr_sid(const uint8_t *data, const uint8_t data_len)
-{
- int i;
-
- if (data_len < GSM_HR_BYTES)
- return false;
-
- for (i = 0; i < GSM_HR_BYTES; i++) {
- if ((data[i] & rtp_hr_sid[i]) != rtp_hr_sid[i])
- return false;
- }
- return true;
-}
-
static int rtp2trau_hr16(struct osmo_trau_frame *tf, const uint8_t *data, size_t data_len)
{
/* accept both TS 101 318 and RFC 5993 payloads */
@@ -503,7 +486,7 @@
tf->c_bits[11] = 1;
else
tf->c_bits[11] = 0;
- if (is_rtp_hr_sid(data, data_len)) {
+ if (osmo_hr_check_sid(data, data_len)) {
/* SID=2 is a valid SID frame */
tf->c_bits[12] = 1;
tf->c_bits[13] = 0;
@@ -519,7 +502,7 @@
tf->c_bits[12] = 1; /* C13: spare */
tf->c_bits[13] = 1; /* C14: spare */
tf->c_bits[14] = 1; /* C15: spare */
- if (is_rtp_hr_sid(data, data_len))
+ if (osmo_hr_check_sid(data, data_len))
tf->c_bits[15] = 0; /* C16: SP */
else
tf->c_bits[15] = 1; /* C16: SP */
To view, visit change 37250. To unsubscribe, or for help writing mail filters, visit settings.