obs-studio-32.0.4-sources/README.rst000644 001751 001751 00000005371 15117351440 017735 0ustar00runnerrunner000000 000000 OBS Studio =================================== .. image:: https://github.com/obsproject/obs-studio/actions/workflows/push.yaml/badge.svg?branch=master :alt: OBS Studio Build Status - GitHub Actions :target: https://github.com/obsproject/obs-studio/actions/workflows/push.yaml?query=branch%3Amaster .. image:: https://badges.crowdin.net/obs-studio/localized.svg :alt: OBS Studio Translation Project Progress :target: https://crowdin.com/project/obs-studio .. image:: https://img.shields.io/discord/348973006581923840.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2 :alt: OBS Studio Discord Server :target: https://obsproject.com/discord What is OBS Studio? ------------------- OBS Studio is software designed for capturing, compositing, encoding, recording, and streaming video content, efficiently. It's distributed under the GNU General Public License v2 (or any later version) - see the accompanying COPYING file for more details. Quick Links ----------- - Website: https://obsproject.com - Help/Documentation/Guides: https://github.com/obsproject/obs-studio/wiki - Forums: https://obsproject.com/forum/ - Build Instructions: https://github.com/obsproject/obs-studio/wiki/Install-Instructions - Developer/API Documentation: https://obsproject.com/docs - Donating/backing/sponsoring: https://obsproject.com/contribute - Bug Tracker: https://github.com/obsproject/obs-studio/issues Contributing ------------ - If you would like to help fund or sponsor the project, you can do so via `Patreon `_, `OpenCollective `_, or `PayPal `_. See our `contribute page `_ for more information. - If you wish to contribute code to the project, please make sure to read the coding and commit guidelines: https://github.com/obsproject/obs-studio/blob/master/CONTRIBUTING.rst - Developer/API documentation can be found here: https://obsproject.com/docs - If you wish to contribute translations, do not submit pull requests. Instead, please use Crowdin. For more information read this page: https://obsproject.com/wiki/How-To-Contribute-Translations-For-OBS - Other ways to contribute are by helping people out with support on our forums or in our community chat. Please limit support to topics you fully understand -- bad advice is worse than no advice. When it comes to something that you don't fully know or understand, please defer to the official help or official channels. SAST Tools ---------- `PVS-Studio `_ - static analyzer for C, C++, C#, and Java code. obs-studio-32.0.4-sources/CMakePresets.json000644 001751 001751 00000013564 15117351440 021472 0ustar00runnerrunner000000 000000 { "version": 8, "cmakeMinimumRequired": { "major": 3, "minor": 28, "patch": 0 }, "configurePresets": [ { "name": "environmentVars", "hidden": true, "cacheVariables": { "RESTREAM_CLIENTID": {"type": "STRING", "value": "$penv{RESTREAM_CLIENTID}"}, "RESTREAM_HASH": {"type": "STRING", "value": "$penv{RESTREAM_HASH}"}, "TWITCH_CLIENTID": {"type": "STRING", "value": "$penv{TWITCH_CLIENTID}"}, "TWITCH_HASH": {"type": "STRING", "value": "$penv{TWITCH_HASH}"}, "YOUTUBE_CLIENTID": {"type": "STRING", "value": "$penv{YOUTUBE_CLIENTID}"}, "YOUTUBE_CLIENTID_HASH": {"type": "STRING", "value": "$penv{YOUTUBE_CLIENTID_HASH}"}, "YOUTUBE_SECRET": {"type": "STRING", "value": "$penv{YOUTUBE_SECRET}"}, "YOUTUBE_SECRET_HASH": {"type": "STRING", "value": "$penv{YOUTUBE_SECRET_HASH}"} } }, { "name": "macos", "displayName": "macOS", "description": "Default macOS build (single architecture only)", "inherits": ["environmentVars"], "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Darwin" }, "generator": "Xcode", "binaryDir": "${sourceDir}/build_macos", "cacheVariables": { "CMAKE_OSX_DEPLOYMENT_TARGET": {"type": "STRING", "value": "12.0"}, "OBS_CODESIGN_IDENTITY": {"type": "STRING", "value": "$penv{CODESIGN_IDENT}"}, "OBS_CODESIGN_TEAM": {"type": "STRING", "value": "$penv{CODESIGN_TEAM}"}, "OBS_PROVISIONING_PROFILE": {"type": "STRING", "value": "$penv{PROVISIONING_PROFILE}"}, "VIRTUALCAM_DEVICE_UUID": {"type": "STRING", "value": "7626645E-4425-469E-9D8B-97E0FA59AC75"}, "VIRTUALCAM_SINK_UUID": {"type": "STRING", "value": "A3F16177-7044-4DD8-B900-72E2419F7A9A"}, "VIRTUALCAM_SOURCE_UUID": {"type": "STRING", "value": "A8D7B8AA-65AD-4D21-9C42-66480DBFA8E1"}, "SPARKLE_APPCAST_URL": {"type": "STRING", "value": "https://obsproject.com/osx_update/updates_$(ARCHS)_v2.xml"}, "SPARKLE_PUBLIC_KEY": {"type": "STRING", "value": "HQ5/Ba9VHOuEWaM0jtVjZzgHKFJX9YTl+HNVpgNF0iM="}, "ENABLE_BROWSER": true } }, { "name": "macos-ci", "displayName": "macOS (CI)", "description": "CI macOS build (single architecture only)", "inherits": ["macos"], "warnings": {"dev": true, "deprecated": true}, "cacheVariables": { "CMAKE_COMPILE_WARNING_AS_ERROR": true, "ENABLE_CCACHE": true } }, { "name": "ubuntu", "displayName": "Ubuntu", "description": "obs-studio for Ubuntu", "inherits": ["environmentVars"], "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Linux" }, "binaryDir": "${sourceDir}/build_ubuntu", "generator": "Ninja", "warnings": {"dev": true, "deprecated": true}, "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_INSTALL_LIBDIR": "lib/CMAKE_SYSTEM_PROCESSOR-linux-gnu", "ENABLE_AJA": false, "ENABLE_VLC": true, "ENABLE_WAYLAND": true, "ENABLE_WEBRTC": false } }, { "name": "ubuntu-ci", "inherits": ["ubuntu"], "cacheVariables": { "CMAKE_BUILD_TYPE": "RelWithDebInfo", "CMAKE_COMPILE_WARNING_AS_ERROR": true, "CMAKE_COLOR_DIAGNOSTICS": true, "ENABLE_CCACHE": true } }, { "name": "windows-x64", "displayName": "Windows x64", "description": "Default Windows build (x64)", "inherits": ["environmentVars"], "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" }, "architecture": "x64,version=10.0.22621.0", "binaryDir": "${sourceDir}/build_x64", "generator": "Visual Studio 17 2022", "cacheVariables": { "GPU_PRIORITY_VAL": {"type": "STRING", "value": "$penv{GPU_PRIORITY_VAL}"}, "VIRTUALCAM_GUID": {"type": "STRING", "value": "A3FCE0F5-3493-419F-958A-ABA1250EC20B"}, "ENABLE_BROWSER": true } }, { "name": "windows-ci-x64", "displayName": "Windows x64 (CI)", "description": "CI Windows build (x64)", "inherits": ["windows-x64"], "warnings": {"dev": true, "deprecated": true}, "cacheVariables": { "CMAKE_COMPILE_WARNING_AS_ERROR": true } }, { "name": "windows-arm64", "displayName": "Windows ARM64", "description": "Default Windows build (ARM64)", "inherits": ["environmentVars"], "condition": { "type": "equals", "lhs": "${hostSystemName}", "rhs": "Windows" }, "architecture": "ARM64,version=10.0.22621.0", "binaryDir": "${sourceDir}/build_arm64", "generator": "Visual Studio 17 2022", "cacheVariables": { "GPU_PRIORITY_VAL": {"type": "STRING", "value": "$penv{GPU_PRIORITY_VAL}"}, "VIRTUALCAM_GUID": {"type": "STRING", "value": "A3FCE0F5-3493-419F-958A-ABA1250EC20B"}, "ENABLE_AJA": false, "ENABLE_BROWSER": true, "ENABLE_SCRIPTING": false, "ENABLE_VST": false } }, { "name": "windows-ci-arm64", "displayName": "Windows ARM64 (CI)", "description": "CI Windows build (ARM64)", "inherits": ["windows-arm64"], "warnings": {"dev": true, "deprecated": true}, "cacheVariables": { "CMAKE_COMPILE_WARNING_AS_ERROR": true } } ], "buildPresets": [ { "name": "windows-x64", "configurePreset": "windows-x64", "displayName": "Windows 64-bit", "description": "Windows build for 64-bit (aka x64)", "configuration": "RelWithDebInfo" }, { "name": "windows-arm64", "configurePreset": "windows-arm64", "displayName": "Windows on ARM 64-bit", "description": "Windows build for ARM 64-bit (aka ARM64)", "configuration": "RelWithDebInfo" } ] } obs-studio-32.0.4-sources/.clang-format000644 001751 001751 00000013453 15117351440 020621 0ustar00runnerrunner000000 000000 # please use clang-format version 16 or later Standard: c++17 AccessModifierOffset: -8 AlignAfterOpenBracket: Align AlignConsecutiveAssignments: false AlignConsecutiveDeclarations: false AlignEscapedNewlines: Left AlignOperands: true AlignTrailingComments: true AllowAllArgumentsOnNextLine: false AllowAllConstructorInitializersOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: false AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: Inline AllowShortIfStatementsOnASingleLine: false AllowShortLambdasOnASingleLine: Inline AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: false BinPackArguments: true BinPackParameters: true BraceWrapping: AfterClass: false AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false AfterExternBlock: false BeforeCatch: false BeforeElse: false IndentBraces: false SplitEmptyFunction: true SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBinaryOperators: None BreakBeforeBraces: Custom BreakBeforeTernaryOperators: true BreakConstructorInitializers: BeforeColon BreakStringLiterals: false # apparently unpredictable ColumnLimit: 120 CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerIndentWidth: 8 ContinuationIndentWidth: 8 Cpp11BracedListStyle: true DerivePointerAlignment: false DisableFormat: false FixNamespaceComments: true ForEachMacros: - 'json_object_foreach' - 'json_object_foreach_safe' - 'json_array_foreach' - 'HASH_ITER' IncludeBlocks: Preserve IndentCaseLabels: false IndentPPDirectives: None IndentWidth: 8 IndentWrappedFunctionNames: false KeepEmptyLinesAtTheStartOfBlocks: true MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCBinPackProtocolList: Auto ObjCBlockIndentWidth: 8 ObjCSpaceAfterProperty: true ObjCSpaceBeforeProtocolList: true PenaltyBreakAssignment: 10 PenaltyBreakBeforeFirstCallParameter: 30 PenaltyBreakComment: 10 PenaltyBreakFirstLessLess: 0 PenaltyBreakString: 10 PenaltyExcessCharacter: 100 PenaltyReturnTypeOnItsOwnLine: 60 PointerAlignment: Right ReflowComments: false SkipMacroDefinitionBody: true SortIncludes: false SortUsingDeclarations: false SpaceAfterCStyleCast: false SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: false SpaceBeforeAssignmentOperators: true SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeParens: ControlStatements SpaceBeforeRangeBasedForLoopColon: true SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 1 SpacesInAngles: false SpacesInCStyleCastParentheses: false SpacesInContainerLiterals: false SpacesInParentheses: false SpacesInSquareBrackets: false StatementMacros: - 'Q_OBJECT' TabWidth: 8 TypenameMacros: - 'DARRAY' UseTab: ForContinuationAndIndentation --- Language: ObjC AccessModifierOffset: 2 AlignArrayOfStructures: Right AlignConsecutiveAssignments: None AlignConsecutiveBitFields: None AlignConsecutiveDeclarations: None AlignConsecutiveMacros: Enabled: true AcrossEmptyLines: false AcrossComments: true AllowShortBlocksOnASingleLine: Never AllowShortEnumsOnASingleLine: false AllowShortFunctionsOnASingleLine: Empty AllowShortIfStatementsOnASingleLine: Never AllowShortLambdasOnASingleLine: None AttributeMacros: ['__unused', '__autoreleasing', '_Nonnull', '__bridge'] BitFieldColonSpacing: Both #BreakBeforeBraces: Webkit BreakBeforeBraces: Custom BraceWrapping: AfterCaseLabel: false AfterClass: true AfterControlStatement: Never AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: false AfterUnion: false AfterExternBlock: false BeforeCatch: false BeforeElse: false BeforeLambdaBody: false BeforeWhile: false IndentBraces: false SplitEmptyFunction: false SplitEmptyRecord: false SplitEmptyNamespace: true BreakAfterAttributes: Never BreakArrays: false BreakBeforeConceptDeclarations: Allowed BreakBeforeInlineASMColon: OnlyMultiline BreakConstructorInitializers: AfterColon BreakInheritanceList: AfterComma ColumnLimit: 120 ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 EmptyLineAfterAccessModifier: Never EmptyLineBeforeAccessModifier: LogicalBlock ExperimentalAutoDetectBinPacking: false FixNamespaceComments: true IndentAccessModifiers: false IndentCaseBlocks: false IndentCaseLabels: true IndentExternBlock: Indent IndentGotoLabels: false IndentRequiresClause: true IndentWidth: 4 IndentWrappedFunctionNames: true InsertBraces: false InsertNewlineAtEOF: true KeepEmptyLinesAtTheStartOfBlocks: false LambdaBodyIndentation: Signature NamespaceIndentation: All ObjCBinPackProtocolList: Auto ObjCBlockIndentWidth: 4 ObjCBreakBeforeNestedBlockParam: false ObjCSpaceAfterProperty: true ObjCSpaceBeforeProtocolList: true PPIndentWidth: -1 PackConstructorInitializers: NextLine QualifierAlignment: Leave ReferenceAlignment: Right RemoveSemicolon: false RequiresClausePosition: WithPreceding RequiresExpressionIndentation: OuterScope SeparateDefinitionBlocks: Leave ShortNamespaceLines: 1 SortIncludes: false #SortUsingDeclarations: LexicographicNumeric SortUsingDeclarations: true SpaceAfterCStyleCast: true SpaceAfterLogicalNot: false SpaceAroundPointerQualifiers: Default SpaceBeforeCaseColon: false SpaceBeforeCpp11BracedList: true SpaceBeforeCtorInitializerColon: true SpaceBeforeInheritanceColon: true SpaceBeforeParens: ControlStatements SpaceBeforeRangeBasedForLoopColon: true SpaceBeforeSquareBrackets: false SpaceInEmptyBlock: false SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 2 SpacesInConditionalStatement: false SpacesInLineCommentPrefix: Minimum: 1 Maximum: -1 Standard: c++17 TabWidth: 4 UseTab: Never obs-studio-32.0.4-sources/COMMITMENT000644 001751 001751 00000004054 15117351440 017642 0ustar00runnerrunner000000 000000 GPL Cooperation Commitment Version 1.0 Before filing or continuing to prosecute any legal proceeding or claim (other than a Defensive Action) arising from termination of a Covered License, we commit to extend to the person or entity ('you') accused of violating the Covered License the following provisions regarding cure and reinstatement, taken from GPL version 3. As used here, the term 'this License' refers to the specific Covered License being enforced. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. We intend this Commitment to be irrevocable, and binding and enforceable against us and assignees of or successors to our copyrights. Definitions 'Covered License' means the GNU General Public License, version 2 (GPLv2), the GNU Lesser General Public License, version 2.1 (LGPLv2.1), or the GNU Library General Public License, version 2 (LGPLv2), all as published by the Free Software Foundation. 'Defensive Action' means a legal proceeding or claim that We bring against you in response to a prior proceeding or claim initiated by you or your affiliate. 'We' means each contributor to this repository as of the date of inclusion of this file, including subsidiaries of a corporate contributor. This work is available under a Creative Commons Attribution-ShareAlike 4.0 International license (https://creativecommons.org/licenses/by-sa/4.0/). obs-studio-32.0.4-sources/COC.rst000644 001751 001751 00000014770 15117351440 017407 0ustar00runnerrunner000000 000000 Code of Conduct =============== Preamble -------- OBS is made up of many people from all over the world, with different backgrounds and experiences that they bring to the project. In order to continue letting the community grow, feel safe, and to encourage good communication, we are adopting the following Code of Conduct. This document—or any subsequent version—will be enforced from July 31st, 2021 onwards. Scope ----- This Code of Conduct applies to anyone who contributes—or wishes to contribute—to the project directly, is taking part in community discussion in official channels, or are in a position where they’ll be seen as a representative of the project, regardless of whether they intend to speak for the project or not. A person is considered to be representing the project if they’re speaking as a code contributor, support volunteer, member involved with the project, or if they have some kind of visible role in an official channel for OBS. This does not include roles for Sponsors or Patrons. Official channels for OBS include the Discord server, the forum, any GitHub repositories within the OBS Project organization, any social media accounts for OBS Project, any public events where OBS Project has a presence, any presentations given on behalf of OBS Project, or any other situation that can be reasonably interpreted as being hosted, attended or communicated by the OBS Project. This Code of Conduct is subject to change, and any changes will have a 2 week notice period before taking immediate effect. Changes will not be enforced retroactively unless it directly affects the security, safety or well-being of another individual, or other exceptional circumstances. Guidelines ---------- General ~~~~~~~ - We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic. - Please avoid using overtly sexual aliases or other nicknames that might detract from a friendly, safe and welcoming environment for all. - Please be kind and courteous. There’s no need to be mean or rude. - Respect that people will have differences of opinion. - We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. The definition of harassment is provided in the section on Unacceptable Behavior. In particular, we don’t tolerate behavior that excludes people in socially marginalized groups. This includes private harassment. - Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. - Being a recognized Contributor, Support Volunteer, Sponsor or Patron does not give you special right to avoid following these guidelines when taking part in community discussions. Code Contributors ~~~~~~~~~~~~~~~~~ - Respect that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. - Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. - Do not post negative or inflammatory comments on code submissions. If you believe that a code submission has problems, provide constructive or actionable feedback, or a reason for why a submission is being rejected. Where it is possible, provide explanations that someone can use to fix things. Support Volunteers ~~~~~~~~~~~~~~~~~~ - There are many users of differing skill levels or abilities. This is never a reason to refuse support for someone, as long as it’s within the scope of OBS support, and the user is willing to cooperate. - Just because something seems obvious to you, doesn’t mean it’s actually obvious. If someone is having difficulty understanding how to use OBS, it should never be treated as their fault. - Bad advice is often worse than no advice. If you don’t know how to address someone’s issue, then get ahold of someone who’ll be able to provide them help. We can only expect so much patience from a user asking for support, and helping without understanding the problem only results in using up that patience. Unacceptable Behavior --------------------- The following behaviors are considered harassment and are unacceptable within our community: - Violence, threats of violence or violent language directed against another person. - Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language. - Posting or displaying sexually explicit or violent material. - Posting or threatening to post other people’s personally identifying information ("doxing"). - Personal insults. - Unwelcome sexual attention. This includes, sexualized comments or jokes, and unwelcome sexual advances. - Deliberate intimidation, stalking or following. - Advocating for, or encouraging, any of the above behavior. Enforcement ----------- Instances of unacceptable behavior may be reported by contacting an enforcement team member at one of the following addresses: coc@obsproject.com. All complaints will be reviewed and investigated, and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. In other cases where behavior is against the general guidelines set out in this Code of Conduct, this may be brought up with a moderator through either a Discord DM, or through an email to an enforcement member. In these cases, it is always assumed in the first instance that a person means well, and action will only be taken in the case of repeated failure to follow the guidelines. Feedback -------- Suggestions for changes can be made by submitting a pull request on the `obsproject/obs-studio `__ repo, or if you wish to privately discuss your concerns, you can instead email coc@obsproject.com. Attribution ----------- This Code of Conduct is adapted in part from the Contributor Covenant, version 1.4, in part from the Citizen Code of Conduct (used under CC-BY-SA 3.0), and in part from the Rust Code of Conduct. This Code of Conduct is released and licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Version History --------------- V1.0 - First Iteration - July 31st, 2021 obs-studio-32.0.4-sources/INSTALL000644 001751 001751 00000000151 15117351440 017266 0ustar00runnerrunner000000 000000 For install instructions please visit https://github.com/obsproject/obs-studio/wiki/Install-Instructions obs-studio-32.0.4-sources/build-aux/000755 001751 001751 00000000000 15117352032 020130 5ustar00runnerrunner000000 000000 obs-studio-32.0.4-sources/build-aux/com.obsproject.Studio.json000644 001751 001751 00000007133 15117351440 025226 0ustar00runnerrunner000000 000000 { "id": "com.obsproject.Studio", "runtime": "org.kde.Platform", "runtime-version": "6.8", "sdk": "org.kde.Sdk", "command": "obs", "finish-args": [ "--socket=wayland", "--socket=fallback-x11", "--socket=pulseaudio", "--device=all", "--share=network", "--share=ipc", "--filesystem=xdg-run/pipewire-0", "--filesystem=host", "--talk-name=org.kde.StatusNotifierWatcher", "--talk-name=org.freedesktop.Flatpak", "--talk-name=org.freedesktop.Notifications", "--talk-name=org.a11y.Bus", "--env=VST_PATH=/app/extensions/Plugins/vst" ], "add-extensions": { "com.obsproject.Studio.Plugin": { "directory": "plugins", "subdirectories": true, "add-ld-path": "lib", "merge-dirs": "lib/obs-plugins;share/obs/obs-plugins", "no-autodownload": true, "autodelete": true }, "org.freedesktop.LinuxAudio.Plugins": { "directory": "extensions/Plugins", "version": "24.08", "add-ld-path": "lib", "merge-dirs": "vst", "subdirectories": true, "no-autodownload": true } }, "cleanup": [ "/share/man", "*.la" ], "modules": [ "modules/10-mbedtls.json", "modules/20-librist.json", "modules/20-nv-codec.json", "modules/20-srt.json", "modules/20-svt-av1.json", "modules/20-x264.json", "modules/30-ffmpeg.json", "modules/40-luajit.json", "modules/40-plog.json", "modules/40-usrsctp.json", "modules/50-intel-media-sdk.json", "modules/50-jansson.json", "modules/50-libdatachannel.json", "modules/50-libqrcodegencpp.json", "modules/50-libvpl.json", "modules/50-ntv2.json", "modules/50-rnnoise.json", "modules/50-swig.json", "modules/50-v4l-utils.json", "modules/50-vpl-gpu-rt.json", "modules/90-asio.json", "modules/90-nlohmann-json.json", "modules/90-simde.json", "modules/90-uthash.json", "modules/90-websocketpp.json", "modules/99-cef.json", { "name": "obs", "buildsystem": "cmake-ninja", "builddir": true, "config-opts": [ "-DCMAKE_BUILD_TYPE=RelWithDebInfo", "-DENABLE_WAYLAND=ON", "-DENABLE_BROWSER=ON", "-DCEF_ROOT_DIR=/app/cef", "-DENABLE_ALSA=OFF", "-DENABLE_PULSEAUDIO=ON", "-DENABLE_JACK=ON", "-DENABLE_VLC=OFF", "-DENABLE_AJA=ON", "-DENABLE_LIBFDK=ON", "-DENABLE_QSV11=ON", "-DENABLE_DECKLINK=OFF" ], "secret-opts": [ "-DRESTREAM_CLIENTID=$RESTREAM_CLIENTID", "-DRESTREAM_HASH=$RESTREAM_HASH", "-DTWITCH_CLIENTID=$TWITCH_CLIENTID", "-DTWITCH_HASH=$TWITCH_HASH", "-DYOUTUBE_CLIENTID=$YOUTUBE_CLIENTID", "-DYOUTUBE_CLIENTID_HASH=$YOUTUBE_CLIENTID_HASH", "-DYOUTUBE_SECRET=$YOUTUBE_SECRET", "-DYOUTUBE_SECRET_HASH=$YOUTUBE_SECRET_HASH" ], "post-install": [ "install -d /app/plugins", "install -d /app/extensions/Plugins" ], "sources": [ { "type": "dir", "path": "../" } ] } ] } obs-studio-32.0.4-sources/build-aux/run-swift-format000777 001751 001751 00000000000 15117352032 026172 2.run-format.zshustar00runnerrunner000000 000000 obs-studio-32.0.4-sources/build-aux/format-manifest.py000644 001751 001751 00000005532 15117351440 023605 0ustar00runnerrunner000000 000000 import argparse import glob import json import logging import os import sys from typing import Any def main() -> int: parser = argparse.ArgumentParser(description="Format Flatpak manifest") parser.add_argument( "manifest_file", metavar="FILE", type=str, help="Manifest file to adjust format for", ) parser.add_argument( "--check", action="store_true", help="Check for necessary changes only", default=False, required=False, ) parser.add_argument( "--loglevel", type=str, help="Set log level", default="WARNING", required=False ) arguments = parser.parse_args() logging.basicConfig(level=arguments.loglevel, format="%(message)s") logger = logging.getLogger() manifest_file = arguments.manifest_file try: with open(manifest_file, "r+") as manifest: manifest_path = os.path.dirname(manifest_file) manifest_string = manifest.read() manifest_data = json.loads(manifest_string) module_list = manifest_data.get("modules", []) obs_object = module_list[-1] if type(obs_object) != dict: logger.error( f"❌ Last element in modules list is not the obs-studio object" ) return 2 new_module_list = [] for module in module_list: if type(module) == str: if not os.path.isfile(os.path.join(manifest_path, module)): logger.warning( f"⚠️ Specified module {os.path.basename(module)} not found." ) continue new_module_list.append(module) new_module_list.sort() new_module_list.append(obs_object) manifest_data["modules"] = new_module_list new_manifest_string = ( f"{json.dumps(manifest_data, indent=4, ensure_ascii=False)}\n" ) if arguments.check: if new_module_list != module_list: logger.error(f"❌ Module list failed order validation") return 2 elif new_manifest_string != manifest_string: logger.error(f"❌ Manifest file is not correctly formatted") return 2 else: logger.info(f"✅ Module list passed order validation") return 0 manifest.seek(0) manifest.truncate() manifest.write(new_manifest_string) logger.info(f"✅ Updated manifest file '{manifest_file}") except IOError: logger.error(f"❌ Unable to read manifest file '{manifest_file}'") return 2 return 0 if __name__ == "__main__": sys.exit(main()) obs-studio-32.0.4-sources/build-aux/steam/000755 001751 001751 00000000000 15117352031 021240 5ustar00runnerrunner000000 000000 obs-studio-32.0.4-sources/build-aux/steam/obs_playtest_build.vdf000644 001751 001751 00000000704 15117351440 025634 0ustar00runnerrunner000000 000000 "AppBuild" { "AppID" "1905640" "Desc" "github_@@DESC@@" "ContentRoot" "./" "BuildOutput" "build/" "SetLive" "@@BRANCH@@" "Depots" { "1905642" // Windows { "ContentRoot" "./steam-windows" "FileMapping" { "LocalPath" "*" "DepotPath" "." "recursive" "1" } } "1905641" // Mac { "ContentRoot" "./steam-macos" "FileMapping" { "LocalPath" "*" "DepotPath" "." "recursive" "1" } } } } obs-studio-32.0.4-sources/build-aux/steam/obs_build.vdf000644 001751 001751 00000000763 15117351440 023714 0ustar00runnerrunner000000 000000 "AppBuild" { "AppID" "1905180" "Desc" "github_@@DESC@@" "ContentRoot" "./" "BuildOutput" "build/" "SetLive" "@@BRANCH@@" "Depots" { "1905181" // Windows { "ContentRoot" "./steam-windows" "InstallScript" "scripts/installscript.vdf" "FileMapping" { "LocalPath" "*" "DepotPath" "." "recursive" "1" } } "1905182" // Mac { "ContentRoot" "./steam-macos" "FileMapping" { "LocalPath" "*" "DepotPath" "." "recursive" "1" } } } } obs-studio-32.0.4-sources/build-aux/steam/scripts_macos/000755 001751 001751 00000000000 15117352031 024111 5ustar00runnerrunner000000 000000 obs-studio-32.0.4-sources/build-aux/steam/scripts_macos/launch.sh000644 001751 001751 00000000655 15117351440 025730 0ustar00runnerrunner000000 000000 #!/bin/zsh arch_name="${CPUTYPE}" is_translated="$(sysctl -in sysctl.proc_translated)" if (( is_translated )) arch_name="arm64" if [[ ${@} == *'--intel'* ]] arch_name="x86_64" if [[ -d OBS.app ]] exec open OBS.app -W --args "${@}" case ${arch_name} { x86_64) exec open x86_64/OBS.app -W --args "${@}" ;; arm64) exec open arm64/OBS.app -W --args "${@}" ;; *) echo "Unknown architecture: ${arch_name}"; exit 2 ;; } obs-studio-32.0.4-sources/build-aux/steam/scripts_windows/000755 001751 001751 00000000000 15117352031 024501 5ustar00runnerrunner000000 000000 obs-studio-32.0.4-sources/build-aux/steam/scripts_windows/install.bat000644 001751 001751 00000004250 15117351440 026643 0ustar00runnerrunner000000 000000 @echo off @cd /d "%~dp0" goto checkAdmin :checkAdmin net session >nul 2>&1 if %errorLevel% == 0 ( echo. ) else ( echo Administrative rights are required. Please re-run this script as Administrator. goto end ) :writeRegistry reg add "HKLM\SOFTWARE\OBS Studio" /f /t REG_SZ /d %1 /reg:32 reg add "HKLM\SOFTWARE\OBS Studio" /f /t REG_SZ /d %1 /reg:64 :setupProgramData :: Required for UWP applications mkdir "%PROGRAMDATA%\obs-studio-hook" icacls "%PROGRAMDATA%\obs-studio-hook" /grant "ALL APPLICATION PACKAGES":(OI)(CI)(GR,GE) :checkDLL echo Checking for 32-bit Virtual Cam registration... reg query "HKLM\SOFTWARE\Classes\CLSID\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}" >nul 2>&1 /reg:32 if %errorLevel% == 0 ( echo 32-bit Virtual Cam found, skipping install... echo. ) else ( echo 32-bit Virtual Cam not found, installing... goto install32DLL ) :CheckDLLContinue echo Checking for 64-bit Virtual Cam registration... reg query "HKLM\SOFTWARE\Classes\CLSID\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}" >nul 2>&1 /reg:64 if %errorLevel% == 0 ( echo 64-bit Virtual Cam found, skipping install... echo. ) else ( echo 64-bit Virtual Cam not found, installing... goto install64DLL ) goto endSuccess :install32DLL echo Installing 32-bit Virtual Cam... regsvr32.exe /i /s %1\data\obs-plugins\win-dshow\obs-virtualcam-module32.dll reg query "HKLM\SOFTWARE\Classes\CLSID\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}" >nul 2>&1 /reg:32 if %errorLevel% == 0 ( echo 32-bit Virtual Cam successfully installed echo. ) else ( echo 32-bit Virtual Cam installation failed echo. goto endFail ) goto checkDLLContinue :install64DLL echo Installing 64-bit Virtual Cam... regsvr32.exe /i /s %1\data\obs-plugins\win-dshow\obs-virtualcam-module64.dll reg query "HKLM\SOFTWARE\Classes\CLSID\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}" >nul 2>&1 /reg:64 if %errorLevel% == 0 ( echo 64-bit Virtual Cam successfully installed echo. goto endSuccess ) else ( echo 64-bit Virtual Cam installation failed echo. goto endFail ) :endFail echo Something failed, please report this on the OBS Discord or Forums! goto end :endSuccess echo Virtual Cam installed! echo. :end exit obs-studio-32.0.4-sources/build-aux/steam/scripts_windows/installscript.vdf000644 001751 001751 00000000542 15117351440 030101 0ustar00runnerrunner000000 000000 "InstallScript" { "Run Process" { "install" { "process 1" "scripts\\install.bat" "command 1" "\"%INSTALLDIR%\"" } } "Run Process On Uninstall" { "uninstall" { "process 1" "scripts\\uninstall.bat" "command 1" "\"%INSTALLDIR%\"" } } } obs-studio-32.0.4-sources/build-aux/steam/scripts_windows/uninstall.bat000644 001751 001751 00000001701 15117351440 027204 0ustar00runnerrunner000000 000000 @echo off @cd /d "%~dp0" goto checkAdmin :checkAdmin net session >nul 2>&1 if %errorLevel% == 0 ( echo. ) else ( echo Administrative rights are required. Please re-run this script as Administrator. goto end ) :clearRegistry reg delete "HKLM\SOFTWARE\OBS Studio" /f /reg:32 reg delete "HKLM\SOFTWARE\OBS Studio" /f /reg:64 :: Vulkan layer keys reg delete "HKLM\SOFTWARE\Khronos\Vulkan\ImplicitLayers" /f /v "%PROGRAMDATA%\obs-studio-hook\obs-vulkan64.json" /reg:32 reg delete "HKLM\SOFTWARE\Khronos\Vulkan\ImplicitLayers" /f /v "%PROGRAMDATA%\obs-studio-hook\obs-vulkan32.json" /reg:64 :deleteProgramDataFolder RMDIR /S /Q "%PROGRAMDATA%\obs-studio-hook" RMDIR /S /Q "%PROGRAMDATA%\obs-studio\shader-cache" :uninstallDLLs regsvr32.exe /u /s %1\data\obs-plugins\win-dshow\obs-virtualcam-module32.dll regsvr32.exe /u /s %1\data\obs-plugins\win-dshow\obs-virtualcam-module64.dll :endSuccess echo Virtual Cam uninstalled! echo. :end exit obs-studio-32.0.4-sources/build-aux/.functions/000755 001751 001751 00000000000 15117352031 022215 5ustar00runnerrunner000000 000000 obs-studio-32.0.4-sources/build-aux/.functions/log_group000644 001751 001751 00000000434 15117351440 024141 0ustar00runnerrunner000000 000000 autoload -Uz log_info if (( ! ${+_log_group} )) typeset -g _log_group=0 if (( ${+CI} )) { if (( _log_group )) { print "::endgroup::" typeset -g _log_group=0 } if (( # )) { print "::group::${@}" typeset -g _log_group=1 } } else { if (( # )) log_info ${@} } obs-studio-32.0.4-sources/build-aux/.functions/log_output000644 001751 001751 00000000200 15117351440 024334 0ustar00runnerrunner000000 000000 if (( ! ${+_loglevel} )) typeset -g _loglevel=1 if (( _loglevel > 0 )) { local icon='' print -PR " ${(r:5:)icon} ${@}" } obs-studio-32.0.4-sources/build-aux/.functions/log_info000644 001751 001751 00000000216 15117351440 023736 0ustar00runnerrunner000000 000000 if (( ! ${+_loglevel} )) typeset -g _loglevel=1 if (( _loglevel > 0 )) { local icon=' =>' print -PR "%F{4} ${(r:5:)icon}%f %B${@}%b" } obs-studio-32.0.4-sources/build-aux/.functions/log_warning000644 001751 001751 00000000234 15117351440 024450 0ustar00runnerrunner000000 000000 if (( ! ${+_loglevel} )) typeset -g _loglevel=1 if (( _loglevel > 0 )) { local icon=' =>' print -PR "${CI:+::warning::}%F{3} ${(r:5:)icon} ${@}%f" } obs-studio-32.0.4-sources/build-aux/.functions/log_error000644 001751 001751 00000000116 15117351440 024133 0ustar00runnerrunner000000 000000 local icon=' ✖︎ ' print -u2 -PR "${CI:+::error::}%F{1} ${icon} %f ${@}" obs-studio-32.0.4-sources/build-aux/.functions/log_debug000644 001751 001751 00000000177 15117351440 024077 0ustar00runnerrunner000000 000000 if (( ! ${+_loglevel} )) typeset -g _loglevel=1 if (( _loglevel > 2 )) print -PR -e -- "${CI:+::debug::}%F{220}DEBUG: ${@}%f" obs-studio-32.0.4-sources/build-aux/.functions/set_loglevel000644 001751 001751 00000000655 15117351440 024635 0ustar00runnerrunner000000 000000 autoload -Uz log_debug log_error local -r _usage="Usage: %B${0}%b Set log level, following levels are supported: 0 (quiet), 1 (normal), 2 (verbose), 3 (debug)" if (( ! # )); then log_error 'Called without arguments.' log_output ${_usage} return 2 elif (( ${1} >= 4 )); then log_error 'Called with loglevel > 3.' log_output ${_usage} fi typeset -g -i -r _loglevel=${1} log_debug "Log level set to '${1}'" obs-studio-32.0.4-sources/build-aux/.functions/log_status000644 001751 001751 00000000212 15117351440 024322 0ustar00runnerrunner000000 000000 if (( ! ${+_loglevel} )) typeset -g _loglevel=1 if (( _loglevel > 0 )) { local icon=' >' print -PR "%F{2} ${(r:5:)icon}%f ${@}" } obs-studio-32.0.4-sources/build-aux/run-clang-format000777 001751 001751 00000000000 15117352032 026122 2.run-format.zshustar00runnerrunner000000 000000 obs-studio-32.0.4-sources/build-aux/.run-format.zsh000755 001751 001751 00000020263 15117351440 023036 0ustar00runnerrunner000000 000000 #!/usr/bin/env zsh builtin emulate -L zsh setopt EXTENDED_GLOB setopt PUSHD_SILENT setopt ERR_EXIT setopt ERR_RETURN setopt NO_UNSET setopt PIPE_FAIL setopt NO_AUTO_PUSHD setopt NO_PUSHD_IGNORE_DUPS setopt FUNCTION_ARGZERO ## Enable for script debugging # setopt WARN_CREATE_GLOBAL # setopt WARN_NESTED_VAR # setopt XTRACE autoload -Uz is-at-least && if ! is-at-least 5.2; then print -u2 -PR "%F{1}${funcstack[1]##*/}:%f Running on Zsh version %B${ZSH_VERSION}%b, but Zsh %B5.2%b is the minimum supported version. Upgrade zsh to fix this issue." exit 1 fi invoke_formatter() { if (( # < 1 )) { log_error "Usage invoke_formatter [formatter_name]" exit 2 } local formatter="${1}" shift local -a source_files=(${@}) case ${formatter} { clang) if (( ${+commands[clang-format-19]} )) { local formatter=clang-format-19 } elif (( ${+commands[clang-format]} )) { local formatter=clang-format } else { log_error "No viable clang-format version found (required 19.1.1)" exit 2 } local -a formatter_version=($(${formatter} --version)) if ! is-at-least 19.1.1 ${formatter_version[-1]}; then log_error "clang-format is not version 19.1.1 or above (found ${formatter_version[-1]}." exit 2 fi if ! is-at-least ${formatter_version[-1]} 19.1.1; then log_error "clang-format is more recent than version 19.1.1 (found ${formatter_version[-1]})." exit 2 fi if (( ! #source_files )) source_files=((libobs|libobs-*|frontend|plugins|deps|shared|test)/**/*.(c|cpp|h|hpp|m|mm)(.N)) source_files=(${source_files:#*/(obs-websocket/deps|decklink/*/decklink-sdk|mac-syphon/syphon-framework|libdshowcapture)/*}) local -a format_args=(-style=file -fallback-style=none) if (( _loglevel > 2 )) format_args+=(--verbose) check_files() { local -i num_failures=0 local -a source_files=($@) local file local -a format_args=(-style=file -fallback-style=none) if (( _loglevel > 2 )) format_args+=(--verbose) local -a command=(${formatter} ${format_args}) for file (${source_files}) { if ! ${command} "${file}" | diff -q "${file}" - &> /dev/null; then log_error "${file} requires formatting changes." if (( fail_on_error == 2 )) return 2; num_failures=$(( num_failures + 1 )) fi } if (( num_failures && fail_on_error == 1 )) return 2 } format_files() { local -a source_files=($@) if (( ${#source_files} )) { local -a format_args=(-style=file -fallback-style=none -i) if (( _loglevel > 2 )) format_args+=(--verbose) "${formatter}" ${format_args} ${source_files} } } ;; gersemi) local formatter=gersemi if (( ${+commands[gersemi]} )) { local gersemi_version=($(gersemi --version)) if ! is-at-least 0.21.0 ${gersemi_version[2]}; then log_error "gersemi is not version 0.21.0 or above (found ${gersemi_version[2]}." exit 2 fi } if (( ! #source_files )) source_files=(CMakeLists.txt (libobs|libobs-*|frontend|plugins|deps|shared|cmake|test)/**/(CMakeLists.txt|*.cmake)(.N)) source_files=(${source_files:#*/(jansson|decklink/*/decklink-sdk|obs-websocket|obs-browser|libdshowcapture)/*}) source_files=(${source_files:#(cmake/Modules/*|*/legacy.cmake)}) check_files() { local -i num_failures=0 local -a source_files=($@) local file local -a command=(${formatter} -c --no-cache ${source_files}) if (( ${#source_files} )) { while read -r line; do local -a line_tokens=(${(z)line}) if (( #line_tokens )) { file=${line_tokens[1]//*${project_root}\//} log_error "${file} requires formatting changes." } else { log_error "${line}" } if (( fail_on_error == 2 )) return 2 num_failures=$(( num_failures + 1 )) done < <(${command} 2>&1) if (( num_failures && fail_on_error == 1 )) return 2 } } format_files() { local -a source_files=($@) if (( ${#source_files} )) { "${formatter}" -i ${source_files} } } ;; swift) local formatter=swift-format if (( ${+commands[swift-format]} )) { local swift_format_version=$(swift-format --version) if ! is-at-least 508.0.0 ${swift_format_version}; then log_error "swift-format is not version 508.0.0 or above (found ${swift_format_version})." exit 2 fi } else { log_error "No viable swift-format version found (required 508.0.0)" exit 2 } if (( ! #source_files )) source_files=((libobs|libobs-*|frontend|plugins)/**/*.swift(.N)) check_files() { local -i num_failures=0 local -a source_files=($@) local file local -a format_args=() local -a command=(${formatter} ${format_args}) for file (${source_files}) { if ! "${command}" "${file}" | diff -q "${file}" - &> /dev/null; then log_error "${file} requires formatting changes." if (( fail_on_error == 2 )) return 2; num_failures=$(( num_failures + 1 )) fi } if (( num_failures && fail_on_error == 1 )) return 2 } format_files() { local -a source_files=($@) if (( ${#source_files} )) { local -a format_args=(-i) "${formatter}" ${format_args} ${source_files} } } ;; *) log_error "Invalid formatter specified: ${1}. Valid options are clang-format, gersemi, and swift-format."; exit 2 ;; } local file local -i num_failures=0 if (( check_only )) { if (( ${+functions[check_files]} )) { check_files ${source_files} } else { log_error "No format check function defined for formatter '${formatter}'" exit 2 } } else { if (( ${+functions[format_files]} )) { format_files ${source_files} } else { log_error "No format function defined for formatter '${formatter}'" exit 2 } } } run_format() { if (( ! ${+SCRIPT_HOME} )) typeset -g SCRIPT_HOME=${ZSH_ARGZERO:A:h} if (( ! ${+FORMATTER_NAME} )) typeset -g FORMATTER_NAME=${${(s:-:)ZSH_ARGZERO:t:r}[2]} local project_root=${SCRIPT_HOME:A:h} typeset -g host_os=${${(L)$(uname -s)}//darwin/macos} local -i fail_on_error=0 local -i check_only=0 local -i verbosity=1 local -r _version='1.0.0' fpath=("${SCRIPT_HOME}/.functions" ${fpath}) autoload -Uz set_loglevel log_info log_error log_output log_status log_warning local -r _usage=" Usage: %B${functrace[1]%:*}%b