// Single-producer / single-consumer ring of interleaved int32 frames in PSRAM. // The producer is a source task, the consumer the AES67 TX pull callback (must never block). #pragma once #include #include #include "esp_err.h" esp_err_t audio_ring_init(size_t capacity_frames, int channels); size_t audio_ring_level(void); // frames available to read size_t audio_ring_space(void); // frames that can be written size_t audio_ring_write(const int32_t *frames, size_t n); // producer; returns frames written size_t audio_ring_read(int32_t *frames, size_t n); // consumer; returns frames read void audio_ring_flush(void); // consumer side: drop everything buffered // Monotonic frame counters (wrap at 2^32): frames written so far / read (played) so far. uint32_t audio_ring_written(void); uint32_t audio_ring_read_pos(void);