Changes of Revision 95
obs-studio.changes
Changed
x
1
2
-------------------------------------------------------------------
3
+Tue Mar 29 13:23:40 UTC 2022 - Jimmy Berry <jimmy@boombatower.com>
4
+
5
+- Switch to https:// instead of git:// since no longer available.
6
+
7
+-------------------------------------------------------------------
8
+Tue Mar 29 13:07:43 UTC 2022 - jimmy@boombatower.com
9
+
10
+- Update to version 27.2.4:
11
+ * libobs: Update version to 27.2.4
12
+ * UI: Add missing previousIcon in Rachni theme
13
+ * CI: Enable legacy CI for PRs to release branches
14
+ * CI: Fix CEF zip extraction path on Windows
15
+ * CI: Fix Qt XML Validator workflow
16
+ * obs-libfdk: Set bitstream to ADTS for mpegts output
17
+ * win-waspai: Tighten version check for RTWQ
18
+ * mac-capture: Add vbcable to whitelist for loopback devices
19
+ * UI: Fix handling of remove signal with projectors
20
+ * UI: Fix deferred source properties not updating
21
+
22
+-------------------------------------------------------------------
23
Thu Mar 03 03:34:02 UTC 2022 - jimmy@boombatower.com
24
25
- Update to version 27.2.3:
26
obs-studio.spec
Changed
8
1
2
Name: obs-studio
3
-Version: 27.2.3
4
+Version: 27.2.4
5
Release: 0
6
Summary: A recording/broadcasting program
7
Group: Productivity/Multimedia/Video/Editors and Convertors
8
_service
Changed
12
1
2
<services>
3
<service name="tar_scm" mode="disabled">
4
<param name="versionformat">@PARENT_TAG@</param>
5
- <param name="revision">refs/tags/27.2.3</param>
6
- <param name="url">git://github.com/jp9000/obs-studio.git</param>
7
+ <param name="revision">refs/tags/27.2.4</param>
8
+ <param name="url">https://github.com/obsproject/obs-studio.git</param>
9
<param name="scm">git</param>
10
<param name="changesgenerate">enable</param>
11
</service>
12
_servicedata
Changed
10
1
2
<servicedata>
3
<service name="tar_scm">
4
- <param name="url">git://github.com/jp9000/obs-studio.git</param>
5
- <param name="changesrevision">b65ee7e7fbca05e6c4bfd55b7ff721150b3c0735</param>
6
+ <param name="url">https://github.com/obsproject/obs-studio.git</param>
7
+ <param name="changesrevision">aab14ba29a759037e42610f127ba844f17dbd416</param>
8
</service>
9
</servicedata>
10
obs-studio-27.2.3.tar.xz/.github/workflows/main.yml -> obs-studio-27.2.4.tar.xz/.github/workflows/main.yml
Changed
36
1
2
- '**.md'
3
branches:
4
- master
5
+ - 'release/**'
6
7
env:
8
MACOS_CEF_BUILD_VERSION: '4638'
9
10
if [ -d ./OBS.app/Contents/Resources/data/obs-scripting ]; then
11
mv ./OBS.app/Contents/Resources/data/obs-scripting/obslua.so ./OBS.app/Contents/MacOS/
12
mv ./OBS.app/Contents/Resources/data/obs-scripting/_obspython.so ./OBS.app/Contents/MacOS/
13
- mv ./OBS.app/Contents/Resources/data/obs-scripting/obspython.py ./OBS.app/Contents/MacOS/
14
+ mv ./OBS.app/Contents/Resources/data/obs-scripting/obspython.py ./OBS.app/Contents/Resources/
15
rm -rf ./OBS.app/Contents/Resources/data/obs-scripting/
16
fi
17
18
19
if: steps.cef-cache.outputs.cache-hit != 'true'
20
run: |
21
curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.WINDOWS_CEF_BUILD_VERSION }}_windows_x64.zip -f --retry 5 -o cef.zip
22
- 7z x cef.zip -o"${{ github.workspace }}/cmbuild"
23
+ 7z x cef.zip -o"${{ github.workspace }}/cmbuild/cef_binary_${{ env.WINDOWS_CEF_BUILD_VERSION }}_windows_x64"
24
- name: 'Configure'
25
run: |
26
mkdir ./build
27
28
if: steps.cef-cache.outputs.cache-hit != 'true'
29
run: |
30
curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.WINDOWS_CEF_BUILD_VERSION }}_windows_x86.zip -f --retry 5 -o cef.zip
31
- 7z x cef.zip -o"${{ github.workspace }}/cmbuild"
32
+ 7z x cef.zip -o"${{ github.workspace }}/cmbuild/cef_binary_${{ env.WINDOWS_CEF_BUILD_VERSION }}_windows_x86"
33
- name: 'Configure'
34
run: |
35
mkdir ./build
36
obs-studio-27.2.3.tar.xz/.github/workflows/qt-xml.yml -> obs-studio-27.2.4.tar.xz/.github/workflows/qt-xml.yml
Changed
9
1
2
3
- name: Install xmllint
4
run: |
5
+ sudo apt-get -qq update
6
sudo apt-get install --no-install-recommends -y libxml2-utils
7
8
- name: Register Annotations
9
obs-studio-27.2.3.tar.xz/CI/full-build-macos.sh -> obs-studio-27.2.4.tar.xz/CI/full-build-macos.sh
Changed
10
1
2
if [ -d ./OBS.app/Contents/Resources/data/obs-scripting ]; then
3
/bin/mv ./OBS.app/Contents/Resources/data/obs-scripting/obslua.so ./OBS.app/Contents/MacOS/
4
/bin/mv ./OBS.app/Contents/Resources/data/obs-scripting/_obspython.so ./OBS.app/Contents/MacOS/
5
- /bin/mv ./OBS.app/Contents/Resources/data/obs-scripting/obspython.py ./OBS.app/Contents/MacOS/
6
+ /bin/mv ./OBS.app/Contents/Resources/data/obs-scripting/obspython.py ./OBS.app/Contents/Resources/
7
/bin/rm -rf ./OBS.app/Contents/Resources/data/obs-scripting/
8
fi
9
# dylibbundler will only copy actually linked files into bundle, but not symlinks
10
obs-studio-27.2.3.tar.xz/UI/data/themes/Rachni.qss -> obs-studio-27.2.4.tar.xz/UI/data/themes/Rachni.qss
Changed
12
1
2
qproperty-icon: url(./Dark/media/media_next.svg);
3
}
4
5
+* [themeID="previousIcon"] {
6
+ qproperty-icon: url(./Dark/media/media_previous.svg);
7
+}
8
+
9
/* YouTube Integration */
10
OBSYoutubeActions {
11
qproperty-thumbPlaceholder: url(./Dark/sources/image.svg);
12
obs-studio-27.2.3.tar.xz/UI/properties-view.cpp -> obs-studio-27.2.4.tar.xz/UI/properties-view.cpp
Changed
51
1
2
OBSPropertiesView::OBSPropertiesView(OBSData settings_, obs_object_t *obj,
3
PropertiesReloadCallback reloadCallback,
4
PropertiesUpdateCallback callback_,
5
- PropertiesVisualUpdateCb cb_, int minSize_)
6
+ PropertiesVisualUpdateCb visUpdateCb_,
7
+ int minSize_)
8
: VScrollArea(nullptr),
9
properties(nullptr, obs_properties_destroy),
10
settings(settings_),
11
weakObj(obs_object_get_weak_object(obj)),
12
reloadCallback(reloadCallback),
13
callback(callback_),
14
- cb(cb_),
15
+ visUpdateCb(visUpdateCb_),
16
minSize(minSize_)
17
{
18
setFrameShape(QFrame::NoFrame);
19
20
OBSPropertiesView::OBSPropertiesView(OBSData settings_, void *obj,
21
PropertiesReloadCallback reloadCallback,
22
PropertiesUpdateCallback callback_,
23
- PropertiesVisualUpdateCb cb_, int minSize_)
24
+ PropertiesVisualUpdateCb visUpdateCb_,
25
+ int minSize_)
26
: VScrollArea(nullptr),
27
properties(nullptr, obs_properties_destroy),
28
settings(settings_),
29
rawObj(obj),
30
reloadCallback(reloadCallback),
31
callback(callback_),
32
- cb(cb_),
33
+ visUpdateCb(visUpdateCb_),
34
minSize(minSize_)
35
{
36
setFrameShape(QFrame::NoFrame);
37
38
blog(LOG_DEBUG, "No update timer or no callback!");
39
}
40
41
- if (view->cb && !view->deferUpdate) {
42
+ if (view->visUpdateCb && !view->deferUpdate) {
43
OBSObject strongObj = view->GetObject();
44
void *obj = strongObj ? strongObj.Get() : view->rawObj;
45
if (obj)
46
- view->cb(obj, view->settings);
47
+ view->visUpdateCb(obj, view->settings);
48
}
49
50
view->SignalChanged();
51
obs-studio-27.2.3.tar.xz/UI/properties-view.hpp -> obs-studio-27.2.4.tar.xz/UI/properties-view.hpp
Changed
22
1
2
std::string type;
3
PropertiesReloadCallback reloadCallback;
4
PropertiesUpdateCallback callback = nullptr;
5
- PropertiesVisualUpdateCb cb = nullptr;
6
+ PropertiesVisualUpdateCb visUpdateCb = nullptr;
7
int minSize;
8
std::vector<std::unique_ptr<WidgetInfo>> children;
9
std::string lastFocused;
10
11
12
inline void UpdateSettings()
13
{
14
- callback(OBSGetStrongRef(weakObj), nullptr, settings);
15
+ if (callback)
16
+ callback(OBSGetStrongRef(weakObj), nullptr, settings);
17
+ else if (visUpdateCb)
18
+ visUpdateCb(OBSGetStrongRef(weakObj), settings);
19
}
20
inline bool DeferUpdate() const { return deferUpdate; }
21
22
obs-studio-27.2.3.tar.xz/UI/window-basic-main.cpp -> obs-studio-27.2.4.tar.xz/UI/window-basic-main.cpp
Changed
33
1
2
{
3
if (SourceMixerHidden(source))
4
return;
5
+ if (!obs_source_active(source))
6
+ return;
7
if (!obs_source_audio_active(source))
8
return;
9
10
11
return obs_reset_audio(&ai);
12
}
13
14
+extern char *get_new_source_name(const char *name, const char *format);
15
+
16
void OBSBasic::ResetAudioDevice(const char *sourceId, const char *deviceId,
17
const char *deviceDesc, int channel)
18
{
19
20
}
21
22
} else if (!disable) {
23
+ BPtr<char> name = get_new_source_name(deviceDesc, "%s (%d)");
24
+
25
settings = obs_data_create();
26
obs_data_set_string(settings, "device_id", deviceId);
27
- source = obs_source_create(sourceId, deviceDesc, settings,
28
- nullptr);
29
+ source = obs_source_create(sourceId, name, settings, nullptr);
30
31
obs_set_output_source(channel, source);
32
}
33
obs-studio-27.2.3.tar.xz/UI/window-basic-properties.cpp -> obs-studio-27.2.4.tar.xz/UI/window-basic-properties.cpp
Changed
23
1
2
OBSDataAutoRelease nd_settings = obs_source_get_settings(source);
3
obs_data_apply(oldSettings, nd_settings);
4
5
- auto handle_memory = [](void *vp, obs_data_t *old_settings,
6
- obs_data_t *new_settings) {
7
- obs_source_t *source = reinterpret_cast<obs_source_t *>(vp);
8
-
9
- obs_source_update(source, new_settings);
10
-
11
- UNUSED_PARAMETER(old_settings);
12
- UNUSED_PARAMETER(vp);
13
- };
14
-
15
view = new OBSPropertiesView(
16
nd_settings.Get(), source,
17
(PropertiesReloadCallback)obs_source_properties,
18
- (PropertiesUpdateCallback)handle_memory,
19
+ (PropertiesUpdateCallback) nullptr, // No special handling required for undo/redo
20
(PropertiesVisualUpdateCb)obs_source_update);
21
view->setMinimumHeight(150);
22
23
obs-studio-27.2.3.tar.xz/UI/window-basic-source-select.cpp -> obs-studio-27.2.4.tar.xz/UI/window-basic-source-select.cpp
Changed
30
1
2
obs_sceneitem_set_visible(sceneitem, data->visible);
3
}
4
5
-static char *get_new_source_name(const char *name)
6
+char *get_new_source_name(const char *name, const char *format)
7
{
8
struct dstr new_name = {0};
9
int inc = 0;
10
11
if (!existing_source)
12
break;
13
14
- dstr_printf(&new_name, "%s %d", name, ++inc + 1);
15
+ dstr_printf(&new_name, format, name, ++inc + 1);
16
}
17
18
return new_name.array;
19
20
21
if (duplicate) {
22
OBSSource from = source;
23
- char *new_name =
24
- get_new_source_name(obs_source_get_name(source));
25
+ char *new_name = get_new_source_name(
26
+ obs_source_get_name(source), "%s %d");
27
source = obs_source_duplicate(from, new_name, false);
28
obs_source_release(source);
29
bfree(new_name);
30
obs-studio-27.2.3.tar.xz/UI/window-projector.cpp -> obs-studio-27.2.4.tar.xz/UI/window-projector.cpp
Changed
14
1
2
void OBSProjector::OBSSourceRemoved(void *data, calldata_t *params)
3
{
4
OBSProjector *window = reinterpret_cast<OBSProjector *>(data);
5
-
6
- OBSBasic *main = reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
7
- main->DeleteProjector(window);
8
- allProjectors.removeAll(window);
9
-
10
+ QMetaObject::invokeMethod(window, "EscapeTriggered");
11
UNUSED_PARAMETER(params);
12
}
13
14
obs-studio-27.2.3.tar.xz/deps/obs-scripting/obs-scripting-python.c -> obs-studio-27.2.4.tar.xz/deps/obs-scripting/obs-scripting-python.c
Changed
30
1
2
bfree(absolute_script_path);
3
4
#if __APPLE__
5
- char *exec_path = os_get_executable_path_ptr("");
6
- if (exec_path)
7
- add_to_python_path(exec_path);
8
- bfree(exec_path);
9
+ char *absolute_exec_path = os_get_executable_path_ptr("");
10
+
11
+ if (absolute_exec_path != NULL) {
12
+ add_to_python_path(absolute_exec_path);
13
+
14
+ struct dstr resources_path;
15
+ dstr_init_move_array(&resources_path, absolute_exec_path);
16
+ dstr_cat(&resources_path, "../Resources");
17
+
18
+ char *absolute_resources_path = os_get_abs_path_ptr(resources_path.array);
19
+ if (absolute_resources_path != NULL) {
20
+ add_to_python_path(absolute_resources_path);
21
+ bfree(absolute_resources_path);
22
+ }
23
+
24
+ dstr_free(&resources_path);
25
+ bfree(absolute_exec_path);
26
+ }
27
#endif
28
29
py_obspython = PyImport_ImportModule("obspython");
30
obs-studio-27.2.3.tar.xz/libobs/obs-config.h -> obs-studio-27.2.4.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 3
6
+#define LIBOBS_API_PATCH_VER 4
7
8
#define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
((major << 24) | (minor << 16) | patch)
10
obs-studio-27.2.3.tar.xz/libobs/obs-encoder.c -> obs-studio-27.2.4.tar.xz/libobs/obs-encoder.c
Changed
21
1
2
struct audio_data *data, size_t size,
3
size_t offset_size)
4
{
5
+ if (offset_size >= size)
6
+ return;
7
+
8
size -= offset_size;
9
10
/* push in to the circular buffer */
11
- if (size)
12
- for (size_t i = 0; i < encoder->planes; i++)
13
- circlebuf_push_back(&encoder->audio_input_buffer[i],
14
- data->data[i] + offset_size, size);
15
+ for (size_t i = 0; i < encoder->planes; i++)
16
+ circlebuf_push_back(&encoder->audio_input_buffer[i],
17
+ data->data[i] + offset_size, size);
18
}
19
20
static inline size_t calc_offset_size(struct obs_encoder *encoder,
21
obs-studio-27.2.3.tar.xz/plugins/mac-capture/audio-device-enum.c -> obs-studio-27.2.4.tar.xz/plugins/mac-capture/audio-device-enum.c
Changed
11
1
2
astrstri(device, "ishowu") == NULL &&
3
astrstri(device, "blackhole") == NULL &&
4
astrstri(device, "loopback") == NULL &&
5
- astrstri(device, "groundcontrol") == NULL;
6
+ astrstri(device, "groundcontrol") == NULL &&
7
+ astrstri(device, "vbcable") == NULL;
8
}
9
10
static inline bool enum_success(OSStatus stat, const char *msg)
11
obs-studio-27.2.3.tar.xz/plugins/obs-libfdk/obs-libfdk.c -> obs-studio-27.2.4.tar.xz/plugins/obs-libfdk/obs-libfdk.c
Changed
21
1
2
int bitrate = (int)obs_data_get_int(settings, "bitrate") * 1000;
3
int afterburner = obs_data_get_bool(settings, "afterburner") ? 1 : 0;
4
audio_t *audio = obs_encoder_audio(encoder);
5
+ bool set_to_ADTS = obs_data_get_bool(settings, "set_to_ADTS");
6
+ int transmux = set_to_ADTS ? 2 : 0;
7
int mode = 0;
8
AACENC_ERROR err;
9
10
11
aacEncoder_SetParam(enc->fdkhandle, AACENC_BITRATEMODE, 0));
12
CHECK_LIBFDK(
13
aacEncoder_SetParam(enc->fdkhandle, AACENC_BITRATE, bitrate));
14
- CHECK_LIBFDK(aacEncoder_SetParam(enc->fdkhandle, AACENC_TRANSMUX, 0));
15
+
16
+ CHECK_LIBFDK(
17
+ aacEncoder_SetParam(enc->fdkhandle, AACENC_TRANSMUX, transmux));
18
CHECK_LIBFDK(aacEncoder_SetParam(enc->fdkhandle, AACENC_AFTERBURNER,
19
afterburner));
20
21
obs-studio-27.2.3.tar.xz/plugins/rtmp-services/rtmp-custom.c -> obs-studio-27.2.4.tar.xz/plugins/rtmp-services/rtmp-custom.c
Changed
9
1
2
strncmp(service->server, RTMP_PROTOCOL, strlen(RTMP_PROTOCOL)) !=
3
0) {
4
obs_data_set_bool(video_settings, "repeat_headers", true);
5
+ obs_data_set_bool(audio_settings, "set_to_ADTS", true);
6
}
7
}
8
9
obs-studio-27.2.3.tar.xz/plugins/win-dshow/ffmpeg-decode.c -> obs-studio-27.2.4.tar.xz/plugins/win-dshow/ffmpeg-decode.c
Changed
19
1
2
}
3
4
if (hw_ctx) {
5
+ d->hw_device_ctx = hw_ctx;
6
d->decoder->hw_device_ctx = av_buffer_ref(hw_ctx);
7
d->hw = true;
8
}
9
10
if (decode->frame)
11
av_frame_free(&decode->frame);
12
13
+ if (decode->hw_device_ctx)
14
+ av_buffer_unref(&decode->hw_device_ctx);
15
+
16
if (decode->packet_buffer)
17
bfree(decode->packet_buffer);
18
19
obs-studio-27.2.3.tar.xz/plugins/win-dshow/ffmpeg-decode.h -> obs-studio-27.2.4.tar.xz/plugins/win-dshow/ffmpeg-decode.h
Changed
9
1
2
#endif
3
4
struct ffmpeg_decode {
5
+ AVBufferRef *hw_device_ctx;
6
AVCodecContext *decoder;
7
AVCodec *codec;
8
9
obs-studio-27.2.3.tar.xz/plugins/win-wasapi/win-wasapi.cpp -> obs-studio-27.2.4.tar.xz/plugins/win-wasapi/win-wasapi.cpp
Changed
17
1
2
3
// while RTWQ was introduced in Win 8.1, it silently fails
4
// to capture Desktop Audio for some reason. Disable for now.
5
- if (get_win_ver_int() >= _WIN32_WINNT_WIN10)
6
+ struct win_version_info win1703 = {};
7
+ win1703.major = 10;
8
+ win1703.minor = 0;
9
+ win1703.build = 15063;
10
+ win1703.revis = 0;
11
+ struct win_version_info ver;
12
+ get_win_ver(&ver);
13
+ if (win_version_compare(&ver, &win1703) >= 0)
14
rtwq_supported = rtwq_module != NULL;
15
16
if (rtwq_supported) {
17