Files
aes67-ESP32-P4/components/aes67_tx/include/aes67_tx.h
T
bsncubed c9e06da47c aes67_tx: mono sum; the source always delivers stereo
The pull callback's contract said "stream channels", but the player always
delivers stereo, so a 1-channel stream went out as L,R,L,R at half speed.
Sources now always deliver AES67_TX_SRC_CHANNELS (2); TX maps to the stream:
2 ch as is, 1 ch = (L+R)/2 in 64 bit with mono_sum (can't clip), else L.
Checked: mono packets 156 B, 1000/s, 48 samples each, SDP L24/48000/1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 23:26:48 +10:00

22 lines
979 B
C

// aes67_tx: RTP sender task, PTP-paced, pull callback; optional mono sum.
// Core component: must not depend on main/ (project code).
#pragma once
#include <stddef.h>
#include <stdint.h>
#include "esp_err.h"
// Audio source: fill buf with frames x AES67_TX_SRC_CHANNELS interleaved samples (stereo, full scale =
// INT32_MAX), whatever the stream's channel count: TX maps it (mono stream: L, or (L+R)/2 with mono_sum).
// Return the number of frames delivered; fewer than asked counts as an underrun (padded with silence).
#define AES67_TX_SRC_CHANNELS 2
typedef size_t (*aes67_tx_read_cb_t)(int32_t *buf, size_t frames);
// Registers the "aes67" config group and the TX status fields.
esp_err_t aes67_tx_init(void);
// Start the sender task. Sends while PTP is locked and aes67.enabled is set.
esp_err_t aes67_tx_start(void);
// Set the audio source. NULL = built-in 1 kHz test tone at -18 dBFS, phase-locked to PTP time.
void aes67_tx_set_source(aes67_tx_read_cb_t read);