Changes of Revision 55

obs-studio.changes Changed
x
 
1
@@ -1,4 +1,37 @@
2
 -------------------------------------------------------------------
3
+Wed Feb 21 20:31:20 UTC 2018 - jimmy@boombatower.com
4
+
5
+- Update to version 21.0.3:
6
+  * libobs: Update to version 21.0.3 (mac update)
7
+  * libobs: Log YUV space/range on video reset
8
+  * obs-filters: Clear unused parameter warning
9
+  * libobs/util: Cache windows CPU frequency
10
+  * rtmp-services: Add SermonAudio to services list
11
+  * libobs-opengl: Log adapter and driver info
12
+  * obs-ffmpeg: Add speed percentage option
13
+  * deps/media-playback: Use a struct for media init data
14
+  * UI: Remove __FUNCTION__ usage
15
+  * UI: Import scene collection with correct filename
16
+  * obs-vst: Add layout to QMacCocoaViewContainer (update submodule)
17
+  * UI: Link Qt5::MacExtras
18
+  * obs-vst: Link Qt5::MacExtras (update submodule)
19
+  * libobs/media-io: Change speaker layout to match FFmpeg aac.
20
+  * CI: Include style plugins when packaging on OSX
21
+  * CI: Comment out OSX _obspython copy (not ready yet)
22
+  * deps/obs-scripting: Fix cur. script being NULL for script_tick
23
+  * deps/obs-scripting: Allow NULL script with script_log
24
+  * UI: Fix grayed out Copy option in sources context menu
25
+  * CI: Don't install python for OSX
26
+  * cmake: Fix LuaJIT search
27
+  * CI: Add rpath info to _obspython
28
+  * CI: Move obspython.so so it can be found in a .app
29
+  * CI: Update python rpath on osx
30
+  * CI: Make sure that lua can find obslua
31
+  * CI: Fetch RVM gpg key on osx
32
+  * CI: Fix a ruby issue on travis OSX
33
+  * CI: Update OSX deps build scripts
34
+
35
+-------------------------------------------------------------------
36
 Thu Jan 25 19:16:58 UTC 2018 - jimmy@boombatower.com
37
 
38
 - Update to version 21.0.2:
39
obs-studio.spec Changed
8
 
1
@@ -1,5 +1,5 @@
2
 Name:           obs-studio
3
-Version:        21.0.2
4
+Version:        21.0.3
5
 Release:        0
6
 Summary:        A recording/broadcasting program
7
 Group:          Productivity/Multimedia/Video/Editors and Convertors
8
_service Changed
10
 
1
@@ -1,7 +1,7 @@
2
 <services>
3
   <service name="tar_scm" mode="disabled">
4
     <param name="versionformat">@PARENT_TAG@</param>
5
-    <param name="revision">refs/tags/21.0.2</param>
6
+    <param name="revision">refs/tags/21.0.3</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
@@ -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">6ed55995048951cd36be8b1253de3f251ccb9d80</param>
6
+    <param name="changesrevision">90692c9791ed33648b40916fa353aa3f2df35f2f</param>
7
   </service>
8
 </servicedata>
9
obs-studio-21.0.2.tar.xz/CI/before-deploy-osx.sh -> obs-studio-21.0.3.tar.xz/CI/before-deploy-osx.sh Changed
17
 
1
@@ -19,6 +19,15 @@
2
 mv ./rundir/RelWithDebInfo/obs-plugins/CEF.app ./
3
 mv ./rundir/RelWithDebInfo/obs-plugins/obs-browser.so ./
4
 
5
+# Move obslua
6
+hr "Moving OBS LUA"
7
+mv ./rundir/RelWithDebInfo/data/obs-scripting/obslua.so ./rundir/RelWithDebInfo/bin/
8
+
9
+# Move obspython
10
+# hr "Moving OBS Python"
11
+# mv ./rundir/RelWithDebInfo/data/obs-scripting/_obspython.so ./rundir/RelWithDebInfo/bin/
12
+# mv ./rundir/RelWithDebInfo/data/obs-scripting/obspython.py ./rundir/RelWithDebInfo/bin/
13
+
14
 # Package everything into a nice .app
15
 hr "Packaging .app"
16
 STABLE=false
17
obs-studio-21.0.2.tar.xz/CI/before-script-osx.sh -> obs-studio-21.0.3.tar.xz/CI/before-script-osx.sh Changed
14
 
1
@@ -3,4 +3,9 @@
2
 
3
 mkdir build
4
 cd build
5
-cmake -DPYTHON_LIBRARY=/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/libpython3.6.dylib -DPYTHON_INCLUDE_DIR=/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/include/python3.6m -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 ..
6
\ No newline at end of file
7
+cmake -DENABLE_SPARKLE_UPDATER=ON \
8
+-DCMAKE_OSX_DEPLOYMENT_TARGET=10.10 \
9
+-DDepsPath=/tmp/obsdeps \
10
+-DVLCPath=$PWD/../../vlc-master \
11
+-DBUILD_BROWSER=ON \
12
+-DCEF_ROOT_DIR=$PWD/../../cef_binary_${CEF_BUILD_VERSION}_macosx64 ..
13
\ No newline at end of file
14
obs-studio-21.0.2.tar.xz/CI/install-dependencies-osx.sh -> obs-studio-21.0.3.tar.xz/CI/install-dependencies-osx.sh Changed
10
 
1
@@ -17,7 +17,7 @@
2
 brew update
3
 
4
 #Base OBS Deps and ccache
5
-brew install qt5 jack speexdsp ccache python3 swig luajit
6
+brew install qt5 jack speexdsp ccache swig
7
 
8
 export PATH=/usr/local/opt/ccache/libexec:$PATH
9
 ccache -s || echo "CCache is not available."
10
obs-studio-21.0.2.tar.xz/CI/install/osx/build_app.py -> obs-studio-21.0.3.tar.xz/CI/install/osx/build_app.py Changed
104
 
1
@@ -1,22 +1,22 @@
2
 #!/usr/bin/env python
3
- 
4
+
5
 candidate_paths = "bin obs-plugins data".split()
6
- 
7
+
8
 plist_path = "../cmake/osxbundle/Info.plist"
9
 icon_path = "../cmake/osxbundle/obs.icns"
10
 run_path = "../cmake/osxbundle/obslaunch.sh"
11
- 
12
+
13
 #not copied
14
 blacklist = """/usr /System""".split()
