Changes of Revision 55
obs-studio.changes
Changed
x
1
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
2
char *path;
3
char *format_name;
4
int buffering;
5
+ int speed;
6
7
enum AVPixelFormat scale_format;
8
struct SwsContext *swscale;
9
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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