# Installing libvpx for VP9 Software Decoding on macOS ## Overview The enhanced macOS VP9 decoder now supports real VP9 software decoding using libvpx, Google's reference VP9 implementation. This provides actual video decoding instead of simulation. ## Installation Steps ### 1. Install libvpx via Homebrew (Recommended) ```bash # Install Homebrew if not already installed /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # Install libvpx brew install libvpx # Verify installation brew list libvpx ls -la /usr/local/lib/libvpx* ``` ### 2. Verify Library Location The decoder will try to load libvpx from these locations: - `libvpx` (system library path) - `libvpx.dylib` (explicit .dylib extension) - `vpx` (short name) Check that libvpx is accessible: ```bash # Find libvpx location find /usr/local -name "*libvpx*" 2>/dev/null find /opt/homebrew -name "*libvpx*" 2>/dev/null # Test library loading nm -D /usr/local/lib/libvpx.dylib | grep vpx_codec_vp9_dx ``` ### 3. Alternative Installation Methods #### Option A: Build from Source ```bash git clone https://chromium.googlesource.com/webm/libvpx.git cd libvpx ./configure --enable-vp9 --enable-shared make -j$(nproc) sudo make install ``` #### Option B: MacPorts ```bash sudo port install libvpx ``` ### 4. Test the Implementation 1. **Open Godot Project**: Launch Godot 4.4.1 and open `/Users/ened/LittleFairy/video-orchestra/godot-project/project.godot` 2. **Build C# Assembly**: - Go to Project → Tools → C# → Create C# Solution - Build the project to ensure unsafe code compilation works 3. **Run Test Scene**: - Open `Main.tscn` - Run the scene (F6) - Check console output for libvpx initialization messages 4. **Expected Console Output**: ``` VP9 Platform Info: macOS VP9 Platform (libvpx software + VideoToolbox hardware) Attempting to initialize libvpx VP9 decoder... libvpx VP9 decoder interface found successfully libvpx decoder initialized for stream 0 libvpx decoder initialized for stream 1 libvpx decoder initialized for stream 2 VP9 Orchestra initialized: 1920x1080 on macOS (Software libvpx VP9) ``` ## How It Works ### 1. Decoder Priority 1. **libvpx Software**: Real VP9 decoding with YUV→RGB conversion 2. **VideoToolbox Hardware**: macOS native hardware acceleration (limited VP9 support) 3. **Simulation Fallback**: Enhanced pattern-based texture generation ### 2. WebM Processing - **Enhanced Container Parsing**: EBML/Matroska structure analysis - **Pattern-based Extraction**: VP9 bitstream signature detection - **Fallback Simulation**: Improved texture generation from container data ### 3. Real VP9 Decoding Pipeline ``` WebM Container → VP9 Bitstream → libvpx Decoder → YUV420 Frame → RGB Conversion → Godot Texture ``` ## Troubleshooting ### Common Issues 1. **"libvpx not found" Error** ```bash # Check library installation brew list libvpx export DYLD_LIBRARY_PATH=/usr/local/lib:/opt/homebrew/lib ``` 2. **Library Loading Failed** ```bash # Create symlink if needed sudo ln -s /opt/homebrew/lib/libvpx.dylib /usr/local/lib/libvpx.dylib ``` 3. **Unsafe Code Compilation Error** - Ensure `true` is in VideoOrchestra.csproj - Rebuild C# solution in Godot 4. **No VP9 Frames Found** - Check that WebM files contain actual VP9 content with: ```bash ffprobe -v quiet -select_streams v:0 -show_entries stream=codec_name assets/haewon-oo-00-vp9.webm ``` ### Performance Notes - **Software Decoding**: ~30-60fps for 1080p single stream on modern CPUs - **Memory Usage**: ~50-100MB for texture buffers - **CPU Usage**: 20-40% additional load during decoding - **Battery Impact**: 10-20% additional drain on laptops ## Development Notes ### libvpx Integration Features - Multi-threaded VP9 decoding (1 decoder per stream) - YUV420 to RGB color space conversion - Automatic fallback to simulation if libvpx unavailable - Memory management with proper cleanup - Error handling with detailed diagnostics ### Future Enhancements - Hardware-accelerated YUV→RGB conversion using Metal - Multi-threaded decoding pipeline - Dynamic quality scaling based on performance - Integration with VideoToolbox for hybrid decoding ## Test Results Expected With libvpx properly installed, you should see: - Real VP9 frame decoding instead of simulation - Proper video content in the 3 texture rectangles - YUV→RGB color conversion working correctly - Smooth playback at 30fps for all 3 streams This provides the foundation for real VP9 video decoding in your Godot Engine application.