<p>Pau Espin Pedrol has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10078">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">tests: codec: ecu_fr: Print XMAXC fields<br><br>This makes it easy to debug how XMAXC fields are decreased every<br>iteration in osmo_ecu_fr_conceal().<br><br>Change-Id: I678d4be5e0b15b05873b0d3bf5ea5bbee7bef839<br>---<br>M tests/codec/codec_ecu_fr_test.c<br>M tests/codec/codec_ecu_fr_test.ok<br>2 files changed, 54 insertions(+), 25 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/78/10078/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/tests/codec/codec_ecu_fr_test.c b/tests/codec/codec_ecu_fr_test.c</span><br><span>index 0fdc489..3a99fc7 100644</span><br><span>--- a/tests/codec/codec_ecu_fr_test.c</span><br><span>+++ b/tests/codec/codec_ecu_fr_test.c</span><br><span>@@ -1,12 +1,14 @@</span><br><span> #include <stdio.h></span><br><span> #include <stdint.h></span><br><span> #include <string.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <inttypes.h></span><br><span> </span><br><span> #include <osmocom/core/bitvec.h></span><br><span> #include <osmocom/core/utils.h></span><br><span> </span><br><span> #include <osmocom/codec/codec.h></span><br><span> #include <osmocom/codec/ecu.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/codec/gsm610_bits.h></span><br><span> </span><br><span> /* Set with sample full-rate voice frames and some intentional dropouts */</span><br><span> static const char *fr_frames_hex[] = {</span><br><span>@@ -74,6 +76,28 @@</span><br><span> static const char *sample_frame_hex = \</span><br><span>   "d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da";</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define GSM610_XMAXC_LEN   6</span><br><span style="color: hsl(120, 100%, 40%);">+static void parse_xmaxc_frame(uint8_t *frame, uint64_t xmaxc_res[4])</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    unsigned int field_index, len;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      struct bitvec *frame_bitvec = bitvec_alloc(GSM_FR_BYTES, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_ASSERT(frame_bitvec);</span><br><span style="color: hsl(120, 100%, 40%);">+    len = bitvec_unpack(frame_bitvec, frame);</span><br><span style="color: hsl(120, 100%, 40%);">+     OSMO_ASSERT(len == GSM_FR_BYTES);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   field_index = GSM610_RTP_XMAXC00;</span><br><span style="color: hsl(120, 100%, 40%);">+     xmaxc_res[0] = bitvec_read_field(frame_bitvec, &field_index, GSM610_XMAXC_LEN);</span><br><span style="color: hsl(120, 100%, 40%);">+   field_index = GSM610_RTP_XMAXC10;</span><br><span style="color: hsl(120, 100%, 40%);">+     xmaxc_res[1] = bitvec_read_field(frame_bitvec, &field_index, GSM610_XMAXC_LEN);</span><br><span style="color: hsl(120, 100%, 40%);">+   field_index = GSM610_RTP_XMAXC20;</span><br><span style="color: hsl(120, 100%, 40%);">+     xmaxc_res[2] = bitvec_read_field(frame_bitvec, &field_index, GSM610_XMAXC_LEN);</span><br><span style="color: hsl(120, 100%, 40%);">+   field_index = GSM610_RTP_XMAXC30;</span><br><span style="color: hsl(120, 100%, 40%);">+     xmaxc_res[3] = bitvec_read_field(frame_bitvec, &field_index, GSM610_XMAXC_LEN);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ bitvec_free(frame_bitvec);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /**</span><br><span>  * Start with a good voice frame and then simulate 20 consecutive bad frames,</span><br><span>  * watching how the error concealment decreases the XMAXC parameters.</span><br><span>@@ -82,23 +106,28 @@</span><br><span> {</span><br><span>         struct osmo_ecu_fr_state state;</span><br><span>      uint8_t frame[GSM_FR_BYTES];</span><br><span style="color: hsl(120, 100%, 40%);">+  uint64_t xmaxc[4];</span><br><span>   int i, rc;</span><br><span> </span><br><span>       /* Parse frame from string to hex */</span><br><span>         osmo_hexparse(sample_frame_hex, frame, GSM_FR_BYTES);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-   printf("Start with: %s\n", sample_frame_hex);</span><br><span style="color: hsl(120, 100%, 40%);">+       parse_xmaxc_frame(frame, xmaxc);</span><br><span style="color: hsl(120, 100%, 40%);">+      printf("Start with: %s, XMAXC: [%"PRIx64", %"PRIx64", %"PRIx64", %"PRIx64"]\n",</span><br><span style="color: hsl(120, 100%, 40%);">+            sample_frame_hex, xmaxc[0], xmaxc[1], xmaxc[2], xmaxc[3]);</span><br><span> </span><br><span>        /* Reset the ECU with the proposed known good frame */</span><br><span>       osmo_ecu_fr_reset(&state, frame);</span><br><span> </span><br><span>    /* Now pretend that we do not receive any good frames anymore */</span><br><span>     for (i = 0; i < 20; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>              rc = osmo_ecu_fr_conceal(&state, frame);</span><br><span>                 OSMO_ASSERT(rc == 0);</span><br><span style="color: hsl(120, 100%, 40%);">+         parse_xmaxc_frame(frame, xmaxc);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            printf("conceal: %02i, result: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                 i, osmo_hexdump_nospc(frame, GSM_FR_BYTES));</span><br><span style="color: hsl(120, 100%, 40%);">+          printf("conceal: %02i, result: %s XMAXC: [%"PRIx64", %"PRIx64", %"PRIx64", %"PRIx64"]\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  i, osmo_hexdump_nospc(frame, GSM_FR_BYTES),</span><br><span style="color: hsl(120, 100%, 40%);">+                   xmaxc[0], xmaxc[1], xmaxc[2], xmaxc[3]);</span><br><span>      }</span><br><span> }</span><br><span> </span><br><span>diff --git a/tests/codec/codec_ecu_fr_test.ok b/tests/codec/codec_ecu_fr_test.ok</span><br><span>index 6e20099..52d06a1 100644</span><br><span>--- a/tests/codec/codec_ecu_fr_test.ok</span><br><span>+++ b/tests/codec/codec_ecu_fr_test.ok</span><br><span>@@ -1,24 +1,24 @@</span><br><span style="color: hsl(0, 100%, 40%);">-Start with: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 00, result: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 01, result: d9ec9be212901d802335598c501d805bad3d4ba01d809b69df5a501d809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 02, result: d9ec9be212901b802335598c501b805bad3d4ba01b809b69df5a501b809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 03, result: d9ec9be2129019802335598c5019805bad3d4ba019809b69df5a5019809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 04, result: d9ec9be2129017802335598c5017805bad3d4ba017809b69df5a5017809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 05, result: d9ec9be2129015802335598c5015805bad3d4ba015809b69df5a5015809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 06, result: d9ec9be2129013802335598c5013805bad3d4ba013809b69df5a5013809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 07, result: d9ec9be2129011802335598c5011805bad3d4ba011809b69df5a5011809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 08, result: d9ec9be212900f802335598c500f805bad3d4ba00f809b69df5a500f809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 09, result: d9ec9be212900d802335598c500d805bad3d4ba00d809b69df5a500d809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 10, result: d9ec9be212900b802335598c500b805bad3d4ba00b809b69df5a500b809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 11, result: d9ec9be2129009802335598c5009805bad3d4ba009809b69df5a5009809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 12, result: d9ec9be2129007802335598c5007805bad3d4ba007809b69df5a5007809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 13, result: d9ec9be2129005802335598c5005805bad3d4ba005809b69df5a5005809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 14, result: d9ec9be2129003802335598c5003805bad3d4ba003809b69df5a5003809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 15, result: d9ec9be2129001802335598c5001805bad3d4ba001809b69df5a5001809cd1b4da</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 16, result: d00000000000000000000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 17, result: d00000000000000000000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 18, result: d00000000000000000000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(0, 100%, 40%);">-conceal: 19, result: d00000000000000000000000000000000000000000000000000000000000000000</span><br><span style="color: hsl(120, 100%, 40%);">+Start with: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da, XMAXC: [3f, 3f, 3f, 3f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 00, result: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da XMAXC: [3f, 3f, 3f, 3f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 01, result: d9ec9be212901d802335598c501d805bad3d4ba01d809b69df5a501d809cd1b4da XMAXC: [3b, 3b, 3b, 3b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 02, result: d9ec9be212901b802335598c501b805bad3d4ba01b809b69df5a501b809cd1b4da XMAXC: [37, 37, 37, 37]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 03, result: d9ec9be2129019802335598c5019805bad3d4ba019809b69df5a5019809cd1b4da XMAXC: [33, 33, 33, 33]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 04, result: d9ec9be2129017802335598c5017805bad3d4ba017809b69df5a5017809cd1b4da XMAXC: [2f, 2f, 2f, 2f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 05, result: d9ec9be2129015802335598c5015805bad3d4ba015809b69df5a5015809cd1b4da XMAXC: [2b, 2b, 2b, 2b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 06, result: d9ec9be2129013802335598c5013805bad3d4ba013809b69df5a5013809cd1b4da XMAXC: [27, 27, 27, 27]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 07, result: d9ec9be2129011802335598c5011805bad3d4ba011809b69df5a5011809cd1b4da XMAXC: [23, 23, 23, 23]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 08, result: d9ec9be212900f802335598c500f805bad3d4ba00f809b69df5a500f809cd1b4da XMAXC: [1f, 1f, 1f, 1f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 09, result: d9ec9be212900d802335598c500d805bad3d4ba00d809b69df5a500d809cd1b4da XMAXC: [1b, 1b, 1b, 1b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 10, result: d9ec9be212900b802335598c500b805bad3d4ba00b809b69df5a500b809cd1b4da XMAXC: [17, 17, 17, 17]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 11, result: d9ec9be2129009802335598c5009805bad3d4ba009809b69df5a5009809cd1b4da XMAXC: [13, 13, 13, 13]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 12, result: d9ec9be2129007802335598c5007805bad3d4ba007809b69df5a5007809cd1b4da XMAXC: [f, f, f, f]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 13, result: d9ec9be2129005802335598c5005805bad3d4ba005809b69df5a5005809cd1b4da XMAXC: [b, b, b, b]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 14, result: d9ec9be2129003802335598c5003805bad3d4ba003809b69df5a5003809cd1b4da XMAXC: [7, 7, 7, 7]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 15, result: d9ec9be2129001802335598c5001805bad3d4ba001809b69df5a5001809cd1b4da XMAXC: [3, 3, 3, 3]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 16, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 17, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 18, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span style="color: hsl(120, 100%, 40%);">+conceal: 19, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]</span><br><span> Frame No. 000:</span><br><span>  * input:  d9aa93ae63de00471a91b95b8660471392b4a2daa037628f391c624039258dc723</span><br><span>  * output: d9aa93ae63de00471a91b95b8660471392b4a2daa037628f391c624039258dc723</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10078">change 10078</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/10078"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I678d4be5e0b15b05873b0d3bf5ea5bbee7bef839 </div>
<div style="display:none"> Gerrit-Change-Number: 10078 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Pau Espin Pedrol <pespin@sysmocom.de> </div>