Sound Open Firmware
Loading...
Searching...
No Matches
audio_stream.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright(c) 2020 - 2023 Intel Corporation. All rights reserved.
4 *
5 * Author: Karol Trzcinski <karolx.trzcinski@linux.intel.com>
6 * Adrian Warecki <adrian.warecki@intel.com>
7 */
8
15#ifndef __MODULE_AUDIO_AUDIO_STREAM_H__
16#define __MODULE_AUDIO_AUDIO_STREAM_H__
17
18#include <stdint.h>
19#include <stdbool.h>
20#include <rtos/panic.h>
21#include "../ipc/stream.h"
22
36 AUDIOBUF_STATE_INITIAL, /* Initial state, hw params not configured. */
37 AUDIOBUF_STATE_READY, /* Stream ready, hw params configured */
38 AUDIOBUF_STATE_END_OF_STREAM, /* Detected End Of Stream */
39 AUDIOBUF_STATE_END_OF_STREAM_FLUSH, /* Detected End Of Stream, generating silence
40 * to flush buffers in dp modules.
41 */
42};
43
86
99static inline size_t circ_buf_frames_without_wrap(const void *began, const void *end,
100 size_t sample_bytes, size_t channels)
101{
102 assert(sample_bytes > 0);
103 assert(channels > 0);
104 assert((const char *)end >= (const char *)began);
105
106 return ((const char *)end - (const char *)began) / sample_bytes / channels;
107}
108
117 const void *buf_start;
118 const void *buf_end;
119 const void *ptr;
120};
121
129 void *buf_start;
130 void *buf_end;
131 void *ptr;
132};
133
141static inline size_t cir_buf_samples_to_wrap_s16(const int16_t *ptr, const int16_t *buf_start,
142 size_t buf_samples)
143{
144 const int16_t *const buf_end = buf_start + buf_samples;
145
146 assert(buf_end >= ptr);
147
148 return buf_end - ptr;
149}
150
158static inline size_t cir_buf_samples_to_wrap_s32(const int32_t *ptr, const int32_t *buf_start,
159 size_t buf_samples)
160{
161 const int32_t *const buf_end = buf_start + buf_samples;
162
163 assert(buf_end >= ptr);
164
165 return buf_end - ptr;
166}
167
175static inline size_t cir_buf_samples_without_wrap_s16(const void *ptr, const void *buf_end)
176{
177 size_t to_end = (const int16_t *)buf_end - (const int16_t *)ptr;
178
179 assert((uintptr_t)buf_end >= (uintptr_t)ptr);
180 return to_end;
181}
182
190static inline size_t cir_buf_samples_without_wrap_s32(const void *ptr, const void *buf_end)
191{
192 size_t to_end = (const int32_t *)buf_end - (const int32_t *)ptr;
193
194 assert((uintptr_t)buf_end >= (uintptr_t)ptr);
195 return to_end;
196}
197
205static inline size_t cir_buf_bytes_without_wrap(const void *ptr, const void *buf_end)
206{
207 assert((uintptr_t)buf_end >= (uintptr_t)ptr);
208 return (uintptr_t)buf_end - (uintptr_t)ptr;
209}
210
218static inline void *cir_buf_wrap(const void *ptr, const void *buf_addr, const void *buf_end)
219{
220 if (ptr >= buf_end)
221 ptr = (const char *)buf_addr +
222 ((const char *)ptr - (const char *)buf_end);
223
224 assert((uintptr_t)ptr <= (uintptr_t)buf_end);
225
226 return (void *)ptr;
227}
228
236static inline const void *source_cir_buf_wrap(const void *ptr, const void *buf_addr,
237 const void *buf_end)
238{
239 if (ptr >= buf_end)
240 ptr = (const char *)buf_addr +
241 ((const char *)ptr - (const char *)buf_end);
242
243 assert((uintptr_t)ptr <= (uintptr_t)buf_end);
244
245 return ptr;
246}
247
255static inline size_t cir_buf_bytes_without_wrap_rewind(const void *ptr, const void *buf_start)
256{
257 assert((uintptr_t)ptr >= (uintptr_t)buf_start);
258
259 return (uintptr_t)ptr - (uintptr_t)buf_start;
260}
261
270static inline const void *source_cir_buf_rewind_wrap(const void *ptr, const void *buf_start,
271 const void *buf_end)
272{
273 if (ptr < buf_start)
274 ptr = (const char *)buf_end - ((const char *)buf_start - (const char *)ptr);
275
276 assert((uintptr_t)ptr >= (uintptr_t)buf_start);
277
278 return ptr;
279}
280
283#endif /* __MODULE_AUDIO_AUDIO_STREAM_H__ */
sof_audio_buffer_state
Define states of an audio stream buffer connecting two components.
Definition audio_stream.h:35
static size_t cir_buf_samples_to_wrap_s32(const int32_t *ptr, const int32_t *buf_start, size_t buf_samples)
Calculates numbers of s32 samples to buffer wrap.
Definition audio_stream.h:158
static size_t cir_buf_samples_to_wrap_s16(const int16_t *ptr, const int16_t *buf_start, size_t buf_samples)
Calculates numbers of s16 samples to buffer wrap.
Definition audio_stream.h:141
static size_t cir_buf_bytes_without_wrap(const void *ptr, const void *buf_end)
Calculates number of bytes to buffer wrap when reading a circular buffer forward from current pointer...
Definition audio_stream.h:205
static size_t cir_buf_bytes_without_wrap_rewind(const void *ptr, const void *buf_start)
Calculates number of bytes to buffer wrap when reading a circular buffer backwards from current point...
Definition audio_stream.h:255
static size_t cir_buf_samples_without_wrap_s32(const void *ptr, const void *buf_end)
Calculates numbers of s32 samples to buffer wrap when reading a circular buffer forward from current ...
Definition audio_stream.h:190
static size_t cir_buf_samples_without_wrap_s16(const void *ptr, const void *buf_end)
Calculates numbers of s16 samples to buffer wrap when reading a circular buffer forward from current ...
Definition audio_stream.h:175
static const void * source_cir_buf_rewind_wrap(const void *ptr, const void *buf_start, const void *buf_end)
Verifies the pointer and performs rollover when reading a read-only circular buffer backwards past it...
Definition audio_stream.h:270
static const void * source_cir_buf_wrap(const void *ptr, const void *buf_addr, const void *buf_end)
Verifies a read pointer and performs rollover when reaching the end of the circular buffer.
Definition audio_stream.h:236
static void * cir_buf_wrap(const void *ptr, const void *buf_addr, const void *buf_end)
Verifies the pointer and performs rollover when reaching the end of the circular buffer.
Definition audio_stream.h:218
static size_t circ_buf_frames_without_wrap(const void *began, const void *end, size_t sample_bytes, size_t channels)
Number of whole frames available before a circular buffer wraps.
Definition audio_stream.h:99
@ AUDIOBUF_STATE_END_OF_STREAM_FLUSH
Definition audio_stream.h:39
@ AUDIOBUF_STATE_INITIAL
Definition audio_stream.h:36
@ AUDIOBUF_STATE_END_OF_STREAM
Definition audio_stream.h:38
@ AUDIOBUF_STATE_READY
Definition audio_stream.h:37
sof_ipc_frame
Definition stream.h:16
#define SOF_IPC_MAX_CHANNELS
Definition stream.h:13
#define assert(x)
Definition panic.h:19
Writable view of sink data in a circular buffer.
Definition audio_stream.h:128
void * ptr
Current write pointer within the buffer.
Definition audio_stream.h:131
void * buf_start
Start address of the circular buffer.
Definition audio_stream.h:129
void * buf_end
End address of the circular buffer.
Definition audio_stream.h:130
Read-only view of source data in a circular buffer.
Definition audio_stream.h:116
const void * ptr
Current read pointer within the buffer.
Definition audio_stream.h:119
const void * buf_end
End address of the circular buffer.
Definition audio_stream.h:118
const void * buf_start
Start address of the circular buffer.
Definition audio_stream.h:117
set of parameters describing audio stream this structure is shared between audio_stream....
Definition audio_stream.h:49
uint16_t chmap[SOF_IPC_MAX_CHANNELS]
channel map - SOF_CHMAP_
Definition audio_stream.h:82
uint16_t align_shift_idx
the free/available bytes of sink/source right shift align_shift_idx, the result multiplied by align_f...
Definition audio_stream.h:75
enum sof_ipc_frame frame_fmt
Sample data format.
Definition audio_stream.h:52
uint32_t buffer_fmt
enum sof_ipc_buffer_format
Definition audio_stream.h:80
bool underrun_permitted
indicates whether underrun is permitted
Definition audio_stream.h:78
uint32_t pipeline_id
Definition audio_stream.h:51
uint16_t align_frame_cnt
align_frame_cnt indicates minimum number of frames that satisfies both byte align and frame align req...
Definition audio_stream.h:68
uint32_t rate
Number of data frames per second [Hz].
Definition audio_stream.h:55
bool overrun_permitted
indicates whether overrun is permitted
Definition audio_stream.h:77
enum sof_audio_buffer_state state
audio stream state
Definition audio_stream.h:84
enum sof_ipc_frame valid_sample_fmt
Definition audio_stream.h:53
uint16_t channels
Number of samples in each frame.
Definition audio_stream.h:56
uint32_t id
Definition audio_stream.h:50