ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_audio_source_memory.c
Go to the documentation of this file.
1
15
17
18#include <stddef.h>
19#include <string.h>
20
21#include "ra8_audio_internal.h"
22
39{
40 if (ctx == nullptr) {
41 return k_ra8_err_null_ptr;
42 }
43 if (out_info == nullptr) {
44 return k_ra8_err_null_ptr;
45 }
47 *out_info = (ra8_audio_source_info_t){
48 .frame_bytes = state->frame.bytes,
49 .samples_per_frame = state->frame.sample_count,
50 .sample_rate_hz = state->frame.sample_rate_hz,
51 .channels = state->frame.channels,
52 .valid_bits = state->frame.valid_bits,
53 .format = state->frame.format,
54 };
55 return k_ra8_ok;
56}
57
77{
78 if (ctx == nullptr) {
79 return k_ra8_err_null_ptr;
80 }
81 if (buffer == nullptr) {
82 return k_ra8_err_null_ptr;
83 }
84 if (out_frame == nullptr) {
85 return k_ra8_err_null_ptr;
86 }
88 if (buffer->capacity < state->frame.bytes) {
90 }
91 (void)memcpy(buffer->data, state->frame.data, (size_t)state->frame.bytes);
92 *out_frame = state->frame;
93 out_frame->data = buffer->data;
94 return k_ra8_ok;
95}
96
112{
113 if (ctx == nullptr) {
114 return k_ra8_err_null_ptr;
115 }
116 return k_ra8_ok;
117}
118
120 .get_info = internal_memory_get_info,
121 .capture = internal_memory_capture,
122 .stream_start = nullptr,
123 .stop = internal_memory_stop,
124};
125
128 const ra8_audio_frame_t* frame)
129{
130 if (source == nullptr) {
131 return k_ra8_err_null_ptr;
132 }
133 if (state == nullptr) {
134 return k_ra8_err_null_ptr;
135 }
136 if (frame == nullptr) {
137 return k_ra8_err_null_ptr;
138 }
139 const ra8_err_t err = ra8_audio_frame_validate(frame);
140 if (err != k_ra8_ok) {
141 return err;
142 }
143 state->frame = *frame;
144 source->iface = &s_memory_source_iface;
145 source->ctx = state;
146 return k_ra8_ok;
147}
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
ra8_err_t ra8_audio_frame_validate(const ra8_audio_frame_t *frame)
Validate one PCM frame view.
Definition ra8_audio.c:47
struct ra8_audio_source_iface ra8_audio_source_iface_t
Opaque source vtable implemented by concrete audio backends.
Definition ra8_audio.h:30
Private audio-source vtable shared by concrete backends.
static const ra8_audio_source_iface_t s_memory_source_iface
static ra8_err_t internal_memory_stop(void *ctx)
Stop the memory replay backend.
static ra8_err_t internal_memory_get_info(void *ctx, ra8_audio_source_info_t *out_info)
Report metadata for the fixed memory frame.
ra8_err_t ra8_audio_source_memory_init(ra8_audio_source_t *source, ra8_audio_source_memory_state_t *state, const ra8_audio_frame_t *frame)
Bind one immutable PCM frame as a repeatable audio source.
static ra8_err_t internal_memory_capture(void *ctx, const ra8_audio_buffer_t *buffer, ra8_audio_frame_t *out_frame)
Copy the fixed memory frame into a caller buffer.
Fixed in-memory PCM replay backend for ra8_audio.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
@ k_ra8_err_null_ptr
Pointer was NULL where a valid pointer was required.
Definition ra8_err.h:478
@ k_ra8_err_invalid_size
Invalid size parameter (too large, too small, or misaligned).
Definition ra8_err.h:167
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
void * memcpy(void *dst, const void *src, size_t n)
Copy memory area between non-overlapping regions.
Caller-owned writable byte buffer.
Definition ra8_audio.h:44
uint32_t capacity
Writable capacity in bytes.
Definition ra8_audio.h:46
void * data
First writable byte.
Definition ra8_audio.h:45
Immutable view of one interleaved PCM frame.
Definition ra8_audio.h:56
uint32_t bytes
Valid byte count.
Definition ra8_audio.h:58
ra8_audio_format_t format
PCM container layout.
Definition ra8_audio.h:64
uint32_t sample_count
Sample frames per channel.
Definition ra8_audio.h:59
uint8_t channels
Interleaved channel count.
Definition ra8_audio.h:62
uint32_t sample_rate_hz
Sample frames per second.
Definition ra8_audio.h:60
const void * data
Borrowed interleaved PCM bytes.
Definition ra8_audio.h:57
uint8_t valid_bits
Significant bits per sample.
Definition ra8_audio.h:63
Fixed output contract and storage requirement for one source.
Definition ra8_audio.h:68
Caller-owned state for one immutable PCM replay frame.
ra8_audio_frame_t frame
Borrowed fixed frame (private).
Caller-owned handle binding an audio source backend and its state.
Definition ra8_audio.h:78
const ra8_audio_source_iface_t * iface
Bound source vtable (private).
Definition ra8_audio.h:79
void * ctx
Caller-owned backend state.
Definition ra8_audio.h:80