You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rtpengine/t/test-resample.c

60 lines
1.6 KiB

#include <libavutil/frame.h>
#include <libavutil/opt.h>
#include <assert.h>
#include "resample.h"
#include "codeclib.h"
#include "fix_frame_channel_layout.h"
void test_1(int in_samples, int in_format, int in_rate, int in_channels, bool no_filter,
int out_format, int out_rate, int out_channels,
int out_exp_samples)
{
printf("testing %i %i %i %i %i %i %i %i\n", in_samples, in_format, in_rate, in_channels,
out_format, out_rate, out_channels,
out_exp_samples);
AVFrame *in_f = av_frame_alloc();
in_f->nb_samples = in_samples;
in_f->format = in_format;
in_f->sample_rate = in_rate;
DEF_CH_LAYOUT(&in_f->CH_LAYOUT, in_channels);
int ret = av_frame_get_buffer(in_f, 0);
assert(ret == 0);
memset(in_f->extended_data[0], 0, in_f->nb_samples * av_get_bytes_per_sample(in_f->format));
resample_t resampler;
ZERO(resampler);
resampler.no_filter = no_filter;
format_t out_fmt = {
.channels = out_channels,
.clockrate = out_rate,
.format = out_format,
};
AVFrame *out_f = resample_frame(&resampler, in_f, &out_fmt);
assert(out_f != NULL);
printf("received samples %i\n", out_f->nb_samples);
assert(out_f->nb_samples == out_exp_samples);
av_frame_free(&in_f);
av_frame_free(&out_f);
resample_shutdown(&resampler);
}
int main(void) {
codeclib_init(0);
test_1(320, AV_SAMPLE_FMT_S16, 16000, 1, false, AV_SAMPLE_FMT_S16, 8000, 1, 144);
test_1(160, AV_SAMPLE_FMT_S16, 8000, 1, false, AV_SAMPLE_FMT_S16, 16000, 1, 288);
test_1(320, AV_SAMPLE_FMT_S16, 16000, 1, true, AV_SAMPLE_FMT_S16, 8000, 1, 160);
test_1(160, AV_SAMPLE_FMT_S16, 8000, 1, true, AV_SAMPLE_FMT_S16, 16000, 1, 320);
return 0;
}
int get_local_log_level(unsigned int u) {
return 7;
}