| 76 | } |
| 77 | |
| 78 | static bool BasisUEncodeInternal(int num_threads, basisu::basis_compressor_params& comp_params, PixelFormat pixel_format, dmArray<uint8_t>& out, int debug) |
| 79 | { |
| 80 | basisu::enable_debug_printf(debug); |
| 81 | |
| 82 | basisu::job_pool jpool(num_threads); |
| 83 | |
| 84 | comp_params.m_pJob_pool = &jpool; |
| 85 | comp_params.m_multithreading = num_threads > 1; |
| 86 | |
| 87 | comp_params.m_read_source_images = false; |
| 88 | comp_params.m_write_output_basis_files = false; |
| 89 | comp_params.m_status_output = debug; |
| 90 | comp_params.m_debug = debug; |
| 91 | |
| 92 | basisu::basis_compressor compressor; |
| 93 | if (!compressor.init(comp_params)) |
| 94 | { |
| 95 | dmLogError("basis_compressor::init() failed!\n"); |
| 96 | return false; |
| 97 | } |
| 98 | |
| 99 | basisu::interval_timer tm; |
| 100 | tm.start(); |
| 101 | |
| 102 | basisu::basis_compressor::error_code ec = compressor.process(); |
| 103 | |
| 104 | tm.stop(); |
| 105 | |
| 106 | if (ec == basisu::basis_compressor::cECSuccess) |
| 107 | { |
| 108 | dmLogDebug("Compression succeeded in %3.3f secs\n", tm.get_elapsed_secs()); |
| 109 | } |
| 110 | else |
| 111 | { |
| 112 | switch (ec) |
| 113 | { |
| 114 | case basisu::basis_compressor::cECFailedReadingSourceImages: dmLogError("Compressor failed reading a source image!\n"); break; |
| 115 | case basisu::basis_compressor::cECFailedValidating: dmLogError("Compressor failed 2darray/cubemap/video validation checks!\n"); break; |
| 116 | case basisu::basis_compressor::cECFailedEncodeUASTC: dmLogError("Compressor UASTC encode failed!\n"); break; |
| 117 | case basisu::basis_compressor::cECFailedFrontEnd: dmLogError("Compressor frontend stage failed!\n"); break; |
| 118 | case basisu::basis_compressor::cECFailedFontendExtract: dmLogError("Compressor frontend data extraction failed!\n"); break; |
| 119 | case basisu::basis_compressor::cECFailedBackend: dmLogError("Compressor backend stage failed!\n"); break; |
| 120 | case basisu::basis_compressor::cECFailedCreateBasisFile: dmLogError("Compressor failed creating Basis file data!\n"); break; |
| 121 | case basisu::basis_compressor::cECFailedWritingOutput: dmLogError("Compressor failed writing to output Basis file!\n"); break; |
| 122 | case basisu::basis_compressor::cECFailedUASTCRDOPostProcess: dmLogError("Compressor failed during the UASTC post process step!\n"); break; |
| 123 | default: dmLogError("basis_compress::process() failed!\n"); break; |
| 124 | } |
| 125 | |
| 126 | return false; |
| 127 | } |
| 128 | |
| 129 | //const std::vector<basisu::image_stats>& stats = compressor.get_stats(); |
| 130 | //double bits_per_texel = compressor.get_basis_bits_per_texel(); |
| 131 | // Statistics: |
| 132 | |
| 133 | // basisu::image_metrics im; |
| 134 | // im.calc(a, b, 0, 3); |
| 135 | // im.print("RGB "); |
no test coverage detected