Skip to content

Conversation

@SSSTAiNLESSS
Copy link

This branch introduces the ability to create "Mixed Collections" where a single list can contain games from multiple different systems, launching them with their respective emulators and displaying correct metadata.

Added

  • Mixed-System Syntax: Support for SystemName:GameName syntax in .sub files (e.g., Nintendo Entertainment System:Super Mario Bros).
  • Dynamic Collection Generation: The engine now creates lightweight CollectionInfo objects on-the-fly for foreign systems found in a list.
  • Auto-Import Settings: Automatically imports settings.conf for foreign systems to ensure artwork paths (screenshots, videos) and launcher configurations are resolved correctly.
  • Single-Item Metadata Injection: Implemented MetadataDatabase::injectItemMetadata to query the HyperList database for a specific game without requiring the full collection to be loaded.
  • File Parsing Improvements:
    • BOM Stripping: Automatically detects and removes UTF-8 Byte Order Marks (BOM) from the start of .sub files to prevent parsing errors on the first line.
    • Whitespace Trimming: Trims leading/trailing whitespace from system and game names to ensure reliable database matching.

Fixed

  • Fixed memory leaks by tracking and deleting dynamically created CollectionInfo objects in the main collection's destructor.
  • Fixed "missing artwork" issues by ensuring the foreign system's settings.conf is loaded into the global configuration.

@SSSTAiNLESSS
Copy link
Author

My primary motivation for developing this feature was to gain full control over the display order of games within .sub collections. This "Mixed-System Collections" implementation directly addresses that, ensuring that games are presented exactly as listed in the .sub file, rather than being alphabetically sorted.

SSSTAiNLESSS and others added 19 commits January 2, 2026 12:01
The playbin3 element was introduced in commit 0c828bd (April 2023) but is not available in GStreamer 1.4 (2014). This caused video playback failure with legacy GStreamer installations.

Reverted to playbin for backwards compatibility with GStreamer 1.4 while maintaining functionality with newer versions (playbin is available in all GStreamer 1.x versions).

Error in log: [DEBUG] [Video] Could not create playbin

- STAiNLESS
- STAiNLESS
Major Changes:
- Complete replacement of GStreamer backend with libVLC
- Smart volume-based playback (only decode when volume > 0.01)
- Fixed audio to stereo output with optimized buffer
- Added stop() function to Sound class for proper cleanup

Performance Optimizations:
- Videos/audio with volume=0 don't consume CPU
- Background media only plays when needed
- Proper cleanup when switching menus

Files Added:
- VLCVideo.cpp/h - Complete libVLC implementation
- deploy_test.bat - Quick deployment script
- BUILD_VLC.md - Comprehensive build documentation

Files Modified:
- VideoComponent.cpp - Smart playback based on volume
- Video.cpp - Updated to use VLCVideo
- Page.cpp - Stop sounds on menu switch
- Sound.cpp/h - Added stop() function
- SDL.cpp - Fixed audio configuration
- CMakeLists.txt - VLC configuration

Implementation by CORE Team

Co-Authored-By: Claude <noreply@anthropic.com>
- Full technical details of the migration
- Performance metrics and improvements
- Complete bug fix list
- Testing checklist
- Migration guide
- CORE Team credits

Documentation for the complete GStreamer to libVLC backend replacement.
- Added proper attribution for RFSVIEIRA who pioneered the VLC migration
- Updated both CHANGELOG and BUILD documentation
- Credit where credit is due

Thanks RFSVIEIRA for showing the way!
- Clarified that VLC SDK is already in tools/vlc-sdk/
- Runtime files in tools/vlc-runtime.zip
- Users don't need to download VLC separately
- Made included SDK the recommended option
- Updated CMake instructions to use tools folder by default

Easier compilation for contributors!
- Removed Package/Environment/Windows/core 1.4/ (GStreamer 1.4 files)
- Removed Scripts/deploy_test.bat (temporary deployment script)
- tools/vlc-sdk not tracked in git (as intended)

Repository cleanup for VLC implementation
The build_and_store.ps1 script handles everything automatically.
No need for separate documentation.
- Removed reference to deploy_test.bat
- Removed reference to BUILD_VLC.md
- Updated deployment instructions
- tools/ folder is gitignored
- Added download instructions for VLC SDK
- Developers need to download SDK separately
- Integrated VLC video backend
- Smart volume-based playback
- Performance optimizations
- Audio improvements (stereo, proper cleanup)

Mixed collections now uses VLC instead of GStreamer
@SSSTAiNLESSS SSSTAiNLESSS force-pushed the feature/mixed-collections branch from 4832eda to c4cf1b2 Compare January 2, 2026 06:14
- Added lib/msvc path hint for libvlc libraries
- Supports RSATom/libvlc-sdk structure
- Mixed-collections now builds with VLC
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant