1// SPDX-License-Identifier: GPL-2.0
2//
3// frame-cache.h - maintainer of cache for data frame.
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#include <alsa/asoundlib.h>
10
11struct frame_cache {
12	void *buf;
13	void *buf_ptr;
14
15	unsigned int remained_count;
16
17	snd_pcm_access_t access;
18	unsigned int bytes_per_sample;
19	unsigned int samples_per_frame;
20	unsigned int frames_per_cache;
21
22	void (*align_frames)(struct frame_cache *cache,
23			     unsigned int consumed_count);
24};
25
26int frame_cache_init(struct frame_cache *cache, snd_pcm_access_t access,
27		     unsigned int bytes_per_sample,
28		     unsigned int samples_per_frame,
29		     unsigned int frames_per_cache);
30void frame_cache_destroy(struct frame_cache *cache);
31
32static inline unsigned int frame_cache_get_count(struct frame_cache *cache)
33{
34	return cache->remained_count;
35}
36
37static inline void frame_cache_increase_count(struct frame_cache *cache,
38					      unsigned int frame_count)
39{
40	cache->remained_count += frame_count;
41}
42
43static inline void frame_cache_reduce(struct frame_cache *cache,
44				      unsigned int consumed_count)
45{
46	cache->align_frames(cache, consumed_count);
47}
48