falconia has uploaded this change for review.
trau_frame: fix de/encoding of TRAU-AMR-8k-6k7 format
There exist 3 TRAU frame types (distinguished by sync pattern) for
AMR on 8 kbit/s subslots: Low, 6k7 and 7k4. osmo_trau_frame_encode()
and osmo_trau_frame_decode_8k() APIs support all 3 TRAU-AMR-8k frame
types since the original 2020 implementation - however, encoding and
decoding of 6k7 format was incorrect. Fix it.
Correctness of the new implementation is verified by unit tests
added with the next patch in this series.
Change-Id: Ibb98b0c189ced5248dca217384ca34b6a5f8b210
---
M src/trau/trau_frame.c
1 file changed, 11 insertions(+), 11 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/78/41478/1
diff --git a/src/trau/trau_frame.c b/src/trau/trau_frame.c
index 896bc20..d8541c5 100644
--- a/src/trau/trau_frame.c
+++ b/src/trau/trau_frame.c
@@ -1045,15 +1045,15 @@
/* D8 .. D11 */
memcpy(fr->d_bits + d_idx, trau_bits + 2 * 8 + 4, 4);
d_idx += 4;
- /* D12 .. D39 */
- for (i = 3; i < 7; i++) {
+ /* D12 .. D32 */
+ for (i = 3; i < 6; i++) {
int offset = i * 8;
- memcpy(fr->d_bits + d_idx, trau_bits + offset + 2, 7);
+ memcpy(fr->d_bits + d_idx, trau_bits + offset + 1, 7);
d_idx += 7;
}
- /* D40 .. D137 */
- for (i = 7; i < 20; i+= 2) {
+ /* D33 .. D137 */
+ for (i = 6; i < 20; i += 2) {
int offset = i * 8;
memcpy(fr->d_bits + d_idx, trau_bits + offset + 1, 15);
d_idx += 15;
@@ -1074,7 +1074,7 @@
trau_bits[3 * 8] = 1;
trau_bits[4 * 8] = 1;
trau_bits[5 * 8] = 0;
- for (i = 5; i < 20; i += 2)
+ for (i = 6; i < 20; i += 2)
trau_bits[i * 8] = 1;
/* D1 .. D7 */
@@ -1085,15 +1085,15 @@
/* D8 .. D11 */
memcpy(trau_bits + 2 * 8 + 4, fr->d_bits + d_idx, 4);
d_idx += 4;
- /* D12 .. D39 */
- for (i = 3; i < 7; i++) {
+ /* D12 .. D32 */
+ for (i = 3; i < 6; i++) {
int offset = i * 8;
- memcpy(trau_bits + offset + 2, fr->d_bits + d_idx, 7);
+ memcpy(trau_bits + offset + 1, fr->d_bits + d_idx, 7);
d_idx += 7;
}
- /* D40 .. D137 */
- for (i = 7; i < 20; i+= 2) {
+ /* D33 .. D137 */
+ for (i = 6; i < 20; i += 2) {
int offset = i * 8;
memcpy(trau_bits + offset + 1, fr->d_bits + d_idx, 15);
d_idx += 15;
To view, visit change 41478. To unsubscribe, or for help writing mail filters, visit settings.