15#ifndef __MODULE_AUDIO_AUDIO_STREAM_H__
16#define __MODULE_AUDIO_AUDIO_STREAM_H__
21#include "../ipc/stream.h"
100 size_t sample_bytes,
size_t channels)
104 assert((
const char *)end >= (
const char *)began);
106 return ((
const char *)end - (
const char *)began) / sample_bytes / channels;
144 const int16_t *
const buf_end = buf_start + buf_samples;
148 return buf_end - ptr;
161 const int32_t *
const buf_end = buf_start + buf_samples;
165 return buf_end - ptr;
177 size_t to_end = (
const int16_t *)buf_end - (
const int16_t *)ptr;
179 assert((uintptr_t)buf_end >= (uintptr_t)ptr);
192 size_t to_end = (
const int32_t *)buf_end - (
const int32_t *)ptr;
194 assert((uintptr_t)buf_end >= (uintptr_t)ptr);
207 assert((uintptr_t)buf_end >= (uintptr_t)ptr);
208 return (uintptr_t)buf_end - (uintptr_t)ptr;
218static inline void *
cir_buf_wrap(
const void *ptr,
const void *buf_addr,
const void *buf_end)
221 ptr = (
const char *)buf_addr +
222 ((
const char *)ptr - (
const char *)buf_end);
224 assert((uintptr_t)ptr <= (uintptr_t)buf_end);
240 ptr = (
const char *)buf_addr +
241 ((
const char *)ptr - (
const char *)buf_end);
243 assert((uintptr_t)ptr <= (uintptr_t)buf_end);
257 assert((uintptr_t)ptr >= (uintptr_t)buf_start);
259 return (uintptr_t)ptr - (uintptr_t)buf_start;
274 ptr = (
const char *)buf_end - ((
const char *)buf_start - (
const char *)ptr);
276 assert((uintptr_t)ptr >= (uintptr_t)buf_start);
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