15
- 
16
+
17
 #copied
18
 whitelist = """/usr/local""".split()
19
- 
20
+
21
 #
22
 #
23
 #
24
- 
25
- 
26
+
27
+
28
 from sys import argv
29
 from glob import glob
30
 from subprocess import check_output, call
31
@@ -33,7 +33,7 @@
32
         raise ValueError('Need bool; got %r' % s)
33
     return {'true': True, 'false': False}[s.lower()]
34
 
35
-def add_boolean_argument(parser, name, default=False):                                                                                               
36
+def add_boolean_argument(parser, name, default=False):
37
     """Add a boolean argument to an ArgumentParser instance."""
38
     group = parser.add_mutually_exclusive_group()
39
     group.add_argument(
40
@@ -58,14 +58,14 @@
41
     return subprocess.check_output(shlex.split(cmd)).rstrip('\r\n')
42
 
43
 LibTarget = namedtuple("LibTarget", ("path", "external", "copy_as"))
44
- 
45
+
46
 inspect = list()
47
- 
48
+
49
 inspected = set()
50
- 
51
+
52
 build_path = args.dir
53
 build_path = build_path.replace("\\ ", " ")
54
- 
55
+
56
 def add(name, external=False, copy_as=None):
57
    if external and copy_as is None:
58
        copy_as = name.split("/")[-1]
59
@@ -93,7 +93,7 @@
60
            rel_path = path[len(build_path)+1:]
61
            print(repr(path), repr(rel_path))
62
            add(rel_path)
63
- 
64
+
65
 def add_plugins(path, replace):
66
    for img in glob(path.replace(
67
        "lib/QtCore.framework/Versions/5/QtCore",
68
@@ -114,13 +114,14 @@
69
        continue
70
    out = check_output("{0}otool -L '{1}'".format(args.prefix, path), shell=True,
71
            universal_newlines=True)
72
- 
73
+
74
    if "QtCore" in path:
75
        add_plugins(path, "platforms")
76
        add_plugins(path, "imageformats")
77
        add_plugins(path, "accessible")
78
- 
79
- 
80
+       add_plugins(path, "styles")
81
+
82
+
83
    for line in out.split("\n")[1:]:
84
        new = line.strip().split(" (")[0]
85
        if '@' in new and "sparkle.framework" in new.lower():
86
@@ -197,6 +198,8 @@
87
    filename = path
88
    rpath = ""
89
    if external:
90
+       if copy_as == "Python":
91
+           continue
92
        id_ = "-id '@rpath/%s'"%copy_as
93
        filename = prefix + "bin/" +copy_as
94
        rpath = "-add_rpath @loader_path/ -add_rpath @executable_path/"
95
@@ -214,7 +217,7 @@
96
            print(filename)
97
            rpath = "-add_rpath '@loader_path/{}/'".format(ospath.relpath("bin/", ospath.dirname(filename)))
98
        filename = prefix + filename
99
- 
100
+
101
    cmd = "{0}install_name_tool {1} {2} {3} '{4}'".format(args.prefix, changes, id_, rpath, filename)
102
    call(cmd, shell=True)
103
 
104
obs-studio-21.0.2.tar.xz/CI/util/build-package-deps-osx.sh -> obs-studio-21.0.3.tar.xz/CI/util/build-package-deps-osx.sh Changed
57
 
1
@@ -1,5 +1,15 @@
2
 #!/usr/bin/env bash
3
 
4
+exists()
5
+{
6
+  command -v "$1" >/dev/null 2>&1
7
+}
8
+
9
+if ! exists nasm; then
10
+    echo "nasm not found. Try brew install nasm"
11
+    exit
12
+fi
13
+
14
 CURDIR=$(pwd)
15
 
16
 # the temp directory
17
@@ -22,6 +32,7 @@
18
 mkdir $DEPS_DEST
19
 mkdir $DEPS_DEST/bin
20
 mkdir $DEPS_DEST/include
21
+mkdir $DEPS_DEST/lib
22
 
23
 # OSX COMPAT
24
 export MACOSX_DEPLOYMENT_TARGET=10.9
25
@@ -80,6 +91,7 @@
26
 # x264
27
 git clone git://git.videolan.org/x264.git
28
 cd ./x264
29
+git checkout origin/stable
30
 mkdir build
31
 cd ./build
32
 ../configure --extra-ldflags="-mmacosx-version-min=10.9" --enable-static --prefix="/tmp/obsdeps"
33
@@ -117,12 +129,22 @@
34
 cd ./FFmpeg-n3.2.2
35
 mkdir build
36
 cd ./build
37
-../configure --extra-ldflags="-mmacosx-version-min=10.9" --enable-shared --disable-static --shlibdir="/tmp/obsdeps/bin" --enable-gpl --disable-doc --enable-libx264 --enable-libopus --enable-libvorbis --enable-libvpx
38
+../configure --extra-ldflags="-mmacosx-version-min=10.9" --enable-shared --disable-static --shlibdir="/tmp/obsdeps/bin" --enable-gpl --disable-doc --enable-libx264 --enable-libopus --enable-libvorbis --enable-libvpx --disable-outdev=sdl
39
 make -j 12
40
 find . -name \*.dylib -exec cp \{\} $DEPS_DEST/bin/ \;
41
 rsync -avh --include="*/" --include="*.h" --exclude="*" ../* $DEPS_DEST/include/
42
 rsync -avh --include="*/" --include="*.h" --exclude="*" ./* $DEPS_DEST/include/
43
 
44
+#luajit
45
+curl -L -O https://luajit.org/download/LuaJIT-2.0.5.tar.gz
46
+tar -xf LuaJIT-2.0.5.tar.gz
47
+cd LuaJIT-2.0.5
48
+make PREFIX=/tmp/obsdeps
49
+make PREFIX=/tmp/obsdeps install
50
+find /tmp/obsdeps/lib -name libluajit\*.dylib -exec cp \{\} $DEPS_DEST/lib/ \;
51
+rsync -avh --include="*/" --include="*.h" --exclude="*" src/* $DEPS_DEST/include/
52
+make PREFIX=/tmp/obsdeps uninstall
53
+
54
 cd $WORK_DIR
55
 
56
 tar -czf osx-deps.tar.gz obsdeps
57
obs-studio-21.0.2.tar.xz/UI/CMakeLists.txt -> obs-studio-21.0.3.tar.xz/UI/CMakeLists.txt Changed
28
 
1
@@ -37,6 +37,10 @@
2
 find_package(Qt5Widgets ${FIND_MODE})
3
 find_package(FFmpeg REQUIRED COMPONENTS avcodec avutil avformat)
4
 
5
+if(APPLE)
6
+   find_package(Qt5MacExtras REQUIRED)
7
+endif(APPLE)
8
+
9
 if(NOT Qt5Widgets_FOUND)
10
    if (ENABLE_UI)
11
        message(FATAL_ERROR "Failed to find Qt5")
12
@@ -271,12 +275,14 @@
13
    ${obs_PLATFORM_LIBRARIES})
14
 
15
 if (APPLE)
16
+   target_link_libraries(obs
17
+           Qt5::MacExtras)
18
    set_target_properties(obs PROPERTIES LINK_FLAGS "-pagezero_size 10000 -image_base 100000000")
19
    set_property(
20
        TARGET obs
21
        APPEND
22
        PROPERTY INSTALL_RPATH
23
-       "/usr/local/Cellar/python3/3.6.4/Frameworks/Python.framework/Versions/3.6/lib/"
24
+       "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
25
        "/Library/Frameworks/Python.framework/Versions/3.6/lib/"
26
        "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
27
    )
28
obs-studio-21.0.2.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-21.0.3.tar.xz/UI/forms/OBSBasic.ui Changed
13
 
1
@@ -182,10 +182,7 @@
2
      <addaction name="actionScaleCanvas"/>
3
      <addaction name="actionScaleOutput"/>
4
     </widget>
5
-    <action name="actionCopySource">
6
-     <property name="enabled">
7
-      <bool>false</bool>
8
-     </property>
9
+    <action name="actionCopySource">    
10
      <property name="text">
11
       <string>Copy</string>
12
      </property>
13
obs-studio-21.0.2.tar.xz/UI/frontend-plugins/frontend-tools/scripts.cpp -> obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/scripts.cpp Changed
19
 
1
@@ -494,9 +494,14 @@
2
        const char *message)
3
 {
4
    QString qmsg;
5
-   qmsg = QStringLiteral("[%1] %2").arg(
6
-           obs_script_get_file(script),
7
-           message);
8
+
9
+   if (script) {
10
+       qmsg = QStringLiteral("[%1] %2").arg(
11
+               obs_script_get_file(script),
12
+               message);
13
+   } else {
14
+       qmsg = QStringLiteral("[Unknown Script] %1").arg(message);
15
+   }
16
 
17
    QMetaObject::invokeMethod(scriptLogWindow, "AddLogMsg",
18
            Q_ARG(int, log_level),
19
obs-studio-21.0.2.tar.xz/UI/window-basic-main-scene-collections.cpp -> obs-studio-21.0.3.tar.xz/UI/window-basic-main-scene-collections.cpp Changed
78
 
1
@@ -372,7 +372,7 @@
2
 {
3
    char path[512];
4
 
5
-   QString home = QDir::homePath();
6
+   QString qhome = QDir::homePath();
7
 
8
    int ret = GetConfigPath(path, 512, "obs-studio/basic/scenes/");
9
    if (ret <= 0) {
10
@@ -380,25 +380,53 @@
11
        return;
12
    }
13
 
14
-   QString file = QFileDialog::getOpenFileName(
15
+   QString qfilePath = QFileDialog::getOpenFileName(
16
            this,
17
            QTStr("Basic.MainMenu.SceneCollection.Import"),
18
-           home,
19
+           qhome,
20
            "JSON Files (*.json)");
21
 
22
-   QFileInfo finfo(file);
23
-   QString filename = finfo.fileName();
24
-   QFileInfo destinfo(path + filename);
25
-
26
-   if (!file.isEmpty() && !file.isNull()) {
27
-        if (!destinfo.exists()) {
28
-           QFile::copy(file, path + filename);
29
-           RefreshSceneCollections();
30
-       } else {
31
-           OBSMessageBox::information(this,
32
-               QTStr("Basic.MainMenu.SceneCollection.Import"),
33
-               QTStr("Basic.MainMenu.SceneCollection.Exists"));
34
+   QFileInfo finfo(qfilePath);
35
+   QString qfilename = finfo.fileName();
36
+   QString qpath = QT_UTF8(path);
37
+   QFileInfo destinfo(QT_UTF8(path) + qfilename);
38
+
39
+   if (!qfilePath.isEmpty() && !qfilePath.isNull()) {
40
+       string absPath = QT_TO_UTF8(finfo.absoluteFilePath());
41
+       OBSData scenedata =
42
+           obs_data_create_from_json_file(absPath.c_str());
43
+       obs_data_release(scenedata);
44
+
45
+       string origName = obs_data_get_string(scenedata, "name");
46
+       string name = origName;
47
+       string file;
48
+       int inc = 1;
49
+
50
+       while (SceneCollectionExists(name.c_str())) {
51
+           name = origName + " (" + to_string(++inc) + ")";
52
        }
53
+
54
+       obs_data_set_string(scenedata, "name", name.c_str());
55
+
56
+       if (!GetFileSafeName(name.c_str(), file)) {
57
+           blog(LOG_WARNING, "Failed to create "
58
+                   "safe file name for '%s'",
59
+                   name.c_str());
60
+           return;
61
+       }
62
+
63
+       string filePath = path + file;
64
+
65
+       if (!GetClosestUnusedFileName(filePath, "json")) {
66
+           blog(LOG_WARNING, "Failed to get "
67
+                   "closest file name for %s",
68
+                   file.c_str());
69
+           return;
70
+       }
71
+
72
+       obs_data_save_json_safe(scenedata, filePath.c_str(),
73
+               "tmp", "bak");
74
+       RefreshSceneCollections();
75
    }
76
 }
77
 
78
obs-studio-21.0.2.tar.xz/UI/window-basic-main.cpp -> obs-studio-21.0.3.tar.xz/UI/window-basic-main.cpp Changed
34
 
1
@@ -2858,8 +2858,6 @@
2
    QMetaObject::invokeMethod(window, "SelectSceneItem",
3
            Q_ARG(OBSScene, scene), Q_ARG(OBSSceneItem, item),
4
            Q_ARG(bool, true));
5
-
6
-   window->ui->actionCopySource->setEnabled(true);
7
 }
8
 
9
 void OBSBasic::SceneItemDeselected(void *data, calldata_t *params)
10
@@ -2873,7 +2871,6 @@
11
            Q_ARG(OBSScene, scene), Q_ARG(OBSSceneItem, item),
12
            Q_ARG(bool, false));
13
 
14
-   window->ui->actionCopySource->setEnabled(false);
15
 }
16
 
17
 void OBSBasic::SourceLoaded(void *data, obs_source_t *source)
18
@@ -3891,6 +3888,7 @@
19
        popup.addMenu(addSourceMenu);
20
 
21
    ui->actionCopyFilters->setEnabled(false);
22
+   ui->actionCopySource->setEnabled(false);
23
 
24
    popup.addSeparator();
25
    popup.addAction(ui->actionCopySource);
26
@@ -3969,6 +3967,7 @@
27
                SLOT(on_actionSourceProperties_triggered()));
28
 
29
        ui->actionCopyFilters->setEnabled(true);
30
+       ui->actionCopySource->setEnabled(true);
31
    }
32
 
33
    popup.exec(QCursor::pos());
34
obs-studio-21.0.2.tar.xz/cmake/Modules/FindLuajit.cmake -> obs-studio-21.0.3.tar.xz/cmake/Modules/FindLuajit.cmake Changed
10
 
1
@@ -15,7 +15,7 @@
2
 ENDIF()
3
 
4
 FIND_PATH(LUAJIT_INCLUDE_DIR
5
-   NAMES lua.h
6
+   NAMES lua.h lualib.h
7
    HINTS
8
        ENV LuajitPath${_LIB_SUFFIX}
9
        ENV LuajitPath
10
obs-studio-21.0.2.tar.xz/deps/media-playback/media-playback/decode.c -> obs-studio-21.0.3.tar.xz/deps/media-playback/media-playback/decode.c Changed
17
 
1
@@ -338,6 +338,15 @@
2
                    d->stream->time_base,
3
                    (AVRational){1, 1000000000});
4
 
5
+       if (d->m->speed != 100) {
6
+           d->frame_pts = av_rescale_q(d->frame_pts,
7
+                   (AVRational){1, d->m->speed},
8
+                   (AVRational){1, 100});
9
+           duration = av_rescale_q(duration,
10
+                   (AVRational){1, d->m->speed},
11
+                   (AVRational){1, 100});
12
+       }
13
+
14
        d->last_duration = duration;
15
        d->next_pts = d->frame_pts + duration;
16
    }
17
obs-studio-21.0.2.tar.xz/deps/media-playback/media-playback/media.c -> obs-studio-21.0.3.tar.xz/deps/media-playback/media-playback/media.c Changed
86
 
1
@@ -271,7 +271,7 @@
2
    for (size_t i = 0; i < MAX_AV_PLANES; i++)
3
        audio.data[i] = f->data[i];
4
 
5
-   audio.samples_per_sec = f->sample_rate;
6
+   audio.samples_per_sec = f->sample_rate * m->speed / 100;
7
    audio.speakers = convert_speaker_layout(f->channels);
8
    audio.format = convert_sample_format(f->format);
9
    audio.frames = f->nb_samples;
10
@@ -652,9 +652,7 @@
11
 }
12
 
13
 static inline bool mp_media_init_internal(mp_media_t *m,
14
-       const char *path,
15
-       const char *format_name,
16
-       bool hw)
17
+       const struct mp_media_info *info)
18
 {
19
    if (pthread_mutex_init(&m->mutex, NULL) != 0) {
20
        blog(LOG_WARNING, "MP: Failed to init mutex");
21
@@ -665,9 +663,9 @@
22
        return false;
23
    }
24
 
25
-   m->path = path ? bstrdup(path) : NULL;
26
-   m->format_name = format_name ? bstrdup(format_name) : NULL;
27
-   m->hw = hw;
28
+   m->path = info->path ? bstrdup(info->path) : NULL;
29
+   m->format_name = info->format ? bstrdup(info->format) : NULL;
30
+   m->hw = info->hardware_decoding;
31
 
32
    if (pthread_create(&m->thread, NULL, mp_media_thread_start, m) != 0) {
33
        blog(LOG_WARNING, "MP: Could not create media thread");
34
@@ -678,29 +676,22 @@
35
    return true;
36
 }
37
 
38
-bool mp_media_init(mp_media_t *media,
39
-       const char *path,
40
-       const char *format,
41
-       int buffering,
42
-       void *opaque,
43
-       mp_video_cb v_cb,
44
-       mp_audio_cb a_cb,
45
-       mp_stop_cb stop_cb,
46
-       mp_video_cb v_preload_cb,
47
-       bool hw_decoding,
48
-       bool is_local_file,
49
-       enum video_range_type force_range)
50
+bool mp_media_init(mp_media_t *media, const struct mp_media_info *info)
51
 {
52
    memset(media, 0, sizeof(*media));
53
    pthread_mutex_init_value(&media->mutex);
54
-   media->opaque = opaque;
55
-   media->v_cb = v_cb;
56
-   media->a_cb = a_cb;
57
-   media->stop_cb = stop_cb;
58
-   media->v_preload_cb = v_preload_cb;
59
-   media->force_range = force_range;
60
-   media->buffering = buffering;
61
-   media->is_local_file = is_local_file;
62
+   media->opaque = info->opaque;
63
+   media->v_cb = info->v_cb;
64
+   media->a_cb = info->a_cb;
65
+   media->stop_cb = info->stop_cb;
66
+   media->v_preload_cb = info->v_preload_cb;
67
+   media->force_range = info->force_range;
68
+   media->buffering = info->buffering;
69
+   media->speed = info->speed;
70
+   media->is_local_file = info->is_local_file;
71
+
72
+   if (!info->is_local_file || media->speed < 1 || media->speed > 200)
73
+       media->speed = 100;
74
 
75
    static bool initialized = false;
76
    if (!initialized) {
77
@@ -714,7 +705,7 @@
78
    if (!base_sys_ts)
79
        base_sys_ts = (int64_t)os_gettime_ns();
80
 
81
-   if (!mp_media_init_internal(media, path, format, hw_decoding)) {
82
+   if (!mp_media_init_internal(media, info)) {
83
        mp_media_free(media);
84
        return false;
85
    }
86
obs-studio-21.0.2.tar.xz/deps/media-playback/media-playback/media.h -> obs-studio-21.0.3.tar.xz/deps/media-playback/media-playback/media.h Changed
46
 
1
@@ -54,6 +54,7 @@
2
    char *path;
3
    char *format_name;
4
    int buffering;
5
+   int speed;
6
 
7
    enum AVPixelFormat scale_format;
8
    struct SwsContext *swscale;
9
@@ -96,18 +97,24 @@
10
 
11
 typedef struct mp_media mp_media_t;
12
 
13
-extern bool mp_media_init(mp_media_t *media,
14
-       const char *path,
15
-       const char *format,
16
-       int buffering,
17
-       void *opaque,
18
-       mp_video_cb v_cb,
19
-       mp_audio_cb a_cb,
20
-       mp_stop_cb stop_cb,
21
-       mp_video_cb v_preload_cb,
22
-       bool hardware_decoding,
23
-       bool is_local_file,
24
-       enum video_range_type force_range);
25
+struct mp_media_info {
26
+   void *opaque;
27
+
28
+   mp_video_cb v_cb;
29
+   mp_video_cb v_preload_cb;
30
+   mp_audio_cb a_cb;
31
+   mp_stop_cb stop_cb;
32
+
33
+   const char *path;
34
+   const char *format;
35
+   int buffering;
36
+   int speed;
37
+   enum video_range_type force_range;
38
+   bool hardware_decoding;
39
+   bool is_local_file;
40
+};
41
+
42
+extern bool mp_media_init(mp_media_t *media, const struct mp_media_info *info);
43
 extern void mp_media_free(mp_media_t *media);
44
 
45
 extern void mp_media_play(mp_media_t *media, bool loop);
46
obs-studio-21.0.2.tar.xz/deps/obs-scripting/obs-scripting-logging.c -> obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting-logging.c Changed
27
 
1
@@ -28,14 +28,19 @@
2
    const char *lang = "(Unknown)";
3
    size_t start_len;
4
 
5
-   switch (script->type) {
6
-   case OBS_SCRIPT_LANG_UNKNOWN: lang = "(Unknown language)"; break;
7
-   case OBS_SCRIPT_LANG_LUA:     lang = "Lua"; break;
8
-   case OBS_SCRIPT_LANG_PYTHON:  lang = "Python"; break;
9
+   if (script) {
10
+       switch (script->type) {
11
+       case OBS_SCRIPT_LANG_UNKNOWN: lang = "(Unknown language)"; break;
12
+       case OBS_SCRIPT_LANG_LUA:     lang = "Lua"; break;
13
+       case OBS_SCRIPT_LANG_PYTHON:  lang = "Python"; break;
14
+       }
15
+
16
+       start_len = snprintf(msg, sizeof(msg), "[%s: %s] ",
17
+               lang, script->file.array);
18
+   } else {
19
+       start_len = snprintf(msg, sizeof(msg), "[Unknown Script] ");
20
    }
21
 
22
-   start_len = snprintf(msg, sizeof(msg), "[%s: %s] ",
23
-           lang, script->file.array);
24
    vsnprintf(msg + start_len, sizeof(msg) - start_len, format, args);
25
 
26
    if (callback)
27
obs-studio-21.0.2.tar.xz/deps/obs-scripting/obs-scripting-lua.c -> obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting-lua.c Changed
17
 
1
@@ -1023,6 +1023,7 @@
2
    data = first_tick_script;
3
    while (data) {
4
        lua_State *script = data->script;
5
+       current_lua_script = data;
6
 
7
        pthread_mutex_lock(&data->mutex);
8
 
9
@@ -1033,6 +1034,7 @@
10
 
11
        data = data->next_tick;
12
    }
13
+   current_lua_script = NULL;
14
    pthread_mutex_unlock(&tick_mutex);
15
 
16
    /* --------------------------------- */
17
obs-studio-21.0.2.tar.xz/deps/obs-scripting/obs-scripting-python.c -> obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting-python.c Changed
14
 
1
@@ -1193,7 +1193,11 @@
2
 
3
    while (endl) {
4
        *endl = 0;
5
-       script_log(&cur_python_script->base, log_level, "%s", start);
6
+       if (cur_python_script)
7
+           script_log(&cur_python_script->base, log_level, "%s",
8
+                   start);
9
+       else
10
+           script_log(NULL, log_level, "%s", start);
11
        *endl = '\n';
12
 
13
        start = endl + 1;
14
obs-studio-21.0.2.tar.xz/deps/obs-scripting/obspython/CMakeLists.txt -> obs-studio-21.0.3.tar.xz/deps/obs-scripting/obspython/CMakeLists.txt Changed
19
 
1
@@ -45,6 +45,17 @@
2
    set_target_properties(${additional_target} PROPERTIES
3
        PREFIX "")
4
 
5
+   if (APPLE)
6
+       set_property(
7
+               TARGET ${additional_target}
8
+               APPEND
9
+               PROPERTY INSTALL_RPATH
10
+               "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/"
11
+               "/Library/Frameworks/Python.framework/Versions/3.6/lib/"
12
+               "/opt/local/Library/Frameworks/Python.framework/Versions/3.6/lib/"
13
+       )
14
+   endif()
15
+
16
    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/obspython.py"
17
        DESTINATION "${OBS_SCRIPT_PLUGIN_DESTINATION}")
18
    install(TARGETS "${additional_target}"
19
obs-studio-21.0.2.tar.xz/libobs-opengl/gl-subsystem.c -> obs-studio-21.0.3.tar.xz/libobs-opengl/gl-subsystem.c Changed
28
 
1
@@ -214,13 +214,24 @@
2
    if (!device->plat)
3
        goto fail;
4
 
5
+   const char *glVendor = (const char *)glGetString(GL_VENDOR);
6
+   const char *glRenderer = (const char *)glGetString(GL_RENDERER);
7
+
8
+   blog(LOG_INFO, "Loading up OpenGL on adapter %s %s", glVendor,
9
+           glRenderer);
10
+
11
    if (!gl_init_extensions(device)) {
12
        errorcode = GS_ERROR_NOT_SUPPORTED;
13
        goto fail;
14
    }
15
 
16
-   blog(LOG_INFO, "OpenGL version: %s", glGetString(GL_VERSION));
17
-   
18
+   const char *glVersion = (const char *)glGetString(GL_VERSION);
19
+   const char *glShadingLanguage = (const char *)glGetString(
20
+           GL_SHADING_LANGUAGE_VERSION);
21
+
22
+   blog(LOG_INFO, "OpenGL loaded successfully, version %s, shading "
23
+           "language %s", glVersion, glShadingLanguage);
24
+
25
    gl_enable(GL_CULL_FACE);
26
    
27
    device_leave_context(device);
28
obs-studio-21.0.2.tar.xz/libobs/media-io/audio-resampler-ffmpeg.c -> obs-studio-21.0.3.tar.xz/libobs/media-io/audio-resampler-ffmpeg.c Changed
14
 
1
@@ -63,10 +63,10 @@
2
    case SPEAKERS_UNKNOWN:          return 0;
3
    case SPEAKERS_MONO:             return AV_CH_LAYOUT_MONO;
4
    case SPEAKERS_STEREO:           return AV_CH_LAYOUT_STEREO;
5
-   case SPEAKERS_2POINT1:          return AV_CH_LAYOUT_2_1;
6
+   case SPEAKERS_2POINT1:          return AV_CH_LAYOUT_SURROUND;
7
    case SPEAKERS_4POINT0:          return AV_CH_LAYOUT_4POINT0;
8
    case SPEAKERS_4POINT1:          return AV_CH_LAYOUT_4POINT1;
9
-   case SPEAKERS_5POINT1:          return AV_CH_LAYOUT_5POINT1;
10
+   case SPEAKERS_5POINT1:          return AV_CH_LAYOUT_5POINT1_BACK;
11
    case SPEAKERS_7POINT1:          return AV_CH_LAYOUT_7POINT1;
12
    }
13
 
14
obs-studio-21.0.2.tar.xz/libobs/media-io/video-io.h -> obs-studio-21.0.3.tar.xz/libobs/media-io/video-io.h Changed
30
 
1
@@ -124,6 +124,28 @@
2
    return "None";
3
 }
4
 
5
+static inline const char *get_video_colorspace_name(enum video_colorspace cs)
6
+{
7
+   switch (cs) {
8
+   case VIDEO_CS_709: return "709";
9
+   case VIDEO_CS_601:
10
+   case VIDEO_CS_DEFAULT:;
11
+   }
12
+
13
+   return "601";
14
+}
15
+
16
+static inline const char *get_video_range_name(enum video_range_type range)
17
+{
18
+   switch (range) {
19
+   case VIDEO_RANGE_FULL: return "Full";
20
+   case VIDEO_RANGE_PARTIAL:
21
+   case VIDEO_RANGE_DEFAULT:;
22
+   }
23
+
24
+   return "Partial";
25
+}
26
+
27
 enum video_scale_type {
28
    VIDEO_SCALE_DEFAULT,
29
    VIDEO_SCALE_POINT,
30
obs-studio-21.0.2.tar.xz/libobs/obs-config.h -> obs-studio-21.0.3.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  2
6
+#define LIBOBS_API_PATCH_VER  3
7
 
8
 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \
9
                              ((major << 24) | \
10
obs-studio-21.0.2.tar.xz/libobs/obs.c -> obs-studio-21.0.3.tar.xz/libobs/obs.c Changed
30
 
1
@@ -974,18 +974,26 @@
2
        break;
3
    }
4
 
5
+   bool yuv = format_is_yuv(ovi->output_format);
6
+   const char *yuv_format = get_video_colorspace_name(ovi->colorspace);
7
+   const char *yuv_range = get_video_range_name(ovi->range);
8
+
9
    blog(LOG_INFO, "---------------------------------");
10
    blog(LOG_INFO, "video settings reset:\n"
11
                   "\tbase resolution:   %dx%d\n"
12
                   "\toutput resolution: %dx%d\n"
13
                   "\tdownscale filter:  %s\n"
14
                   "\tfps:               %d/%d\n"
15
-                  "\tformat:            %s",
16
+                  "\tformat:            %s\n"
17
+                  "\tYUV mode:          %s%s%s",
18
                   ovi->base_width, ovi->base_height,
19
                   ovi->output_width, ovi->output_height,
20
                   scale_type_name,
21
                   ovi->fps_num, ovi->fps_den,
22
-              get_video_format_name(ovi->output_format));
23
+                  get_video_format_name(ovi->output_format),
24
+                  yuv ? yuv_format : "None",
25
+              yuv ? "/" : "",
26
+                  yuv ? yuv_range : "");
27
 
28
    return obs_init_video(ovi);
29
 }
30
obs-studio-21.0.2.tar.xz/libobs/util/platform-windows.c -> obs-studio-21.0.3.tar.xz/libobs/util/platform-windows.c Changed
14
 
1
@@ -37,8 +37,11 @@
2
 
3
 static inline uint64_t get_clockfreq(void)
4
 {
5
-   if (!have_clockfreq)
6
+   if (!have_clockfreq) {
7
        QueryPerformanceFrequency(&clock_freq);
8
+       have_clockfreq = true;
9
+   }
10
+
11
    return clock_freq.QuadPart;
12
 }
13
 
14
obs-studio-21.0.2.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini -> obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini Changed
9
 
1
@@ -36,6 +36,7 @@
2
 ColorRange.Partial="Partial"
3
 ColorRange.Full="Full"
4
 RestartMedia="Restart Media"
5
+SpeedPercentage="Speed (perecent)"
6
 Seekable="Seekable"
7
 
8
 MediaFileFilter.AllMediaFiles="All Media Files"
9
obs-studio-21.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c -> obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c Changed
27
 
1
@@ -62,10 +62,10 @@
2
    case SPEAKERS_UNKNOWN:          return 0;
3
    case SPEAKERS_MONO:             return AV_CH_LAYOUT_MONO;
4
    case SPEAKERS_STEREO:           return AV_CH_LAYOUT_STEREO;
5
-   case SPEAKERS_2POINT1:          return AV_CH_LAYOUT_2_1;
6
+   case SPEAKERS_2POINT1:          return AV_CH_LAYOUT_SURROUND;
7
    case SPEAKERS_4POINT0:          return AV_CH_LAYOUT_4POINT0;
8
    case SPEAKERS_4POINT1:          return AV_CH_LAYOUT_4POINT1;
9
-   case SPEAKERS_5POINT1:          return AV_CH_LAYOUT_5POINT1;
10
+   case SPEAKERS_5POINT1:          return AV_CH_LAYOUT_5POINT1_BACK;
11
    case SPEAKERS_7POINT1:          return AV_CH_LAYOUT_7POINT1;
12
    }
