diff --git a/usr.sbin/bta2dpd/cosdata-gen/cosdata.c b/usr.sbin/bta2dpd/cosdata-gen/cosdata.c index ca13625d1d3d..4e829a7a72f1 100644 --- a/usr.sbin/bta2dpd/cosdata-gen/cosdata.c +++ b/usr.sbin/bta2dpd/cosdata-gen/cosdata.c @@ -1,4 +1,4 @@ -/* $NetBSD: cosdata.c,v 1.2 2017/01/30 14:55:17 jakllsch Exp $ */ +/* $NetBSD: cosdata.c,v 1.3 2017/01/30 15:50:21 christos Exp $ */ /*- * Copyright (c) 2015 - 2016 Nathanial Sloss @@ -34,7 +34,7 @@ #include #include -static const double sbc8_coeffs[] = { +static const double sbc_coeffs8[] = { 0.00000000e+00, 1.56575398e-04, 3.43256425e-04, 5.54620202e-04, 8.23919506e-04, 1.13992507e-03, 1.47640169e-03, 1.78371725e-03, 2.01182542e-03, 2.10371989e-03, 1.99454554e-03, 1.61656283e-03, @@ -57,7 +57,7 @@ static const double sbc8_coeffs[] = { 8.23919506e-04, 5.54620202e-04, 3.43256425e-04, 1.56575398e-04, }; -static const double sbc4_coeffs[] = { +static const double sbc_coeffs4[] = { 0.00000000e+00, 5.36548976e-04, 1.49188357e-03, 2.73370904e-03, 3.83720193e-03, 3.89205149e-03, 1.86581691e-03,-3.06012286e-03, 1.09137620e-02, 2.04385087e-02, 2.88757392e-02, 3.21939290e-02, @@ -70,133 +70,71 @@ static const double sbc4_coeffs[] = { 3.83720193e-03, 2.73370904e-03, 1.49188357e-03, 5.36548976e-04, }; -#define COEFFS_MULTI (float)(1 << 12) -#define SI_MULTI (float)512 +#define COEFFS_MULTI (1 << 12) +#define SI_MULTI 512 + +static void +arrayprint(const char *name, const double *arr, size_t len) +{ + size_t k, count; + + printf("static const int32_t %s[] = {\n\t", name); + for (count = k = 0; k < len; k++, count++) { + if (count % 8 == 0 && count != 0) + printf("\n\t"); + printf("%d, ", (int)roundf((float)arr[k] * COEFFS_MULTI)); + } + printf("\n};\n"); +} + +#define ARRAYPRINT(a) arrayprint(#a, a, sizeof(a) / sizeof(a[0])) + +static void +cosprint(int lim, int sgn) +{ + size_t count, i, k; + size_t mi = lim * 4; + size_t mk = mi * 2; + int dk = sgn * lim * 2; + double mp = M_PI_4 / lim; + float val; + + printf("static const int32_t cos%sdata%zu[%zu][%zu] = {\n\t", + sgn == -1 ? "" : "dec", mi, mi, mk); + + for (count = 0, i = 0; i < mi; i++) { + for (k = 0; k < mk; k++, count++) { + if (count % 8 == 0 && count != 0) + printf("\n\t"); + if (k == 0) + printf("{ "); + + val = cosf((i + 0.5) * ((int)k + dk) * mp); + printf("%d, ", (int)roundf(val * SI_MULTI)); + + if (k == mk - 1) + printf("},"); + } + } + printf("\n};\n"); +} int -main (void) +main(void) { - float S[8][16], val; - int i,k, count = 0; - int vali; - printf("/* sbc_coeffs.h - Automatically generated by cosdata.c. */\n" "\n"); - vali = SI_MULTI; - printf("#define SIMULTI\t%d\n\n", vali); - vali = COEFFS_MULTI; - printf("#define COEFFSMULTI\t%d\n\n", vali); + printf("#define\tSIMULTI\t%d\n\n", SI_MULTI); + printf("#define\tCOEFFSMULTI\t%d\n\n", COEFFS_MULTI); - printf("static const int32_t sbc_coeffs8[] = {\n "); - for (k = 0;k < (int)(sizeof(sbc8_coeffs)/sizeof(sbc8_coeffs[0]));k++) { - if (count % 8 == 0 && count != 0) - printf("\n "); - val = (float)(sbc8_coeffs[k] * COEFFS_MULTI); - vali = (int)roundf(val); - printf("%d, ",vali); - count++; - } - printf("\n};\n"); + ARRAYPRINT(sbc_coeffs8); + ARRAYPRINT(sbc_coeffs4); - count = 0; - printf("static const int32_t sbc_coeffs4[] = {\n "); - for (k = 0;k < (int)(sizeof(sbc4_coeffs)/sizeof(sbc4_coeffs[0]));k++) { - if (count % 8 == 0 && count != 0) - printf("\n "); - val = (float)(sbc4_coeffs[k] * COEFFS_MULTI); - vali = (int)roundf(val); - printf("%d, ",vali); - count++; - } - printf("\n};\n"); - - count = 0; - printf("static const int32_t cosdata8[8][16] = {\n "); - for (i = 0; i < 8; i++) { - for (k = 0;k < 16;k++) { - S[i][k] = cosf((float)((i+0.5)*(k-4)*(M_PI_4/2))); - - if (count % 8 == 0 && count != 0) - printf("\n "); - if (k == 0) - printf("{ "); - val = S[i][k] * SI_MULTI; - vali = (int)roundf(val); - printf("%d, ",vali); - - if (k == 15) - printf("},"); - count++; - } - } - printf("\n};\n"); - - count = 0; - printf("static const int32_t cosdata4[4][8] = {\n "); - for (i = 0; i < 4; i++) { - for (k = 0;k < 8;k++) { - S[i][k] = cosf((float)((i+0.5)*(k-2)*(M_PI_4))); - - if (count % 8 == 0 && count != 0) - printf("\n "); - if (k == 0) - printf("{ "); - - val = S[i][k] * SI_MULTI; - vali = (int)roundf(val); - printf("%d, ",vali); - - if (k == 7) - printf("},"); - count++; - } - } - printf("\n};\n"); - - count = 0; - printf("static const int32_t cosdecdata8[8][16] = {\n "); - for (i = 0; i < 8; i++) { - for (k = 0;k < 16;k++) { - S[i][k] = cosf((float)((i+0.5)*(k+4)*(M_PI_4/2))); - - if (count % 8 == 0 && count != 0) - printf("\n "); - if (k == 0) - printf("{ "); - val = S[i][k] * SI_MULTI; - vali = (int)roundf(val); - printf("%d, ",vali); - - if (k == 15) - printf("},"); - count++; - } - } - printf("\n};\n"); - - count = 0; - printf("static const int32_t cosdecdata4[4][8] = {\n "); - for (i = 0; i < 4; i++) { - for (k = 0;k < 8;k++) { - S[i][k] = cosf((float)((i+0.5)*(k+2)*(M_PI_4))); - - if (count % 8 == 0 && count != 0) - printf("\n "); - if (k == 0) - printf("{ "); - - val = S[i][k] * SI_MULTI; - vali = (int)roundf(val); - printf("%d, ",vali); - - if (k == 7) - printf("},"); - count++; - } - } - printf("\n};\n"); + cosprint(2, -1); + cosprint(1, -1); + cosprint(2, 1); + cosprint(1, 1); return 0; } -