Files
pmomusic/pmoaudio-ext
Claude 1e8eedc253 Fix OGG-FLAC streaming: proper metadata block format and frame boundary detection
FFPlay and strict decoders were rejecting the OGG-FLAC stream due to two critical issues:

1. **Invalid Vorbis Comment metadata block** (line 933)
   - Previous: Sent raw Vorbis Comment data without FLAC metadata block wrapper
   - Fixed: Wrap Vorbis Comment in proper FLAC metadata block format:
     * Byte 0: 0x84 (type 4 = VORBIS_COMMENT + last-block flag)
     * Bytes 1-3: length (24-bit big-endian)
     * Bytes 4+: Vorbis Comment data
   - Compliant with OGG-FLAC mapping spec (xiph.org/flac/ogg_mapping.html)

2. **Arbitrary 8KB frame segmentation** (line 799)
   - Previous: Cut FLAC data at arbitrary 8KB boundaries, breaking frames mid-stream
   - Fixed: Apply FLAC frame boundary detection (same as StreamingFlacSink fix in f783244)
     * Add find_complete_frames_boundary() to detect sync codes (0xFF 0xF8-0xFE)
     * Use 16KB read buffer + accumulator pattern
     * Only broadcast complete frames (4KB minimum for OGG page efficiency)
     * Send remaining data on EOF to prevent loss
   - Ensures each OGG page contains only complete FLAC frames

Validation:
- ffplay successfully opens and decodes the stream
- ffprobe correctly identifies: Input #0, ogg / Stream #0:0: Audio: flac, 44100 Hz, stereo, s16

This fixes "invalid sync code" and "invalid frame header" errors in FFPlay while
maintaining compatibility with VLC and other tolerant players.
2025-11-13 09:29:19 +00:00
..