summaryrefslogtreecommitdiffstats
path: root/tests/codec
diff options
context:
space:
mode:
Diffstat (limited to 'tests/codec')
-rw-r--r--tests/codec/codec_ecu_fr_test.c47
-rw-r--r--tests/codec/codec_ecu_fr_test.ok176
2 files changed, 223 insertions, 0 deletions
diff --git a/tests/codec/codec_ecu_fr_test.c b/tests/codec/codec_ecu_fr_test.c
index 3561c442..7ebc558f 100644
--- a/tests/codec/codec_ecu_fr_test.c
+++ b/tests/codec/codec_ecu_fr_test.c
@@ -113,6 +113,8 @@ void test_fr_concealment(void)
int i, rc;
int j = 0;
+ printf("=> Testing FR concealment (simple, consecutive bad frames)\n");
+
while (sample_frame_hex[j] != NULL) {
/* Parse frame from string to hex */
osmo_hexparse(sample_frame_hex[j], frame, GSM_FR_BYTES);
@@ -148,6 +150,8 @@ void test_fr_concealment_realistic()
unsigned int frame_len;
int rc, i = 0;
+ printf("\n=> Testing FR concealment (realistic, various bad frames)\n");
+
while (fr_frames_hex[i] != NULL) {
/* Debug print */
printf("Frame No. %03i:\n", i);
@@ -174,11 +178,54 @@ void test_fr_concealment_realistic()
}
}
+/* Simulate a real life situation: voice frames with a few dropouts, using generic core */
+void test_fr_concealment_realistic_core()
+{
+ struct osmo_ecu_state *state = osmo_ecu_init(NULL, OSMO_ECU_CODEC_FR);
+ uint8_t frame[GSM_FR_BYTES];
+ unsigned int frame_len;
+ int rc, i = 0;
+
+ printf("\n=> Testing FR concealment (realistic, using ECU abstraction)\n");
+
+ OSMO_ASSERT(state);
+
+ while (fr_frames_hex[i] != NULL) {
+ /* Debug print */
+ printf("Frame No. %03i:\n", i);
+
+ /* Good or bad frame? */
+ frame_len = strlen(fr_frames_hex[i]) / 2;
+ if (frame_len == GSM_FR_BYTES) {
+ printf(" * input: %s\n", fr_frames_hex[i]);
+ osmo_hexparse(fr_frames_hex[i], frame, GSM_FR_BYTES);
+ osmo_ecu_frame_in(state, false, frame, GSM_FR_BYTES);
+ } else {
+ printf(" * input: (bad)\n");
+ memset(frame, 0x00, GSM_FR_BYTES);
+ osmo_ecu_frame_in(state, true, frame, 0);
+ rc = osmo_ecu_frame_out(state, frame);
+ OSMO_ASSERT(rc == GSM_FR_BYTES);
+ }
+
+ /* Print result */
+ printf(" * output: %s\n",
+ osmo_hexdump_nospc(frame, GSM_FR_BYTES));
+
+ /* Go to the next frame */
+ i++;
+ }
+
+ osmo_ecu_destroy(state);
+}
+
+
int main(int argc, char **argv)
{
/* Perform actual tests */
test_fr_concealment();
test_fr_concealment_realistic();
+ test_fr_concealment_realistic_core();
return 0;
}
diff --git a/tests/codec/codec_ecu_fr_test.ok b/tests/codec/codec_ecu_fr_test.ok
index 3cc35af9..30163a9c 100644
--- a/tests/codec/codec_ecu_fr_test.ok
+++ b/tests/codec/codec_ecu_fr_test.ok
@@ -1,3 +1,4 @@
+=> Testing FR concealment (simple, consecutive bad frames)
Start with: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da, XMAXC: [3f, 3f, 3f, 3f]
conceal: 00, result: d9ec9be212901f802335598c501f805bad3d4ba01f809b69df5a501f809cd1b4da XMAXC: [3f, 3f, 3f, 3f]
conceal: 01, result: d9ec9be212901d802335598c501d805bad3d4ba01d809b69df5a501d809cd1b4da XMAXC: [3b, 3b, 3b, 3b]
@@ -40,6 +41,181 @@ conceal: 16, result: d0000000000000000000000000000000000000000000000000000000000
conceal: 17, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]
conceal: 18, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]
conceal: 19, result: d00000000000000000000000000000000000000000000000000000000000000000 XMAXC: [0, 0, 0, 0]
+
+=> Testing FR concealment (realistic, various bad frames)
+Frame No. 000:
+ * input: d9aa93ae63de00471a91b95b8660471392b4a2daa037628f391c624039258dc723
+ * output: d9aa93ae63de00471a91b95b8660471392b4a2daa037628f391c624039258dc723
+Frame No. 001:
+ * input: d8eb83699a66c036ec89b7246e6034dc8d48948620589b7256e3a6603b2371b8da
+ * output: d8eb83699a66c036ec89b7246e6034dc8d48948620589b7256e3a6603b2371b8da
+Frame No. 002:
+ * input: d967abaa1cbe4035238da6ace4c036d46ec69ba600391c4eb8a2b040591c6a3924
+ * output: d967abaa1cbe4035238da6ace4c036d46ec69ba600391c4eb8a2b040591c6a3924
+Frame No. 003:
+ * input: d8e8a42662c240472469b91bd2e0452291b6dba600495b8e38dcb020491a71c91b
+ * output: d8e8a42662c240472469b91bd2e0452291b6dba600495b8e38dcb020491a71c91b
+Frame No. 004:
+ * input: da2aac1ddbb00036e46e26dcec6039138db923822047137248e3560048e38dc8e3
+ * output: da2aac1ddbb00036e46e26dcec6039138db923822047137248e3560048e38dc8e3
+Frame No. 005:
+ * input: d929ab2a9b5240395b6dc72ba020469c8d551c5440349c9148e36a4036a372471b
+ * output: d929ab2a9b5240395b6dc72ba020469c8d551c5440349c9148e36a4036a372471b
+Frame No. 006:
+ * input: d9eb93215bb8a0271c69c724682036db71c71a94a0372491b72bee4044eb71b923
+ * output: d9eb93215bb8a0271c69c724682036db71c71a94a0372491b72bee4044eb71b923
+Frame No. 007:
+ * input: d9ab9aa19abc40391b6e5ae2ee40471b91c6dbe820492291b8e4b84036e47238db
+ * output: d9ab9aa19abc40391b6e5ae2ee40471b91c6dbe820492291b8e4b84036e47238db
+Frame No. 008:
+ * input: d96b9be9db782044e371b55cb200389491c69b8ea034e271c8d3808038ec6db8e3
+ * output: d96b9be9db782044e371b55cb200389491c69b8ea034e271c8d3808038ec6db8e3
+Frame No. 009:
+ * input: d9aa9365e3f060375c6db6ebc4c02764b1c51b78a0571c91a723de6049248dc8dd
+ * output: d9aa9365e3f060375c6db6ebc4c02764b1c51b78a0571c91a723de6049248dc8dd
+Frame No. 010:
+ * input: (bad)
+ * output: d9aa9365e3f060375c6db6ebc4c02764b1c51b78a0571c91a723de6049248dc8dd
+Frame No. 011:
+ * input: d9ea9c219ce60046e38d3724e0c034e56e36eb7e0038d471b8dcb260491b8dbb23
+ * output: d9ea9c219ce60046e38d3724e0c034e56e36eb7e0038d471b8dcb260491b8dbb23
+Frame No. 012:
+ * input: d9e89be9d9e0a0391b6dd6a4624029247138e3a2a04713922524de0036db69d91c
+ * output: d9e89be9d9e0a0391b6dd6a4624029247138e3a2a04713922524de0036db69d91c
+Frame No. 013:
+ * input: d9699422a2b6a048dd90c91c6a802b6259395c8880575b4a58e4ac20269d7248d4
+ * output: d9699422a2b6a048dd90c91c6a802b6259395c8880575b4a58e4ac20269d7248d4
+Frame No. 014:
+ * input: d967ac5b1baae0371c71b8ab9c804a9e8e58a55a8038626ec8dcb640395c7244dc
+ * output: d967ac5b1baae0371c71b8ab9c804a9e8e58a55a8038626ec8dcb640395c7244dc
+Frame No. 015:
+ * input: d9e8a3e262e68027638db52b88a038634e471a7ec049136e3b1bc8402923adcad2
+ * output: d9e8a3e262e68027638db52b88a038634e471a7ec049136e3b1bc8402923adcad2
+Frame No. 016:
+ * input: d8eab36e1bbe0046e34d491b608035137658d3524044e48e375cdac0472b9238d4
+ * output: d8eab36e1bbe0046e34d491b608035137658d3524044e48e375cdac0472b9238d4
+Frame No. 017:
+ * input: d9689ba5e3d260491b516adb5e4027256e27227ee0351c8e549a5c60492471971b
+ * output: d9689ba5e3d260491b516adb5e4027256e27227ee0351c8e549a5c60492471971b
+Frame No. 018:
+ * input: (bad)
+ * output: d9689ba5e3d260491b516adb5e4027256e27227ee0351c8e549a5c60492471971b
+Frame No. 019:
+ * input: (bad)
+ * output: d00000000000000000000000000000000000000000000000000000000000000000
+Frame No. 020:
+ * input: d8e6a2e1d3d2605b1376c8d35280392451391cbc80392a71b6db8aa049238dc8ab
+ * output: d8e6a2e1d3d2605b1376c8d35280392451391cbc80392a71b6db8aa049238dc8ab
+Frame No. 021:
+ * input: d9a87ba1a3982048eb8a471cac00472b4e391bbc40292489b71cc200495b8d3ae3
+ * output: d9a87ba1a3982048eb8a471cac00472b4e391bbc40292489b71cc200495b8d3ae3
+Frame No. 022:
+ * input: d9278b2a1ba4c0475b8dc722d6e0491b5228da70204ae36dc71d94a056a29236e3
+ * output: d9278b2a1ba4c0475b8dc722d6e0491b5228da70204ae36dc71d94a056a29236e3
+Frame No. 023:
+ * input: d9ec9be2129520392335598c50c04b5bad3d4ba680789b69df5a5aa0469cd1b4da
+ * output: d9ec9be2129520392335598c50c04b5bad3d4ba680789b69df5a5aa0469cd1b4da
+Frame No. 024:
+ * input: d8ea932623e660669b8e4a9dd8a03aa32a76e466e028d396cc9bbe4047256dc8e5
+ * output: d8ea932623e660669b8e4a9dd8a03aa32a76e466e028d396cc9bbe4047256dc8e5
+Frame No. 025:
+ * input: d96a94215aa0403aab713f22e8e024e68db91ab6a027abd1a55b6e804aec9146e4
+ * output: d96a94215aa0403aab713f22e8e024e68db91ab6a027abd1a55b6e804aec9146e4
+Frame No. 026:
+ * input: d867ac21e270a0350d6ac91a724037247246d2a6c0396c89d6dc562049244e48d5
+ * output: d867ac21e270a0350d6ac91a724037247246d2a6c0396c89d6dc562049244e48d5
+Frame No. 027:
+ * input: d8a9b460d3b48026a4ad471b7c20452491b69bbc803ae48db722ee00292491a8db
+ * output: d8a9b460d3b48026a4ad471b7c20452491b69bbc803ae48db722ee00292491a8db
+Frame No. 028:
+ * input: d928a3e1d3b24036e37244abf02047634d371b74c047637148a29ac03b234e38e3
+ * output: d928a3e1d3b24036e37244abf02047634d371b74c047637148a29ac03b234e38e3
+Frame No. 029:
+ * input: d9ab9b21d2e0c0471c693aec54e044dbae46dc7c20391badb724ee8038e469bb15
+ * output: d9ab9b21d2e0c0471c693aec54e044dbae46dc7c20391badb724ee8038e469bb15
+Frame No. 030:
+ * input: d9a99361a276403b1a6ad6dcd40026e489c8e3bc40371c4dc564e2c036e28eb963
+ * output: d9a99361a276403b1a6ad6dcd40026e489c8e3bc40371c4dc564e2c036e28eb963
+Frame No. 031:
+ * input: (bad)
+ * output: d9a99361a276403b1a6ad6dcd40026e489c8e3bc40371c4dc564e2c036e28eb963
+Frame No. 032:
+ * input: (bad)
+ * output: d00000000000000000000000000000000000000000000000000000000000000000
+Frame No. 033:
+ * input: (bad)
+ * output: d00000000000000000000000000000000000000000000000000000000000000000
+Frame No. 034:
+ * input: (bad)
+ * output: d00000000000000000000000000000000000000000000000000000000000000000
+Frame No. 035:
+ * input: (bad)
+ * output: d00000000000000000000000000000000000000000000000000000000000000000
+Frame No. 036:
+ * input: (bad)
+ * output: d00000000000000000000000000000000000000000000000000000000000000000
+Frame No. 037:
+ * input: d92c8b6d5aee4034ebb22724862047145634a5c0a038e371b8e4a880485c89dd25
+ * output: d92c8b6d5aee4034ebb22724862047145634a5c0a038e371b8e4a880485c89dd25
+Frame No. 038:
+ * input: d8e78b29e3c6c038dba9d91beca04723ad491cda80471471b6ec7ae03b1396b91b
+ * output: d8e78b29e3c6c038dba9d91beca04723ad491cda80471471b6ec7ae03b1396b91b
+Frame No. 039:
+ * input: d8a78b25e37a0022dd8a46dc68a0351bad391bde2046e56dd8dc96c038e396d89b
+ * output: d8a78b25e37a0022dd8a46dc68a0351bad391bde2046e56dd8dc96c038e396d89b
+Frame No. 040:
+ * input: d8a88c255ab6e038e38e48dbde8038ad8dc8db8ec0376372b564b44038e49234dc
+ * output: d8a88c255ab6e038e38e48dbde8038ad8dc8db8ec0376372b564b44038e49234dc
+Frame No. 041:
+ * input: d9708ce6a39ce049646646a2c1a0272496b29a66c037db562863ace0795b55b2e3
+ * output: d9708ce6a39ce049646646a2c1a0272496b29a66c037db562863ace0795b55b2e3
+Frame No. 042:
+ * input: d8ee9bea5ae4003ae371b713eae05adc91995a5ea064dcc9571e786026ed51c52c
+ * output: d8ee9bea5ae4003ae371b713eae05adc91995a5ea064dcc9571e786026ed51c52c
+Frame No. 043:
+ * input: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+ * output: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+Frame No. 044:
+ * input: d92aab696190c046e26e392cae0026a376a8dc662048d291b75b54c04ad3ae3b1b
+ * output: d92aab696190c046e26e392cae0026a376a8dc662048d291b75b54c04ad3ae3b1b
+Frame No. 045:
+ * input: d8e7a469627a6038e289cb1baca0569b8db6dddec026dc8e38e5dc803722722d23
+ * output: d8e7a469627a6038e289cb1baca0569b8db6dddec026dc8e38e5dc803722722d23
+Frame No. 046:
+ * input: d8a88c299b64c03a548a58e37420272c6dd76b92c0471c9236dbc0e0551c71c713
+ * output: d8a88c299b64c03a548a58e37420272c6dd76b92c0471c9236dbc0e0551c71c713
+Frame No. 047:
+ * input: (bad)
+ * output: d8a88c299b64c03a548a58e37420272c6dd76b92c0471c9236dbc0e0551c71c713
+Frame No. 048:
+ * input: d7299c19a3be8024e58ea7a49f20a522963ad976e0a76ecd92b38500cb62aa4c94
+ * output: d7299c19a3be8024e58ea7a49f20a522963ad976e0a76ecd92b38500cb62aa4c94
+Frame No. 049:
+ * input: d7eb6c6262eee02b2c42e79a60a0aa55aed68a7f00ad358e10fad960e55a39396d
+ * output: d7eb6c6262eee02b2c42e79a60a0aa55aed68a7f00ad358e10fad960e55a39396d
+Frame No. 050:
+ * input: d970858dd2ab61d91355ebc15ca1a6a7ca48a05cc0dae66f2523c2a1bad3825daa
+ * output: d970858dd2ab61d91355ebc15ca1a6a7ca48a05cc0dae66f2523c2a1bad3825daa
+Frame No. 051:
+ * input: d8f0844a23ad20da50d6de025e81c37392b9039cc0c764c1bd1e94c1b699736a98
+ * output: d8f0844a23ad20da50d6de025e81c37392b9039cc0c764c1bd1e94c1b699736a98
+Frame No. 052:
+ * input: d9708ce6a39ce049646646a2c1a0272496b29a66c037db562863ace0795b55b2e3
+ * output: d9708ce6a39ce049646646a2c1a0272496b29a66c037db562863ace0795b55b2e3
+Frame No. 053:
+ * input: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+ * output: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+Frame No. 054:
+ * input: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+ * output: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+Frame No. 055:
+ * input: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+ * output: d9299421d2944036ed69b8e572a048e36d551cd480571d4ec95be680356c69c763
+Frame No. 056:
+ * input: d2577a1cda50004924924924500049249249245000492492492450004923924924
+ * output: d2577a1cda50004924924924500049249249245000492492492450004923924924
+
+=> Testing FR concealment (realistic, using ECU abstraction)
Frame No. 000:
* input: d9aa93ae63de00471a91b95b8660471392b4a2daa037628f391c624039258dc723
* output: d9aa93ae63de00471a91b95b8660471392b4a2daa037628f391c624039258dc723