/*
 * Copyright 2018 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef INCLUDE_ALSA_CFM_RECORDER_H_
#define INCLUDE_ALSA_CFM_RECORDER_H_

#include <alsa/asoundlib.h>
#include <math.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <unistd.h>

/* Creates and initialize new recorder object. */
struct alsa_conformance_recorder *
recorder_create(double merge_threshold_t, snd_pcm_sframes_t merge_threshold_sz);

/* Compute the median of steps. */
void recorder_compute_step_median(struct alsa_conformance_recorder *recorder);

/* Query step median */
snd_pcm_sframes_t get_step_median(struct alsa_conformance_recorder *recorder);

/* Destroys recorder object. */
void recorder_destroy(struct alsa_conformance_recorder *recorder);

/* Adds new point (time, frames) into the recorder. The return value
 * indicates whether it's merged with the previous point. */
int recorder_add(struct alsa_conformance_recorder *recorder,
		 struct timespec time, unsigned long frames);

/* Creates and initializes new recorder list. */
struct alsa_conformance_recorder_list *recorder_list_create();

/* Destroys recorder list. */
void recorder_list_destroy(struct alsa_conformance_recorder_list *list);

/* Adds new recorder into the recorder list. */
void recorder_list_add_recorder(struct alsa_conformance_recorder_list *list,
				struct alsa_conformance_recorder *recorder);

/* Prints results of recorders. */
void recorder_list_print_result(struct alsa_conformance_recorder_list *list);

#endif /* INCLUDE_ALSA_CFM_RECORDER_H_ */
