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 
15 struct test_generator;
16 typedef 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 
22 struct 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 
36 int 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);
44 int generator_context_run(struct test_generator *gen, generator_cb_t cb);
45 void generator_context_destroy(struct test_generator *gen);
46 
47 #endif
48