Changes of Revision 95

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,24 @@
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
@@ -1,5 +1,5 @@
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
@@ -1,8 +1,8 @@
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
@@ -1,6 +1,6 @@
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
@@ -14,6 +14,7 @@
2
       - '**.md'
3
     branches:
4
       - master
5
+      - 'release/**'
6
 
7
 env:
8
   MACOS_CEF_BUILD_VERSION: '4638'
9
@@ -211,7 +212,7 @@
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
@@ -581,7 +582,7 @@
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
@@ -690,7 +691,7 @@
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
@@ -19,6 +19,7 @@
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
@@ -419,7 +419,7 @@
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
@@ -1464,6 +1464,10 @@
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
@@ -180,14 +180,15 @@
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
@@ -198,14 +199,15 @@
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
@@ -2028,11 +2030,11 @@
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
@@ -102,7 +102,7 @@
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
@@ -188,7 +188,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
@@ -3531,6 +3531,8 @@
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
@@ -4412,6 +4414,8 @@
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
@@ -4435,10 +4439,11 @@
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
@@ -81,20 +81,10 @@
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
@@ -130,7 +130,7 @@
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
@@ -143,7 +143,7 @@
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
@@ -160,8 +160,8 @@
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
@@ -626,11 +626,7 @@
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
@@ -1676,10 +1676,24 @@
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
@@ -41,7 +41,7 @@
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
@@ -1086,13 +1086,15 @@
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
@@ -15,7 +15,8 @@
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
@@ -96,6 +96,8 @@
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
@@ -159,7 +161,9 @@
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
@@ -122,6 +122,7 @@
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
@@ -61,6 +61,7 @@
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
@@ -117,6 +118,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
@@ -37,6 +37,7 @@
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
@@ -328,7 +328,14 @@
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