13
 
14
@@ -78,10 +78,10 @@
15
    switch (channel_layout) {
16
    case AV_CH_LAYOUT_MONO:              return SPEAKERS_MONO;
17
    case AV_CH_LAYOUT_STEREO:            return SPEAKERS_STEREO;
18
-   case AV_CH_LAYOUT_2_1:               return SPEAKERS_2POINT1;
19
+   case AV_CH_LAYOUT_SURROUND:          return SPEAKERS_2POINT1;
20
    case AV_CH_LAYOUT_4POINT0:           return SPEAKERS_4POINT0;
21
    case AV_CH_LAYOUT_4POINT1:           return SPEAKERS_4POINT1;
22
-   case AV_CH_LAYOUT_5POINT1:           return SPEAKERS_5POINT1;
23
+   case AV_CH_LAYOUT_5POINT1_BACK:      return SPEAKERS_5POINT1;
24
    case AV_CH_LAYOUT_7POINT1:           return SPEAKERS_7POINT1;
25
    }
26
 
27
obs-studio-21.0.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c -> obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-source.c Changed
106
 
1
@@ -49,6 +49,7 @@
2
    char *input;
3
    char *input_format;
4
    int buffering_mb;
5
+   int speed_percent;
6
    bool is_looping;
7
    bool is_local_file;
