1// SPDX-License-Identifier: GPL-2.0
2//
3// generator.c - a generator for test with buffers of PCM frames.
4//
5// Copyright (c) 2018 Takashi Sakamoto <o-takashi@sakamocchi.jp>
6//
7// Licensed under the terms of the GNU General Public License, version 2.
8
9#ifndef __ALSA_UTILS_AXFER_TEST_GENERATOR__H_
10#define __ALSA_UTILS_AXFER_TEST_GENERATOR__H_
11
12#include <stdint.h>
13#include <alsa/asoundlib.h>
14
15struct test_generator;
16typedef int (*generator_cb_t)(struct test_generator *gen,
17			      snd_pcm_access_t access,
18			      snd_pcm_format_t sample_format,
19			      unsigned int samples_per_frame,
20			      void *frame_buffer, unsigned int frame_count);
21
22struct test_generator {
23	int fd;
24	uint64_t access_mask;
25	uint64_t sample_format_mask;
26	unsigned int min_samples_per_frame;
27	unsigned int max_samples_per_frame;
28	unsigned int min_frame_count;
29	unsigned int max_frame_count;
30	unsigned int step_frame_count;
31
32	generator_cb_t cb;
33	void *private_data;
34};
35
36int generator_context_init(struct test_generator *gen,
37			   uint64_t access_mask, uint64_t sample_format_mask,
38			   unsigned int min_samples_per_frame,
39			   unsigned int max_samples_per_frame,
40			   unsigned int min_frame_count,
41			   unsigned int max_frame_count,
42			   unsigned int step_frame_count,
43			   unsigned int private_size);
44int generator_context_run(struct test_generator *gen, generator_cb_t cb);
45void generator_context_destroy(struct test_generator *gen);
46
47#endif
48