Add more ICC profiles to test corpus

Remove explicit approximation tests, this is all covered by the dump
testing now.

Bug: skia:
Change-Id: I31209f649d8498dede5cfaf189c20ce5b31e584e
Reviewed-on: https://skia-review.googlesource.com/122400
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
diff --git a/profiles/misc/AdobeColorSpin.icc b/profiles/misc/AdobeColorSpin.icc
new file mode 100644
index 0000000..ad0b4c4
--- /dev/null
+++ b/profiles/misc/AdobeColorSpin.icc
Binary files differ
diff --git a/profiles/misc/AdobeColorSpin.icc.txt b/profiles/misc/AdobeColorSpin.icc.txt
new file mode 100644
index 0000000..11df0ea
--- /dev/null
+++ b/profiles/misc/AdobeColorSpin.icc.txt
@@ -0,0 +1,41 @@
+                Size : 0x000001EA : 490
+    Data color space : 0x52474220 : 'RGB '
+                 PCS : 0x58595A20 : 'XYZ '
+           Tag count : 0x00000009 : 9
+
+ Tag    : Type   : Size   : Offset
+ ------ : ------ : ------ : --------
+ 'cprt' : 'text' :     13 : 240
+ 'desc' : 'desc' :    140 : 256
+ 'wtpt' : 'XYZ ' :     20 : 396
+ 'rXYZ' : 'XYZ ' :     20 : 416
+ 'gXYZ' : 'XYZ ' :     20 : 436
+ 'bXYZ' : 'XYZ ' :     20 : 456
+ 'rTRC' : 'curv' :     14 : 476
+ 'gTRC' : 'curv' :     14 : 476
+ 'bTRC' : 'curv' :     14 : 476
+
+rTRC : 2.19922, 1, 0, 0, 0, 0, 0
+ ~13 : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+gTRC : 2.19922, 1, 0, 0, 0, 0, 0
+ ~13 : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+bTRC : 2.19922, 1, 0, 0, 0, 0, 0
+ ~13 : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+Best : 2.19922, 1, 0, 0, 0, 0, 0
+ ~13 : 0.175675x^3 + 0.862451x^2 + -0.0381258x (Max error: 0.00133421)
+ XYZ : | 0.205276489 0.149185181 0.609741211 |
+       | 0.625671387 0.063217163 0.311111450 |
+       | 0.060867310 0.744552612 0.019470215 |
+252 random bytes transformed to linear XYZD50 bytes:
+	341958 4873c4 283361 302a05 463407 2c712e 2e158e
+	539d14 182310 4b9424 489b84 223c56 2e1a45 8a7111
+	b8cc67 84465d 687a72 272f50 544a06 3f9855 b4d71d
+	4ca817 321a02 94bdce a7cc12 4a5fab 6b4305 492b72
+	3e4b3e 45491e 443705 718d75 7d5ec3 8fc61b 1a0e7b
+	8d6d80 242749 297a0c 3a1b9a 070508 592e08 4b2a27
+	6b3a05 122622 6c3963 170d09 121037 2f6817 a7c043
+	86c288 cee445 3f8118 32196f 43248a 162406 2914b8
+	302581 388846 2b300d 1e3d21 2d1805 170d01 305319
+	7a7d4b 6e7d1e 171164 6c830b 334a07 4c302b 8b6559
+	1a1342 784e18 2d1d04 2b7e0d 241d99 0a0501 985950
+	2a1eac 3f6213 3f343f 417d1e 442290 336a17 805058
diff --git a/profiles/misc/sRGB_Calibrated_Heterogeneous.icc b/profiles/misc/sRGB_Calibrated_Heterogeneous.icc
new file mode 100644
index 0000000..8eaca82
--- /dev/null
+++ b/profiles/misc/sRGB_Calibrated_Heterogeneous.icc
Binary files differ
diff --git a/profiles/misc/sRGB_Calibrated_Heterogeneous.icc.txt b/profiles/misc/sRGB_Calibrated_Heterogeneous.icc.txt
new file mode 100644
index 0000000..ef22b1b
--- /dev/null
+++ b/profiles/misc/sRGB_Calibrated_Heterogeneous.icc.txt
@@ -0,0 +1,40 @@
+                Size : 0x000007D4 : 2004
+    Data color space : 0x52474220 : 'RGB '
+                 PCS : 0x58595A20 : 'XYZ '
+           Tag count : 0x00000009 : 9
+
+ Tag    : Type   : Size   : Offset
+ ------ : ------ : ------ : --------
+ 'desc' : 'mluc' :     52 : 240
+ 'rXYZ' : 'XYZ ' :     20 : 292
+ 'gXYZ' : 'XYZ ' :     20 : 312
+ 'bXYZ' : 'XYZ ' :     20 : 332
+ 'rTRC' : 'curv' :    524 : 352
+ 'gTRC' : 'curv' :    524 : 876
+ 'bTRC' : 'curv' :    524 : 1400
+ 'wtpt' : 'XYZ ' :     20 : 1924
+ 'cprt' : 'mluc' :     60 : 1944
+
+rTRC : 16-bit table with 256 entries
+  ~= : 2.30046, 0.989286, 0.0135528, 0.0120623, 0.0392157, -0.000656434, 0 (Max error: 0.00992807) (D-gap: 0)
+gTRC : 16-bit table with 256 entries
+  ~= : 2.26476, 0.9945, 0.00879565, 0.00972763, 0.0235294, -0.000188477, 0 (Max error: 0.0078306) (D-gap: 0)
+bTRC : 16-bit table with 256 entries
+  ~= : 2.33058, 0.988705, 0.013782, 0.0077821, 0.0196078, -0.0002042, 0 (Max error: 0.00760549) (D-gap: 0)
+Best : 2.30046, 0.989286, 0.0135528, 0.0120623, 0.0392157, -0.000656434, 0 (D-gap: 0)
+ XYZ : | 0.449279785 0.382583618 0.132339478 |
+       | 0.224472046 0.722351074 0.053176880 |
+       | 0.001129150 0.053558350 0.770217896 |
+252 random bytes transformed to linear XYZD50 bytes:
+	34572f a6d810 4c6710 180c31 1c0f4d 604904 4c8a1f
+	6e3a2c 1b160f 704723 a5a60a 4e6006 2c452a 422497
+	a88ea1 4a6293 7d874b 415614 291359 8e7906 8c4aa5
+	78401d 0a043c d4f05d 813e98 8bbb22 200e80 497342
+	484b2c 372b3d 1e0e49 8b8f4f 8dcb69 844673 417809
+	748d87 394d14 572b02 55972c 060806 150c6d 242a53
+	1a0b84 282a02 466572 090a1a 233708 4e300f 8f6994
+	b7af52 a572bf 5e361c 3f6d2a 518838 180e0e 61b411
+	50811d 7b6606 201526 362e09 0b0735 05021c 3f2c1b
+	69606c 553663 386207 512760 2f1726 2a2f51 5c6690
+	294311 2f228a 0f0833 5a2e02 59990b 02010b 4d59ad
+	63ad10 44282b 384538 5d3b20 528e39 4e3016 4e6089
diff --git a/profiles/misc/sRGB_Calibrated_Homogeneous.icc b/profiles/misc/sRGB_Calibrated_Homogeneous.icc
new file mode 100644
index 0000000..f07f385
--- /dev/null
+++ b/profiles/misc/sRGB_Calibrated_Homogeneous.icc
Binary files differ
diff --git a/profiles/misc/sRGB_Calibrated_Homogeneous.icc.txt b/profiles/misc/sRGB_Calibrated_Homogeneous.icc.txt
new file mode 100644
index 0000000..58c9d1b
--- /dev/null
+++ b/profiles/misc/sRGB_Calibrated_Homogeneous.icc.txt
@@ -0,0 +1,41 @@
+                Size : 0x000027A4 : 10148
+    Data color space : 0x52474220 : 'RGB '
+                 PCS : 0x58595A20 : 'XYZ '
+           Tag count : 0x0000000A : 10
+
+ Tag    : Type   : Size   : Offset
+ ------ : ------ : ------ : --------
+ 'desc' : 'desc' :    352 : 252
+ 'cprt' : 'text' :     49 : 604
+ 'wtpt' : 'XYZ ' :     20 : 656
+ 'rXYZ' : 'XYZ ' :     20 : 676
+ 'gXYZ' : 'XYZ ' :     20 : 696
+ 'bXYZ' : 'XYZ ' :     20 : 716
+ 'rTRC' : 'curv' :    524 : 736
+ 'gTRC' : 'curv' :    524 : 1260
+ 'bTRC' : 'curv' :    524 : 1784
+ 'MS00' : 'MS10' :   7838 : 2308
+
+rTRC : 16-bit table with 256 entries
+  ~= : 2.39942, 0.947249, 0.0556077, 0.0774319, 0.0392157, -0.000291582, 0 (Max error: 0.00300223) (D-gap: 0)
+gTRC : 16-bit table with 256 entries
+  ~= : 2.39942, 0.947249, 0.0556077, 0.0774319, 0.0392157, -0.000291582, 0 (Max error: 0.00300223) (D-gap: 0)
+bTRC : 16-bit table with 256 entries
+  ~= : 2.39942, 0.947249, 0.0556077, 0.0774319, 0.0392157, -0.000291582, 0 (Max error: 0.00300223) (D-gap: 0)
+Best : 2.39942, 0.947249, 0.0556077, 0.0774319, 0.0392157, -0.000291582, 0 (D-gap: 0)
+ XYZ : | 0.435470581 0.388549805 0.140197754 |
+       | 0.221725464 0.721969604 0.056304932 |
+       | 0.013488770 0.087921143 0.723480225 |
+252 random bytes transformed to linear XYZD50 bytes:
+	355733 a6d91c 4d6817 1a0e30 1e114b 5f4909 4e8b26
+	6c3b2f 1d1812 6e4826 a3a513 4e600b 2e452c 442690
+	a78e9f 4c6290 7d8750 425619 2b1556 8b780d 8b4c9f
+	764120 0c053b d3f065 803f92 8bb92b 22107a 4c7345
+	494b2f 382d3e 201047 8b8f54 90cd6e 834871 43780f
+	768e87 3a4e19 552c05 579732 080a08 180e69 262b51
+	1c0d7d 292a05 496672 0b0b1b 24380c 4d3113 8f6991
+	b6af58 a473b9 5d371f 416d2e 54893d 191010 64b51b
+	528223 79660c 221727 362f0d 0e0934 06031c 3f2d1e
+	6a616c 553762 3a630d 51285d 2f1727 2c3050 5e668d
+	2b4315 322484 110a32 582e06 5b9912 03020d 5059a6
+	64ac19 44292d 3a463a 5d3c23 558f3f 4e3119 516086
diff --git a/tests.c b/tests.c
index 9c4457f..23a8ba4 100644
--- a/tests.c
+++ b/tests.c
@@ -421,139 +421,102 @@
     expect(fff[9] == 12); expect(fff[10] == 13); expect(fff[11] == 14);
 }
 