8
    bool is_hw_decoding;
9
@@ -72,12 +73,14 @@
10
    obs_property_t *buffering = obs_properties_get(props, "buffering_mb");
11
    obs_property_t *close = obs_properties_get(props, "close_when_inactive");
12
    obs_property_t *seekable = obs_properties_get(props, "seekable");
13
+   obs_property_t *speed = obs_properties_get(props, "speed_percent");
14
    obs_property_set_visible(input, !enabled);
15
    obs_property_set_visible(input_format, !enabled);
16
    obs_property_set_visible(buffering, !enabled);
17
    obs_property_set_visible(close, enabled);
18
    obs_property_set_visible(local_file, enabled);
19
    obs_property_set_visible(looping, enabled);
20
+   obs_property_set_visible(speed, enabled);
21
    obs_property_set_visible(seekable, !enabled);
22
 
23
    return true;
24
@@ -93,6 +96,7 @@
25
    obs_data_set_default_bool(settings, "hw_decode", true);
26
 #endif
27
    obs_data_set_default_int(settings, "buffering_mb", 2);
28
+   obs_data_set_default_int(settings, "speed_percent", 100);
29
 }
30
 
31
 static const char *media_filter =
32
@@ -171,6 +175,9 @@
33
    obs_property_set_long_description(prop,
34
            obs_module_text("CloseFileWhenInactive.ToolTip"));
