153a5a1b3Sopenharmony_ci/***
253a5a1b3Sopenharmony_ci  This file is part of PulseAudio.
353a5a1b3Sopenharmony_ci
453a5a1b3Sopenharmony_ci  Copyright 2013 Collabora Ltd.
553a5a1b3Sopenharmony_ci  Author: Arun Raghavan <arun.raghavan@collabora.co.uk>
653a5a1b3Sopenharmony_ci
753a5a1b3Sopenharmony_ci  PulseAudio is free software; you can redistribute it and/or modify
853a5a1b3Sopenharmony_ci  it under the terms of the GNU Lesser General Public License as published
953a5a1b3Sopenharmony_ci  by the Free Software Foundation; either version 2.1 of the License,
1053a5a1b3Sopenharmony_ci  or (at your option) any later version.
1153a5a1b3Sopenharmony_ci
1253a5a1b3Sopenharmony_ci  PulseAudio is distributed in the hope that it will be useful, but
1353a5a1b3Sopenharmony_ci  WITHOUT ANY WARRANTY; without even the implied warranty of
1453a5a1b3Sopenharmony_ci  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1553a5a1b3Sopenharmony_ci  General Public License for more details.
1653a5a1b3Sopenharmony_ci
1753a5a1b3Sopenharmony_ci  You should have received a copy of the GNU Lesser General Public License
1853a5a1b3Sopenharmony_ci  along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
1953a5a1b3Sopenharmony_ci***/
2053a5a1b3Sopenharmony_ci
2153a5a1b3Sopenharmony_ci#ifdef HAVE_CONFIG_H
2253a5a1b3Sopenharmony_ci#include <config.h>
2353a5a1b3Sopenharmony_ci#endif
2453a5a1b3Sopenharmony_ci
2553a5a1b3Sopenharmony_ci#include <pulse/pulseaudio.h>
2653a5a1b3Sopenharmony_ci
2753a5a1b3Sopenharmony_citypedef struct pa_lo_test_context {
2853a5a1b3Sopenharmony_ci    /* Tests need to set these */
2953a5a1b3Sopenharmony_ci    const char *context_name;
3053a5a1b3Sopenharmony_ci
3153a5a1b3Sopenharmony_ci    pa_sample_spec sample_spec;
3253a5a1b3Sopenharmony_ci    int play_latency; /* ms */
3353a5a1b3Sopenharmony_ci    int rec_latency; /* ms */
3453a5a1b3Sopenharmony_ci
3553a5a1b3Sopenharmony_ci    pa_stream_request_cb_t write_cb, read_cb;
3653a5a1b3Sopenharmony_ci
3753a5a1b3Sopenharmony_ci    /* These are set by lo_test_init() */
3853a5a1b3Sopenharmony_ci    pa_mainloop *mainloop;
3953a5a1b3Sopenharmony_ci    pa_context *context;
4053a5a1b3Sopenharmony_ci
4153a5a1b3Sopenharmony_ci    pa_stream *play_stream, *rec_stream;
4253a5a1b3Sopenharmony_ci
4353a5a1b3Sopenharmony_ci    int ss, fs; /* sample size, frame size for convenience */
4453a5a1b3Sopenharmony_ci} pa_lo_test_context;
4553a5a1b3Sopenharmony_ci
4653a5a1b3Sopenharmony_ci/* Initialise the test parameters, connect */
4753a5a1b3Sopenharmony_ciint pa_lo_test_init(pa_lo_test_context *ctx);
4853a5a1b3Sopenharmony_ci/* Start running the test */
4953a5a1b3Sopenharmony_ciint pa_lo_test_run(pa_lo_test_context *ctx);
5053a5a1b3Sopenharmony_ci/* Clean up */
5153a5a1b3Sopenharmony_civoid pa_lo_test_deinit(pa_lo_test_context *ctx);
5253a5a1b3Sopenharmony_ci
5353a5a1b3Sopenharmony_ci/* Return RMS for the given signal. Assumes the data is a single channel for
5453a5a1b3Sopenharmony_ci * simplicity */
5553a5a1b3Sopenharmony_cifloat pa_rms(const float *s, int n);
56