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