35
 
36
+   obs_properties_add_int_slider(props, "speed_percent",
37
+           obs_module_text("SpeedPercentage"), 1, 200, 1);
38
+
39
    prop = obs_properties_add_list(props, "color_range",
40
            obs_module_text("ColorRange"), OBS_COMBO_TYPE_LIST,
41
            OBS_COMBO_FORMAT_INT);
42
@@ -193,6 +200,7 @@
43
            "settings:\n"
44
            "\tinput:                   %s\n"
45
            "\tinput_format:            %s\n"
46
+           "\tspeed:                   %d\n"
47
            "\tis_looping:              %s\n"
48
            "\tis_hw_decoding:          %s\n"
49
            "\tis_clear_on_media_end:   %s\n"
50
@@ -200,6 +208,7 @@
51
            "\tclose_when_inactive:     %s",
52
            input ? input : "(null)",
53
            input_format ? input_format : "(null)",
54
+           s->speed_percent,
55
            s->is_looping ? "yes" : "no",
56
            s->is_hw_decoding ? "yes" : "no",
57
            s->is_clear_on_media_end ? "yes" : "no",
58
@@ -241,15 +250,24 @@
59
 
60
 static void ffmpeg_source_open(struct ffmpeg_source *s)
61
 {
62
-   if (s->input && *s->input)
63
-       s->media_valid = mp_media_init(&s->media,
64
-               s->input, s->input_format,
65
-               s->buffering_mb * 1024 * 1024,
66
-               s, get_frame, get_audio, media_stopped,
67
-               preload_frame,
68
-               s->is_hw_decoding,
69
-               s->is_local_file || s->seekable,
70
-               s->range);
71
+   if (s->input && *s->input) {
72
+       struct mp_media_info info = {
73
+           .opaque = s,
74
+           .v_cb = get_frame,
75
+           .v_preload_cb = preload_frame,
76
+           .a_cb = get_audio,
77
+           .stop_cb = media_stopped,
78
+           .path = s->input,
79
+           .format = s->input_format,
80
+           .buffering = s->buffering_mb * 1024 * 1024,
81
+           .speed = s->speed_percent,
82
+           .force_range = s->range,
83
+           .hardware_decoding = s->is_hw_decoding,
84
+           .is_local_file = s->is_local_file || s->seekable
85
+       };
86
+
87
+       s->media_valid = mp_media_init(&s->media, &info);
88
+   }
89
 }
