Drop video logos: a logo is a picture, never a clip - #16
Merged
Conversation
Video logos were the only reason this plugin linked FFmpeg, and linking FFmpeg is what stops it loading. A module that links libavcodec is stamped with the exact major it was built against -- readelf on the current module shows NEEDED libavcodec.so.60, libavformat.so.60, libavutil.so.58, libswscale.so.7 -- and OBS ships its own FFmpeg and moves it between releases. The release after a move, those stamps name files the loader cannot find and the whole module fails to load: every credit roll in every scene collection, gone, over artwork nobody has to use. Keeping the feature safe would have meant a hand-written runtime loader and a version gate that switches the feature off anyway. So the video path goes. GIF, APNG and animated WebP still animate exactly as before, through Qt, which is where nearly every credit-roll logo comes from; the caps, the playback settings, the per-frame shadows and the whole strip path are untouched. The plugin's dependencies are now only the ones OBS guarantees a plugin: libobs and Qt. Gone with it: the ENABLE_VIDEO_LOGOS option and the whole FFmpeg block in CMake, the libav decode path in AnimatedLogo, animatedLogosSupportVideo() and videoLogoPatterns(), and the video filter in the logo file dialog. What stays is the recognition, not the decoding: isVideoLogoPath() still knows a video by its name so that choosing one is answered with a sentence -- in the file dialog and under the designer's preview -- rather than with an unexplained placeholder box, which matters for documents written when the video path existed. Nothing reads the file. The module now carries no libav dependency at all; 50 suites and 3014 checks pass, including a new one holding the file dialog, the playback settings and the animation cache to the same answer about video. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AiVkw4TJiJVRFMXRb944BA
ZombieHDGaming
force-pushed
the
claude/obs-ffmpeg-compatibility-cmrv7g
branch
from
August 23, 2026 23:23
e8bb856 to
b2d2ef8
Compare
The last of the video path was `isVideoLogoPath`, which decoded nothing and existed only to explain itself: a file dialog warning, a line under the designer's preview, and the extension list behind both. It was never load-bearing, and a plugin that has to keep a list of container extensions in order to say "not that" is still carrying the feature. So it goes as well, and with it the extension list, the designer's `documentUsesVideoLogos` scan, the file-dialog warning and the Designer.VideoLogoUnsupported string. A video dropped into a logo slot is now an unreadable picture like any other: LogoCache logs that it could not decode the file, and the slot draws its placeholder box. The plugin's whole logo path is now Qt's image decoders and nothing else. 49 suites and 3002 checks pass, and the built module links libobs, obs-frontend-api and Qt -- nothing more. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AiVkw4TJiJVRFMXRb944BA
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Video logos were the only reason this plugin linked FFmpeg, and linking FFmpeg is what stops it loading in a newer OBS.
readelf -don a module built frommastertoday:Those are hard dependencies on the exact FFmpeg majors the build machine had. OBS ships its own FFmpeg and moves it between releases; the release after a move, those names are files the loader cannot find and the whole module fails to load — every credit roll in every scene collection, gone, over artwork nobody has to use. Keeping the feature safely would have meant a hand-written runtime loader plus a version gate that turns the feature off anyway.
So the video path goes, all of it.
What's gone
ENABLE_VIDEO_LOGOSoption and the entire FFmpeg block inCMakeLists.txt— nofind_package, no linking, nothing to find at configure time.AnimatedLogo.cpp:VideoDecodeContext,decodeWithFfmpeg,sws_scalescaling, frame-duration handling, theCLOSING_TIME_HAVE_FFMPEGdefine.animatedLogosSupportVideo()andvideoLogoPatterns(), and the "Video" filter in the logo file dialog.isVideoLogoPath(), the container-extension list, the designer'sdocumentUsesVideoLogos()scan, the file-dialog warning, and theDesigner.VideoLogoUnsupportedstring.Nothing in the plugin knows what a video file is any more. A video dropped into a logo slot is an unreadable picture like any other —
LogoCachelogs that it could not decode the file, and the slot draws its placeholder box.419 lines removed, 42 added.
What's unchanged
GIF, APNG and animated WebP animate exactly as before, through Qt — which is where nearly every credit-roll logo comes from. The frame caps, playback settings (loop, start-on-entry, speed), per-frame shadows, the animation cache and the whole strip path are untouched. The logo path is now Qt's image decoders and nothing else.
Testing
libobs,obs-frontend-api, Qt (Core/Gui/Widgets/Svg) and the C/C++ runtime — nothing more. Nolibav*, nolibswscale, against master's four.clang-format(19) andgersemiclean.Docs
README's logo and build sections, and ARCHITECTURE's Animated logos section, file map and known-limits list now say a logo is a picture and why — so the next person who reaches for libav finds the reason not to before they write it.