Skip to content

feat: Supercharge FFmpeg & Third-Party Codecs Status Assistant - #56

Merged
mcoliver merged 10 commits into
mainfrom
feature/supercharge-ffmpeg
Sep 27, 2026
Merged

mcoliver merged 10 commits into
mainfrom
feature/supercharge-ffmpeg

Conversation

@mcoliver

Copy link
Copy Markdown
Collaborator

Summary

Addresses and resolves #35: feat: supercharge ffmpeg.

Provides a comprehensive, cross-platform 'easy button' and status assistant for users to supercharge FFmpeg (enabling non-free/patented codecs like H.265/HEVC, AAC, ProRes) while strictly respecting software distribution and licensing requirements. Extends coverage to other professional formats requiring third-party runtime installs: Blackmagic RAW (BRAW), RED Digital Cinema (R3D), NewTek NDI Network Video, and native Apple VideoToolbox / ProRes RAW.

Key Features Implemented

  1. RvCodecManager Dynamic Probing & Engine Backend:

    • FFmpeg: Parses ffmpeg -version configuration flags (--enable-libx265, --enable-nonfree, --enable-gpl, etc.) and determines if the active build is standard or supercharged.
    • Homebrew Shadowing Detection: On macOS/Linux, checks if ffmpeg-full is installed via Homebrew but shadowed by standard ffmpeg (due to brew upgrade symlink overwrites).
    • 1-Click Relinking: Automated brew unlink ffmpeg-full && brew unlink ffmpeg && brew link --overwrite ffmpeg-full directly from C++ and Python.
    • Blackmagic RAW: Runtime detection of DaVinci Resolve or BRAW SDK/Player installations.
    • RED Digital Cinema (R3D): Runtime detection of RED_SDK_PATH, local OpenUTV RED folders (~/Library/Application Support/OpenUTV/RED, %APPDATA%/OpenUTV/RED), and provides 1-click folder opening and SDK download links.
    • NewTek NDI: Dynamic library detection for NDI Network Video runtime.
  2. RvCodecDialog Modern Qt UI:

    • Prominent status cards with color badges (🟢 Active/Supercharged, 🟡 Standard/Shadowed, ⚪ Not Installed).
    • Dynamic top alert banner with 1-click [Relink FFmpeg-Full] action when shadowed.
    • Direct action buttons: Copy Windows package manager commands (winget install "FFmpeg (Shared)", scoop install ffmpeg-shared), open Gyan.dev release builds, open RED SDK directory, download BRAW, download NDI.
  3. Application Integration:

    • Help Menu: Added Help -> Supercharge FFmpeg & Codecs... in Mu (openrv_help_menu_mode.mu), with dynamic alert warning if shadowed on startup.
    • Preferences (Formats Tab): Added dedicated Video Codecs & Professional Formats section at the top of the Formats tab with a direct button to launch the assistant dialog.
    • Scripting APIs: Exposed commands.showCodecDialog() and commands.isFFmpegShadowed() to Mu and Python (py_rvui).
  4. Standalone Cross-Platform CLI/GUI Helper:

    • Added src/bin/nsapps/UTV/openutv-supercharge-ffmpeg.py (with .sh and .cmd wrappers).
    • Supports --status (formatted terminal report), --json (structured data), --relink, and --open-red-folder.
    • Staged into macOS app bundle resources in CMake.

Closes #35.

…alog (#35)

- Introduce RvCodecManager and RvCodecDialog for cross-platform detection and management of multimedia codecs and third-party SDKs (FFmpeg, Blackmagic RAW, RED Digital Cinema, NDI Network Video, and Apple VideoToolbox)
- Detect when Homebrew ffmpeg-full is shadowed by standard ffmpeg on macOS/Linux and provide a 1-click Relink FFmpeg-Full action and startup alerts
- Provide instructions and commands for Windows package managers (winget, scoop, choco, Gyan.dev) to install shared FFmpeg with full codec support
- Expose showCodecDialog and isFFmpegShadowed to Mu and Python scripting environments
- Integrate into Help menu (Supercharge FFmpeg & Codecs...) and Preferences -> Formats tab
- Add standalone cross-platform CLI/GUI helper openutv-supercharge-ffmpeg.py with .sh and .cmd wrappers and stage into app bundle resources
- Closes #35

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
…decDialog

- Remove probeAll() call from RvCodecDialog::refreshUI() to eliminate synchronous infinite signal recursion with statusUpdated
- Cleanly remove and delete layout items in RvCodecDialog::refreshUI() to prevent dangling layout pointers
- Inject Homebrew/system binary search paths into QProcessEnvironment in probeFFmpeg and relinkFFmpegFull for macOS GUI application mode
- Reduce probe process timeouts to 500ms to keep UI snappy

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
…DK versions

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
… all platforms

- Fix false positive where standard Homebrew FFmpeg was labeled Supercharged due to basic libx265 flag
- Use canonical path symlink resolution, prefix checks, and full-build flags (libplacebo, libxvid, whisper, gyan.dev) to distinguish true FFmpeg-Full
- Correctly flag when FFmpeg-Full is shadowed by standard FFmpeg and offer 1-click relinking
- Extract and display detected active FFmpeg version string in UI
- Update version requirement title to v7.x–v9.x+ (Full)

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
When ffmpeg-full is not installed on the system, wire the action button
to onInstallFFmpegHomebrewClicked instead of onRelinkFFmpegClicked.
Provide users with the option to launch Terminal directly or copy
'brew update && brew install ffmpeg-full && brew link --overwrite ffmpeg-full'
to the clipboard.

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
…fmpeg

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
- On Windows, re-read User/System PATH from the registry and probe
  %LOCALAPPDATA%/Microsoft/WinGet/Links and Packages directories.
- Prioritize Gyan.dev FFmpeg Shared full builds when evaluating candidates.
- Add support for NDI 6 Tools runtime dll paths and recursive search
  under C:/Program Files/NDI.

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
… deprecation

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
…iler

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
…rectories on Windows

Signed-off-by: Michael Oliver <mcoliver@gmail.com>
@mcoliver
mcoliver merged commit 83324fe into main Sep 27, 2026
9 checks passed
@mcoliver
mcoliver deleted the feature/supercharge-ffmpeg branch September 27, 2026 21:43
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.

feat: supercharge ffmpeg

1 participant