90
 
91
 static void ffmpeg_source_tick(void *data, float seconds)
92
@@ -320,9 +338,13 @@
93
    s->range = (enum video_range_type)obs_data_get_int(settings,
94
            "color_range");
95
    s->buffering_mb = (int)obs_data_get_int(settings, "buffering_mb");
96
+   s->speed_percent = (int)obs_data_get_int(settings, "speed_percent");
97
    s->is_local_file = is_local_file;
98
    s->seekable = obs_data_get_bool(settings, "seekable");
99
 
100
+   if (s->speed_percent < 1 || s->speed_percent > 200)
101
+       s->speed_percent = 100;
102
+
103
    if (s->media_valid) {
104
        mp_media_free(&s->media);
105
        s->media_valid = false;
106
obs-studio-21.0.2.tar.xz/plugins/obs-filters/compressor-filter.c -> obs-studio-21.0.3.tar.xz/plugins/obs-filters/compressor-filter.c Changed
10
 
1
@@ -432,6 +432,8 @@
2
 
3
        bfree(new_name);
4
    }
5
+
6
+   UNUSED_PARAMETER(seconds);
7
 }
8
 
9
 static struct obs_audio_data *compressor_filter_audio(void *data,
10
obs-studio-21.0.2.tar.xz/plugins/obs-vst/CMakeLists.txt -> obs-studio-21.0.3.tar.xz/plugins/obs-vst/CMakeLists.txt Changed
22
 
1
@@ -9,6 +9,10 @@
2
 
3
 find_package(Qt5Widgets REQUIRED)
4
 
5
+if(APPLE)
6
+   find_package(Qt5MacExtras REQUIRED)
7
+endif(APPLE)
8
+
9
 option(VST_USE_BUNDLED_HEADERS "Build with Bundled Headers" ON)
10
 
11
 if(VST_USE_BUNDLED_HEADERS)
12
@@ -71,7 +75,8 @@
13
 if(APPLE)
14
    target_link_libraries(obs-vst
15
        ${COCOA_FRAMEWORK}
16
-       ${FOUNDATION_FRAMEWORK})
17
+       ${FOUNDATION_FRAMEWORK}
18
+       Qt5::MacExtras)
19
 endif(APPLE)
