#ifdef MY_CODE
void audio_convert_rate(int cur_rate, int out_rate, uint8_t *buf,
size_t buf_sz) {
/* XXX 16-bit stereo buffer */
uint32_t *buf32 = (uint32_t *) buf;
int div, i;
if (cur_rate == out_rate) {
return;
}
div = MAX(cur_rate, out_rate) / MIN(cur_rate, out_rate);
if(div <= 0)
return;
if (cur_rate > out_rate) {
for (i = buf_sz - 1; i >= 0; i--) {
buf32[i] = buf32[i / div];
}
} else {
for (i = 0; i < buf_sz; i++) {
buf32[i] = buf32[div * i];
}
}
}
#else
void audio_convert_rate(int cur_rate, int out_rate, uint8_t *buf, size_t buf_sz)
{
if (cur_rate == out_rate) return;
int div = MAX(cur_rate, out_rate) / MIN(cur_rate, out_rate);
if (div <= 0) return;
uint32_t *buf32 = (uint32_t *) buf;
if (cur_rate > out_rate) {
size_t src_idx = 0;
for (size_t i = 0; i < buf_sz; i++) {
buf32[i] = buf32[src_idx];
src_idx += div;
}
} else {
int src_idx = (buf_sz / div) - 1;
for (int i = buf_sz - 1; i >= 0; i--) {
buf32[i] = buf32[src_idx];
if (i % div == 0) src_idx--;
}
}
}
#endif
эти функции равнозначны по результату? какая из них быстрее будет работать?