Overview
Request 4460 (accepted)
- Update to version 23.0.2:
* UI: Fix "What's New" showing again each patch version
* libobs: Fix code styling
* libobs: Fix first frame when output restarted
* CI: Fix building on trusty
* UI: Add (Do not show again) checkbox to dock closing warning
* Revert "Merge pull request #1418 from cabirdme/qsv_feature_add"
* Revert "obs-qsv: Enable b-pyramid & change packet priority"
* UI: Warn when closing dock widgets for first time
* UI: Add way to exec std::function via invokeMethod
* obs-ffmpeg: Check avformat context before use
* obs-ffmpeg: Fix crash on failed audio codec init (for real)
* UI: Always set first scene collection/profiles
* obs-ffmpeg: Fix crash on failed audio codec init
* libobs-d3d11: Check for bad NV12 output on all devices
* libobs-d3d11: Perform actual test for NV12 driver bug
* libobs-d3d11: Remove NV12 blacklist
* libobs: Always query shared texture handle for encoding
* UI: Reset replay buffer button on "stop" signal
* libobs-d3d11: Reset handle and re-lock if texture rebuilt
* libobs-d3d11: Use discrete function to get shared handle
* libobs-d3d11: Set acquired bool when texture acquired
* obs-ffmpeg: Always output SEI
* obs-ffmpeg: Fix SEI data output
* frontend-tools: Fix memory leak when reloading scripts
* UI: Update tab stop order in Settings
* CI: macOS builds on Azure Pipelines
* obs-qsv11: Fix crash on destructor after init failure
* obs-qsv11: Don't try to free non allocated array on destruction
* obs-ffmpeg: Fix NVENC blacklisted card check
- Created by boombatower about 6 years ago
- In state accepted
-
Package maintainers:
boombatower,
darix, and
frispete
obs-studio.changes
Changed
-------------------------------------------------------------------
+Fri Mar 08 21:04:44 UTC 2019 - jimmy@boombatower.com
+
+- Update to version 23.0.2:
+ * UI: Fix "What's New" showing again each patch version
+ * libobs: Fix code styling
+ * libobs: Fix first frame when output restarted
+ * CI: Fix building on trusty
+ * UI: Add (Do not show again) checkbox to dock closing warning
+ * Revert "Merge pull request #1418 from cabirdme/qsv_feature_add"
+ * Revert "obs-qsv: Enable b-pyramid & change packet priority"
+ * UI: Warn when closing dock widgets for first time
+ * UI: Add way to exec std::function via invokeMethod
+ * obs-ffmpeg: Check avformat context before use
+ * obs-ffmpeg: Fix crash on failed audio codec init (for real)
+ * UI: Always set first scene collection/profiles
+ * obs-ffmpeg: Fix crash on failed audio codec init
+ * libobs-d3d11: Check for bad NV12 output on all devices
+ * libobs-d3d11: Perform actual test for NV12 driver bug
+ * libobs-d3d11: Remove NV12 blacklist
+ * libobs: Always query shared texture handle for encoding
+ * UI: Reset replay buffer button on "stop" signal
+ * libobs-d3d11: Reset handle and re-lock if texture rebuilt
+ * libobs-d3d11: Use discrete function to get shared handle
+ * libobs-d3d11: Set acquired bool when texture acquired
+ * obs-ffmpeg: Always output SEI
+ * obs-ffmpeg: Fix SEI data output
+ * frontend-tools: Fix memory leak when reloading scripts
+ * UI: Update tab stop order in Settings
+ * CI: macOS builds on Azure Pipelines
+ * obs-qsv11: Fix crash on destructor after init failure
+ * obs-qsv11: Don't try to free non allocated array on destruction
+ * obs-ffmpeg: Fix NVENC blacklisted card check
+
+-------------------------------------------------------------------
Wed Feb 27 21:36:03 UTC 2019 - jimmy@boombatower.com
- Update to version 23.0.1:
obs-studio.spec
Changed
Name: obs-studio
-Version: 23.0.1
+Version: 23.0.2
Release: 0
Summary: A recording/broadcasting program
Group: Productivity/Multimedia/Video/Editors and Convertors
_service
Changed
<services>
<service name="tar_scm" mode="disabled">
<param name="versionformat">@PARENT_TAG@</param>
- <param name="revision">refs/tags/23.0.1</param>
+ <param name="revision">refs/tags/23.0.2</param>
<param name="url">git://github.com/jp9000/obs-studio.git</param>
<param name="scm">git</param>
<param name="changesgenerate">enable</param>
_servicedata
Changed
<servicedata>
<service name="tar_scm">
<param name="url">git://github.com/jp9000/obs-studio.git</param>
- <param name="changesrevision">f2d7f5b2e713266138df656121da35ff89407991</param>
+ <param name="changesrevision">3d63907976bcfb67ac0588185c7fef295d280d36</param>
</service>
</servicedata>
obs-studio-23.0.1.tar.xz/CI/before-deploy-osx.sh -> obs-studio-23.0.2.tar.xz/CI/before-deploy-osx.sh
Changed
# Generate file name variables
export GIT_HASH=$(git rev-parse --short HEAD)
-export FILE_DATE=$(date +%Y-%m-%d.%H:%M:%S)
+export FILE_DATE=$(date +%Y-%m-%d.%H-%M-%S)
export FILENAME=$FILE_DATE-$GIT_HASH-$TRAVIS_BRANCH-osx.pkg
cd ./build
hr "Generating .pkg"
packagesbuild ../CI/install/osx/CMakeLists.pkgproj
-# Signing stuff
-hr "Decrypting Cert"
-openssl aes-256-cbc -K $encrypted_dd3c7f5e9db9_key -iv $encrypted_dd3c7f5e9db9_iv -in ../CI/osxcert/Certificates.p12.enc -out Certificates.p12 -d
-hr "Creating Keychain"
-security create-keychain -p mysecretpassword build.keychain
-security default-keychain -s build.keychain
-security unlock-keychain -p mysecretpassword build.keychain
-security set-keychain-settings -t 3600 -u build.keychain
-hr "Importing certs into keychain"
-security import ./Certificates.p12 -k build.keychain -T /usr/bin/productsign -P ""
-# macOS 10.12+
-security set-key-partition-list -S apple-tool:,apple: -s -k mysecretpassword build.keychain
-hr "Signing Package"
-productsign --sign 2MMRE5MTB8 ./OBS.pkg ./$FILENAME
+if [ -v "$TRAVIS" ]; then
+ # Signing stuff
+ hr "Decrypting Cert"
+ openssl aes-256-cbc -K $encrypted_dd3c7f5e9db9_key -iv $encrypted_dd3c7f5e9db9_iv -in ../CI/osxcert/Certificates.p12.enc -out Certificates.p12 -d
+ hr "Creating Keychain"
+ security create-keychain -p mysecretpassword build.keychain
+ security default-keychain -s build.keychain
+ security unlock-keychain -p mysecretpassword build.keychain
+ security set-keychain-settings -t 3600 -u build.keychain
+ hr "Importing certs into keychain"
+ security import ./Certificates.p12 -k build.keychain -T /usr/bin/productsign -P ""
+ # macOS 10.12+
+ security set-key-partition-list -S apple-tool:,apple: -s -k mysecretpassword build.keychain
+ hr "Signing Package"
+ productsign --sign 2MMRE5MTB8 ./OBS.pkg ./$FILENAME
+else
+ cp ./OBS.pkg ./$FILENAME
+fi
# Move to the folder that travis uses to upload artifacts from
hr "Moving package to nightly folder for distribution"
obs-studio-23.0.1.tar.xz/CI/install-dependencies-linux.sh -> obs-studio-23.0.2.tar.xz/CI/install-dependencies-linux.sh
Changed
set -ex
sudo add-apt-repository ppa:jonathonf/ffmpeg-3 -y
+curl -L https://packagecloud.io/github/git-lfs/gpgkey | sudo apt-key add -
sudo apt-get -qq update
sudo apt-get install -y \
build-essential \
obs-studio-23.0.1.tar.xz/CI/install-dependencies-osx.sh -> obs-studio-23.0.2.tar.xz/CI/install-dependencies-osx.sh
Changed
# Echo all commands before executing
set -v
-git fetch --unshallow
+if [ -v "$TRAVIS" ]; then
+ git fetch --unshallow
+fi
# Leave obs-studio folder
cd ../
obs-studio-23.0.1.tar.xz/README.rst -> obs-studio-23.0.2.tar.xz/README.rst
Changed
:alt: OBS Studio Build Status - AppVeyor CI
:target: https://ci.appveyor.com/project/jp9000/obs-studio/branch/master
+.. image:: https://dev.azure.com/obsjim/obsjim/_apis/build/status/obsproject.obs-studio?branchName=master
+ :alt: OBS Studio Build Status - Azure Pipelines
+ :target: https://dev.azure.com/obsjim/obsjim/_build/latest?definitionId=1&branchName=master
+
.. image:: https://discordapp.com/api/guilds/348973006581923840/widget.png?style=shield
:alt: OBS Studio Discord Server
:target: https://obsproject.com/discord
obs-studio-23.0.1.tar.xz/UI/CMakeLists.txt -> obs-studio-23.0.2.tar.xz/UI/CMakeLists.txt
Changed
${obs_libffutil_SOURCES}
../deps/json11/json11.cpp
obs-app.cpp
+ window-dock.cpp
api-interface.cpp
window-basic-main.cpp
window-basic-stats.cpp
../deps/json11/json11.hpp
obs-app.hpp
platform.hpp
+ window-dock.hpp
window-main.hpp
window-basic-main.hpp
window-basic-stats.hpp
obs-studio-23.0.1.tar.xz/UI/auth-mixer.cpp -> obs-studio-23.0.2.tar.xz/UI/auth-mixer.cpp
Changed
#include "window-basic-main.hpp"
#include "remote-text.hpp"
+#include "window-dock.hpp"
#include <json11.hpp>
return OAuthStreamKey::LoadInternal();
}
-class MixerChat : public QDockWidget {
+class MixerChat : public OBSDock {
public:
- inline MixerChat() : QDockWidget() {}
+ inline MixerChat() : OBSDock() {}
QScopedPointer<QCefWidget> widget;
};
obs-studio-23.0.1.tar.xz/UI/auth-twitch.cpp -> obs-studio-23.0.2.tar.xz/UI/auth-twitch.cpp
Changed
#include "window-basic-main.hpp"
#include "remote-text.hpp"
+#include "window-dock.hpp"
#include <json11.hpp>
return OAuthStreamKey::LoadInternal();
}
-class TwitchWidget : public QDockWidget {
+class TwitchWidget : public OBSDock {
public:
- inline TwitchWidget() : QDockWidget() {}
+ inline TwitchWidget() : OBSDock() {}
QScopedPointer<QCefWidget> widget;
obs-studio-23.0.1.tar.xz/UI/data/locale/en-US.ini -> obs-studio-23.0.2.tar.xz/UI/data/locale/en-US.ini
Changed
ShowInMultiview="Show in Multiview"
VerticalLayout="Vertical Layout"
Group="Group"
+DoNotShowAgain="Do not show again"
# warning if program already open
AlreadyRunning.Title="OBS is already running"
AlreadyRunning.Text="OBS is already running! Unless you meant to do this, please shut down any existing instances of OBS before trying to run a new instance. If you have OBS set to minimize to the system tray, please check to see if it's still running there."
AlreadyRunning.LaunchAnyway="Launch Anyway"
+# warning when closing docks. it's frustrating that we actually need this.
+DockCloseWarning.Title="Closing Dockable Window"
+DockCloseWarning.Text="You just closed a dockable window. If you'd like to show it again, use the View → Docks menu on the menu bar."
+
# Auth
Auth.Authing.Title="Authenticating..."
Auth.Authing.Text="Authenticating with %1, please wait..."
obs-studio-23.0.1.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-23.0.2.tar.xz/UI/forms/OBSBasic.ui
Changed
<addaction name="menuBasic_MainMenu_Help"/>
</widget>
<widget class="OBSBasicStatusBar" name="statusbar"/>
- <widget class="QDockWidget" name="scenesDock">
+ <widget class="OBSDock" name="scenesDock">
<property name="features">
<set>QDockWidget::AllDockWidgetFeatures</set>
</property>
</layout>
</widget>
</widget>
- <widget class="QDockWidget" name="sourcesDock">
+ <widget class="OBSDock" name="sourcesDock">
<property name="features">
<set>QDockWidget::AllDockWidgetFeatures</set>
</property>
</layout>
</widget>
</widget>
- <widget class="QDockWidget" name="mixerDock">
+ <widget class="OBSDock" name="mixerDock">
<property name="features">
<set>QDockWidget::AllDockWidgetFeatures</set>
</property>
</layout>
</widget>
</widget>
- <widget class="QDockWidget" name="transitionsDock">
+ <widget class="OBSDock" name="transitionsDock">
<property name="features">
<set>QDockWidget::AllDockWidgetFeatures</set>
</property>
</layout>
</widget>
</widget>
- <widget class="QDockWidget" name="controlsDock">
+ <widget class="OBSDock" name="controlsDock">
<property name="features">
<set>QDockWidget::AllDockWidgetFeatures</set>
</property>
<extends>QListView</extends>
<header>source-tree.hpp</header>
</customwidget>
+ <customwidget>
+ <class>OBSDock</class>
+ <extends>QDockWidget</extends>
+ <header>window-dock.hpp</header>
+ <container>1</container>
+ </customwidget>
</customwidgets>
<resources>
<include location="obs.qrc"/>
obs-studio-23.0.1.tar.xz/UI/forms/OBSBasicSettings.ui -> obs-studio-23.0.2.tar.xz/UI/forms/OBSBasicSettings.ui
Changed
</widget>
<tabstops>
<tabstop>listWidget</tabstop>
+ <tabstop>scrollArea_2</tabstop>
+ <tabstop>language</tabstop>
+ <tabstop>theme</tabstop>
+ <tabstop>enableAutoUpdates</tabstop>
+ <tabstop>openStatsOnStartup</tabstop>
+ <tabstop>warnBeforeStreamStart</tabstop>
+ <tabstop>warnBeforeStreamStop</tabstop>
+ <tabstop>recordWhenStreaming</tabstop>
+ <tabstop>keepRecordStreamStops</tabstop>
+ <tabstop>replayWhileStreaming</tabstop>
+ <tabstop>keepReplayStreamStops</tabstop>
+ <tabstop>snappingEnabled</tabstop>
+ <tabstop>snapDistance</tabstop>
+ <tabstop>screenSnapping</tabstop>
+ <tabstop>sourceSnapping</tabstop>
+ <tabstop>centerSnapping</tabstop>
+ <tabstop>hideProjectorCursor</tabstop>
+ <tabstop>projectorAlwaysOnTop</tabstop>
+ <tabstop>saveProjectors</tabstop>
+ <tabstop>systemTrayEnabled</tabstop>
+ <tabstop>systemTrayWhenStarted</tabstop>
+ <tabstop>systemTrayAlways</tabstop>
+ <tabstop>overflowHide</tabstop>
+ <tabstop>overflowAlwaysVisible</tabstop>
+ <tabstop>overflowSelectionHide</tabstop>
+ <tabstop>doubleClickSwitch</tabstop>
+ <tabstop>studioPortraitLayout</tabstop>
+ <tabstop>multiviewMouseSwitch</tabstop>
+ <tabstop>multiviewDrawNames</tabstop>
+ <tabstop>multiviewDrawAreas</tabstop>
+ <tabstop>multiviewLayout</tabstop>
+ <tabstop>service</tabstop>
+ <tabstop>connectAccount</tabstop>
+ <tabstop>useStreamKey</tabstop>
+ <tabstop>server</tabstop>
+ <tabstop>customServer</tabstop>
+ <tabstop>key</tabstop>
+ <tabstop>show</tabstop>
+ <tabstop>connectAccount2</tabstop>
+ <tabstop>disconnectAccount</tabstop>
+ <tabstop>useAuth</tabstop>
+ <tabstop>authUsername</tabstop>
+ <tabstop>authPw</tabstop>
+ <tabstop>authPwShow</tabstop>
+ <tabstop>scrollArea_3</tabstop>
<tabstop>outputMode</tabstop>
<tabstop>simpleOutputVBitrate</tabstop>
+ <tabstop>simpleOutStrEncoder</tabstop>
<tabstop>simpleOutputABitrate</tabstop>
<tabstop>simpleOutAdvanced</tabstop>
+ <tabstop>simpleOutEnforce</tabstop>
<tabstop>simpleOutPreset</tabstop>
<tabstop>simpleOutCustom</tabstop>
- <tabstop>simpleOutEnforce</tabstop>
- <tabstop>simpleOutStrEncoder</tabstop>
<tabstop>simpleOutputPath</tabstop>
<tabstop>simpleOutputBrowse</tabstop>
<tabstop>simpleNoSpace</tabstop>
<tabstop>advOutRecUseRescale</tabstop>
<tabstop>advOutRecRescale</tabstop>
<tabstop>advOutMuxCustom</tabstop>
+ <tabstop>advOutFFType</tabstop>
<tabstop>advOutFFRecPath</tabstop>
<tabstop>advOutFFPathBrowse</tabstop>
- <tabstop>advOutFFURL</tabstop>
+ <tabstop>advOutFFNoSpace</tabstop>
<tabstop>advOutFFFormat</tabstop>
+ <tabstop>advOutFFMCfg</tabstop>
<tabstop>advOutFFVBitrate</tabstop>
<tabstop>advOutFFVGOPSize</tabstop>
<tabstop>advOutFFUseRescale</tabstop>
<tabstop>advOutFFTrack6</tabstop>
<tabstop>advOutFFAEncoder</tabstop>
<tabstop>advOutFFACfg</tabstop>
- <tabstop>advOutFFType</tabstop>
- <tabstop>advOutFFMCfg</tabstop>
- <tabstop>advOutFFNoSpace</tabstop>
+ <tabstop>advOutFFURL</tabstop>
<tabstop>advOutTrack1Bitrate</tabstop>
<tabstop>advOutTrack1Name</tabstop>
<tabstop>advOutTrack2Bitrate</tabstop>
<tabstop>advOutTrack5Name</tabstop>
<tabstop>advOutTrack6Bitrate</tabstop>
<tabstop>advOutTrack6Name</tabstop>
+ <tabstop>advReplayBuf</tabstop>
+ <tabstop>advRBSecMax</tabstop>
+ <tabstop>advRBMegsMax</tabstop>
<tabstop>sampleRate</tabstop>
<tabstop>channelSetup</tabstop>
<tabstop>desktopAudioDevice1</tabstop>
<tabstop>auxAudioDevice1</tabstop>
<tabstop>auxAudioDevice2</tabstop>
<tabstop>auxAudioDevice3</tabstop>
+ <tabstop>auxAudioDevice4</tabstop>
+ <tabstop>meterDecayRate</tabstop>
+ <tabstop>peakMeterType</tabstop>
<tabstop>audioSourceScrollArea</tabstop>
<tabstop>baseResolution</tabstop>
<tabstop>outputResolution</tabstop>
<tabstop>disableOSXVSync</tabstop>
<tabstop>resetOSXVSync</tabstop>
<tabstop>monitoringDevice</tabstop>
+ <tabstop>disableAudioDucking</tabstop>
<tabstop>filenameFormatting</tabstop>
<tabstop>overwriteIfExists</tabstop>
+ <tabstop>autoRemux</tabstop>
<tabstop>simpleRBPrefix</tabstop>
<tabstop>simpleRBSuffix</tabstop>
<tabstop>streamDelayEnable</tabstop>
<tabstop>bindToIP</tabstop>
<tabstop>enableNewSocketLoop</tabstop>
<tabstop>enableLowLatencyMode</tabstop>
- <tabstop>warnBeforeStreamStop</tabstop>
- <tabstop>recordWhenStreaming</tabstop>
- <tabstop>keepRecordStreamStops</tabstop>
- <tabstop>replayWhileStreaming</tabstop>
- <tabstop>keepReplayStreamStops</tabstop>
- <tabstop>snappingEnabled</tabstop>
- <tabstop>screenSnapping</tabstop>
- <tabstop>centerSnapping</tabstop>
- <tabstop>sourceSnapping</tabstop>
- <tabstop>snapDistance</tabstop>
- <tabstop>hideProjectorCursor</tabstop>
- <tabstop>projectorAlwaysOnTop</tabstop>
- <tabstop>saveProjectors</tabstop>
- <tabstop>systemTrayEnabled</tabstop>
- <tabstop>systemTrayWhenStarted</tabstop>
- <tabstop>systemTrayAlways</tabstop>
- <tabstop>enableAutoUpdates</tabstop>
- <tabstop>warnBeforeStreamStart</tabstop>
- <tabstop>scrollArea_2</tabstop>
- <tabstop>language</tabstop>
- <tabstop>theme</tabstop>
+ <tabstop>browserHWAccel</tabstop>
+ <tabstop>disableFocusHotkeys</tabstop>
</tabstops>
<resources>
<include location="obs.qrc"/>
obs-studio-23.0.1.tar.xz/UI/frontend-plugins/frontend-tools/scripts.cpp -> obs-studio-23.0.2.tar.xz/UI/frontend-plugins/frontend-tools/scripts.cpp
Changed
obs_properties_t *prop =
obs_script_get_properties(script);
obs_properties_apply_settings(prop, settings);
+ obs_properties_destroy(prop);
break;
}
obs_properties_t *prop =
obs_script_get_properties(script);
obs_properties_apply_settings(prop, settings);
+ obs_properties_destroy(prop);
}
}
}
obs-studio-23.0.1.tar.xz/UI/obs-app.cpp -> obs-studio-23.0.2.tar.xz/UI/obs-app.cpp
Changed
config_set_default_string(globalConfig, "Basic", "SceneCollectionFile",
Str("Untitled"));
+ if (!config_has_user_value(globalConfig, "Basic", "Profile")) {
+ config_set_string(globalConfig, "Basic", "Profile",
+ Str("Untitled"));
+ config_set_string(globalConfig, "Basic", "ProfileDir",
+ Str("Untitled"));
+ }
+
+ if (!config_has_user_value(globalConfig, "Basic", "SceneCollection")) {
+ config_set_string(globalConfig, "Basic",
+ "SceneCollection", Str("Untitled"));
+ config_set_string(globalConfig, "Basic",
+ "SceneCollectionFile", Str("Untitled"));
+ }
+
#ifdef _WIN32
bool disableAudioDucking = config_get_bool(globalConfig, "Audio",
"DisableAudioDucking");
ResetHotkeyState(applicationState() != Qt::ApplicationActive);
}
+Q_DECLARE_METATYPE(VoidFunc)
+
+void OBSApp::Exec(VoidFunc func)
+{
+ func();
+}
+
bool OBSApp::OBSInit()
{
ProfileScope("OBSApp::OBSInit");
setAttribute(Qt::AA_UseHighDpiPixmaps);
+ qRegisterMetaType<VoidFunc>();
+
if (!StartupOBS(locale.c_str(), GetProfilerNameStore()))
return false;
obs-studio-23.0.1.tar.xz/UI/obs-app.hpp -> obs-studio-23.0.2.tar.xz/UI/obs-app.hpp
Changed
#include <util/util.hpp>
#include <util/platform.h>
#include <obs-frontend-api.h>
+#include <functional>
#include <string>
#include <memory>
#include <vector>
const char *disambiguation, int n) const override;
};
+typedef std::function<void ()> VoidFunc;
+
class OBSApp : public QApplication {
Q_OBJECT
translatorHooks.pop_front();
}
+public slots:
+ void Exec(VoidFunc func);
+
signals:
void StyleChanged();
};
obs-studio-23.0.1.tar.xz/UI/window-basic-main.cpp -> obs-studio-23.0.2.tar.xz/UI/window-basic-main.cpp
Changed
startingDockLayout = saveState();
- statsDock = new QDockWidget();
+ statsDock = new OBSDock();
statsDock->setObjectName(QStringLiteral("statsDock"));
statsDock->setFeatures(QDockWidget::AllDockWidgetFeatures);
statsDock->setWindowTitle(QTStr("Basic.Stats"));
#if OBS_RELEASE_CANDIDATE > 0
if (lastVersion < OBS_RELEASE_CANDIDATE_VER) {
#else
- if (lastVersion < LIBOBS_API_VER) {
+ if ((lastVersion & ~0xFFFF) < (LIBOBS_API_VER & ~0xFFFF)) {
#endif
config_set_int(App()->GlobalConfig(), "General",
"InfoIncrement", -1);
return;
replayBufferButton->setText(QTStr("Basic.Main.StartReplayBuffer"));
+ replayBufferButton->setChecked(false);
if (sysTrayReplayBuffer)
sysTrayReplayBuffer->setText(replayBufferButton->text());
obs-studio-23.0.2.tar.xz/UI/window-dock.cpp
Added
+#include "window-dock.hpp"
+#include "obs-app.hpp"
+
+#include <QMessageBox>
+#include <QCheckBox>
+
+void OBSDock::closeEvent(QCloseEvent *event)
+{
+ auto msgBox = [] ()
+ {
+ QMessageBox msgbox(App()->GetMainWindow());
+ msgbox.setWindowTitle(QTStr("DockCloseWarning.Title"));
+ msgbox.setText(QTStr("DockCloseWarning.Text"));
+ msgbox.setIcon(QMessageBox::Icon::Information);
+ msgbox.addButton(QMessageBox::Ok);
+
+ QCheckBox *cb = new QCheckBox(QTStr("DoNotShowAgain"));
+ msgbox.setCheckBox(cb);
+
+ msgbox.exec();
+
+ if (cb->isChecked()) {
+ config_set_bool(App()->GlobalConfig(), "General",
+ "WarnedAboutClosingDocks", true);
+ config_save_safe(App()->GlobalConfig(), "tmp", nullptr);
+ }
+ };
+
+ bool warned = config_get_bool(App()->GlobalConfig(), "General",
+ "WarnedAboutClosingDocks");
+ if (!warned) {
+ QMetaObject::invokeMethod(App(), "Exec",
+ Qt::QueuedConnection,
+ Q_ARG(VoidFunc, msgBox));
+ }
+
+ QDockWidget::closeEvent(event);
+}
obs-studio-23.0.2.tar.xz/UI/window-dock.hpp
Added
+#pragma once
+
+#include <QDockWidget>
+
+class OBSDock : public QDockWidget {
+ Q_OBJECT
+
+public:
+ inline OBSDock(QWidget *parent = nullptr) : QDockWidget(parent) {}
+
+ virtual void closeEvent(QCloseEvent *event);
+};
obs-studio-23.0.2.tar.xz/azure-pipelines.yml
Added
+# Starter pipeline
+# Start with a minimal pipeline that you can customize to build and deploy your code.
+# Add steps that build, run tests, deploy, and more:
+# https://aka.ms/yaml
+
+pool:
+ vmImage: 'macOS-10.13'
+
+variables:
+ CMAKE_PREFIX_PATH: /usr/local/opt/qt5/lib/cmake
+ CEF_BUILD_VERSION: 3.3282.1726.gc8368c8
+
+steps:
+- script: git submodule update --init --recursive
+ displayName: 'Checkout Submodules'
+
+- script: ./CI/install-dependencies-osx.sh
+ displayName: 'Install Dependencies'
+
+- script: ./CI/before-script-osx.sh
+ displayName: 'Cmake'
+
+- bash: |
+ cd ./build
+ make -j4
+ cd -
+ displayName: 'Build'
+
+- script: ./CI/before-deploy-osx.sh
+ condition: ne(variables['Build.Reason'], 'PullRequest')
+ displayName: 'Before Deploy'
+
+- task: PublishBuildArtifacts@1
+ condition: ne(variables['Build.Reason'], 'PullRequest')
+ inputs:
+ pathtoPublish: './nightly'
+ artifactName: build
obs-studio-23.0.1.tar.xz/libobs-d3d11/d3d11-rebuild.cpp -> obs-studio-23.0.2.tar.xz/libobs-d3d11/d3d11-rebuild.cpp
Changed
if (FAILED(hr))
throw HRError("Failed to create GDI surface", hr);
}
+
+ acquired = false;
+
+ if ((td.MiscFlags & D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX) != 0) {
+ ComQIPtr<IDXGIResource> dxgi_res(texture);
+ if (dxgi_res)
+ GetSharedHandle(dxgi_res);
+ device_texture_acquire_sync(this, 0, INFINITE);
+ }
}
void gs_texture_2d::RebuildNV12_Y(ID3D11Device *dev)
InitRenderTargets();
tex_uv->RebuildNV12_UV(dev);
+
+ acquired = false;
+
+ if ((td.MiscFlags & D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX) != 0) {
+ ComQIPtr<IDXGIResource> dxgi_res(texture);
+ if (dxgi_res)
+ GetSharedHandle(dxgi_res);
+ device_texture_acquire_sync(this, 0, INFINITE);
+ }
}
void gs_texture_2d::RebuildNV12_UV(ID3D11Device *dev)
obs-studio-23.0.1.tar.xz/libobs-d3d11/d3d11-subsystem.cpp -> obs-studio-23.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.cpp
Changed
D3D_FEATURE_LEVEL_9_3,
};
-static const char *blacklisted_nv12_geforce_gpus[] = {
- "8100",
- "8200",
- "8300",
- "8400",
- "8500",
- "8600",
- "8800",
- "9300",
- "9400",
- "9500",
- "9600",
- "9800"
-};
+/* ------------------------------------------------------------------------- */
+
+#define VERT_IN_OUT "\
+struct VertInOut { \
+ float4 pos : POSITION; \
+}; "
+
+#define NV12_Y_PS VERT_IN_OUT "\
+float main(VertInOut vert_in) : TARGET \
+{ \
+ return 1.0; \
+}"
+
+#define NV12_UV_PS VERT_IN_OUT "\
+float2 main(VertInOut vert_in) : TARGET \
+{ \
+ return float2(1.0, 1.0); \
+}"
+
+#define NV12_VS VERT_IN_OUT "\
+VertInOut main(VertInOut vert_in) \
+{ \
+ VertInOut vert_out; \
+ vert_out.pos = float4(vert_in.pos.xyz, 1.0); \
+ return vert_out; \
+} "
+
+/* ------------------------------------------------------------------------- */
+
+#define NV12_CX 128
+#define NV12_CY 128
+
+bool gs_device::HasBadNV12Output()
+try {
+ vec3 points[4];
+ vec3_set(&points[0], -1.0f, -1.0f, 0.0f);
+ vec3_set(&points[1], -1.0f, 1.0f, 0.0f);
+ vec3_set(&points[2], 1.0f, -1.0f, 0.0f);
+ vec3_set(&points[3], 1.0f, 1.0f, 0.0f);
+
+ gs_texture_2d nv12_y(this, NV12_CX, NV12_CY, GS_R8, 1, nullptr,
+ GS_RENDER_TARGET, GS_TEXTURE_2D, false, true);
+ gs_texture_2d nv12_uv(this, nv12_y.texture, GS_RENDER_TARGET);
+ gs_vertex_shader nv12_vs(this, "", NV12_VS);
+ gs_pixel_shader nv12_y_ps(this, "", NV12_Y_PS);
+ gs_pixel_shader nv12_uv_ps(this, "", NV12_UV_PS);
+ gs_stage_surface nv12_stage(this, NV12_CX, NV12_CY);
+
+ gs_vb_data *vbd = gs_vbdata_create();
+ vbd->num = 4;
+ vbd->points = (vec3*)bmemdup(&points, sizeof(points));
+
+ gs_vertex_buffer buf(this, vbd, 0);
+
+ device_load_vertexbuffer(this, &buf);
+ device_load_vertexshader(this, &nv12_vs);
+
+ context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
+
+ device_set_viewport(this, 0, 0, NV12_CX, NV12_CY);
+ device_set_cull_mode(this, GS_NEITHER);
+ device_enable_depth_test(this, false);
+ device_enable_blending(this, false);
+ LoadVertexBufferData();
+
+ device_set_render_target(this, &nv12_y, nullptr);
+ device_load_pixelshader(this, &nv12_y_ps);
+ UpdateBlendState();
+ UpdateRasterState();
+ UpdateZStencilState();
+ context->Draw(4, 0);
+
+ device_set_viewport(this, 0, 0, NV12_CX/2, NV12_CY/2);
+ device_set_render_target(this, &nv12_uv, nullptr);
+ device_load_pixelshader(this, &nv12_uv_ps);
+ UpdateBlendState();
+ UpdateRasterState();
+ UpdateZStencilState();
+ context->Draw(4, 0);
+
+ device_load_pixelshader(this, nullptr);
+ device_load_vertexshader(this, nullptr);
+ device_set_render_target(this, nullptr, nullptr);
+
+ device_stage_texture(this, &nv12_stage, &nv12_y);
+
+ uint8_t *data;
+ uint32_t linesize;
+ bool bad_driver = false;
+
+ if (gs_stagesurface_map(&nv12_stage, &data, &linesize)) {
+ bad_driver = data[linesize * NV12_CY] == 0;
+ gs_stagesurface_unmap(&nv12_stage);
+ }
+
+ if (bad_driver) {
+ blog(LOG_WARNING, "Bad NV12 texture handling detected! "
+ "Disabling NV12 texture support.");
+ }
+ return bad_driver;
+
+} catch (HRError) {
+ return false;
+} catch (const char *) {
+ return false;
+}
void gs_device::InitDevice(uint32_t adapterIdx)
{
/* check for nv12 texture output support */
nv12Supported = false;
- bool geforce = astrstri(adapterNameUTF8, "geforce") != nullptr;
- bool nvidia = astrstri(adapterNameUTF8, "nvidia") != nullptr;
-
- /* don't use on blacklisted adapters */
- if (geforce) {
- for (const char *old_gpu : blacklisted_nv12_geforce_gpus) {
- if (astrstri(adapterNameUTF8, old_gpu) != nullptr) {
- return;
- }
- }
- }
-
- /* Disable NV12 textures if NVENC not available, just as a safety
- * measure */
- if (nvidia) {
- HMODULE nvenc = LoadLibraryW((sizeof(void*) == 8)
- ? L"nvEncodeAPI64.dll"
- : L"nvEncodeAPI.dll");
- if (!nvenc) {
- return;
- }
- }
ComQIPtr<ID3D11Device1> d3d11_1(device);
if (!d3d11_1) {
return;
}
+ if (HasBadNV12Output()) {
+ return;
+ }
+
nv12Supported = true;
}
return tex2d->isShared ? tex2d->sharedHandle : GS_INVALID_HANDLE;
}
-extern "C" EXPORT int device_texture_acquire_sync(gs_texture_t *tex,
- uint64_t key, uint32_t ms)
+int device_texture_acquire_sync(gs_texture_t *tex, uint64_t key, uint32_t ms)
{
gs_texture_2d *tex2d = reinterpret_cast<gs_texture_2d *>(tex);
if (tex->type != GS_TEXTURE_2D)
return -1;
+ if (tex2d->acquired)
+ return 0;
+
ComQIPtr<IDXGIKeyedMutex> keyedMutex(tex2d->texture);
if (!keyedMutex)
return -1;
HRESULT hr = keyedMutex->AcquireSync(key, ms);
- if (hr == S_OK)
+ if (hr == S_OK) {
+ tex2d->acquired = true;
return 0;
- else if (hr == WAIT_TIMEOUT)
+ } else if (hr == WAIT_TIMEOUT) {
return ETIMEDOUT;
+ }
return -1;
}
if (tex->type != GS_TEXTURE_2D)
return -1;
+ if (!tex2d->acquired)
+ return 0;
+
ComQIPtr<IDXGIKeyedMutex> keyedMutex(tex2d->texture);
if (!keyedMutex)
return -1;
HRESULT hr = keyedMutex->ReleaseSync(key);
- return hr == S_OK ? 0 : -1;
+ if (hr == S_OK) {
+ tex2d->acquired = false;
+ return 0;
+ }
+
+ return -1;
}
extern "C" EXPORT bool device_texture_create_nv12(gs_device_t *device,
obs-studio-23.0.1.tar.xz/libobs-d3d11/d3d11-subsystem.hpp -> obs-studio-23.0.2.tar.xz/libobs-d3d11/d3d11-subsystem.hpp
Changed
gs_texture_2d *pairedNV12texture = nullptr;
bool nv12 = false;
bool chroma = false;
+ bool acquired = false;
vector<vector<uint8_t>> data;
vector<D3D11_SUBRESOURCE_DATA> srd;
void InitResourceView();
void InitRenderTargets();
void BackupTexture(const uint8_t **data);
+ void GetSharedHandle(IDXGIResource *dxgi_res);
void RebuildSharedTextureFallback();
void Rebuild(ID3D11Device *dev);
void RebuildDevice();
+ bool HasBadNV12Output();
+
gs_device(uint32_t adapterIdx);
~gs_device();
};
+
+extern "C" EXPORT int device_texture_acquire_sync(gs_texture_t *tex,
+ uint64_t key, uint32_t ms);
obs-studio-23.0.1.tar.xz/libobs-d3d11/d3d11-texture2d.cpp -> obs-studio-23.0.2.tar.xz/libobs-d3d11/d3d11-texture2d.cpp
Changed
}
}
+void gs_texture_2d::GetSharedHandle(IDXGIResource *dxgi_res)
+{
+ HANDLE handle;
+ HRESULT hr;
+
+ hr = dxgi_res->GetSharedHandle(&handle);
+ if (FAILED(hr)) {
+ blog(LOG_WARNING, "GetSharedHandle: Failed to "
+ "get shared handle: %08lX", hr);
+ } else {
+ sharedHandle = (uint32_t)(uintptr_t)handle;
+ }
+}
+
void gs_texture_2d::InitTexture(const uint8_t **data)
{
HRESULT hr;
blog(LOG_WARNING, "InitTexture: Failed to query "
"interface: %08lX", hr);
} else {
- HANDLE handle;
- hr = dxgi_res->GetSharedHandle(&handle);
- if (FAILED(hr)) {
- blog(LOG_WARNING, "InitTexture: Failed to "
- "get shared handle: %08lX", hr);
- } else {
- sharedHandle = (uint32_t)(uintptr_t)handle;
- }
+ GetSharedHandle(dxgi_res);
if (flags & GS_SHARED_KM_TEX) {
ComPtr<IDXGIKeyedMutex> km;
}
km->AcquireSync(0, INFINITE);
+ acquired = true;
}
}
}
obs-studio-23.0.1.tar.xz/libobs/obs-config.h -> obs-studio-23.0.2.tar.xz/libobs/obs-config.h
Changed
*
* Reset to zero each major or minor version
*/
-#define LIBOBS_API_PATCH_VER 1
+#define LIBOBS_API_PATCH_VER 2
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
((major << 24) | \
obs-studio-23.0.1.tar.xz/libobs/obs-video.c -> obs-studio-23.0.2.tar.xz/libobs/obs-video.c
Changed
tf.tex = tex;
tf.tex_uv = tex_uv;
- tf.handle = gs_texture_get_shared_handle(tex);
}
tf.count = 1;
tf.timestamp = vframe_info->timestamp;
tf.released = true;
+ tf.handle = gs_texture_get_shared_handle(tf.tex);
gs_texture_release_sync(tf.tex, ++tf.lock_key);
circlebuf_push_back(&video->gpu_encoder_queue, &tf, sizeof(tf));
static void clear_base_frame_data(void)
{
struct obs_core_video *video = &obs->video;
- memset(video->textures_copied, 0, sizeof(video->textures_copied));
- memset(video->textures_converted, 0, sizeof(video->textures_converted));
+ memset(video->textures_rendered, 0, sizeof(video->textures_rendered));
+ memset(video->textures_output, 0, sizeof(video->textures_output));
circlebuf_free(&video->vframe_info_buffer);
video->cur_texture = 0;
}
obs-studio-23.0.1.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c -> obs-studio-23.0.2.tar.xz/plugins/obs-ffmpeg/jim-nvenc.c
Changed
} else if (astrcmpi(rc, "vbr") != 0) { /* CBR by default */
h264_config->outputBufferingPeriodSEI = 1;
- h264_config->outputPictureTimingSEI = 1;
config->rcParams.rateControlMode = twopass
? NV_ENC_PARAMS_RC_2_PASS_QUALITY
: NV_ENC_PARAMS_RC_CBR;
}
+ h264_config->outputPictureTimingSEI = 1;
config->rcParams.averageBitRate = bitrate * 1000;
config->rcParams.maxBitRate = vbr ? max_bitrate * 1000 : bitrate * 1000;
}
*sei = enc->sei;
- *size = enc->header_size;
+ *size = enc->sei_size;
return true;
}
obs-studio-23.0.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c -> obs-studio-23.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-output.c
Changed
for (size_t i = 0; i < MAX_AV_PLANES; i++)
circlebuf_free(&data->excess_frames[idx][i]);
- av_freep(&data->samples[idx][0]);
- avcodec_close(data->audio_streams[idx]->codec);
- av_frame_free(&data->aframe[idx]);
+ if (data->samples[idx][0])
+ av_freep(&data->samples[idx][0]);
+ if (data->audio_streams[idx])
+ avcodec_close(data->audio_streams[idx]->codec);
+ if (data->aframe[idx])
+ av_frame_free(&data->aframe[idx]);
}
}
avformat_alloc_output_context2(&data->output, output_format,
NULL, NULL);
+ if (!data->output) {
+ blog(LOG_WARNING, "Couldn't create avformat context");
+ goto fail;
+ }
+
if (is_rtmp) {
data->output->oformat->video_codec = AV_CODEC_ID_H264;
data->output->oformat->audio_codec = AV_CODEC_ID_AAC;
set_encoder_ids(data);
}
- if (!data->output) {
- blog(LOG_WARNING, "Couldn't create avformat context");
- goto fail;
- }
-
if (!init_streams(data))
goto fail;
if (!open_output_file(data))
obs-studio-23.0.1.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c -> obs-studio-23.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg.c
Changed
{
for (size_t i = 0; i < num_blacklisted; i++) {
const wchar_t *blacklisted_adapter = blacklisted_adapters[i];
- if (wstrstri(blacklisted_adapter, name)) {
+ if (wstrstri(name, blacklisted_adapter)) {
return true;
}
}
obs-studio-23.0.1.tar.xz/plugins/obs-qsv11/QSV_Encoder.cpp -> obs-studio-23.0.2.tar.xz/plugins/obs-qsv11/QSV_Encoder.cpp
Changed
case 0x45:
case 0x46:
return QSV_CPU_PLATFORM_HSW;
-
- case 0x3d:
- case 0x47:
- case 0x4f:
- case 0x56:
- return QSV_CPU_PLATFORM_BDW;
-
- case 0x4e:
- case 0x5e:
- return QSV_CPU_PLATFORM_SKL;
}
- //assume newer revisions are at least as capable as Skylake
+
+ //assume newer revisions are at least as capable as Haswell
return QSV_CPU_PLATFORM_INTEL;
}
obs-studio-23.0.1.tar.xz/plugins/obs-qsv11/QSV_Encoder.h -> obs-studio-23.0.2.tar.xz/plugins/obs-qsv11/QSV_Encoder.h
Changed
{"CQP", false},
{"AVBR", false},
{"ICQ", true},
- {"LA_CBR", true},
- {"LA_VBR", true},
{"LA_ICQ", true},
+ {"LA", true},
{0, false}
};
static const char * const qsv_profile_names[] = {
mfxU16 nKeyIntSec;
mfxU16 nbFrames;
mfxU16 nICQQuality;
- bool bMBBRC;
} qsv_param_t;
enum qsv_cpu_platform {
QSV_CPU_PLATFORM_SLM,
QSV_CPU_PLATFORM_CHT,
QSV_CPU_PLATFORM_HSW,
- QSV_CPU_PLATFORM_BDW,
- QSV_CPU_PLATFORM_SKL,
QSV_CPU_PLATFORM_INTEL
};
obs-studio-23.0.1.tar.xz/plugins/obs-qsv11/QSV_Encoder_Internal.cpp -> obs-studio-23.0.2.tar.xz/plugins/obs-qsv11/QSV_Encoder_Internal.cpp
Changed
m_nTaskPool(0),
m_pTaskPool(NULL),
m_nTaskIdx(0),
- m_nFirstSyncTask(0)
+ m_nFirstSyncTask(0),
+ m_outBitstream()
{
mfxIMPL tempImpl;
mfxStatus sts;
{
memset(&m_mfxEncParams, 0, sizeof(m_mfxEncParams));
-
m_mfxEncParams.mfx.CodecId = MFX_CODEC_AVC;
m_mfxEncParams.mfx.GopOptFlag = MFX_GOP_STRICT;
m_mfxEncParams.mfx.NumSlice = 1;
m_mfxEncParams.mfx.FrameInfo.CropY = 0;
m_mfxEncParams.mfx.FrameInfo.CropW = pParams->nWidth;
m_mfxEncParams.mfx.FrameInfo.CropH = pParams->nHeight;
- m_mfxEncParams.mfx.GopRefDist = pParams->nbFrames + 1;
m_mfxEncParams.mfx.RateControlMethod = pParams->nRateControl;
case MFX_RATECONTROL_LA_ICQ:
m_mfxEncParams.mfx.ICQQuality = pParams->nICQQuality;
break;
- case MFX_RATECONTROL_LA_HRD:
- m_mfxEncParams.mfx.TargetKbps = pParams->nTargetBitRate;
- m_mfxEncParams.mfx.MaxKbps = pParams->nTargetBitRate;
- break;
default:
break;
}
static mfxExtBuffer* extendedBuffers[2];
int iBuffers = 0;
+ if (pParams->nAsyncDepth == 1) {
+ m_mfxEncParams.mfx.NumRefFrame = 1;
+ // low latency, I and P frames only
+ m_mfxEncParams.mfx.GopRefDist = 1;
+ memset(&m_co, 0, sizeof(mfxExtCodingOption));
+ m_co.Header.BufferId = MFX_EXTBUFF_CODING_OPTION;
+ m_co.Header.BufferSz = sizeof(mfxExtCodingOption);
+ m_co.MaxDecFrameBuffering = 1;
+ extendedBuffers[iBuffers++] = (mfxExtBuffer*)&m_co;
+ }
+ else
+ m_mfxEncParams.mfx.GopRefDist = pParams->nbFrames + 1;
- memset(&m_co2, 0, sizeof(mfxExtCodingOption2));
- m_co2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION2;
- m_co2.Header.BufferSz = sizeof(m_co2);
- if (pParams->bMBBRC)
- m_co2.MBBRC = MFX_CODINGOPTION_ON;
if (pParams->nRateControl == MFX_RATECONTROL_LA_ICQ ||
- pParams->nRateControl == MFX_RATECONTROL_LA)
+ pParams->nRateControl == MFX_RATECONTROL_LA) {
+
+ memset(&m_co2, 0, sizeof(mfxExtCodingOption2));
+ m_co2.Header.BufferId = MFX_EXTBUFF_CODING_OPTION;
+ m_co2.Header.BufferSz = sizeof(m_co2);
m_co2.LookAheadDepth = pParams->nLADEPTH;
- if (pParams->nbFrames > 1)
- m_co2.BRefType = MFX_B_REF_PYRAMID;
- extendedBuffers[iBuffers++] = (mfxExtBuffer*)& m_co2;
+ extendedBuffers[iBuffers++] = (mfxExtBuffer*)& m_co2;
+ }
if (iBuffers > 0) {
m_mfxEncParams.ExtParam = extendedBuffers;
mfxStatus sts = MFX_ERR_NONE;
sts = Drain();
- sts = m_pmfxENC->Close();
+ if (m_pmfxENC)
+ {
+ sts = m_pmfxENC->Close();
+ delete m_pmfxENC;
+ m_pmfxENC = NULL;
+ }
if (m_bUseD3D11 || m_bD3D9HACK)
m_mfxAllocator.Free(m_mfxAllocator.pthis, &m_mfxResponse);
- for (int i = 0; i < m_nSurfNum; i++) {
- if (!m_bUseD3D11 && !m_bD3D9HACK)
- delete m_pmfxSurfaces[i]->Data.Y;
+ if (m_pmfxSurfaces) {
+ for (int i = 0; i < m_nSurfNum; i++) {
+ if (!m_bUseD3D11 && !m_bD3D9HACK)
+ delete m_pmfxSurfaces[i]->Data.Y;
- delete m_pmfxSurfaces[i];
+ delete m_pmfxSurfaces[i];
+ }
+ MSDK_SAFE_DELETE_ARRAY(m_pmfxSurfaces);
}
- MSDK_SAFE_DELETE_ARRAY(m_pmfxSurfaces);
- for (int i = 0; i < m_nTaskPool; i++)
- delete m_pTaskPool[i].mfxBS.Data;
- MSDK_SAFE_DELETE_ARRAY(m_pTaskPool);
-
- delete m_outBitstream.Data;
+ if (m_pTaskPool) {
+ for (int i = 0; i < m_nTaskPool; i++)
+ delete m_pTaskPool[i].mfxBS.Data;
+ MSDK_SAFE_DELETE_ARRAY(m_pTaskPool);
+ }
- delete m_pmfxENC;
- m_pmfxENC = NULL;
+ if (m_outBitstream.Data)
+ {
+ delete m_outBitstream.Data;
+ m_outBitstream.Data = NULL;
+ }
if (sts >= MFX_ERR_NONE) {
g_numEncodersOpen--;
obs-studio-23.0.1.tar.xz/plugins/obs-qsv11/obs-qsv11.c -> obs-studio-23.0.2.tar.xz/plugins/obs-qsv11/obs-qsv11.c
Changed
obs_data_set_default_string(settings, "target_usage", "balanced");
obs_data_set_default_int(settings, "bitrate", 2500);
obs_data_set_default_int(settings, "max_bitrate", 3000);
- obs_data_set_default_string(settings, "profile", "high");
+ obs_data_set_default_string(settings, "profile", "main");
obs_data_set_default_int(settings, "async_depth", 4);
obs_data_set_default_string(settings, "rate_control", "CBR");
obs_data_set_default_int(settings, "qpp", 23);
obs_data_set_default_int(settings, "qpb", 23);
obs_data_set_default_int(settings, "icq_quality", 23);
- obs_data_set_default_int(settings, "la_depth", 15);
+ obs_data_set_default_int(settings, "la_depth", 40);
obs_data_set_default_int(settings, "keyint_sec", 3);
- obs_data_set_default_int(settings, "bframes", 3);
}
static inline void add_strings(obs_property_t *list, const char *const *strings)
#define TEXT_ICQ_QUALITY obs_module_text("ICQQuality")
#define TEXT_LA_DEPTH obs_module_text("LookAheadDepth")
#define TEXT_KEYINT_SEC obs_module_text("KeyframeIntervalSec")
-#define TEXT_BFRAMES obs_module_text("B Frames")
-#define TEXT_MBBRC obs_module_text("Content Adaptive Quantization")
-
-static inline bool is_skl_or_greater_platform()
-{
- enum qsv_cpu_platform plat = qsv_get_cpu_platform();
- return (plat >= QSV_CPU_PLATFORM_SKL);
-}
static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
obs_data_t *settings)
obs_property_set_visible(p, bVisible);
bVisible = astrcmpi(rate_control, "LA_ICQ") == 0 ||
- astrcmpi(rate_control, "LA_CBR") == 0 ||
- astrcmpi(rate_control, "LA_VBR") == 0;
+ astrcmpi(rate_control, "LA") == 0;
p = obs_properties_get(ppts, "la_depth");
obs_property_set_visible(p, bVisible);
- bVisible = astrcmpi(rate_control, "CBR") == 0 ||
- astrcmpi(rate_control, "VBR") == 0 ||
- astrcmpi(rate_control, "AVBR") == 0;
- p = obs_properties_get(ppts, "mbbrc");
- obs_property_set_visible(p, bVisible);
-
return true;
}
obs_properties_add_int(props, "qpb", "QPB", 1, 51, 1);
obs_properties_add_int(props, "icq_quality", TEXT_ICQ_QUALITY, 1, 51, 1);
obs_properties_add_int(props, "la_depth", TEXT_LA_DEPTH, 10, 100, 1);
- obs_properties_add_int(props, "bframes", TEXT_BFRAMES, 0, 3, 1);
-
- if (is_skl_or_greater_platform())
- obs_properties_add_bool(props, "mbbrc", TEXT_MBBRC);
return props;
}
int la_depth = (int)obs_data_get_int(settings, "la_depth");
int keyint_sec = (int)obs_data_get_int(settings, "keyint_sec");
bool cbr_override = obs_data_get_bool(settings, "cbr");
- int bFrames = (int)obs_data_get_int(settings, "bframes");
- bool mbbrc = obs_data_get_bool(settings, "mbbrc");
+ int bFrames = 7;
if (obs_data_has_user_value(settings, "bf"))
bFrames = (int)obs_data_get_int(settings, "bf");
obsqsv->params.nRateControl = MFX_RATECONTROL_ICQ;
else if (astrcmpi(rate_control, "LA_ICQ") == 0)
obsqsv->params.nRateControl = MFX_RATECONTROL_LA_ICQ;
- else if (astrcmpi(rate_control, "LA_VBR") == 0)
+ else if (astrcmpi(rate_control, "LA") == 0)
obsqsv->params.nRateControl = MFX_RATECONTROL_LA;
- else if (astrcmpi(rate_control, "LA_CBR") == 0)
- obsqsv->params.nRateControl = MFX_RATECONTROL_LA_HRD;
obsqsv->params.nAsyncDepth = (mfxU16)async_depth;
obsqsv->params.nAccuracy = (mfxU16)accuracy;
obsqsv->params.nbFrames = (mfxU16)bFrames;
obsqsv->params.nKeyIntSec = (mfxU16)keyint_sec;
obsqsv->params.nICQQuality = (mfxU16)icq_quality;
- obsqsv->params.bMBBRC = mbbrc;
info("settings:\n\trate_control: %s", rate_control);
(int)obsqsv->params.nICQQuality);
if (obsqsv->params.nRateControl == MFX_RATECONTROL_LA_ICQ ||
- obsqsv->params.nRateControl == MFX_RATECONTROL_LA ||
- obsqsv->params.nRateControl == MFX_RATECONTROL_LA_HRD)
+ obsqsv->params.nRateControl == MFX_RATECONTROL_LA)
blog(LOG_INFO,
"\tLookahead Depth:%d",
(int)obsqsv->params.nLADEPTH);
packet->size = obsqsv->packet_data.num;
packet->type = OBS_ENCODER_VIDEO;
packet->pts = pBS->TimeStamp * fps_num / 90000;
-
- packet->keyframe = (pBS->FrameType & MFX_FRAMETYPE_IDR);
-
- uint16_t frameType = pBS->FrameType;
- uint8_t priority;
-
- if (frameType & MFX_FRAMETYPE_I)
- priority = OBS_NAL_PRIORITY_HIGHEST;
- else if ((frameType & MFX_FRAMETYPE_P) || (frameType & MFX_FRAMETYPE_REF))
- priority = OBS_NAL_PRIORITY_HIGH;
- else
- priority = OBS_NAL_PRIORITY_DISPOSABLE;
-
- packet->priority = priority;
+ packet->keyframe = (pBS->FrameType &
+ (MFX_FRAMETYPE_I | MFX_FRAMETYPE_REF));
/* ------------------------------------ */
type = start[0] & 0x1F;
if (type == OBS_NAL_SLICE_IDR || type == OBS_NAL_SLICE) {
+ uint8_t prev_type = (start[0] >> 5) & 0x3;
start[0] &= ~(3 << 5);
- //0 for non-ref frames and not equal to 0 for ref frames
- start[0] |= priority << 5;
+
+ if (pBS->FrameType & MFX_FRAMETYPE_I)
+ start[0] |= OBS_NAL_PRIORITY_HIGHEST << 5;
+ else if (pBS->FrameType & MFX_FRAMETYPE_P)
+ start[0] |= OBS_NAL_PRIORITY_HIGH << 5;
+ else
+ start[0] |= prev_type << 5;
}
start = (uint8_t*)obs_avc_find_startcode(start, end);
No build results available
No rpmlint results available
Request History
boombatower created request about 6 years ago
- Update to version 23.0.2:
* UI: Fix "What's New" showing again each patch version
* libobs: Fix code styling
* libobs: Fix first frame when output restarted
* CI: Fix building on trusty
* UI: Add (Do not show again) checkbox to dock closing warning
* Revert "Merge pull request #1418 from cabirdme/qsv_feature_add"
* Revert "obs-qsv: Enable b-pyramid & change packet priority"
* UI: Warn when closing dock widgets for first time
* UI: Add way to exec std::function via invokeMethod
* obs-ffmpeg: Check avformat context before use
* obs-ffmpeg: Fix crash on failed audio codec init (for real)
* UI: Always set first scene collection/profiles
* obs-ffmpeg: Fix crash on failed audio codec init
* libobs-d3d11: Check for bad NV12 output on all devices
* libobs-d3d11: Perform actual test for NV12 driver bug
* libobs-d3d11: Remove NV12 blacklist
* libobs: Always query shared texture handle for encoding
* UI: Reset replay buffer button on "stop" signal
* libobs-d3d11: Reset handle and re-lock if texture rebuilt
* libobs-d3d11: Use discrete function to get shared handle
* libobs-d3d11: Set acquired bool when texture acquired
* obs-ffmpeg: Always output SEI
* obs-ffmpeg: Fix SEI data output
* frontend-tools: Fix memory leak when reloading scripts
* UI: Update tab stop order in Settings
* CI: macOS builds on Azure Pipelines
* obs-qsv11: Fix crash on destructor after init failure
* obs-qsv11: Don't try to free non allocated array on destruction
* obs-ffmpeg: Fix NVENC blacklisted card check
boombatower accepted request about 6 years ago
ok