20
 
21
 install_obs_plugin_with_data(obs-vst data)
22
obs-studio-21.0.3.tar.xz/plugins/obs-vst/data/locale/el-GR.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Άνοιγμα διεπαφής Plug-in"
3
+ClosePluginInterface="Κλείσιμο διεπαφής Plug-in"
4
+VstPlugin="VST 2.x Plug-in"
5
+OpenInterfaceWhenActive="Άνοιγμα διεπαφής όταν είναι ενεργό"
6
obs-studio-21.0.3.tar.xz/plugins/obs-vst/data/locale/nb-NO.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Åpne utvidelsesgrensesnittet"
3
+ClosePluginInterface="Lukk utvidelsesgrensesnittet"
4
+VstPlugin="VST 2.x-utvidelse"
5
+OpenInterfaceWhenActive="Åpne grensesnittet når den er aktiv"
6
obs-studio-21.0.3.tar.xz/plugins/obs-vst/data/locale/sk-SK.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Otvoriť rozhranie Plug-inu"
3
+ClosePluginInterface="Zavrieť rozhranie Plug-inu"
4
+VstPlugin="VST 2.x Plug-in"
5
+OpenInterfaceWhenActive="Otvoriť rozhranie, keď je aktívny"
6
obs-studio-21.0.2.tar.xz/plugins/obs-vst/data/locale/uk-UA.ini -> obs-studio-21.0.3.tar.xz/plugins/obs-vst/data/locale/uk-UA.ini Changed
7
 
