make use of libsoxr OpenMP support allowing parallel execution if multiple cores
Adrian Smith
9 years ago
49 | 49 | void (* soxr_delete)(soxr_t); |
50 | 50 | soxr_error_t (* soxr_process)(soxr_t, soxr_in_t, size_t, size_t *, soxr_out_t, size_t olen, size_t *); |
51 | 51 | size_t *(* soxr_num_clips)(soxr_t); |
52 | soxr_runtime_spec_t (* soxr_runtime_spec)(unsigned num_threads); | |
52 | 53 | // soxr_strerror is a macro so not included here |
53 | 54 | #endif |
54 | 55 | }; |
174 | 175 | |
175 | 176 | soxr_io_spec_t io_spec; |
176 | 177 | soxr_quality_spec_t q_spec; |
178 | soxr_runtime_spec_t r_spec; | |
177 | 179 | soxr_error_t error; |
178 | 180 | |
179 | 181 | LOG_INFO("resampling from %u -> %u", raw_sample_rate, outrate); |
195 | 197 | q_spec.phase_response = r->q_phase_response; |
196 | 198 | } |
197 | 199 | |
200 | r_spec = SOXR(r, runtime_spec, 0); // make use of libsoxr OpenMP support allowing parallel execution if multiple cores | |
201 | ||
198 | 202 | LOG_DEBUG("resampling with soxr_quality_spec_t[precision: %03.1f, passband_end: %03.6f, stopband_begin: %03.6f, " |
199 | 203 | "phase_response: %03.1f, flags: 0x%02x], soxr_io_spec_t[scale: %03.2f]", q_spec.precision, |
200 | 204 | q_spec.passband_end, q_spec.stopband_begin, q_spec.phase_response, q_spec.flags, io_spec.scale); |
201 | 205 | |
202 | r->resampler = SOXR(r, create, raw_sample_rate, outrate, 2, &error, &io_spec, &q_spec, NULL); | |
206 | r->resampler = SOXR(r, create, raw_sample_rate, outrate, 2, &error, &io_spec, &q_spec, &r_spec); | |
203 | 207 | if (error) { |
204 | 208 | LOG_INFO("soxr_create error: %s", soxr_strerror(error)); |
205 | 209 | return false; |
234 | 238 | |
235 | 239 | r->soxr_io_spec = dlsym(handle, "soxr_io_spec"); |
236 | 240 | r->soxr_quality_spec = dlsym(handle, "soxr_quality_spec"); |
241 | r->soxr_runtime_spec = dlsym(handle, "soxr_runtime_spec"); | |
237 | 242 | r->soxr_create = dlsym(handle, "soxr_create"); |
238 | 243 | r->soxr_delete = dlsym(handle, "soxr_delete"); |
239 | 244 | r->soxr_process = dlsym(handle, "soxr_process"); |