-static const skcms_TransferFunction srgb_transfer_fn =
-    { 2.4f, 1 / 1.055f, 0.055f / 1.055f, 1 / 12.92f, 0.04045f, 0.0f, 0.0f };
-static const skcms_TransferFunction kodak_transfer_fn =
-    { 2.42f, 0.939f, 0.0595f, 0.0691f, 0.0392f, 0.00305f, 0.00392f };
-static const skcms_TransferFunction dot_gain_transfer_fn =
-    { 1.737f, 1.0f, 0.0f, 0.0626f, 0.02353f, 0.0f, 0.0f };
-
-typedef struct {
-    const char*                   filename;
-    const skcms_TransferFunction* expect_approx_tf;
-} ProfileTestCase;
-
-static const ProfileTestCase profile_test_cases[] = {
+static const char* profile_test_cases[] = {
     // iccMAX profiles that we can't parse at all
-    { "profiles/color.org/sRGB_D65_colorimetric.icc", NULL },
-    { "profiles/color.org/sRGB_D65_MAT.icc",          NULL },
-    { "profiles/color.org/sRGB_ISO22028.icc",         NULL },
+    "profiles/color.org/sRGB_D65_colorimetric.icc",
+    "profiles/color.org/sRGB_D65_MAT.icc",
+    "profiles/color.org/sRGB_ISO22028.icc",
 
     // V2 or V4 profiles that only include A2B/B2A tags (no TRC or XYZ)
-    { "profiles/color.org/sRGB_ICC_v4_Appearance.icc", NULL },
-    { "profiles/color.org/sRGB_v4_ICC_preference.icc", NULL },
-    { "profiles/color.org/Upper_Left.icc",             NULL },
-    { "profiles/color.org/Upper_Right.icc",            NULL },
-    { "profiles/misc/Apple_Wide_Color.icc",            NULL },
-    { "profiles/misc/Coated_FOGRA39_CMYK.icc",         NULL },
-    { "profiles/misc/ColorLogic_ISO_Coated_CMYK.icc",  NULL }, // Has kTRC.
-    { "profiles/misc/Japan_Color_2001_Coated.icc",     NULL },
-    { "profiles/misc/Lexmark_X110.icc",                NULL },
-    { "profiles/misc/MartiMaria_browsertest_A2B.icc",  NULL },
-    { "profiles/misc/PrintOpen_ISO_Coated_CMYK.icc",   NULL }, // Has kTRC.
-    { "profiles/misc/sRGB_ICC_v4_beta.icc",            NULL },
-    { "profiles/misc/SWOP_Coated_20_GCR_CMYK.icc",     NULL },
-    { "profiles/misc/US_Web_Coated_SWOP_CMYK.icc",     NULL },
-    { "profiles/misc/XRite_GRACol7_340_CMYK.icc",      NULL },
+    "profiles/color.org/sRGB_ICC_v4_Appearance.icc",
+    "profiles/color.org/sRGB_v4_ICC_preference.icc",
+    "profiles/color.org/Upper_Left.icc",
+    "profiles/color.org/Upper_Right.icc",
+    "profiles/misc/Apple_Wide_Color.icc",
+    "profiles/misc/Coated_FOGRA39_CMYK.icc",
+    "profiles/misc/ColorLogic_ISO_Coated_CMYK.icc",  // Has kTRC.
+    "profiles/misc/Japan_Color_2001_Coated.icc",
+    "profiles/misc/Lexmark_X110.icc",
+    "profiles/misc/MartiMaria_browsertest_A2B.icc",
+    "profiles/misc/PrintOpen_ISO_Coated_CMYK.icc",   // Has kTRC.
+    "profiles/misc/sRGB_ICC_v4_beta.icc",
+    "profiles/misc/SWOP_Coated_20_GCR_CMYK.icc",
+    "profiles/misc/US_Web_Coated_SWOP_CMYK.icc",
+    "profiles/misc/XRite_GRACol7_340_CMYK.icc",
 
     // V2 monochrome output profiles that include kTRC but no A2B
-    { "profiles/misc/Dot_Gain_20_Grayscale.icc", &dot_gain_transfer_fn }, // kTRC table
-    { "profiles/misc/Gray_Gamma_22.icc",         NULL }, // kTRC gamma
+    "profiles/misc/Dot_Gain_20_Grayscale.icc",  // kTRC table
+    "profiles/misc/Gray_Gamma_22.icc",          // kTRC gamma
 
     // V4 profiles with parametric TRC curves and XYZ
-    { "profiles/mobile/Display_P3_parametric.icc", NULL },
-    { "profiles/mobile/sRGB_parametric.icc",       NULL },
-    { "profiles/mobile/iPhone7p.icc",              NULL },
-    { "profiles/misc/sRGB_lcms.icc",               NULL },
+    "profiles/mobile/Display_P3_parametric.icc",
+    "profiles/mobile/sRGB_parametric.icc",
+    "profiles/mobile/iPhone7p.icc",
+    "profiles/misc/sRGB_lcms.icc",
 
     // V4 profiles with LUT TRC curves and XYZ
-    { "profiles/mobile/Display_P3_LUT.icc", &srgb_transfer_fn },
-    { "profiles/mobile/sRGB_LUT.icc",       &srgb_transfer_fn },
+    "profiles/mobile/Display_P3_LUT.icc",
+    "profiles/mobile/sRGB_LUT.icc",
 
     // V2 profiles with gamma TRC and XYZ
-    { "profiles/color.org/Lower_Left.icc",      NULL },
-    { "profiles/color.org/Lower_Right.icc",     NULL },
-    { "profiles/misc/AdobeRGB.icc",             NULL },
-    { "profiles/misc/Color_Spin_Gamma_18.icc",  NULL },
-    { "profiles/misc/Generic_RGB_Gamma_18.icc", NULL },
+    "profiles/color.org/Lower_Left.icc",
+    "profiles/color.org/Lower_Right.icc",
+    "profiles/misc/AdobeRGB.icc",
+    "profiles/misc/AdobeColorSpin.icc",
+    "profiles/misc/Color_Spin_Gamma_18.icc",
+    "profiles/misc/Generic_RGB_Gamma_18.icc",
 
     // V2 profiles with LUT TRC and XYZ
-    { "profiles/color.org/sRGB2014.icc",     &srgb_transfer_fn },
-    { "profiles/sRGB_Facebook.icc",          &srgb_transfer_fn },
-    { "profiles/misc/Apple_Color_LCD.icc",   &srgb_transfer_fn },
-    { "profiles/misc/HD_709.icc",            &srgb_transfer_fn },
-    { "profiles/misc/sRGB_black_scaled.icc", &srgb_transfer_fn },
-    { "profiles/misc/sRGB_HP.icc",           &srgb_transfer_fn },
-    { "profiles/misc/sRGB_HP_2.icc",         &srgb_transfer_fn },
+    "profiles/color.org/sRGB2014.icc",
+    "profiles/sRGB_Facebook.icc",
+    "profiles/misc/Apple_Color_LCD.icc",
+    "profiles/misc/HD_709.icc",
+    "profiles/misc/sRGB_black_scaled.icc",
+    "profiles/misc/sRGB_HP.icc",
+    "profiles/misc/sRGB_HP_2.icc",
+
+    // Calibrated monitor profile with identical sRGB-ish tables.
+    "profiles/misc/sRGB_Calibrated_Homogeneous.icc",
+
+    // Calibrated monitor profile with slightly different sRGB-like tables for each channel.
+    "profiles/misc/sRGB_Calibrated_Heterogeneous.icc",
 
     // Calibrated monitor profile with non-monotonic TRC tables. We approximate, but badly.
-    { "profiles/misc/DisplayCal_ASUS_NonMonotonic.icc", NULL },
+    "profiles/misc/DisplayCal_ASUS_NonMonotonic.icc",
 
     // Hard test profile. Non-invertible XYZ, three separate tables that fail to approximate
-    { "profiles/misc/MartiMaria_browsertest_HARD.icc", NULL },
+    "profiles/misc/MartiMaria_browsertest_HARD.icc",
 
     // Camera profile with three separate tables that fail to approximate
-    { "profiles/misc/Phase_One_P25.icc", NULL },
+    "profiles/misc/Phase_One_P25.icc",
 
     // Profile claims to be sRGB, but seems quite different
-    { "profiles/misc/Kodak_sRGB.icc", &kodak_transfer_fn },
+    "profiles/misc/Kodak_sRGB.icc",
 
     // Bad profiles found inn the wild
-    { "profiles/misc/ColorGATE_Sihl_PhotoPaper.icc", NULL }, // Broken tag table, and A2B0 fails to parse
-    { "profiles/misc/bad_pcs.icc",                   NULL }, // PCS is 'RGB '
+    "profiles/misc/ColorGATE_Sihl_PhotoPaper.icc",  // Broken tag table, and A2B0 fails to parse
+    "profiles/misc/bad_pcs.icc",                    // PCS is 'RGB '
 
     // fuzzer generated profiles that found parsing bugs
 
     // Bad tag table data - these should not parse
-    { "profiles/fuzz/last_tag_too_small.icc",  NULL }, // skia:7592
-    { "profiles/fuzz/named_tag_too_small.icc", NULL }, // skia:7592
+    "profiles/fuzz/last_tag_too_small.icc",   // skia:7592
+    "profiles/fuzz/named_tag_too_small.icc",  // skia:7592
 
     // Bad tag data - these should not parse
-    { "profiles/fuzz/curv_size_overflow.icc",          NULL }, // skia:7593
-    { "profiles/fuzz/truncated_curv_tag.icc",          NULL }, // oss-fuzz:6103
-    { "profiles/fuzz/zero_a.icc",                      NULL }, // oss-fuzz:????
-    { "profiles/fuzz/a2b_too_many_input_channels.icc", NULL }, // oss-fuzz:6521
+    "profiles/fuzz/curv_size_overflow.icc",           // skia:7593
+    "profiles/fuzz/truncated_curv_tag.icc",           // oss-fuzz:6103
+    "profiles/fuzz/zero_a.icc",                       // oss-fuzz:????
+    "profiles/fuzz/a2b_too_many_input_channels.icc",  // oss-fuzz:6521
 };
 
-static void check_roundtrip_transfer_functions(const skcms_TransferFunction* fwd,
-                                               const skcms_TransferFunction* rev,
-                                               float tol) {
-    for (int i = 0; i < 256; ++i) {
-        float t = i / 255.0f;
-        float x = skcms_TransferFunction_eval(rev, skcms_TransferFunction_eval(fwd, t));
-        expect((int)(x * 255.0f + 0.5f) == i);
-        expect(fabsf_(x - t) < tol);
-    }
-}
-
-static bool has_single_approx_trc(const skcms_ICCProfile* profile, skcms_TransferFunction* approx,
-                                  float* max_error) {
-    if (!profile->has_trc) {
-        return false;
-    }
-
-    skcms_TransferFunction tf[3];
-    for (int i = 0; i < 3; ++i) {
-        if (!skcms_ApproximateCurve(&profile->trc[i], &tf[i], max_error)) {
-            return false;
-        }
-    }
-
-    if (0 != memcmp(&tf[0], &tf[1], sizeof(tf[0])) || 0 != memcmp(&tf[0], &tf[2], sizeof(tf[0]))) {
-        return false;
-    }
-
-    *approx = tf[0];
-    return true;
-}
-
 static void test_Parse(bool regen) {
     for (int i = 0; i < ARRAY_COUNT(profile_test_cases); ++i) {
-        const ProfileTestCase* test = profile_test_cases + i;
+        const char* filename = profile_test_cases[i];
 
         void* buf = NULL;
         size_t len = 0;
-        expect(load_file(test->filename, &buf, &len));
+        expect(load_file(filename, &buf, &len));
         skcms_ICCProfile profile;
         bool parsed = skcms_Parse(buf, len, &profile);
 
@@ -572,7 +535,7 @@
         fclose(dump);
 
         char ref_filename[256];
-        if (snprintf(ref_filename, sizeof(ref_filename), "%s.txt", test->filename) < 0) {
+        if (snprintf(ref_filename, sizeof(ref_filename), "%s.txt", filename) < 0) {
             expect(false);
         }
 
@@ -587,7 +550,7 @@
 
             if (dump_len != ref_len || memcmp(dump_buf, ref_buf, dump_len) != 0) {
                 // Write out the new data on a mismatch
-                fprintf(stderr, "Parse mismatch for %s:\n", test->filename);
+                fprintf(stderr, "Parse mismatch for %s:\n", filename);
                 fwrite(dump_buf, 1, dump_len, stderr);
                 fprintf(stderr, "\n");
                 expect(false);
@@ -595,25 +558,6 @@
             free(ref_buf);
         }
 
-        skcms_TransferFunction approx_tf;
-        float max_error;
-        bool approx_tf_result = has_single_approx_trc(&profile, &approx_tf, &max_error);
-        expect(approx_tf_result == !!test->expect_approx_tf);
-        if (approx_tf_result) {
-            // For this check, run every byte value through the forward version of one TF, and
-            // the inverse of the other, and make sure it round-trips (using both combinations).
-            skcms_TransferFunction approx_inverse_tf;
-            skcms_TransferFunction expect_inverse_tf;
-            expect(skcms_TransferFunction_invert(&approx_tf, &approx_inverse_tf));
-            expect(skcms_TransferFunction_invert(test->expect_approx_tf, &expect_inverse_tf));
-
-            // This function verifies that all bytes round-trip perfectly, but also takes a
-            // tolerance to further limit the error after round-trip. We can currently get this
-            // within ~30% of a byte (0.0011).
-            check_roundtrip_transfer_functions(&approx_tf, &expect_inverse_tf, 0.02f);
-            check_roundtrip_transfer_functions(test->expect_approx_tf, &approx_inverse_tf, 0.02f);
-        }
-
         free(buf);
         free(dump_buf);
     }