1
@@ -1,4 +1,4 @@
2
 OpenPluginInterface="Відкрити інтерфейс плагіна"
3
 ClosePluginInterface="Закрити інтерфейс плагіна"
4
 VstPlugin="VST 2.x Плагін"
5
-OpenInterfaceWhenActive="Щоразу відкривати інтерфейс плагина"
6
+OpenInterfaceWhenActive="Щоразу відкривати інтерфейс плагіна"
7
obs-studio-21.0.3.tar.xz/plugins/obs-vst/data/locale/vi-VN.ini Added
6
 
1
@@ -0,0 +1,4 @@
2
+OpenPluginInterface="Mở giao diện bổ trợ"
3
+ClosePluginInterface="Đóng giao diện bổ trợ"
4
+VstPlugin="Bổ trợ VST 2.x"
5
+OpenInterfaceWhenActive="Mở giao diện khi hoạt động"
6
obs-studio-21.0.2.tar.xz/plugins/obs-vst/mac/EditorWidget-osx.mm -> obs-studio-21.0.3.tar.xz/plugins/obs-vst/mac/EditorWidget-osx.mm Changed
46
 
1
@@ -16,18 +16,26 @@
2
 *****************************************************************************/
3
 #import "../headers/EditorWidget.h"
4
 #import <Cocoa/Cocoa.h>
5
+#include <QLayout>
6
 
7
 #import "../headers/VSTPlugin.h"
8
 
9
 void EditorWidget::buildEffectContainer(AEffect *effect) {
10
-   cocoaViewContainer = new QMacCocoaViewContainer(0, this);
11
+   cocoaViewContainer = new QMacCocoaViewContainer(nullptr, this);
12
    cocoaViewContainer->move(0, 0);
13
    cocoaViewContainer->resize(300, 300);
14
    NSView *view = [[NSView alloc] initWithFrame:  NSMakeRect(0, 0,
15
            300, 300)];
16
+
17
    cocoaViewContainer->setCocoaView(view);
18
 
19
-   VstRect* vstRect = 0;
20
+   cocoaViewContainer->show();
21
+
22
+   auto *hblParams  =new QHBoxLayout();
23
+   hblParams->setContentsMargins(0, 0, 0, 0);
24
+   hblParams->addWidget(cocoaViewContainer);
25
+
26
+   VstRect* vstRect = nullptr;
27
    effect->dispatcher (effect, effEditGetRect, 0, 0, &vstRect, 0);
28
    if (vstRect)
29
    {
30
@@ -38,9 +46,15 @@
31
 
32
        cocoaViewContainer->resize(vstRect->right - vstRect->left,
33
                vstRect->bottom- vstRect->top);
34
+
35
+       this->setGeometry(QRect(0,0,vstRect->right - vstRect->left,
36
+                               vstRect->bottom- vstRect->top));
37
    }
38
 
39
    effect->dispatcher (effect, effEditOpen, 0, 0, view, 0);
40
+
41
+
42
+   this->setLayout(hblParams);
43
 }
44
 
45
 void EditorWidget::handleResizeRequest(int width, int height) {
46
obs-studio-21.0.2.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/package.json Changed
14
 
1
@@ -1,10 +1,10 @@
2
 {
3
    "url": "https://obsproject.com/obs2_update/rtmp-services",
4
-   "version": 77,
5
+   "version": 78,
6
    "files": [
7
        {
8
            "name": "services.json",
9
-           "version": 77
10
+           "version": 78
11
        }
12
    ]
13
 }
14
obs-studio-21.0.2.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/services.json Changed
21
 
1
@@ -1162,6 +1162,19 @@
2
                 "max video bitrate": 7000,
3
                 "max audio bitrate": 192
4
             }
5
+        },
6
+        {
7
+            "name": "SermonAudio.com",
8
+            "servers": [
9
+                {
10
+                    "name": "Primary",
11
+                    "url": "rtmp://stream.sermonaudio.com/"
12
+                }
13
+            ],
14
+            "recommended": {
15
+                "max video bitrate": 1000,
16
+                "max audio bitrate": 64
17
+            }
18
         }
19
     ]
20
 }
21