mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 07:15:47 +00:00
c674e4515b
* feat(audio): migrate Symphonia 0.5 -> 0.6 Port the audio + analysis pipeline to the Symphonia 0.6 API: - bump symphonia to 0.6 and symphonia-adapter-libopus to 0.3; drop rodio's symphonia-all feature to avoid a duplicate symphonia-core 0.5 - remove the local symphonia-format-isomp4 0.5 patch and rely on upstream 0.6 - switch codec registries to register_enabled_codecs / make_audio_decoder with AudioCodecParameters + AudioDecoderOptions - rework decode.rs SizedDecoder and analysis decode loops for the new AudioDecoder trait, GenericAudioBufferRef, Time/Timestamp newtypes, and next_packet() -> Result<Option<Packet>> Streaming regression fixes: - ProbeSeekGate hides seekability during probe for non-MP4 progressive streams so Symphonia 0.6's trailing-metadata scan no longer forces a full download before ranged FLAC/MP3/OGG playback can start - guard the streaming probe() with a 20s timeout on a worker thread so a stalled ranged source (e.g. right after a server switch) can no longer hang playback start until a player restart; add probe start/done diagnostics * docs(changelog): note Symphonia 0.6 migration and streaming fixes (#999) Add CHANGELOG entries (Changed + Fixed) and a CONTRIBUTORS line for the Symphonia 0.6 migration, ranged-stream start-latency fix, and probe timeout. * test(audio): cover streaming probe path and ProbeSeekGate Add unit tests for SizedDecoder::new_streaming (success + garbage) and ProbeSeekGate (seekability toggle, byte_len, read/seek passthrough) to restore decode.rs above the 70% hot-path coverage gate (67.3% -> 79.4%).
23 lines
881 B
Rust
23 lines
881 B
Rust
//! Symphonia codec registry — mirrors `psysonic-audio::codec` (Opus via libopus).
|
|
use std::sync::OnceLock;
|
|
|
|
use symphonia::core::codecs::audio::{AudioCodecParameters, AudioDecoder, AudioDecoderOptions};
|
|
use symphonia::core::codecs::registry::CodecRegistry;
|
|
|
|
pub(crate) fn psysonic_codec_registry() -> &'static CodecRegistry {
|
|
static REGISTRY: OnceLock<CodecRegistry> = OnceLock::new();
|
|
REGISTRY.get_or_init(|| {
|
|
let mut registry = CodecRegistry::new();
|
|
symphonia::default::register_enabled_codecs(&mut registry);
|
|
registry.register_audio_decoder::<symphonia_adapter_libopus::OpusDecoder>();
|
|
registry
|
|
})
|
|
}
|
|
|
|
pub(crate) fn make_decoder(
|
|
params: &AudioCodecParameters,
|
|
opts: &AudioDecoderOptions,
|
|
) -> Result<Box<dyn AudioDecoder>, symphonia::core::errors::Error> {
|
|
psysonic_codec_registry().make_audio_decoder(params, opts)
|
|
}
|