We truncated the diff of some files because they were too big.
If you want to see the full diff for every file, click here.
Changes of Revision 51
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Thu Oct 26 05:22:23 UTC 2017 - jimmy@boombatower.com
4
+
5
+- Update to version 20.1.1:
6
+ * libobs: Add wrapper function to query Windows registry
7
+ * libobs: Log Windows 10 Gaming Features
8
+ * CI: Update Travis script to target OSX 10.10+
9
+ * enc-amf: Version 2.2.4
10
+ * libobs: Update to version 20.1.1
11
+ * rtmp-services: Add Picarto eu-west1 ingress server
12
+ * rtmp-services: Add stream.me streaming platform
13
+
14
+-------------------------------------------------------------------
15
Wed Oct 18 13:59:23 UTC 2017 - jimmy@boombatower.com
16
17
- Update to version 20.1.0:
18
obs-studio.spec
Changed
8
1
2
Name: obs-studio
3
-Version: 20.1.0
4
+Version: 20.1.1
5
Release: 0
6
Summary: A recording/broadcasting program
7
Group: Productivity/Multimedia/Video/Editors and Convertors
8
_service
Changed
10
1
2
<services>
3
<service name="tar_scm" mode="disabled">
4
<param name="versionformat">@PARENT_TAG@</param>
5
- <param name="revision">refs/tags/20.1.0</param>
6
+ <param name="revision">refs/tags/20.1.1</param>
7
<param name="url">git://github.com/jp9000/obs-studio.git</param>
8
<param name="scm">git</param>
9
<param name="changesgenerate">enable</param>
10
_servicedata
Changed
9
1
2
<servicedata>
3
<service name="tar_scm">
4
<param name="url">git://github.com/jp9000/obs-studio.git</param>
5
- <param name="changesrevision">7bd06e7f26d6735e86cff4980f7777078d480f7d</param>
6
+ <param name="changesrevision">bf7561934ed098a4cf3c885f5e55febb23cac563</param>
7
</service>
8
</servicedata>
9
obs-studio-20.1.0.tar.xz/CI/before-script-osx.sh -> obs-studio-20.1.1.tar.xz/CI/before-script-osx.sh
Changed
7
1
2
3
mkdir build
4
cd build
5
-cmake -DENABLE_SPARKLE_UPDATER=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 -DDepsPath=/tmp/obsdeps -DVLCPath=$PWD/../../vlc-master -DBUILD_BROWSER=ON -DCEF_ROOT_DIR=$PWD/../../cef_binary_${CEF_BUILD_VERSION}_macosx64 ..
6
+cmake -DENABLE_SPARKLE_UPDATER=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.10 -DDepsPath=/tmp/obsdeps -DVLCPath=$PWD/../../vlc-master -DBUILD_BROWSER=ON -DCEF_ROOT_DIR=$PWD/../../cef_binary_${CEF_BUILD_VERSION}_macosx64 ..
7
obs-studio-20.1.0.tar.xz/libobs/CMakeLists.txt -> obs-studio-20.1.1.tar.xz/libobs/CMakeLists.txt
Changed
9
1
2
util/platform-windows.c)
3
set(libobs_PLATFORM_HEADERS
4
util/threading-windows.h
5
+ util/windows/win-registry.h
6
util/windows/win-version.h
7
util/windows/ComPtr.hpp
8
util/windows/CoTaskMemPtr.hpp
9
obs-studio-20.1.0.tar.xz/libobs/obs-config.h -> obs-studio-20.1.1.tar.xz/libobs/obs-config.h
Changed
10
1
2
*
3
* Reset to zero each major or minor version
4
*/
5
-#define LIBOBS_API_PATCH_VER 0
6
+#define LIBOBS_API_PATCH_VER 1
7
8
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
((major << 24) | \
10
obs-studio-20.1.0.tar.xz/libobs/obs-windows.c -> obs-studio-20.1.1.tar.xz/libobs/obs-windows.c
Changed
67
1
2
along with this program. If not, see <http://www.gnu.org/licenses/>.
3
******************************************************************************/
4
5
+#include "util/windows/win-registry.h"
6
#include "util/windows/win-version.h"
7
#include "util/platform.h"
8
#include "util/dstr.h"
9
10
aeroMessage);
11
}
12
13
+#define WIN10_GAME_BAR_REG_KEY \
14
+ L"Software\\Microsoft\\Windows\\CurrentVersion\\GameDVR"
15
+#define WIN10_GAME_DVR_POLICY_REG_KEY \
16
+ L"SOFTWARE\\Policies\\Microsoft\\Windows\\GameDVR"
17
+#define WIN10_GAME_DVR_REG_KEY L"System\\GameConfigStore"
18
+#define WIN10_GAME_MODE_REG_KEY L"Software\\Microsoft\\GameBar"
19
+
20
+static void log_gaming_features(void)
21
+{
22
+ if (win_ver < 0xA00)
23
+ return;
24
+
25
+ struct reg_dword game_bar_enabled;
26
+ struct reg_dword game_dvr_allowed;
27
+ struct reg_dword game_dvr_enabled;
28
+ struct reg_dword game_dvr_bg_recording;
29
+ struct reg_dword game_mode_enabled;
30
+
31
+ get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_BAR_REG_KEY,
32
+ L"AppCaptureEnabled", &game_bar_enabled);
33
+ get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_DVR_POLICY_REG_KEY,
34
+ L"AllowGameDVR", &game_dvr_allowed);
35
+ get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_DVR_REG_KEY,
36
+ L"GameDVR_Enabled", &game_dvr_enabled);
37
+ get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_BAR_REG_KEY,
38
+ L"HistoricalCaptureEnabled", &game_dvr_bg_recording);
39
+ get_reg_dword(HKEY_CURRENT_USER, WIN10_GAME_MODE_REG_KEY,
40
+ L"AllowAutoGameMode", &game_mode_enabled);
41
+
42
+ blog(LOG_INFO, "Windows 10 Gaming Features:");
43
+ blog(LOG_INFO, "\tGame Bar: %s",
44
+ (bool)game_bar_enabled.return_value ? "On" : "Off");
45
+ blog(LOG_INFO, "\tGame DVR Allowed: %s",
46
+ (bool)game_dvr_allowed.return_value ? "Yes" : "No");
47
+ blog(LOG_INFO, "\tGame DVR: %s",
48
+ (bool)game_dvr_enabled.return_value ? "On" : "Off");
49
+ blog(LOG_INFO, "\tGame DVR Background Recording: %s",
50
+ (bool)game_dvr_bg_recording.return_value ? "On" :
51
+ "Off");
52
+ blog(LOG_INFO, "\tGame Mode: %s",
53
+ (bool)game_mode_enabled.return_value ? "On" : "Off");
54
+}
55
+
56
void log_system_info(void)
57
{
58
struct win_version_info ver;
59
60
log_windows_version();
61
log_admin_status();
62
log_aero();
63
+ log_gaming_features();
64
}
65
66
67
obs-studio-20.1.0.tar.xz/libobs/util/platform-windows.c -> obs-studio-20.1.1.tar.xz/libobs/util/platform-windows.c
Changed
38
1
2
#include "platform.h"
3
#include "darray.h"
4
#include "dstr.h"
5
+#include "windows/win-registry.h"
6
#include "windows/win-version.h"
7
8
#include "../../deps/w32-pthreads/pthread.h"
9
10
#endif
11
}
12
13
+void get_reg_dword(HKEY hkey, LPCWSTR sub_key, LPCWSTR value_name,
14
+ struct reg_dword *info)
15
+{
16
+ struct reg_dword reg = {0};
17
+ HKEY key;
18
+ LSTATUS status;
19
+
20
+ status = RegOpenKeyEx(hkey, sub_key, 0, KEY_READ, &key);
21
+
22
+ if (status != ERROR_SUCCESS)
23
+ return;
24
+
25
+ reg.size = sizeof(reg.return_value);
26
+
27
+ reg.status = RegQueryValueExW(key, value_name, NULL, NULL,
28
+ (LPBYTE)®.return_value, ®.size);
29
+
30
+ RegCloseKey(key);
31
+
32
+ *info = reg;
33
+}
34
+
35
#define WINVER_REG_KEY L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"
36
37
void get_win_ver(struct win_version_info *info)
38
obs-studio-20.1.1.tar.xz/libobs/util/windows/win-registry.h
Added
40
1
2
+/*
3
+ * Copyright (c) 2015 Hugh Bailey <obs.jim@gmail.com>
4
+ * Copyright (c) 2017 Ryan Foster <RytoEX@gmail.com>
5
+ *
6
+ * Permission to use, copy, modify, and distribute this software for any
7
+ * purpose with or without fee is hereby granted, provided that the above
8
+ * copyright notice and this permission notice appear in all copies.
9
+ *
10
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
+ */
18
+
19
+#pragma once
20
+
21
+#include <windows.h>
22
+#include "../c99defs.h"
23
+
24
+#ifdef __cplusplus
25
+extern "C" {
26
+#endif
27
+
28
+struct reg_dword {
29
+ LSTATUS status;
30
+ DWORD size;
31
+ DWORD return_value;
32
+};
33
+
34
+EXPORT void get_reg_dword(HKEY hkey, LPCWSTR sub_key, LPCWSTR value_name,
35
+ struct reg_dword *info);
36
+
37
+#ifdef __cplusplus
38
+}
39
+#endif
40
obs-studio-20.1.0.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md
Changed
24
1
2
-# 2.2.2 - Pre-Pass, VBAQ and more fixes! (Hotfix 2)
3
+# 2.2.4 - Pre-Pass, VBAQ and more fixes! (Hotfix 4)
4
With the newly released Driver 17.7.2, AMD fixed many reported issues and added some much wanted features:
5
6
- Pre-Pass and VBAQ are finally working,
7
8
9
Hotfix 1: Fixed VBAQ and Pre-Pass being used with Constant QP, causing significant corruption issues and changed some default values for H265.
10
Hotfix 2: Fixed an at-exit crash caused by an AMF trace function.
11
+Hotfix 3: Fixed an issue with Constant QP that caused it to incorrectly use Minimum/Maximum QP.
12
+Hotfix 4: Updated internal property list to match Fall Creators Update AMD Driver.
13
14
## Changelog
15
+### 2.2.4
16
+* Removed LowLatency, CommonLowLatency and QPC*Offset properties.
17
+
18
+### 2.2.3
19
+* Fixed Minimum/Maximum QP incorrectly being applied to Constant QP.
20
+
21
### 2.2.2
22
* Fixed an at-exit crash caused by calling amf::AMFTrace::TraceEnableAsync(true).
23
24
obs-studio-20.1.0.tar.xz/plugins/enc-amf/CMakeLists.txt -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/CMakeLists.txt
Changed
10
1
2
################################################################################
3
SET(enc-amf_VERSION_MAJOR 2)
4
SET(enc-amf_VERSION_MINOR 2)
5
-SET(enc-amf_VERSION_PATCH 2)
6
+SET(enc-amf_VERSION_PATCH 4)
7
configure_file(
8
"${PROJECT_SOURCE_DIR}/#Resources/package.in.bat"
9
"${PROJECT_SOURCE_DIR}/#Resources/package.bat"
10
obs-studio-20.1.0.tar.xz/plugins/enc-amf/Include/amf-encoder-h264.h -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/Include/amf-encoder-h264.h
Changed
45
1
2
virtual void SetFillerDataEnabled(bool v) override;
3
virtual bool IsFillerDataEnabled() override;
4
5
+ virtual std::pair<uint8_t, uint8_t> CapsQPMinimum();
6
void SetQPMinimum(uint8_t v);
7
uint8_t GetQPMinimum();
8
9
+ virtual std::pair<uint8_t, uint8_t> CapsQPMaximum();
10
void SetQPMaximum(uint8_t v);
11
uint8_t GetQPMaximum();
12
13
14
virtual void SetPeakBitrate(uint64_t v) override;
15
virtual uint64_t GetPeakBitrate() override;
16
17
+ virtual std::pair<uint8_t, uint8_t> CapsIFrameQP();
18
virtual void SetIFrameQP(uint8_t v) override;
19
virtual uint8_t GetIFrameQP() override;
20
21
+ virtual std::pair<uint8_t, uint8_t> CapsPFrameQP();
22
virtual void SetPFrameQP(uint8_t v) override;
23
virtual uint8_t GetPFrameQP() override;
24
25
+ virtual std::pair<uint8_t, uint8_t> CapsBFrameQP();
26
virtual void SetBFrameQP(uint8_t v);
27
virtual uint8_t GetBFrameQP();
28
29
30
uint32_t GetMaximumSliceSize();
31
32
// Properties - Experimental
33
- virtual void SetLowLatencyInternal(bool v) override;
34
- virtual bool GetLowLatencyInternal() override;
35
+ //virtual void SetLowLatencyInternal(bool v) override;
36
+ //virtual bool GetLowLatencyInternal() override;
37
38
- virtual void SetCommonLowLatencyInternal(bool v) override;
39
- virtual bool GetCommonLowLatencyInternal() override;
40
+ //virtual void SetCommonLowLatencyInternal(bool v) override;
41
+ //virtual bool GetCommonLowLatencyInternal() override;
42
43
// Internal
44
virtual void LogProperties() override;
45
obs-studio-20.1.0.tar.xz/plugins/enc-amf/Include/amf-encoder-h265.h -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/Include/amf-encoder-h265.h
Changed
63
1
2
virtual void SetFillerDataEnabled(bool v) override;
3
virtual bool IsFillerDataEnabled() override;
4
5
+ virtual std::pair<uint8_t, uint8_t> CapsIFrameQPMinimum();
6
void SetIFrameQPMinimum(uint8_t v);
7
uint8_t GetIFrameQPMinimum();
8
9
+ virtual std::pair<uint8_t, uint8_t> CapsIFrameQPMaximum();
10
void SetIFrameQPMaximum(uint8_t v);
11
uint8_t GetIFrameQPMaximum();
12
13
+ virtual std::pair<uint8_t, uint8_t> CapsPFrameQPMinimum();
14
void SetPFrameQPMinimum(uint8_t v);
15
uint8_t GetPFrameQPMinimum();
16
17
+ virtual std::pair<uint8_t, uint8_t> CapsPFrameQPMaximum();
18
void SetPFrameQPMaximum(uint8_t v);
19
uint8_t GetPFrameQPMaximum();
20
21
22
virtual void SetPeakBitrate(uint64_t v) override;
23
virtual uint64_t GetPeakBitrate() override;
24
25
+ virtual std::pair<uint8_t, uint8_t> CapsIFrameQP() override;
26
virtual void SetIFrameQP(uint8_t v) override;
27
virtual uint8_t GetIFrameQP() override;
28
29
+ virtual std::pair<uint8_t, uint8_t> CapsPFrameQP() override;
30
virtual void SetPFrameQP(uint8_t v) override;
31
virtual uint8_t GetPFrameQP() override;
32
33
34
virtual uint32_t GetSliceControlSize() override;
35
36
// Experimental
37
- void SetQPCBOffset(uint8_t v);
38
- uint8_t GetQPCBOffset();
39
+ //void SetQPCBOffset(uint8_t v);
40
+ //uint8_t GetQPCBOffset();
41
42
- void SetQPCROffset(uint8_t v);
43
- uint8_t GetQPCROffset();
44
+ //void SetQPCROffset(uint8_t v);
45
+ //uint8_t GetQPCROffset();
46
47
std::pair<uint32_t, uint32_t> CapsInputQueueSize();
48
void SetInputQueueSize(uint32_t v);
49
uint32_t GetInputQueueSize();
50
51
- virtual void SetLowLatencyInternal(bool v) override;
52
- virtual bool GetLowLatencyInternal() override;
53
+ //virtual void SetLowLatencyInternal(bool v) override;
54
+ //virtual bool GetLowLatencyInternal() override;
55
56
- virtual void SetCommonLowLatencyInternal(bool v) override;
57
- virtual bool GetCommonLowLatencyInternal() override;
58
+ //virtual void SetCommonLowLatencyInternal(bool v) override;
59
+ //virtual bool GetCommonLowLatencyInternal() override;
60
61
// Internal
62
virtual void LogProperties() override;
63
obs-studio-20.1.0.tar.xz/plugins/enc-amf/Include/amf-encoder.h -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/Include/amf-encoder.h
Changed
29
1
2
virtual void SetPeakBitrate(uint64_t v) = 0;
3
virtual uint64_t GetPeakBitrate() = 0;
4
5
+ virtual std::pair<uint8_t, uint8_t> CapsIFrameQP() = 0;
6
virtual void SetIFrameQP(uint8_t v) = 0;
7
virtual uint8_t GetIFrameQP() = 0;
8
9
+ virtual std::pair<uint8_t, uint8_t> CapsPFrameQP() = 0;
10
virtual void SetPFrameQP(uint8_t v) = 0;
11
virtual uint8_t GetPFrameQP() = 0;
12
13
14
#pragma endregion Slicing
15
16
#pragma region Internal
17
- virtual void SetLowLatencyInternal(bool v) = 0;
18
- virtual bool GetLowLatencyInternal() = 0;
19
+ //virtual void SetLowLatencyInternal(bool v) = 0;
20
+ //virtual bool GetLowLatencyInternal() = 0;
21
22
- virtual void SetCommonLowLatencyInternal(bool v) = 0;
23
- virtual bool GetCommonLowLatencyInternal() = 0;
24
+ //virtual void SetCommonLowLatencyInternal(bool v) = 0;
25
+ //virtual bool GetCommonLowLatencyInternal() = 0;
26
#pragma endregion Internal
27
#pragma endregion Settings
28
29
obs-studio-20.1.0.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp
Changed
201
1
2
return e;
3
}
4
5
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH264::CapsQPMinimum() {
6
+ AMFTRACECALL;
7
+
8
+ const amf::AMFPropertyInfo* var;
9
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_MIN_QP, &var);
10
+ if (res != AMF_OK) {
11
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
12
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
13
+ throw std::exception(errMsg.c_str());
14
+ }
15
+
16
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
17
+}
18
+
19
void Plugin::AMD::EncoderH264::SetQPMinimum(uint8_t v) {
20
AMFTRACECALL;
21
22
23
return (uint8_t)e;
24
}
25
26
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH264::CapsQPMaximum() {
27
+ AMFTRACECALL;
28
+
29
+ const amf::AMFPropertyInfo* var;
30
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_MAX_QP, &var);
31
+ if (res != AMF_OK) {
32
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
33
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
34
+ throw std::exception(errMsg.c_str());
35
+ }
36
+
37
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
38
+}
39
+
40
void Plugin::AMD::EncoderH264::SetQPMaximum(uint8_t v) {
41
AMFTRACECALL;
42
43
44
return e;
45
}
46
47
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH264::CapsIFrameQP() {
48
+ AMFTRACECALL;
49
+
50
+ const amf::AMFPropertyInfo* var;
51
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_QP_I, &var);
52
+ if (res != AMF_OK) {
53
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
54
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
55
+ throw std::exception(errMsg.c_str());
56
+ }
57
+
58
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
59
+}
60
+
61
void Plugin::AMD::EncoderH264::SetIFrameQP(uint8_t v) {
62
AMFTRACECALL;
63
64
65
return (uint8_t)e;
66
}
67
68
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH264::CapsPFrameQP() {
69
+ AMFTRACECALL;
70
+
71
+ const amf::AMFPropertyInfo* var;
72
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_QP_P, &var);
73
+ if (res != AMF_OK) {
74
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
75
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
76
+ throw std::exception(errMsg.c_str());
77
+ }
78
+
79
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
80
+}
81
+
82
void Plugin::AMD::EncoderH264::SetPFrameQP(uint8_t v) {
83
AMFTRACECALL;
84
85
86
return (uint8_t)e;
87
}
88
89
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH264::CapsBFrameQP() {
90
+ AMFTRACECALL;
91
+
92
+ const amf::AMFPropertyInfo* var;
93
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_QP_B, &var);
94
+ if (res != AMF_OK) {
95
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
96
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
97
+ throw std::exception(errMsg.c_str());
98
+ }
99
+
100
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
101
+}
102
+
103
void Plugin::AMD::EncoderH264::SetBFrameQP(uint8_t v) {
104
AMFTRACECALL;
105
106
107
}
108
109
// Properties - Experimental
110
-void Plugin::AMD::EncoderH264::SetLowLatencyInternal(bool v) {
111
- AMFTRACECALL;
112
-
113
- AMF_RESULT res = m_AMFEncoder->SetProperty(L"LowLatencyInternal", v);
114
- if (res != AMF_OK) {
115
- QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to set mode to %s, error %ls (code %d)",
116
- m_UniqueId, v ? "Enabled" : "Disabled", m_AMF->GetTrace()->GetResultText(res), res);
117
- throw std::exception(errMsg.c_str());
118
- }
119
-}
120
-
121
-bool Plugin::AMD::EncoderH264::GetLowLatencyInternal() {
122
- AMFTRACECALL;
123
-
124
- bool e;
125
-
126
- AMF_RESULT res = m_AMFEncoder->GetProperty(L"LowLatencyInternal", &e);
127
- if (res != AMF_OK) {
128
- QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to retrieve value, error %ls (code %d)",
129
- m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
130
- throw std::exception(errMsg.c_str());
131
- }
132
- return e;
133
-}
134
-
135
-void Plugin::AMD::EncoderH264::SetCommonLowLatencyInternal(bool v) {
136
- AMFTRACECALL;
137
-
138
- AMF_RESULT res = m_AMFEncoder->SetProperty(L"CommonLowLatencyInternal", v);
139
- if (res != AMF_OK) {
140
- QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to set mode to %s, error %ls (code %d)",
141
- m_UniqueId, v ? "Enabled" : "Disabled", m_AMF->GetTrace()->GetResultText(res), res);
142
- throw std::exception(errMsg.c_str());
143
- }
144
-}
145
-
146
-bool Plugin::AMD::EncoderH264::GetCommonLowLatencyInternal() {
147
- AMFTRACECALL;
148
-
149
- bool e;
150
- AMF_RESULT res = m_AMFEncoder->GetProperty(L"CommonLowLatencyInternal", &e);
151
- if (res != AMF_OK) {
152
- QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to retrieve value, error %ls (code %d)",
153
- m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
154
- throw std::exception(errMsg.c_str());
155
- }
156
- return e;
157
-}
158
+//void Plugin::AMD::EncoderH264::SetLowLatencyInternal(bool v) {
159
+// AMFTRACECALL;
160
+//
161
+// AMF_RESULT res = m_AMFEncoder->SetProperty(L"LowLatencyInternal", v);
162
+// if (res != AMF_OK) {
163
+// QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to set mode to %s, error %ls (code %d)",
164
+// m_UniqueId, v ? "Enabled" : "Disabled", m_AMF->GetTrace()->GetResultText(res), res);
165
+// throw std::exception(errMsg.c_str());
166
+// }
167
+//}
168
+//
169
+//bool Plugin::AMD::EncoderH264::GetLowLatencyInternal() {
170
+// AMFTRACECALL;
171
+//
172
+// bool e;
173
+//
174
+// AMF_RESULT res = m_AMFEncoder->GetProperty(L"LowLatencyInternal", &e);
175
+// if (res != AMF_OK) {
176
+// QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to retrieve value, error %ls (code %d)",
177
+// m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
178
+// throw std::exception(errMsg.c_str());
179
+// }
180
+// return e;
181
+//}
182
+//
183
+//void Plugin::AMD::EncoderH264::SetCommonLowLatencyInternal(bool v) {
184
+// AMFTRACECALL;
185
+//
186
+// AMF_RESULT res = m_AMFEncoder->SetProperty(L"CommonLowLatencyInternal", v);
187
+// if (res != AMF_OK) {
188
+// QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to set mode to %s, error %ls (code %d)",
189
+// m_UniqueId, v ? "Enabled" : "Disabled", m_AMF->GetTrace()->GetResultText(res), res);
190
+// throw std::exception(errMsg.c_str());
191
+// }
192
+//}
193
+//
194
+//bool Plugin::AMD::EncoderH264::GetCommonLowLatencyInternal() {
195
+// AMFTRACECALL;
196
+//
197
+// bool e;
198
+// AMF_RESULT res = m_AMFEncoder->GetProperty(L"CommonLowLatencyInternal", &e);
199
+// if (res != AMF_OK) {
200
+// QUICK_FORMAT_MESSAGE(errMsg, PREFIX "<" __FUNCTION_NAME__ "> Failed to retrieve value, error %ls (code %d)",
201
obs-studio-20.1.0.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp
Changed
201
1
2
return e;
3
}
4
5
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH265::CapsIFrameQPMinimum() {
6
+ AMFTRACECALL;
7
+
8
+ const amf::AMFPropertyInfo* var;
9
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_HEVC_MIN_QP_I, &var);
10
+ if (res != AMF_OK) {
11
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
12
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
13
+ throw std::exception(errMsg.c_str());
14
+ }
15
+
16
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
17
+}
18
+
19
void Plugin::AMD::EncoderH265::SetIFrameQPMinimum(uint8_t v) {
20
AMFTRACECALL;
21
22
23
return (uint8_t)e;
24
}
25
26
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH265::CapsIFrameQPMaximum() {
27
+ AMFTRACECALL;
28
+
29
+ const amf::AMFPropertyInfo* var;
30
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_HEVC_MAX_QP_I, &var);
31
+ if (res != AMF_OK) {
32
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
33
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
34
+ throw std::exception(errMsg.c_str());
35
+ }
36
+
37
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
38
+}
39
+
40
void Plugin::AMD::EncoderH265::SetIFrameQPMaximum(uint8_t v) {
41
AMFTRACECALL;
42
43
44
return (uint8_t)e;
45
}
46
47
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH265::CapsPFrameQPMinimum() {
48
+ AMFTRACECALL;
49
+
50
+ const amf::AMFPropertyInfo* var;
51
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_HEVC_MIN_QP_P, &var);
52
+ if (res != AMF_OK) {
53
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
54
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
55
+ throw std::exception(errMsg.c_str());
56
+ }
57
+
58
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
59
+}
60
+
61
void Plugin::AMD::EncoderH265::SetPFrameQPMinimum(uint8_t v) {
62
AMFTRACECALL;
63
64
65
return (uint8_t)e;
66
}
67
68
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH265::CapsPFrameQPMaximum() {
69
+ AMFTRACECALL;
70
+
71
+ const amf::AMFPropertyInfo* var;
72
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_HEVC_MAX_QP_P, &var);
73
+ if (res != AMF_OK) {
74
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
75
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
76
+ throw std::exception(errMsg.c_str());
77
+ }
78
+
79
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
80
+}
81
+
82
void Plugin::AMD::EncoderH265::SetPFrameQPMaximum(uint8_t v) {
83
AMFTRACECALL;
84
85
86
return e;
87
}
88
89
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH265::CapsIFrameQP() {
90
+ AMFTRACECALL;
91
+
92
+ const amf::AMFPropertyInfo* var;
93
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_HEVC_QP_I, &var);
94
+ if (res != AMF_OK) {
95
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
96
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
97
+ throw std::exception(errMsg.c_str());
98
+ }
99
+
100
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
101
+}
102
+
103
void Plugin::AMD::EncoderH265::SetIFrameQP(uint8_t v) {
104
AMFTRACECALL;
105
106
107
return (uint8_t)e;
108
}
109
110
+std::pair<uint8_t, uint8_t> Plugin::AMD::EncoderH265::CapsPFrameQP() {
111
+ AMFTRACECALL;
112
+
113
+ const amf::AMFPropertyInfo* var;
114
+ AMF_RESULT res = m_AMFEncoder->GetPropertyInfo(AMF_VIDEO_ENCODER_HEVC_QP_P, &var);
115
+ if (res != AMF_OK) {
116
+ QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Querying capabilities failed, error %ls (code %d)",
117
+ m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
118
+ throw std::exception(errMsg.c_str());
119
+ }
120
+
121
+ return std::make_pair((uint8_t)var->minValue.int64Value, (uint8_t)var->maxValue.int64Value);
122
+}
123
+
124
void Plugin::AMD::EncoderH265::SetPFrameQP(uint8_t v) {
125
AMFTRACECALL;
126
127
128
}
129
130
// Experimental
131
-void Plugin::AMD::EncoderH265::SetQPCBOffset(uint8_t v) {
132
- AMFTRACECALL;
133
-
134
- AMF_RESULT res = m_AMFEncoder->SetProperty(L"QPCBOFFSET", v);
135
- if (res != AMF_OK) {
136
- QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Failed to set mode to %ld, error %ls (code %d)",
137
- m_UniqueId, v, m_AMF->GetTrace()->GetResultText(res), res);
138
- throw std::exception(errMsg.c_str());
139
- }
140
-}
141
-
142
-uint8_t Plugin::AMD::EncoderH265::GetQPCBOffset() {
143
- AMFTRACECALL;
144
-
145
- int64_t e;
146
- AMF_RESULT res = m_AMFEncoder->GetProperty(L"QPCBOFFSET", &e);
147
- if (res != AMF_OK) {
148
- QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Failed to retrieve value, error %ls (code %d)",
149
- m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
150
- throw std::exception(errMsg.c_str());
151
- }
152
- return (uint8_t)e;
153
-}
154
-
155
-void Plugin::AMD::EncoderH265::SetQPCROffset(uint8_t v) {
156
- AMFTRACECALL;
157
-
158
- AMF_RESULT res = m_AMFEncoder->SetProperty(L"QPCROFFSET", v);
159
- if (res != AMF_OK) {
160
- QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Failed to set mode to %ld, error %ls (code %d)",
161
- m_UniqueId, v, m_AMF->GetTrace()->GetResultText(res), res);
162
- throw std::exception(errMsg.c_str());
163
- }
164
-}
165
-
166
-uint8_t Plugin::AMD::EncoderH265::GetQPCROffset() {
167
- AMFTRACECALL;
168
-
169
- int64_t e;
170
- AMF_RESULT res = m_AMFEncoder->GetProperty(L"QPCROFFSET", &e);
171
- if (res != AMF_OK) {
172
- QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Failed to retrieve value, error %ls (code %d)",
173
- m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
174
- throw std::exception(errMsg.c_str());
175
- }
176
- return (uint8_t)e;
177
-}
178
+//void Plugin::AMD::EncoderH265::SetQPCBOffset(uint8_t v) {
179
+// AMFTRACECALL;
180
+//
181
+// AMF_RESULT res = m_AMFEncoder->SetProperty(L"QPCBOFFSET", v);
182
+// if (res != AMF_OK) {
183
+// QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Failed to set mode to %ld, error %ls (code %d)",
184
+// m_UniqueId, v, m_AMF->GetTrace()->GetResultText(res), res);
185
+// throw std::exception(errMsg.c_str());
186
+// }
187
+//}
188
+//
189
+//uint8_t Plugin::AMD::EncoderH265::GetQPCBOffset() {
190
+// AMFTRACECALL;
191
+//
192
+// int64_t e;
193
+// AMF_RESULT res = m_AMFEncoder->GetProperty(L"QPCBOFFSET", &e);
194
+// if (res != AMF_OK) {
195
+// QUICK_FORMAT_MESSAGE(errMsg, "<Id: %lld> <" __FUNCTION_NAME__ "> Failed to retrieve value, error %ls (code %d)",
196
+// m_UniqueId, m_AMF->GetTrace()->GetResultText(res), res);
197
+// throw std::exception(errMsg.c_str());
198
+// }
199
+// return (uint8_t)e;
200
+//}
201
obs-studio-20.1.0.tar.xz/plugins/enc-amf/Source/enc-h264.cpp -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/Source/enc-h264.cpp
Changed
75
1
2
}
3
ColorSpace colorSpace = ColorSpace::BT601;
4
switch (voi->colorspace) {
5
+ case VIDEO_CS_DEFAULT:
6
case VIDEO_CS_601:
7
colorSpace = ColorSpace::BT601;
8
break;
9
- case VIDEO_CS_DEFAULT:
10
case VIDEO_CS_709:
11
colorSpace = ColorSpace::BT709;
12
break;
13
14
// Rate Control
15
RateControlMethod rcm = static_cast<RateControlMethod>(obs_data_get_int(data, P_RATECONTROLMETHOD));
16
m_VideoEncoder->SetRateControlMethod(rcm);
17
- m_VideoEncoder->SetQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MINIMUM)));
18
- m_VideoEncoder->SetQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MAXIMUM)));
19
- switch (rcm) {
20
- case RateControlMethod::PeakConstrainedVariableBitrate:
21
- case RateControlMethod::LatencyConstrainedVariableBitrate:
22
- m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_PEAK) * 1000));
23
- m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
24
- break;
25
- case RateControlMethod::ConstantBitrate:
26
- m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
27
- m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
28
- break;
29
- case RateControlMethod::ConstantQP:
30
- m_VideoEncoder->SetIFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME)));
31
- m_VideoEncoder->SetPFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME)));
32
+ if (rcm == RateControlMethod::ConstantQP) {
33
+ m_VideoEncoder->SetQPMinimum(0);
34
+ m_VideoEncoder->SetQPMaximum(51);
35
+ m_VideoEncoder->SetIFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME)));
36
+ m_VideoEncoder->SetPFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME)));
37
+ if (m_VideoEncoder->CapsBFramePattern() > 0) {
38
try {
39
m_VideoEncoder->SetBFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_BFRAME)));
40
} catch (...) {
41
}
42
- break;
43
+ }
44
+ m_VideoEncoder->SetPrePassMode(PrePassMode::Disabled);
45
+ m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(false);
46
+ } else {
47
+ m_VideoEncoder->SetQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MINIMUM)));
48
+ m_VideoEncoder->SetQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MAXIMUM)));
49
+ m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
50
+ m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_PEAK) * 1000));
51
+ m_VideoEncoder->SetPrePassMode(static_cast<PrePassMode>(obs_data_get_int(data, P_PREPASSMODE)));
52
+ m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(!!obs_data_get_int(data, P_VBAQ));
53
}
54
- m_VideoEncoder->SetFrameSkippingEnabled(!!obs_data_get_int(data, P_FRAMESKIPPING));
55
- m_VideoEncoder->SetEnforceHRDEnabled(!!obs_data_get_int(data, P_ENFORCEHRD));
56
if (rcm == RateControlMethod::ConstantBitrate) {
57
+ m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
58
m_VideoEncoder->SetFillerDataEnabled(!!obs_data_get_int(data, P_FILLERDATA));
59
} else {
60
m_VideoEncoder->SetFillerDataEnabled(false);
61
}
62
- if (rcm != RateControlMethod::ConstantQP) {
63
- m_VideoEncoder->SetPrePassMode(static_cast<PrePassMode>(obs_data_get_int(data, P_PREPASSMODE)));
64
- m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(!!obs_data_get_int(data, P_VBAQ));
65
- } else {
66
- m_VideoEncoder->SetPrePassMode(PrePassMode::Disabled);
67
- m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(false);
68
- }
69
-
70
+ m_VideoEncoder->SetFrameSkippingEnabled(!!obs_data_get_int(data, P_FRAMESKIPPING));
71
+ m_VideoEncoder->SetEnforceHRDEnabled(!!obs_data_get_int(data, P_ENFORCEHRD));
72
m_VideoEncoder->SetVBVBufferInitialFullness((float)obs_data_get_double(data, P_VBVBUFFER_INITIALFULLNESS) / 100.0f);
73
if (obs_data_get_int(data, P_VBVBUFFER) == 0) {
74
m_VideoEncoder->SetVBVBufferStrictness(obs_data_get_double(data, P_VBVBUFFER_STRICTNESS) / 100.0);
75
obs-studio-20.1.0.tar.xz/plugins/enc-amf/Source/enc-h265.cpp -> obs-studio-20.1.1.tar.xz/plugins/enc-amf/Source/enc-h265.cpp
Changed
58
1
2
}
3
ColorSpace colorSpace = ColorSpace::BT601;
4
switch (voi->colorspace) {
5
+ case VIDEO_CS_DEFAULT:
6
case VIDEO_CS_601:
7
colorSpace = ColorSpace::BT601;
8
break;
9
- case VIDEO_CS_DEFAULT:
10
case VIDEO_CS_709:
11
colorSpace = ColorSpace::BT709;
12
break;
13
14
uint32_t obsFPSden = voi->fps_den;
15
16
// Rate Control
17
- m_VideoEncoder->SetIFrameQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME_MINIMUM)));
18
- m_VideoEncoder->SetIFrameQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME_MAXIMUM)));
19
- m_VideoEncoder->SetPFrameQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME_MINIMUM)));
20
- m_VideoEncoder->SetPFrameQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME_MAXIMUM)));
21
- switch (m_VideoEncoder->GetRateControlMethod()) {
22
- case RateControlMethod::PeakConstrainedVariableBitrate:
23
- case RateControlMethod::LatencyConstrainedVariableBitrate:
24
- m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_PEAK) * 1000));
25
- m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
26
- break;
27
- case RateControlMethod::ConstantBitrate:
28
- m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
29
- m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
30
- break;
31
- case RateControlMethod::ConstantQP:
32
- m_VideoEncoder->SetIFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME)));
33
- m_VideoEncoder->SetPFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME)));
34
- break;
35
+ RateControlMethod rcm = m_VideoEncoder->GetRateControlMethod();
36
+ if (rcm == RateControlMethod::ConstantQP) {
37
+ m_VideoEncoder->SetIFrameQPMinimum(m_VideoEncoder->CapsIFrameQPMinimum().first);
38
+ m_VideoEncoder->SetIFrameQPMaximum(m_VideoEncoder->CapsIFrameQPMaximum().second);
39
+ m_VideoEncoder->SetPFrameQPMinimum(m_VideoEncoder->CapsPFrameQPMinimum().first);
40
+ m_VideoEncoder->SetPFrameQPMaximum(m_VideoEncoder->CapsPFrameQPMaximum().second);
41
+ m_VideoEncoder->SetIFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME)));
42
+ m_VideoEncoder->SetPFrameQP(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME)));
43
+ m_VideoEncoder->SetFillerDataEnabled(false);
44
+ } else {
45
+ m_VideoEncoder->SetIFrameQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME_MINIMUM)));
46
+ m_VideoEncoder->SetIFrameQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_IFRAME_MAXIMUM)));
47
+ m_VideoEncoder->SetPFrameQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME_MINIMUM)));
48
+ m_VideoEncoder->SetPFrameQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_PFRAME_MAXIMUM)));
49
+ m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
50
+ m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_PEAK) * 1000));
51
}
52
- if (m_VideoEncoder->GetRateControlMethod() == RateControlMethod::ConstantBitrate) {
53
+ if (rcm == RateControlMethod::ConstantBitrate) {
54
+ m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_TARGET) * 1000));
55
m_VideoEncoder->SetFillerDataEnabled(!!obs_data_get_int(data, P_FILLERDATA));
56
} else {
57
m_VideoEncoder->SetFillerDataEnabled(false);
58
obs-studio-20.1.0.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-20.1.1.tar.xz/plugins/rtmp-services/data/package.json
Changed
14
1
2
{
3
"url": "https://obsproject.com/obs2_update/rtmp-services",
4
- "version": 73,
5
+ "version": 74,
6
"files": [
7
{
8
"name": "services.json",
9
- "version": 73
10
+ "version": 74
11
}
12
]
13
}
14
obs-studio-20.1.0.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-20.1.1.tar.xz/plugins/rtmp-services/data/services.json
Changed
55
1
2
"name": "Picarto",
3
"servers": [
4
{
5
- "name": "USA/Canada",
6
- "url": "rtmp://live.us.picarto.tv/golive"
7
+ "name": "US East",
8
+ "url": "rtmp://live.us-east1.picarto.tv/golive"
9
+ },
10
+ {
11
+ "name": "EU West",
12
+ "url": "rtmp://live.eu-west1.picarto.tv/golive"
13
}
14
],
15
"recommended": {
16
17
"max video bitrate": 6000,
18
"max audio bitrate": 160
19
}
20
+ },
21
+ {
22
+ "name": "Stream.me",
23
+ "common": false,
24
+ "servers": [
25
+ {
26
+ "name": "US, Central",
27
+ "url": "rtmp://uc-origin.stream.me/origin"
28
+ },
29
+ {
30
+ "name": "US, East",
31
+ "url": "rtmp://ue-origin.stream.me/origin"
32
+ },
33
+ {
34
+ "name": "US, West",
35
+ "url": "rtmp://uw-origin.stream.me/origin"
36
+ },
37
+ {
38
+ "name": "Europe, West",
39
+ "url": "rtmp://ew-origin.stream.me/origin"
40
+ },
41
+ {
42
+ "name": "Asia, East",
43
+ "url": "rtmp://ae-origin.stream.me/origin"
44
+ }
45
+ ],
46
+ "recommended": {
47
+ "keyint": 2,
48
+ "profile": "main",
49
+ "max video bitrate": 20000,
50
+ "max audio bitrate": 192
51
+ }
52
}
53
]
54
}
55