Both StreamingFlacSink and StreamingOggFlacSink had duplicate FLAC frame
detection logic. The OGG-FLAC sink had the improved validation, but the
regular FLAC sink was still using the old unvalidated detection.
Changes:
- Created new module: pmoaudio-ext/src/sinks/flac_frame_utils.rs
* parse_flac_block_size() - comprehensive frame header validation
* find_complete_frames_boundary() - for regular FLAC streaming
* find_complete_frames_with_samples() - for OGG-FLAC with granule tracking
* Includes unit tests for validation
- Updated streaming_ogg_flac_sink.rs:
* Removed duplicate functions
* Now uses shared flac_frame_utils module
- Updated streaming_flac_sink.rs:
* Removed old unvalidated find_complete_frames_boundary()
* Now uses shared flac_frame_utils with improved validation
* Benefits from same false positive prevention as OGG-FLAC
- Updated mod.rs to include flac_frame_utils module
Result: Both FLAC and OGG-FLAC streams now use the same comprehensive
frame header validation to prevent false positive sync code detection.
Created the basic structure for OGG-FLAC streaming sink with:
- OggFlacStreamHandle for HTTP client subscriptions
- OggFlacClientStream implementing AsyncRead
- StreamingOggFlacSinkLogic with metadata tracking
- TrackBoundary detection for OGG chaining (TODO)
Structure follows StreamingFlacSink pattern but designed for:
1. OGG container wrapping around FLAC frames
2. OGG chaining on TrackBoundary markers
3. Vorbis Comments metadata updates per track
LIMITATION: Cannot compile/test due to missing system dependencies
(alsa-sys, libsoxr-sys). The code structure is complete but encoding
logic needs to be implemented and tested on a machine with proper deps.
Next steps:
- Implement chunk_to_pcm_bytes conversion
- Implement OGG page wrapper task
- Implement OGG chaining logic
- Test on system with alsa-dev installed