- New wzp-android crate with Oboe C++ backend, lock-free SPSC ring buffers, engine orchestrator, codec pipeline, and Android Gradle project structure - AEC (NLMS adaptive filter), AGC (two-stage with fast attack/slow release), windowed-sinc FIR resampler replacing linear interpolation (wzp-codec) - Opus encoder tuning: complexity 7 default, set_expected_loss support - Mobile jitter buffer: asymmetric EMA (fast up/slow down), handoff spike detection with 2s cooldown, configurable safety margin - Network-aware quality control: cellular-specific thresholds, faster downgrade on cellular, proactive tier drop on WiFi→cellular handoff, FEC ratio boost during network transitions - Handoff detection in PathMonitor via RTT jitter spike analysis Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
44 lines
934 B
C++
44 lines
934 B
C++
#ifndef WZP_OBOE_BRIDGE_H
|
|
#define WZP_OBOE_BRIDGE_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
#include <atomic>
|
|
typedef std::atomic<int32_t> wzp_atomic_int;
|
|
extern "C" {
|
|
#else
|
|
#include <stdatomic.h>
|
|
typedef atomic_int wzp_atomic_int;
|
|
#endif
|
|
|
|
typedef struct {
|
|
int32_t sample_rate;
|
|
int32_t frames_per_burst;
|
|
int32_t channel_count;
|
|
} WzpOboeConfig;
|
|
|
|
typedef struct {
|
|
int16_t* capture_buf;
|
|
int32_t capture_capacity;
|
|
wzp_atomic_int* capture_write_idx;
|
|
wzp_atomic_int* capture_read_idx;
|
|
|
|
int16_t* playout_buf;
|
|
int32_t playout_capacity;
|
|
wzp_atomic_int* playout_write_idx;
|
|
wzp_atomic_int* playout_read_idx;
|
|
} WzpOboeRings;
|
|
|
|
int wzp_oboe_start(const WzpOboeConfig* config, const WzpOboeRings* rings);
|
|
void wzp_oboe_stop(void);
|
|
float wzp_oboe_capture_latency_ms(void);
|
|
float wzp_oboe_playout_latency_ms(void);
|
|
int wzp_oboe_is_running(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // WZP_OBOE_BRIDGE_H
|