Changes of Revision 372
vlc-beta.spec
Changed
x
1
2
test -x "$(type -p gcc-10)" && BUILDCC="$_"
3
test -x "$(type -p gcc-10)" && CC="$_"
4
test -x "$(type -p g++-10)" && CXX="$_"
5
-test -x "$(type -p qmake6)" && QMAKE6="$_"
6
+test -x "$(type -p gcc-13)" && BUILDCC="$_"
7
+test -x "$(type -p gcc-13)" && CC="$_"
8
+test -x "$(type -p g++-13)" && CXX="$_"
9
export BUILDCC="$(readlink -f ${BUILDCC})"
10
export CC="$(readlink -f ${CC})"
11
export CXX="$(readlink -f ${CXX})"
12
-export QMAKE6="$(readlink -f ${QMAKE6})"
13
CFLAGS='%optflags -Wno-unused-variable -Wno-unused-parameter -Wno-deprecated-declarations -Wno-unused-but-set-variable'
14
CXXFLAGS='%optflags -Wno-unused-variable -Wno-unused-parameter -Wno-deprecated-declarations -Wno-unused-but-set-variable'
15
./bootstrap
16
vlc-beta.patch
Changed
16
1
2
---- a/buildsystem/check_qml_module.py
3
-+++ b/buildsystem/check_qml_module.py
4
-@@ -83,7 +83,7 @@ class QmlModuleChecker:
5
- print("qmake not found")
6
- return False
7
-
8
-- if qtconf:
9
-+ if False:
10
- ret = subprocess.run(
11
- qmake, "-qtconf", qtconf, "-query",
12
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
13
--- a/configure.ac
14
+++ b/configure.ac
15
@@ -10,7 +10,7 @@ VERSION_EXTRA=0
16
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/contrib/src/qtvlcdeps/imports.qrc
Deleted
7
1
2
-<RCC>
3
- <qresource prefix="/">
4
- <file>Imports.qml</file>
5
- </qresource>
6
-</RCC>
7
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/contrib/src/qtvlcdeps/vlcdeps.pro
Deleted
34
1
2
-TEMPLATE = app
3
-
4
-QT = core gui qml svg quick widgets quickcontrols2
5
-QTPLUGIN = qsvgicon qsvg qjpeg qico
6
-
7
-CONFIG -= entrypoint
8
-
9
-win32 {
10
-QTPLUGIN += qwindows qmodernwindowsstyle
11
-}
12
-
13
-linux {
14
-QTPLUGIN += qxcb-glx-integration qxcb-egl-integration qxcb qwayland-generic qwayland-egl qgtk3 qxdgdesktopportal xdg-shell
15
-}
16
-
17
-macx {
18
-QTPLUGIN += qcocoa qmacstyle
19
-}
20
-
21
-# qmake will run qmlimportscanner,
22
-# which will make it generate correct qml plugin
23
-# dependencies
24
-RESOURCES = imports.qrc
25
-
26
-# These are not needed now, but may be required in the future:
27
-# CONFIG += import_plugins staticlib create_pc create_prl no_install_prl link_prl
28
-
29
-# QMAKE_PKGCONFIG_NAME = vlcdeps
30
-# QMAKE_PKGCONFIG_DESCRIPTION = Dependencies for VLC
31
-# QMAKE_PKGCONFIG_LIBDIR = $$target.path
32
-# QMAKE_PKGCONFIG_INCDIR = $$headers.path
33
-# QMAKE_PKGCONFIG_DESTDIR = pkgconfig
34
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/buildsystem/check_qml_module.py -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/buildsystem/check_qml_module.py
Changed
102
1
2
3
import json
4
import argparse
5
-import sys
6
import os
7
import subprocess
8
from tempfile import NamedTemporaryFile
9
10
return ret
11
12
13
- def getInstallInfo(self, qmake, qtconf):
14
- if not os.path.isfile(qmake):
15
- print("qmake not found")
16
- return False
17
-
18
+ def getInstallInfo(self, qtpaths, qtconf):
19
+ qtpaths_cmd = qtpaths, "--query", "--query-format", "json"
20
if qtconf:
21
- ret = subprocess.run(
22
- qmake, "-qtconf", qtconf, "-query",
23
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
24
- encoding="utf8"
25
- )
26
- else:
27
- ret = subprocess.run(
28
- qmake, "-query",
29
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
30
- encoding="utf8"
31
- )
32
+ qtpaths_cmd += "--qtconf", qtconf
33
+ ret = subprocess.run(
34
+ qtpaths_cmd,
35
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE,
36
+ encoding="utf8"
37
+ )
38
39
if ret.returncode != 0:
40
print(ret.stderr.strip())
41
return False
42
43
- binpath = None
44
- libexec = None
45
- qmlpath = None
46
- qtmajor = ""
47
- for l in ret.stdout.splitlines():
48
- l.strip()
49
- if l.startswith("QT_HOST_BINS:"):
50
- binpath = l.split(":", 1)1
51
- elif l.startswith("QT_HOST_LIBEXECS:"):
52
- libexec = l.split(":", 1)1
53
- elif l.startswith("QT_INSTALL_QML:"):
54
- self.qmlpath = l.split(":", 1)1
55
- elif l.startswith("QT_VERSION:"):
56
- qmlversion = l.split(":", 1)1
57
- qtmajor = qmlversion.split(".")0
58
+ # Qt 6.6 outputs invalid json, try to fix it
59
+ qpaths_json = str(ret.stdout)
60
+ if ',\n}' in qpaths_json:
61
+ qpaths_json = qpaths_json.replace(',\n}', '\n}')
62
+ elif ',\r\n}' in qpaths_json:
63
+ qpaths_json = qpaths_json.replace(',\r\n}', '\r\n}')
64
+
65
+ qtjson = json.loads(qpaths_json)
66
+ binpath = qtjson"QT_HOST_BINS"
67
+ libexec = qtjson"QT_HOST_LIBEXECS"
68
+ self.qmlpath = qtjson"QT_INSTALL_QML"
69
+ qmlversion = qtjson"QT_VERSION"
70
+ if qmlversion:
71
+ qtmajor = qmlversion.split(".")0
72
+ else:
73
+ qtmajor = ""
74
75
if qtmajor == "6":
76
self.qt5 = False
77
78
def main():
79
parser = argparse.ArgumentParser("check for qml runtime dependencies")
80
parser.add_argument(
81
- "--qmake", type=str, required=True,
82
- help="native qmake path")
83
+ "--qtpaths", type=str, required=True,
84
+ help="native qtpaths path")
85
86
parser.add_argument(
87
"--qtconf", type=str, required=False,
88
- help="qmake qtconf path")
89
+ help="qtpaths qtconf path")
90
91
parser.add_argument(
92
"--modules", nargs="+", action=KeyValue, required=True,
93
94
args = parser.parse_args()
95
96
moduleChecker = QmlModuleChecker()
97
- if not moduleChecker.getInstallInfo(args.qmake, args.qtconf):
98
+ if not moduleChecker.getInstallInfo(args.qtpaths, args.qtconf):
99
exit(-1)
100
101
with NamedTemporaryFile(mode="w+", suffix=".qml") as f:
102
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/configure.ac -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/configure.ac
Changed
67
1
2
Turn some warnings into compilation error (default disabled)),,
3
enable_extra_checks="no")
4
AS_IF(test "${enable_extra_checks}" = "yes",
5
- AX_APPEND_COMPILE_FLAGS(-Werror=missing-field-initializers -Werror=format -Werror=incompatible-pointer-types -Werror=restrict -Werror=int-conversion -Werror=return-type, CFLAGS)
6
+ AX_APPEND_COMPILE_FLAGS(-Werror=missing-field-initializers -Werror=format -Werror=incompatible-pointer-types -Werror=restrict -Werror=int-conversion -Werror=return-type -Werror=implicit-int -Werror=return-mismatch -Werror=declaration-missing-parameter-type, CFLAGS)
7
AC_LANG_PUSH(C++)
8
- AX_APPEND_COMPILE_FLAGS(-Werror=missing-field-initializers -Werror=format -Werror=return-type, CXXFLAGS)
9
+ AX_APPEND_COMPILE_FLAGS(-Werror=missing-field-initializers -Werror=format -Werror=return-type -Werror=return-mismatch, CXXFLAGS)
10
AC_LANG_POP(C++)
11
)
12
13
14
dnl
15
AC_ARG_ENABLE(x262,
16
AS_HELP_STRING(--enable-x262, H262 encoding support with static libx262 (default disabled)))
17
-if test "${enable_x262}" != "no"; then
18
+AS_IF(test "${enable_x262}" != "no",
19
PKG_CHECK_MODULES(X262, x262,
20
VLC_ADD_PLUGIN(x262)
21
VLC_ADD_LIBS(x262,${X262_LIBS})
22
VLC_ADD_CFLAGS(x262,${X262_CFLAGS})
23
- ,
24
- if test "${enable_x262}" = "yes"; then
25
- AC_MSG_ERROR(x262 module doesn't work without staticly compiled libx262.a)
26
- fi
27
+ ,
28
+ AS_IF(test "${enable_x262}" = "yes",
29
+ AC_MSG_ERROR(x262 module does not work without statically compiled libx262.a)
30
+ )
31
)
32
-fi
33
+)
34
35
dnl x265 encoder
36
PKG_ENABLE_MODULES_VLC(X265,, x265, HEVC/H.265 encoder, auto)
37
38
)
39
40
dnl check native in contribs and keep the full path if found there
41
- AC_PATH_PROGS(QMAKE6, qmake6, qmake6, "${QT_BIN_DIRECTORY}")
42
+ AC_PATH_PROGS(QTPATHS6, qtpaths6, qtpaths6, "${QT_BIN_DIRECTORY}")
43
AC_PATH_PROGS(MOC, moc, moc, "${QT_LIBEXEC_DIRECTORY}")
44
AC_PATH_PROGS(RCC, rcc, rcc, "${QT_LIBEXEC_DIRECTORY}")
45
AC_PATH_PROGS(UIC, uic, uic, "${QT_LIBEXEC_DIRECTORY}")
46
47
)
48
49
AC_CHECK_PROGS(PYTHON3, python3, no)
50
- AC_MSG_CHECKING(if required Qt plugins are installed with ${QMAKE6} and conf ${QT_CONF})
51
+ AC_MSG_CHECKING(if required Qt plugins are installed with ${QTPATHS6} and conf ${QT_CONF})
52
AS_IF(test "$PYTHON3" != "no" && ${PYTHON3} ${srcdir}/buildsystem/check_qml_module.py \
53
- --qmake "${QMAKE6}" \
54
+ --qtpaths "${QTPATHS6}" \
55
--qtconf "${QT_CONF}" \
56
--modules \
57
QtQml.Models="" \
58
59
60
PKG_CHECK_MODULES(QT_QUICK_TEST, Qt6QuickTest >= ${QT_MINIMUM_VERSION},
61
AS_IF(test "$PYTHON3" != "no" && ${PYTHON3} ${srcdir}/buildsystem/check_qml_module.py \
62
- --qmake "${QMAKE6}" \
63
+ --qtpaths "${QTPATHS6}" \
64
--qtconf "${QT_CONF}" \
65
--modules QtTest="" \
66
>&AS_MESSAGE_FD ,
67
_service:obs_scm:vlc-beta-20240517.361f419997.obscpio/contrib/src/gme/0004-Blip_Buffer-replace-assert-with-a-check.patch
Added
47
1
2
+From 74449b553fef6528e1fd9d2dccc6413ded1d5e39 Mon Sep 17 00:00:00 2001
3
+From: Thomas Guillem <thomas@gllm.fr>
4
+Date: Wed, 15 May 2024 14:34:59 +0200
5
+Subject: PATCH Blip_Buffer: replace assert with a check
6
+
7
+assert() may be disabled and you don't want to abort a whole process in
8
+case of a parsing issue. So check the offset from samples_avail(), that
9
+will return 0 (EOF) in case of a out of bounds read.
10
+---
11
+ gme/Blip_Buffer.cpp | 1 -
12
+ gme/Blip_Buffer.h | 6 +++++-
13
+ 2 files changed, 5 insertions(+), 2 deletions(-)
14
+
15
+diff --git a/gme/Blip_Buffer.cpp b/gme/Blip_Buffer.cpp
16
+index 71e48b2..7d2faf3 100644
17
+--- a/gme/Blip_Buffer.cpp
18
++++ b/gme/Blip_Buffer.cpp
19
+@@ -144,7 +144,6 @@ void Blip_Buffer::bass_freq( int freq )
20
+ void Blip_Buffer::end_frame( blip_time_t t )
21
+ {
22
+ offset_ += t * factor_;
23
+- assert( samples_avail() <= (long) buffer_size_ ); // time outside buffer length
24
+ }
25
+
26
+ void Blip_Buffer::remove_silence( long count )
27
+diff --git a/gme/Blip_Buffer.h b/gme/Blip_Buffer.h
28
+index 9af53f7..ea109d7 100644
29
+--- a/gme/Blip_Buffer.h
30
++++ b/gme/Blip_Buffer.h
31
+@@ -475,7 +475,11 @@ inline blip_eq_t::blip_eq_t( double t, long rf, long sr, long cf ) :
32
+ treble( t ), rolloff_freq( rf ), sample_rate( sr ), cutoff_freq( cf ) { }
33
+
34
+ inline int Blip_Buffer::length() const { return length_; }
35
+-inline long Blip_Buffer::samples_avail() const { return (long) (offset_ >> BLIP_BUFFER_ACCURACY); }
36
++inline long Blip_Buffer::samples_avail() const
37
++{
38
++ long samples = (long) (offset_ >> BLIP_BUFFER_ACCURACY);
39
++ return samples <= (long) buffer_size_ ? samples : 0;
40
++}
41
+ inline long Blip_Buffer::sample_rate() const { return sample_rate_; }
42
+ inline int Blip_Buffer::output_latency() const { return blip_widest_impulse_ / 2; }
43
+ inline long Blip_Buffer::clock_rate() const { return clock_rate_; }
44
+--
45
+2.39.2
46
+
47
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/contrib/src/gme/rules.mak -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/contrib/src/gme/rules.mak
Changed
9
1
2
$(APPLY) $(SRC)/gme/0001-Export-the-proper-C-runtime-library.patch
3
$(APPLY) $(SRC)/gme/0002-link-with-libm-and-set-it-in-pkg-config-when-buildin.patch
4
$(APPLY) $(SRC)/gme/0003-fix-android-toolchain-broken-CMAKE_CXX_IMPLICIT_LINK.patch
5
+ $(APPLY) $(SRC)/gme/0004-Blip_Buffer-replace-assert-with-a-check.patch
6
$(call pkg_static,"gme/libgme.pc.in")
7
$(MOVE)
8
9
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/contrib/src/harfbuzz/rules.mak -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/contrib/src/harfbuzz/rules.mak
Changed
10
1
2
$(APPLY) $(SRC)/harfbuzz/0001-meson-Enable-big-objects-support-when-building-for-w.patch
3
$(APPLY) $(SRC)/harfbuzz/0001-freetype-Fix-function-signatures-to-match-without-ca.patch
4
$(APPLY) $(SRC)/harfbuzz/0002-Disable-Wcast-function-type-strict.patch
5
+ # build ragel as a native tool (which can't be installed)
6
+ sed -i.orig -e 's,install : true,native : true,' $(UNPACK_DIR)/subprojects/packagefiles/ragel/meson.build
7
$(MOVE)
8
9
DEPS_harfbuzz = freetype2 $(DEPS_freetype2)
10
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/contrib/src/qt/rules.mak -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/contrib/src/qt/rules.mak
Changed
10
1
2
endif
3
4
$(TARBALLS)/qtbase-everywhere-src-$(QTBASE_VERSION_FULL).tar.xz:
5
- $(call download_pkg,$(QTBASE_URL), qt)
6
+ $(call download_pkg,$(QTBASE_URL),qt)
7
8
.sum-qt: qtbase-everywhere-src-$(QTBASE_VERSION_FULL).tar.xz
9
10
_service:obs_scm:vlc-beta-20240517.361f419997.obscpio/contrib/src/qtvlcdeps/CMakeLists.txt
Added
52
1
2
+cmake_minimum_required(VERSION 3.16)
3
+
4
+project(qtvlcdeps VERSION 0.1 LANGUAGES CXX)
5
+
6
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
7
+
8
+find_package(Qt6 6.2 REQUIRED COMPONENTS Core Gui Qml Svg Quick Widgets QuickControls2)
9
+
10
+qt_standard_project_setup(REQUIRES 6.2)
11
+
12
+qt_add_executable(qtvlcdeps)
13
+
14
+qt_add_qml_module(qtvlcdeps
15
+ URI qtvlcdeps
16
+ RESOURCE_PREFIX qtvlcdeps
17
+ QML_FILES
18
+ Imports.qml
19
+)
20
+
21
+qt_import_plugins(qtvlcdeps
22
+ INCLUDE Qt::QSvgIconPlugin Qt::QSvgPlugin Qt::QJpegPlugin Qt::QICOPlugin
23
+)
24
+
25
+if (WIN32)
26
+ qt_import_plugins(qtvlcdeps
27
+ INCLUDE Qt::QWindowsIntegrationPlugin Qt::QModernWindowsStylePlugin
28
+ )
29
+endif (WIN32)
30
+
31
+if (UNIX)
32
+ qt_import_plugins(qtvlcdeps
33
+ INCLUDE Qt::QXcbGlxIntegrationPlugin Qt::QXcbEglIntegrationPlugin Qt::QXcbIntegrationPlugin Qt::QWaylandIntegrationPlugin Qt::QWaylandEglPlatformIntegrationPlugin Qt::QGtk3ThemePlugin Qt::QXdgDesktopPortalThemePlugin Qt::QWaylandXdgShellPlatformIntegrationPlugin
34
+ )
35
+endif (UNIX)
36
+
37
+if (APPLE)
38
+ qt_import_plugins(qtvlcdeps
39
+ INCLUDE Qt::QCocoaIntegrationPlugin Qt::QMacStylePlugin
40
+ )
41
+endif (APPLE)
42
+
43
+
44
+set_target_properties(qtvlcdeps PROPERTIES
45
+ WIN32_EXECUTABLE TRUE
46
+ qt_no_entrypoint TRUE
47
+)
48
+
49
+target_link_libraries(qtvlcdeps
50
+ PRIVATE Qt6::Core Qt6::Gui Qt6::Qml Qt6::Svg Qt6::Quick Qt6::Widgets Qt6::QuickControls2
51
+)
52
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/contrib/src/qtvlcdeps/rules.mak -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/contrib/src/qtvlcdeps/rules.mak
Changed
23
1
2
PKGS_FOUND += qtvlcdeps
3
endif
4
5
-QT_VLC_DEP_SOURCES := Imports.qml Imports.qrc qtvlcdeps.pc.in vlcdeps.pro
6
+QT_VLC_DEP_SOURCES := Imports.qml qtvlcdeps.pc.in CMakeLists.txt
7
8
.sum-qtvlcdeps:
9
touch $@
10
11
$(MOVE)
12
13
.qtvlcdeps: qtvlcdeps
14
- rm -rf $</Makefile.Release
15
- $(BUILDPREFIX)/bin/qmake6 -qtconf $(PREFIX)/bin/target_qt.conf $(SRC)/qtvlcdeps -o $<
16
- QT_LIBS=$$(awk -F '=' '/LIBS/ {print $$2; exit}' $</Makefile.Release); \
17
+ $(CMAKECLEAN)
18
+ $(HOSTVARS) $(CMAKE) -G Ninja -DCMAKE_TOOLCHAIN_FILE=$(PREFIX)/lib/cmake/Qt6/qt.toolchain.cmake
19
+ QT_LIBS=$$(awk -F '=' '/LINK_LIBRARIES/ {print $$2; exit}' $(BUILD_DIR)/build.ninja); \
20
cat $</qtvlcdeps.pc.in | \
21
sed "s|%1|$$QT_LIBS|" | \
22
sed "s|$(PREFIX)/lib/|$$\{libdir\}/|g" | \
23
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/extras/ci/gitlab-ci.yml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/extras/ci/gitlab-ci.yml
Changed
19
1
2
VLC_WIN_LLVM_MSVCRT_IMAGE: registry.videolan.org/vlc-debian-llvm-msvcrt:20240212151604
3
VLC_WIN_LLVM_UCRT_IMAGE: registry.videolan.org/vlc-debian-llvm-ucrt:20240212151604
4
VLC_DEBIAN_IMAGE: registry.videolan.org/vlc-debian-unstable:20240402131352
5
- VLC_ANDROID_IMAGE: registry.videolan.org/vlc-debian-android:20231013040434
6
+ VLC_ANDROID_IMAGE: registry.videolan.org/vlc-debian-android:20240514145422
7
VLC_SNAP_IMAGE: registry.videolan.org/vlc-ubuntu-focal:20231013031754
8
VLC_RASPBIAN_IMAGE: registry.videolan.org/vlc-ubuntu-raspberry:20231013032350
9
VLC_WASM_EMSCRIPTEN: registry.videolan.org/vlc-debian-wasm-emscripten:20240313095757
10
11
name: $VLC_ANDROID_IMAGE
12
script: |
13
git clone https://code.videolan.org/videolan/libvlcjni.git
14
- (cd libvlcjni && git checkout aa63288b6bb5c52dfacbdec95104cd4c86c7e9c2)
15
+ (cd libvlcjni && git checkout b4416c1acbd4714fbd2e648c13723b20f3b2d834)
16
if -n "$VLC_PREBUILT_CONTRIBS_URL" ; then
17
CONTRIB_FLAGS="--with-prebuilt-contribs"
18
else
19
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/extras/package/wasm-emscripten/build.sh -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/extras/package/wasm-emscripten/build.sh
Changed
10
1
2
--disable-speexdsp --disable-taglib --disable-zvbi \
3
--disable-rnnoise --disable-libaribcaption \
4
--disable-ogg --disable-vorbis --disable-kate --disable-flac \
5
- --host=wasm32-unknown-emscripten --enable-rav1e
6
+ --host=wasm32-unknown-emscripten
7
8
diagnostic "vlc contribs: make"
9
if "$VLC_USE_PREBUILT_CONTRIBS" -ne "0" ; then
10
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/include/vlc/libvlc_media_player.h -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/include/vlc/libvlc_media_player.h
Changed
27
1
2
LIBVLC_API void libvlc_video_set_teletext( libvlc_media_player_t *p_mi, int i_page );
3
4
/**
5
+ * Set teletext background transparency.
6
+ *
7
+ * \param p_mi the media player
8
+ * \param transparent whether background should be transparent.
9
+ * \version LibVLC 4.0.0 or later
10
+ */
11
+LIBVLC_API void libvlc_video_set_teletext_transparency( libvlc_media_player_t *p_mi, bool transparent );
12
+
13
+/**
14
+ * Get teletext background transparency.
15
+ *
16
+ * \param p_mi the media player
17
+ * \retval true teletext has transparent background
18
+ * \retval false teletext has opaque background
19
+ * \version LibVLC 4.0.0 or later
20
+ */
21
+LIBVLC_API bool libvlc_video_get_teletext_transparency( libvlc_media_player_t *p_mi );
22
+
23
+/**
24
* Take a snapshot of the current video window.
25
*
26
* If i_width AND i_height is 0, original size is used.
27
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/include/vlc_aout.h -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/include/vlc_aout.h
Changed
21
1
2
* \param aout the audio output instance
3
* \param system_ts system timestamp when audio_ts is played, based on
4
* vlc_tick_now(), can be now, in the past or in the future.
5
- * \param audio_ts audio timestamp played at system_ts, starts at 0 for the
6
- * first sample played (must not take block->i_pts, passed in play(), into
7
- * account).
8
- *
9
+ * \param audio_pts audio timestamp played at system_ts, starts at block->i_pts
10
+ * for the first sample played.
11
*/
12
static inline void aout_TimingReport(audio_output_t *aout, vlc_tick_t system_ts,
13
- vlc_tick_t audio_ts)
14
+ vlc_tick_t audio_pts)
15
{
16
- aout->events->timing_report(aout, system_ts, audio_ts);
17
+ aout->events->timing_report(aout, system_ts, audio_pts);
18
}
19
20
/**
21
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/lib/libvlc.sym -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/lib/libvlc.sym
Changed
17
1
2
libvlc_video_get_spu_delay
3
libvlc_video_get_spu_text_scale
4
libvlc_video_get_teletext
5
+libvlc_video_get_teletext_transparency
6
libvlc_video_set_adjust_float
7
libvlc_video_set_adjust_int
8
libvlc_video_set_aspect_ratio
9
10
libvlc_video_set_spu_delay
11
libvlc_video_set_spu_text_scale
12
libvlc_video_set_teletext
13
+libvlc_video_set_teletext_transparency
14
libvlc_video_take_snapshot
15
libvlc_video_new_viewpoint
16
libvlc_video_update_viewpoint
17
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/lib/video.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/lib/video.c
Changed
30
1
2
vlc_player_Unlock(player);
3
}
4
5
+void libvlc_video_set_teletext_transparency( libvlc_media_player_t *p_mi, bool transparent )
6
+{
7
+ vlc_player_t *player = p_mi->player;
8
+ vlc_player_Lock(player);
9
+
10
+ vlc_player_SetTeletextTransparency(player, transparent);
11
+
12
+ vlc_player_Unlock(player);
13
+}
14
+
15
+bool libvlc_video_get_teletext_transparency( libvlc_media_player_t *p_mi )
16
+{
17
+ vlc_player_t *player = p_mi->player;
18
+ vlc_player_Lock(player);
19
+
20
+ bool transparent = vlc_player_IsTeletextTransparent(player);
21
+
22
+ vlc_player_Unlock(player);
23
+
24
+ return transparent;
25
+}
26
+
27
/******************************************************************************
28
* libvlc_video_set_deinterlace : enable/disable/auto deinterlace and filter
29
*****************************************************************************/
30
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/meson.build -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/meson.build
Changed
20
1
2
if get_option('extra_checks')
3
add_project_arguments(cc.get_supported_arguments(
4
'-Werror=missing-field-initializers',
5
- '-Werror=format'
6
+ '-Werror=format',
7
+ '-Werror=return-type',
8
+ '-Werror=return-mismatch'
9
), language: 'c', 'cpp')
10
add_project_arguments(cc.get_supported_arguments(
11
'-Werror=incompatible-pointer-types',
12
- '-Werror=restrict'
13
+ '-Werror=restrict',
14
+ '-Werror=int-conversion',
15
+ '-Werror=implicit-int',
16
+ '-Werror=declaration-missing-parameter-type'
17
), language: 'c')
18
endif
19
20
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/access/rtp/h264.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/access/rtp/h264.c
Changed
38
1
2
#include <assert.h>
3
4
#include "h26x.h"
5
+#include "fmtp.h"
6
7
#include <vlc_plugin.h>
8
#include <vlc_codec.h>
9
10
if(!desc->parameters)
11
return VLC_ENOTSUP;
12
13
- const char *psz = strstr(desc->parameters, "packetization-mode=");
14
- if(!psz || psz19 == '\0' || atoi(&psz19) > 1)
15
+ uint8_t mode = 0;
16
+ int ret = vlc_sdp_fmtp_get(desc, "packetization-mode", &mode);
17
+ if ((ret && ret != -ENOENT) || mode > 1)
18
return VLC_ENOTSUP;
19
20
if (vlc_ascii_strcasecmp(desc->name, "H264") == 0)
21
22
23
opaque->obj = obj;
24
25
- if(desc->parameters)
26
- {
27
- psz = strstr(desc->parameters, "sprop-parameter-sets=");
28
- if(psz)
29
- opaque->sdpxps = h26x_fillextradata(psz + 21);
30
- }
31
+ size_t sprop_len;
32
+ const char *sprop = vlc_sdp_fmtp_get_str(desc, "sprop-parameter-sets", &sprop_len);
33
+ if (sprop && sprop_len)
34
+ opaque->sdpxps = h26x_fillextradata(sprop);
35
36
return VLC_SUCCESS;
37
}
38
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/access/rtp/h265.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/access/rtp/h265.c
Changed
51
1
2
#include <assert.h>
3
4
#include "h26x.h"
5
+#include "fmtp.h"
6
7
#define FLAG_DONL 1
8
9
10
11
opaque->obj = obj;
12
13
- if(desc->parameters)
14
- {
15
- const char *psz = strstr(desc->parameters, "sprop-max-don-diff=");
16
- if(psz)
17
- opaque->b_donl = (atoi(psz + 19) > 0);
18
- block_t **append = &opaque->sdpxps;
19
- const char *props = { "sprop-vps=", "sprop-sps=", "sprop-pps=" };
20
- for(int i=0; i<ARRAY_SIZE(props); i++)
21
- {
22
- psz = strstr(desc->parameters, propsi);
23
- if(!psz)
24
- continue;
25
- block_t *xps = h26x_fillextradata(psz + 10);
26
- if(xps)
27
- block_ChainLastAppend(&append, xps);
28
- }
29
- if(opaque->sdpxps)
30
- opaque->sdpxps = block_ChainGather(opaque->sdpxps);
31
+ uint16_t don_diff;
32
+ if(!vlc_sdp_fmtp_get(desc, "sprop-max-don-diff", &don_diff))
33
+ opaque->b_donl = (don_diff > 0);
34
+
35
+ block_t **append = &opaque->sdpxps;
36
+ const char *props = { "sprop-vps", "sprop-sps", "sprop-pps" };
37
+ for(size_t i=0; i<ARRAY_SIZE(props); i++) {
38
+ size_t len;
39
+ const char *value = vlc_sdp_fmtp_get_str(desc, propsi, &len);
40
+ if(!value || len == 0)
41
+ continue;
42
+ block_t *xps = h26x_fillextradata(value);
43
+ if(xps)
44
+ block_ChainLastAppend(&append, xps);
45
}
46
+ if(opaque->sdpxps)
47
+ opaque->sdpxps = block_ChainGather(opaque->sdpxps);
48
49
return VLC_SUCCESS;
50
}
51
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/adummy.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/adummy.c
Changed
47
1
2
3
struct aout_sys
4
{
5
+ vlc_tick_t first_pts;
6
vlc_tick_t first_play_date;
7
vlc_tick_t last_timing_date;
8
vlc_tick_t paused_date;
9
10
struct aout_sys *sys = aout->sys;
11
12
if (unlikely(sys->first_play_date == VLC_TICK_INVALID))
13
+ {
14
+ assert(sys->first_pts == VLC_TICK_INVALID);
15
sys->first_play_date = date;
16
+ sys->first_pts = block->i_pts;
17
+ }
18
19
block_Release( block );
20
21
22
now - sys->last_timing_date >= VLC_TICK_FROM_SEC(1))
23
{
24
sys->last_timing_date = now;
25
- aout_TimingReport(aout, now, now - sys->first_play_date);
26
+ aout_TimingReport(aout, now,
27
+ now - sys->first_play_date + sys->first_pts);
28
}
29
}
30
31
32
struct aout_sys *sys = aout->sys;
33
34
sys->first_play_date = sys->last_timing_date = VLC_TICK_INVALID;
35
+ sys->first_pts = VLC_TICK_INVALID;
36
sys->paused_date = VLC_TICK_INVALID;
37
}
38
39
40
if (!sys)
41
return VLC_ENOMEM;
42
sys->first_play_date = sys->last_timing_date = VLC_TICK_INVALID;
43
+ sys->first_pts = VLC_TICK_INVALID;
44
sys->paused_date = VLC_TICK_INVALID;
45
46
aout->start = Start;
47
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/android/aaudio.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/android/aaudio.c
Changed
46
1
2
size_t timing_report_last_written_bytes;
3
/* Number of bytes to write before sending a timing report */
4
size_t timing_report_delay_bytes;
5
+ vlc_tick_t first_pts;
6
};
7
8
/* dlopen/dlsym symbols */
9
10
/* Add the start silence to the system time and don't subtract
11
* it from pos_ticks to avoid (unlikely) negatives ts */
12
system_ts += BytesToTicks(sys, sys->start_silence_bytes);
13
- aout_stream_TimingReport(stream, system_ts, pos_ticks);
14
+ aout_stream_TimingReport(stream, system_ts,
15
+ pos_ticks + sys->first_pts);
16
}
17
18
memcpy(data, f->p_buffer, tocopy);
19
20
{
21
vlc_tick_t now = vlc_tick_now();
22
sys->first_play_date = date - BytesToTicks(sys, sys->frames_total_bytes);
23
+ if (sys->first_pts == VLC_TICK_INVALID)
24
+ sys->first_pts = frame->i_pts;
25
26
if (sys->first_play_date > now)
27
msg_Dbg(stream, "deferring start (%"PRId64" us)",
28
29
30
sys->started = false;
31
sys->draining = false;
32
- sys->first_play_date = VLC_TICK_INVALID;
33
+ sys->first_pts = sys->first_play_date = VLC_TICK_INVALID;
34
sys->start_silence_bytes = 0;
35
sys->timing_report_last_written_bytes = 0;
36
sys->timing_report_delay_bytes = 0;
37
38
sys->underrun_bytes = 0;
39
sys->started = false;
40
sys->draining = false;
41
- sys->first_play_date = VLC_TICK_INVALID;
42
+ sys->first_pts = sys->first_play_date = VLC_TICK_INVALID;
43
sys->timing_report_last_written_bytes = 0;
44
sys->timing_report_delay_bytes = 0;
45
46
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/android/audiotrack.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/android/audiotrack.c
Changed
37
1
2
size_t timing_report_last_written_bytes;
3
/* Number of bytes to write before sending a timing report */
4
size_t timing_report_delay_bytes;
5
+ vlc_tick_t first_pts;
6
} aout_sys_t;
7
8
9
10
p_sys->i_samples_written = 0;
11
p_sys->timing_report_last_written_bytes = 0;
12
p_sys->timing_report_delay_bytes = 0;
13
+ p_sys->first_pts = VLC_TICK_INVALID;
14
}
15
16
static vlc_tick_t
17
18
+ (p_sys->timestamp.i_frame_wrap_count << 32);
19
20
aout_stream_TimingReport( stream, frame_date_us,
21
- FRAMES_TO_US( frame_pos ) );
22
+ FRAMES_TO_US( frame_pos ) +
23
+ p_sys->first_pts );
24
return VLC_SUCCESS;
25
}
26
27
28
p_sys->i_chans_to_reorder, p_sys->p_chan_table,
29
p_sys->fmt.i_format );
30
31
+ if( p_sys->first_pts == VLC_TICK_INVALID )
32
+ p_sys->first_pts = p_buffer->i_pts;
33
+
34
vlc_frame_ChainLastAppend(&p_sys->frame_last, p_buffer);
35
vlc_cond_signal(&p_sys->thread_cond);
36
37
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/apple/avsamplebuffer.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/apple/avsamplebuffer.m
Changed
47
1
2
block_t **_outChainLast;
3
4
int64_t _ptsSamples;
5
+ vlc_tick_t _firstPts;
6
unsigned _sampleRate;
7
BOOL _stopped;
8
}
9
10
self stopSyncRenderer;
11
12
_ptsSamples = -1;
13
+ _firstPts = VLC_TICK_INVALID;
14
}
15
16
- (void)pause:(BOOL)pause date:(vlc_tick_t)date
17
18
19
- (void)whenTimeObserved:(CMTime) time
20
{
21
+ assert(_firstPts != VLC_TICK_INVALID);
22
+
23
if (time.value == 0)
24
return;
25
vlc_tick_t system_now = vlc_tick_now();
26
- vlc_tick_t pos_ticks = VLCAVSample CMTimeTotick:time;
27
+ vlc_tick_t pos_ticks = VLCAVSample CMTimeTotick:time + _firstPts;
28
29
aout_TimingReport(_aout, system_now, pos_ticks);
30
}
31
32
weakSelf whenDataReady;
33
};
34
35
+ _firstPts = block->i_pts;
36
const CMTime interval = CMTimeMake(CLOCK_FREQ, CLOCK_FREQ);
37
_observer = _sync addPeriodicTimeObserverForInterval:interval
38
queue:_timeQueue
39
40
_stopped = NO;
41
42
_ptsSamples = -1;
43
+ _firstPts = VLC_TICK_INVALID;
44
_sampleRate = fmt->i_rate;
45
_bytesPerFrame = desc.mBytesPerFrame;
46
47
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/apple/coreaudio_common.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/apple/coreaudio_common.c
Changed
59
1
2
}
3
4
size_t bytes_copied = 0;
5
+
6
+ /* Store the previous started state, in order to skip the timing report
7
+ * from the first render call, in order to avoid small timing
8
+ * discontinuities when starting. */
9
+ bool was_started = p_sys->started;
10
+
11
while (bytes > 0)
12
{
13
vlc_frame_t *f = p_sys->p_out_chain;
14
15
16
p_sys->timing_report_last_written_bytes += bytes_copied;
17
18
- if (p_sys->timing_report_last_written_bytes >=
19
+ if (was_started &&
20
+ p_sys->timing_report_last_written_bytes >=
21
p_sys->timing_report_delay_bytes)
22
{
23
p_sys->timing_report_last_written_bytes = 0;
24
25
p_sys->timing_report_delay_bytes =
26
TicksToBytes(p_sys, TIMING_REPORT_DELAY_TICKS);
27
28
- vlc_tick_t pos_ticks = BytesToTicks(p_sys, p_sys->i_total_bytes);
29
+ vlc_tick_t pos_ticks = BytesToTicks(p_sys, p_sys->i_total_bytes)
30
+ + p_sys->first_pts;
31
aout_TimingReport(p_aout, end_ticks + GetLatency(p_aout), pos_ticks);
32
}
33
34
35
p_sys->i_out_size = 0;
36
p_sys->i_total_bytes = 0;
37
p_sys->first_play_date = VLC_TICK_INVALID;
38
+ p_sys->first_pts = VLC_TICK_INVALID;
39
p_sys->timing_report_delay_bytes =
40
p_sys->timing_report_last_written_bytes = 0;
41
42
43
if (!p_sys->started)
44
{
45
vlc_tick_t now = vlc_tick_now();
46
+ if (p_sys->first_pts == VLC_TICK_INVALID)
47
+ p_sys->first_pts = p_block->i_pts;
48
p_sys->first_play_date = date - BytesToTicks(p_sys, p_sys->i_out_size);
49
50
if (p_sys->first_play_date > now)
51
52
p_sys->i_out_size = 0;
53
p_sys->i_total_bytes = 0;
54
p_sys->first_play_date = VLC_TICK_INVALID;
55
+ p_sys->first_pts = VLC_TICK_INVALID;
56
57
p_sys->i_rate = fmt->i_rate;
58
p_sys->i_bytes_per_frame = fmt->i_bytes_per_frame;
59
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/apple/coreaudio_common.h -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/apple/coreaudio_common.h
Changed
9
1
2
size_t i_out_size;
3
/* Size written via the render callback */
4
uint64_t i_total_bytes;
5
+ vlc_tick_t first_pts;
6
/* Date when the data callback should start to process audio */
7
vlc_tick_t first_play_date;
8
/* Bytes written since the last timing report */
9
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/pulse.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/pulse.c
Changed
44
1
2
} fifo;
3
4
pa_usec_t flush_rt;
5
+ vlc_tick_t first_pts;
6
7
pa_volume_t volume_force; /**< Forced volume (stream must be NULL) */
8
pa_stream_flags_t flags_force; /**< Forced flags (stream must be NULL) */
9
10
if (sys->start_date_reached
11
&& likely(rt >= sys->flush_rt + silence_us))
12
{
13
- vlc_tick_t audio_ts = VLC_TICK_0 +
14
+ vlc_tick_t audio_ts = sys->first_pts +
15
VLC_TICK_FROM_US(rt - sys->flush_rt - silence_us);
16
17
aout_TimingReport(aout, sys->timing_system_ts, audio_ts);
18
19
20
if (!sys->start_date_reached)
21
{
22
+ if (sys->first_pts == VLC_TICK_INVALID)
23
+ sys->first_pts = block->i_pts;
24
+
25
vlc_tick_t now = vlc_tick_now();
26
sys->start_date = date
27
- pa_bytes_to_usec(sys->fifo.size, ss);
28
29
const pa_timing_info *ti = pa_stream_get_timing_info(s);
30
if (ti != NULL && !ti->read_index_corrupt)
31
sys->flush_rt = pa_bytes_to_usec(ti->read_index, ss);
32
+ sys->first_pts = VLC_TICK_INVALID;
33
34
pa_threaded_mainloop_unlock(sys->mainloop);
35
}
36
37
sys->draining = false;
38
pa_cvolume_init(&sys->cvolume);
39
sys->flush_rt = 0;
40
+ sys->first_pts = VLC_TICK_INVALID;
41
42
sys->start_date_reached = false;
43
sys->start_date = VLC_TICK_INVALID;
44
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/audio_output/wasapi.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/audio_output/wasapi.c
Changed
45
1
2
UINT64 written; /**< Frames written to the buffer */
3
UINT32 frames; /**< Total buffer size (frames) */
4
bool s24s32; /**< Output configured as S24N, but input as S32N */
5
+ vlc_tick_t first_pts;
6
} aout_stream_sys_t;
7
8
/*** VLC audio output callbacks ***/
9
10
}
11
12
aout_stream_TimingReport(s, VLC_TICK_FROM_MSFTIME(qpcpos),
13
- vlc_tick_from_frac(pos, clock_freq));
14
+ vlc_tick_from_frac(pos, clock_freq) +
15
+ sys->first_pts);
16
17
aout_stream_TriggerTimer(s, TimingReport,
18
vlc_tick_now() + TIMING_REPORT_DELAY);
19
20
goto out;
21
}
22
23
+ if (sys->first_pts == VLC_TICK_INVALID)
24
+ sys->first_pts = block->i_pts;
25
+
26
if (sys->chans_to_reorder)
27
aout_ChannelReorder(block->p_buffer, block->i_buffer,
28
sys->chans_to_reorder, sys->chans_table, sys->format);
29
30
else
31
hr = S_OK;
32
33
+ sys->first_pts = VLC_TICK_INVALID;
34
if (SUCCEEDED(hr))
35
{
36
msg_Dbg(s, "reset");
37
38
CoTaskMemFree(pwf_mix);
39
*pfmt = fmt;
40
sys->written = 0;
41
+ sys->first_pts = VLC_TICK_INVALID;
42
s->sys = sys;
43
s->play = Play;
44
s->pause = Pause;
45
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/codec/videotoolbox/decoder.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/codec/videotoolbox/decoder.c
Changed
21
1
2
p_sys->vtsession_status = vtsession_status;
3
goto end;
4
}
5
- if (unlikely(!imageBuffer))
6
+
7
+ if (!imageBuffer)
8
{
9
- msg_Err(p_dec, "critical: null imageBuffer with a valid status");
10
- p_sys->vtsession_status = VTSESSION_STATUS_ABORT;
11
+ if (unlikely((infoFlags & kVTDecodeInfo_FrameDropped) != kVTDecodeInfo_FrameDropped))
12
+ {
13
+ msg_Err(p_dec, "critical: null imageBuffer for a non-dropped frame with valid status");
14
+ p_sys->vtsession_status = VTSESSION_STATUS_ABORT;
15
+ } else {
16
+ msg_Dbg(p_dec, "decoder dropped frame");
17
+ }
18
goto end;
19
}
20
21
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/UI/VLCDetachedAudioWindow.xib -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/UI/VLCDetachedAudioWindow.xib
Changed
184
1
2
</customObject>
3
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
4
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
5
- <window title="VLC media player" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="detachedaudiowindow" animationBehavior="default" titleVisibility="hidden" id="2" userLabel="Detached Audio Window" customClass="VLCDetachedAudioWindow">
6
- <windowStyleMask key="styleMask" resizable="YES" fullSizeContentView="YES"/>
7
+ <window title="VLC media player" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" restorable="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="detachedaudiowindow" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="2" userLabel="Detached Audio Window" customClass="VLCDetachedAudioWindow">
8
+ <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
9
<windowPositionMask key="initialPositionMask" leftStrut="YES" topStrut="YES"/>
10
<rect key="contentRect" x="91" y="467" width="239" height="239"/>
11
<rect key="screenRect" x="0.0" y="0.0" width="1920" height="1177"/>
12
13
<constraint firstAttribute="width" secondItem="63" secondAttribute="height" multiplier="1:1" id="RxG-T1-BEQ"/>
14
</constraints>
15
</customView>
16
- <customView hidden="YES" translatesAutoresizingMaskIntoConstraints="NO" id="s7h-2z-AKB">
17
- <rect key="frame" x="0.0" y="0.0" width="239" height="233"/>
18
+ <customView wantsLayer="YES" translatesAutoresizingMaskIntoConstraints="NO" id="s7h-2z-AKB" customClass="VLCMainVideoViewOverlayView">
19
+ <rect key="frame" x="0.0" y="0.0" width="239" height="239"/>
20
<subviews>
21
- <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="F6N-G1-ay4" customClass="VLCCustomWindowCloseButton">
22
- <rect key="frame" x="8" y="217" width="14" height="16"/>
23
- <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="window-close" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="WwK-DC-6gz" customClass="VLCWindowButtonCell">
24
- <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
25
- <font key="font" metaFont="system"/>
26
- </buttonCell>
27
- <constraints>
28
- <constraint firstAttribute="height" constant="16" id="h5F-zc-xQI"/>
29
- <constraint firstAttribute="width" constant="14" id="u5l-1z-YIF"/>
30
- </constraints>
31
- </button>
32
- <customView translatesAutoresizingMaskIntoConstraints="NO" id="5" customClass="VLCBottomBarView">
33
- <rect key="frame" x="0.0" y="0.0" width="239" height="65"/>
34
+ <customView appearanceType="darkAqua" translatesAutoresizingMaskIntoConstraints="NO" id="5" customClass="VLCBottomBarView">
35
+ <rect key="frame" x="0.0" y="0.0" width="239" height="77"/>
36
<subviews>
37
<customView translatesAutoresizingMaskIntoConstraints="NO" id="65" customClass="VLCDragDropView">
38
- <rect key="frame" x="0.0" y="0.0" width="239" height="65"/>
39
+ <rect key="frame" x="0.0" y="0.0" width="239" height="77"/>
40
<subviews>
41
<customView translatesAutoresizingMaskIntoConstraints="NO" id="Vae-cT-EEI" userLabel="Play controls group">
42
- <rect key="frame" x="77" y="10" width="85" height="23"/>
43
+ <rect key="frame" x="72" y="10" width="96" height="32"/>
44
<subviews>
45
<button translatesAutoresizingMaskIntoConstraints="NO" id="11">
46
- <rect key="frame" x="0.0" y="0.0" width="29" height="23"/>
47
- <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="backward-3btns" imagePosition="only" alignment="center" alternateImage="backward-3btns-pressed" continuous="YES" enabled="NO" imageScaling="proportionallyUpOrDown" id="14">
48
+ <rect key="frame" x="0.0" y="-1.5" width="32" height="35"/>
49
+ <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="backward.fill" catalog="system" imagePosition="only" alignment="center" alternateImage="backward.fill" controlSize="large" continuous="YES" enabled="NO" imageScaling="proportionallyUpOrDown" id="14">
50
<behavior key="behavior" lightByContents="YES"/>
51
- <font key="font" metaFont="label"/>
52
+ <font key="font" metaFont="system"/>
53
</buttonCell>
54
+ <constraints>
55
+ <constraint firstAttribute="width" secondItem="11" secondAttribute="height" multiplier="1:1" id="09v-B2-ddE"/>
56
+ </constraints>
57
<connections>
58
<action selector="bwd:" target="3" id="56"/>
59
</connections>
60
</button>
61
<button translatesAutoresizingMaskIntoConstraints="NO" id="10">
62
- <rect key="frame" x="29" y="0.0" width="27" height="23"/>
63
- <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="play" imagePosition="only" alignment="center" alternateImage="play-pressed" imageScaling="proportionallyUpOrDown" id="15">
64
+ <rect key="frame" x="32" y="-3" width="32" height="38"/>
65
+ <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="play.circle.fill" catalog="system" imagePosition="only" alignment="center" alternateImage="play.circle.fill" controlSize="large" imageScaling="proportionallyUpOrDown" id="15">
66
<behavior key="behavior" lightByContents="YES"/>
67
- <font key="font" metaFont="titleBar" size="12" textStyle="headline"/>
68
+ <font key="font" metaFont="system"/>
69
</buttonCell>
70
+ <constraints>
71
+ <constraint firstAttribute="width" secondItem="10" secondAttribute="height" multiplier="1:1" id="aTD-32-d4n"/>
72
+ </constraints>
73
<connections>
74
<action selector="play:" target="3" id="39"/>
75
</connections>
76
</button>
77
<button translatesAutoresizingMaskIntoConstraints="NO" id="12">
78
- <rect key="frame" x="56" y="0.0" width="29" height="23"/>
79
- <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="forward-3btns" imagePosition="only" alignment="center" alternateImage="forward-3btns-pressed" continuous="YES" enabled="NO" imageScaling="proportionallyUpOrDown" id="13">
80
+ <rect key="frame" x="64" y="-1.5" width="32" height="35"/>
81
+ <buttonCell key="cell" type="bevel" bezelStyle="regularSquare" image="forward.fill" catalog="system" imagePosition="only" alignment="center" alternateImage="forward.fill" controlSize="large" continuous="YES" enabled="NO" imageScaling="proportionallyUpOrDown" id="13">
82
<behavior key="behavior" lightByContents="YES"/>
83
- <font key="font" metaFont="label"/>
84
+ <font key="font" metaFont="system"/>
85
</buttonCell>
86
+ <constraints>
87
+ <constraint firstAttribute="width" secondItem="12" secondAttribute="height" multiplier="1:1" id="Naf-xP-Ez9"/>
88
+ </constraints>
89
<connections>
90
<action selector="fwd:" target="3" id="51"/>
91
</connections>
92
93
<constraint firstItem="10" firstAttribute="left" secondItem="11" secondAttribute="right" id="496-Ip-nTd"/>
94
<constraint firstItem="10" firstAttribute="top" secondItem="Vae-cT-EEI" secondAttribute="top" id="9Kr-xx-Ssf"/>
95
<constraint firstAttribute="right" secondItem="12" secondAttribute="right" id="KOc-oW-4iH"/>
96
- <constraint firstAttribute="height" constant="23" id="bN7-k9-7Iy"/>
97
+ <constraint firstAttribute="height" constant="32" id="bN7-k9-7Iy"/>
98
<constraint firstAttribute="bottom" secondItem="11" secondAttribute="bottom" id="fFe-7J-ver"/>
99
<constraint firstItem="12" firstAttribute="top" secondItem="Vae-cT-EEI" secondAttribute="top" id="gwB-yN-SK0"/>
100
<constraint firstAttribute="bottom" secondItem="12" secondAttribute="bottom" id="l2h-EI-MAG"/>
101
102
</constraints>
103
</customView>
104
<slider hidden="YES" horizontalHuggingPriority="200" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="20" customClass="VLCSlider">
105
- <rect key="frame" x="8" y="41" width="176" height="18"/>
106
+ <rect key="frame" x="8" y="50" width="176" height="18"/>
107
<constraints>
108
<constraint firstAttribute="height" constant="14" id="MYp-CS-yPe"/>
109
</constraints>
110
111
<action selector="timeSliderAction:" target="3" id="46"/>
112
</connections>
113
</slider>
114
- <textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="VLCTimeField">
115
- <rect key="frame" x="185" y="44" width="46" height="13"/>
116
+ <textField verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9" customClass="VLCTimeField">
117
+ <rect key="frame" x="185" y="53" width="46" height="13"/>
118
<constraints>
119
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="42" id="EvZ-Sy-m25"/>
120
<constraint firstAttribute="height" constant="13" id="LYT-Sd-Gf6"/>
121
</constraints>
122
+ <shadow key="shadow" blurRadius="1">
123
+ <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
124
+ </shadow>
125
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" state="on" alignment="center" title="00:00" id="16">
126
- <font key="font" metaFont="label"/>
127
- <color key="textColor" white="0.25" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
128
+ <font key="font" metaFont="systemBold" size="10"/>
129
+ <color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
130
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
131
</textFieldCell>
132
</textField>
133
134
<constraint firstItem="65" firstAttribute="leading" secondItem="5" secondAttribute="leading" id="84j-is-ZZ4"/>
135
<constraint firstAttribute="bottom" secondItem="65" secondAttribute="bottom" id="WrS-PS-vpi"/>
136
<constraint firstItem="65" firstAttribute="top" secondItem="5" secondAttribute="top" id="ecn-UJ-dvK"/>
137
- <constraint firstAttribute="height" constant="65" id="z2X-5w-wme"/>
138
+ <constraint firstAttribute="height" constant="77" id="z2X-5w-wme"/>
139
</constraints>
140
+ <shadow key="shadow" blurRadius="10">
141
+ <color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
142
+ </shadow>
143
</customView>
144
</subviews>
145
<constraints>
146
- <constraint firstItem="F6N-G1-ay4" firstAttribute="top" secondItem="s7h-2z-AKB" secondAttribute="top" id="3fm-nY-Pva"/>
147
- <constraint firstItem="F6N-G1-ay4" firstAttribute="leading" secondItem="s7h-2z-AKB" secondAttribute="leading" constant="8" id="DxB-T0-68G"/>
148
<constraint firstAttribute="trailing" secondItem="5" secondAttribute="trailing" id="Vh6-w4-RpJ"/>
149
<constraint firstItem="5" firstAttribute="leading" secondItem="s7h-2z-AKB" secondAttribute="leading" id="aOM-Yt-uR4"/>
150
<constraint firstAttribute="bottom" secondItem="5" secondAttribute="bottom" id="sVp-W4-nlt"/>
151
152
<constraint firstAttribute="trailing" secondItem="63" secondAttribute="trailing" id="b8X-Kc-BfD"/>
153
<constraint firstAttribute="bottom" secondItem="s7h-2z-AKB" secondAttribute="bottom" id="d58-lr-6o8"/>
154
<constraint firstAttribute="trailing" secondItem="s7h-2z-AKB" secondAttribute="trailing" id="dB2-xi-SzA"/>
155
- <constraint firstItem="s7h-2z-AKB" firstAttribute="top" secondItem="4" secondAttribute="top" constant="6" id="plq-T3-bmm"/>
156
+ <constraint firstItem="s7h-2z-AKB" firstAttribute="top" secondItem="4" secondAttribute="top" id="plq-T3-bmm"/>
157
</constraints>
158
</view>
159
<connections>
160
<outlet property="bottomBarView" destination="5" id="xZs-ha-Bmg"/>
161
<outlet property="controlsBar" destination="3" id="69"/>
162
<outlet property="imageView" destination="63" id="xYd-xT-wUa"/>
163
- <outlet property="wrapperView" destination="s7h-2z-AKB" id="Vze-9X-Oxo"/>
164
+ <outlet property="overlayView" destination="s7h-2z-AKB" id="VGk-aw-I4j"/>
165
</connections>
166
<point key="canvasLocation" x="138.5" y="146.5"/>
167
</window>
168
169
</customObject>
170
</objects>
171
<resources>
172
- <image name="backward-3btns" width="29" height="23"/>
173
- <image name="backward-3btns-pressed" width="29" height="23"/>
174
- <image name="forward-3btns" width="29" height="23"/>
175
- <image name="forward-3btns-pressed" width="29" height="23"/>
176
- <image name="play" width="27" height="23"/>
177
- <image name="play-pressed" width="27" height="23"/>
178
- <image name="window-close" width="14" height="16"/>
179
+ <image name="backward.fill" catalog="system" width="19" height="12"/>
180
+ <image name="forward.fill" catalog="system" width="19" height="12"/>
181
+ <image name="play.circle.fill" catalog="system" width="15" height="15"/>
182
</resources>
183
</document>
184
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/UI/VLCLibraryAudioGroupHeaderView.xib -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/UI/VLCLibraryAudioGroupHeaderView.xib
Changed
10
1
2
<subviews>
3
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VGp-RV-Jl4">
4
<rect key="frame" x="-2" y="6" width="144" height="28"/>
5
- <textFieldCell key="cell" lineBreakMode="clipping" title="Audio Group" id="96R-yZ-Dap">
6
+ <textFieldCell key="cell" lineBreakMode="truncatingTail" title="Audio Group" id="96R-yZ-Dap">
7
<font key="font" metaFont="systemBold" size="24"/>
8
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
9
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
10
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/UI/VLCLibraryHeroView.xib -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/UI/VLCLibraryHeroView.xib
Changed
42
1
2
<stackView distribution="fill" orientation="vertical" alignment="leading" spacing="5" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="U3j-Zx-fFf">
3
<rect key="frame" x="20" y="20" width="250" height="86"/>
4
<subviews>
5
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kFW-i6-3hg">
6
+ <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" textCompletion="NO" translatesAutoresizingMaskIntoConstraints="NO" id="kFW-i6-3hg">
7
<rect key="frame" x="-2" y="58" width="103" height="28"/>
8
<shadow key="shadow" blurRadius="20">
9
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
10
11
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
12
</textFieldCell>
13
</textField>
14
- <textField horizontalHuggingPriority="251" verticalHuggingPriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="aVp-p4-DHX">
15
+ <textField horizontalHuggingPriority="251" verticalHuggingPriority="1000" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="aVp-p4-DHX">
16
<rect key="frame" x="-2" y="33" width="139" height="20"/>
17
<shadow key="shadow" blurRadius="20">
18
<color key="color" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
19
</shadow>
20
- <textFieldCell key="cell" controlSize="large" title="Item detail string" id="P7c-bg-dPX">
21
+ <textFieldCell key="cell" controlSize="large" lineBreakMode="truncatingTail" truncatesLastVisibleLine="YES" title="Item detail string" usesSingleLineMode="YES" id="P7c-bg-dPX">
22
<font key="font" metaFont="systemSemibold" size="17"/>
23
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="displayP3"/>
24
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
25
</textFieldCell>
26
</textField>
27
- <button verticalHuggingPriority="1000" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="5zZ-VM-Lb9">
28
- <rect key="frame" x="-3" y="-4" width="256" height="35"/>
29
+ <button verticalHuggingPriority="1000" horizontalCompressionResistancePriority="250" verticalCompressionResistancePriority="1000" translatesAutoresizingMaskIntoConstraints="NO" id="5zZ-VM-Lb9">
30
+ <rect key="frame" x="-3" y="-4" width="179" height="35"/>
31
<buttonCell key="cell" type="bevel" title=" Resume playing" bezelStyle="regularSquare" image="play.circle.fill" catalog="system" imagePosition="leading" alignment="left" controlSize="large" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="639-6i-zsD">
32
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
33
<font key="font" metaFont="systemSemibold" size="17"/>
34
35
<constraint firstItem="qdP-As-qZ0" firstAttribute="top" secondItem="LPV-K6-7AE" secondAttribute="top" id="9aA-Ma-Vvy"/>
36
<constraint firstItem="U3j-Zx-fFf" firstAttribute="leading" secondItem="LPV-K6-7AE" secondAttribute="leading" constant="20" symbolic="YES" id="A9P-6v-TYB"/>
37
<constraint firstAttribute="bottom" secondItem="U3j-Zx-fFf" secondAttribute="bottom" constant="20" id="GKS-hS-EhI"/>
38
+ <constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="U3j-Zx-fFf" secondAttribute="trailing" constant="20" id="Nzn-Md-2Xx"/>
39
<constraint firstItem="GoN-QI-mru" firstAttribute="leading" secondItem="LPV-K6-7AE" secondAttribute="leading" constant="20" id="UTF-IS-5xp"/>
40
<constraint firstItem="U3j-Zx-fFf" firstAttribute="top" relation="greaterThanOrEqual" secondItem="GoN-QI-mru" secondAttribute="bottom" constant="20" id="ZCB-XT-8xc"/>
41
<constraint firstAttribute="bottom" secondItem="qdP-As-qZ0" secondAttribute="bottom" id="lyx-Ea-nZ1"/>
42
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/UI/VLCLibraryWindow.xib -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/UI/VLCLibraryWindow.xib
Changed
10
1
2
<splitView arrangesAllSubviews="NO" dividerStyle="thin" vertical="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YHF-re-hif">
3
<rect key="frame" x="0.0" y="0.0" width="714" height="390"/>
4
<subviews>
5
- <scrollView fixedFrame="YES" borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="KW4-fp-jy1">
6
+ <scrollView borderType="none" autohidesScrollers="YES" horizontalLineScroll="24" horizontalPageScroll="10" verticalLineScroll="24" verticalPageScroll="10" hasHorizontalScroller="NO" usesPredominantAxisScrolling="NO" horizontalScrollElasticity="none" translatesAutoresizingMaskIntoConstraints="NO" id="KW4-fp-jy1">
7
<rect key="frame" x="0.0" y="0.0" width="298" height="390"/>
8
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
9
<clipView key="contentView" id="4uw-9H-2bN">
10
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/library/VLCLibraryCollectionViewItem.m
Changed
22
1
2
if(actualItem isKindOfClass:VLCMediaLibraryMediaItem class) {
3
VLCMediaLibraryMediaItem * const mediaItem = (VLCMediaLibraryMediaItem *)actualItem;
4
5
- if (mediaItem.mediaType == VLC_ML_MEDIA_TYPE_VIDEO || mediaItem.mediaType == VLC_ML_MEDIA_TYPE_UNKNOWN) {
6
+ if (mediaItem.mediaType == VLC_ML_MEDIA_TYPE_VIDEO || mediaItem.mediaType == VLC_ML_MEDIA_TYPE_UNKNOWN) {
7
VLCMediaLibraryTrack * const videoTrack = mediaItem.firstVideoTrack;
8
self showVideoSizeIfNeededForWidth:videoTrack.videoWidth
9
andHeight:videoTrack.videoHeight;
10
11
self.collectionView.dataSource conformsToProtocol:@protocol(VLCLibraryCollectionViewDataSource)) {
12
NSObject<VLCLibraryCollectionViewDataSource> * const dataSource = (NSObject<VLCLibraryCollectionViewDataSource> *)self.collectionView.dataSource;
13
NSIndexPath * const indexPath = dataSource indexPathForLibraryItem:self.representedItem.item;
14
+ if (indexPath == nil) {
15
+ NSLog(@"Received nil indexPath for item %@!", self.representedItem.item.displayString);
16
+ return;
17
+ }
18
+
19
NSSet<NSIndexPath *> * const indexPathSet = NSSet setWithObject:indexPath;
20
self.collectionView deselectItemsAtIndexPaths:indexPathSet;
21
22
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/library/VLCLibraryCollectionViewSupplementaryElementView.m
Changed
20
1
2
self = super initWithFrame:frameRect;
3
if (self) {
4
self.font = NSFont.VLClibrarySectionHeaderFont;
5
- self.textColor = self.shouldShowDarkAppearance ? NSColor.VLClibraryDarkTitleColor : NSColor.VLClibraryLightTitleColor;
6
+ self.textColor = NSColor.headerTextColor;
7
self.editable = NO;
8
self.selectable = NO;
9
self.bordered = NO;
10
11
return self;
12
}
13
14
-- (void)viewDidChangeEffectiveAppearance
15
-{
16
- self.textColor = self.shouldShowDarkAppearance ? NSColor.VLClibraryDarkTitleColor : NSColor.VLClibraryLightTitleColor;
17
-}
18
-
19
@end
20
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/playlist/VLCPlaylistTableCellView.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/playlist/VLCPlaylistTableCellView.m
Changed
13
1
2
};
3
4
const BOOL validArtistString = item.artistName && item.artistName.length > 0;
5
- const BOOL validAlbumString = item.albumName && item.albumName > 0;
6
+ const BOOL validAlbumString = item.albumName && item.albumName.length > 0;
7
8
- NSString *songDetailString;
9
+ NSString *songDetailString = @"";
10
11
if (validArtistString && validAlbumString) {
12
songDetailString = NSString stringWithFormat:@"%@ · %@", item.artistName, item.albumName;
13
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/views/VLCBottomBarView.h -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/views/VLCBottomBarView.h
Changed
8
1
2
3
@interface VLCBottomBarView : NSView
4
5
+@property (readwrite, assign) BOOL drawBorder;
6
+
7
@end
8
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/views/VLCBottomBarView.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/views/VLCBottomBarView.m
Changed
19
1
2
{
3
self.wantsLayer = YES;
4
self.needsDisplay = YES;
5
+ self.drawBorder = YES;
6
}
7
8
- (void)drawRect:(NSRect)dirtyRect
9
{
10
super drawRect:dirtyRect;
11
12
+ if (!self.drawBorder) {
13
+ return;
14
+ }
15
+
16
const NSRect barFrame = self.frame;
17
NSBezierPath * const separatorPath = NSBezierPath.bezierPath;
18
separatorPath moveToPoint:NSMakePoint(NSMinX(barFrame), NSMaxY(barFrame) - 0.5);
19
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/views/VLCTrackingView.h -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/views/VLCTrackingView.h
Changed
17
1
2
3
NS_ASSUME_NONNULL_BEGIN
4
5
+typedef void(^EnterExitBlock)(void);
6
+
7
@interface VLCTrackingView : NSView
8
9
@property (readwrite) BOOL animatesTransition;
10
@property (readwrite, assign, nullable) NSView *viewToHide; // Hide when mouse out
11
@property (readwrite, assign, nullable) NSView *viewToShow; // Show when mouse out
12
+@property (readwrite, strong, nullable) EnterExitBlock mouseEnteredBlock;
13
+@property (readwrite, strong, nullable) EnterExitBlock mouseExitedBlock;
14
15
@end
16
17
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/views/VLCTrackingView.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/views/VLCTrackingView.m
Changed
20
1
2
{
3
_mouseIn = YES;
4
self performTransition;
5
+ if (self.mouseEnteredBlock) {
6
+ self.mouseEnteredBlock();
7
+ }
8
}
9
10
- (void)handleMouseExit
11
{
12
_mouseIn = NO;
13
self performTransition;
14
+ if (self.mouseExitedBlock) {
15
+ self.mouseExitedBlock();
16
+ }
17
}
18
19
- (void)mouseEntered:(NSEvent *)event
20
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/windows/VLCDetachedAudioWindow.h -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/windows/VLCDetachedAudioWindow.h
Changed
16
1
2
@class VLCControlsBarCommon;
3
@class VLCImageView;
4
@class VLCBottomBarView;
5
+@class VLCMainVideoViewOverlayView;
6
7
NS_ASSUME_NONNULL_BEGIN
8
9
@interface VLCDetachedAudioWindow : VLCWindow
10
11
-@property (nonatomic, weak) IBOutlet NSView *wrapperView;
12
+@property (nonatomic, weak) IBOutlet VLCMainVideoViewOverlayView *overlayView;
13
@property (nonatomic, weak) IBOutlet VLCImageView *imageView;
14
@property (nonatomic, weak) IBOutlet VLCControlsBarCommon *controlsBar;
15
@property (nonatomic, weak) IBOutlet VLCBottomBarView *bottomBarView;
16
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/windows/VLCDetachedAudioWindow.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/windows/VLCDetachedAudioWindow.m
Changed
54
1
2
3
#import "windows/controlsbar/VLCControlsBarCommon.h"
4
5
+#import "windows/video/VLCMainVideoViewOverlayView.h"
6
+
7
@interface VLCDetachedAudioWindow()
8
{
9
VLCPlayerController *_playerController;
10
11
- (void)awakeFromNib
12
{
13
self.title = @"";
14
- self.imageView.cropsImagesToRoundedCorners = NO;
15
16
_playerController = VLCMain.sharedInstance.playlistController.playerController;
17
- VLCTrackingView *trackingView = self.contentView;
18
- trackingView.viewToHide = self.wrapperView;
19
+
20
+ VLCTrackingView * const trackingView = self.contentView;
21
+ trackingView.viewToHide = self.overlayView;
22
trackingView.animatesTransition = YES;
23
+ trackingView.mouseEnteredBlock = ^{
24
+ self.styleMask |= NSWindowStyleMaskTitled;
25
+ };
26
+ trackingView.mouseExitedBlock = ^{
27
+ self.styleMask &= ~NSWindowStyleMaskTitled;
28
+ };
29
+
30
+ self.overlayView.drawGradientForTopControls = YES;
31
+ self.overlayView.darkestGradientColor = NSColor colorWithCalibratedWhite:0.0 alpha:0.8;
32
+
33
+ self.bottomBarView.drawBorder = NO;
34
35
- NSNotificationCenter *notificationCenter = NSNotificationCenter.defaultCenter;
36
- notificationCenter addObserver:self selector:@selector(inputItemChanged:) name:VLCPlayerCurrentMediaItemChanged object:nil;
37
+ NSNotificationCenter * const notificationCenter = NSNotificationCenter.defaultCenter;
38
+ notificationCenter addObserver:self
39
+ selector:@selector(inputItemChanged:)
40
+ name:VLCPlayerCurrentMediaItemChanged
41
+ object:nil;
42
43
self inputItemChanged:nil;
44
}
45
46
47
- (void)inputItemChanged:(NSNotification *)aNotification
48
{
49
- VLCInputItem *currentInput = _playerController.currentMedia;
50
+ VLCInputItem * const currentInput = _playerController.currentMedia;
51
if (currentInput) {
52
self.imageView setImageURL:currentInput.artworkURL placeholderImage:NSImage imageNamed:@"noart.png";
53
} else {
54
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/windows/video/VLCMainVideoViewOverlayView.h -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/windows/video/VLCMainVideoViewOverlayView.h
Changed
9
1
2
@interface VLCMainVideoViewOverlayView : NSView
3
4
@property (readwrite, assign) BOOL drawGradientForTopControls;
5
+@property (readwrite, strong) NSColor *darkestGradientColor;
6
7
@end
8
9
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/macosx/windows/video/VLCMainVideoViewOverlayView.m -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/macosx/windows/video/VLCMainVideoViewOverlayView.m
Changed
40
1
2
3
#import "VLCMainVideoViewOverlayView.h"
4
5
+
6
@implementation VLCMainVideoViewOverlayView
7
8
-- (void)drawRect:(NSRect)dirtyRect {
9
- super drawRect:dirtyRect;
10
+- (void)awakeFromNib
11
+{
12
+ self.darkestGradientColor = NSColor colorWithCalibratedWhite:0 alpha:0.4;
13
+}
14
15
- // Drawing code here.
16
- NSColor *_darkestGradientColor = NSColor colorWithWhite:0 alpha:0.4;
17
+- (void)drawRect:(NSRect)dirtyRect
18
+{
19
+ super drawRect:dirtyRect;
20
21
NSGradient *gradient;
22
23
- if (_drawGradientForTopControls) {
24
- gradient = NSGradient alloc initWithColorsAndLocations:_darkestGradientColor, 0.,
25
- NSColor clearColor, 0.5,
26
- _darkestGradientColor, 1.,
27
+ if (self.drawGradientForTopControls) {
28
+ gradient = NSGradient alloc initWithColorsAndLocations:self.darkestGradientColor, 0.,
29
+ NSColor.clearColor, 0.5,
30
+ self.darkestGradientColor, 1.,
31
nil;
32
} else {
33
- gradient = NSGradient alloc initWithColorsAndLocations:_darkestGradientColor, 0,
34
- NSColor clearColor, 1.,
35
+ gradient = NSGradient alloc initWithColorsAndLocations:self.darkestGradientColor, 0.,
36
+ NSColor.clearColor, 1.,
37
nil;
38
}
39
40
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/maininterface/compositor_dcomp.cpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/maininterface/compositor_dcomp.cpp
Changed
27
1
2
connect(quickViewPtr,
3
&QQuickWindow::sceneGraphInitialized,
4
&eventLoop,
5
- &eventLoop, &appropriateGraphicsApi() {
6
+ &eventLoop, &appropriateGraphicsApi, quickViewPtr() {
7
if (!(QQuickWindow::graphicsApi() == QSGRendererInterface::Direct3D11 ||
8
QQuickWindow::graphicsApi() == QSGRendererInterface::Direct3D12)) {
9
appropriateGraphicsApi = false;
10
}
11
+ else
12
+ {
13
+ quickViewPtr->show();
14
+ }
15
eventLoop.quit();
16
}, Qt::SingleShotConnection);
17
18
19
20
const bool ret = commonGUICreate(quickViewPtr, quickViewPtr, flags);
21
22
- m_quickView->show();
23
-
24
if (!m_quickView->isSceneGraphInitialized())
25
eventLoop.exec();
26
return (ret && appropriateGraphicsApi);
27
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/maininterface/compositor_wayland.cpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/maininterface/compositor_wayland.cpp
Changed
26
1
2
m_qmlView->setResizeMode(QQuickView::SizeRootObjectToView);
3
m_qmlView->setColor(QColor(Qt::transparent));
4
5
- m_qmlView->show();
6
+ m_qmlView->create();
7
8
QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
9
void* interfaceSurface = nativeInterface->nativeResourceForWindow("surface", m_qmlView.get());
10
11
12
m_waylandImpl->setupInterface(m_waylandImpl, interfaceSurface, dprForWindow(m_qmlView.get()));
13
14
- return commonGUICreate(m_qmlView.get(), m_qmlView.get(),
15
- CompositorVideo::CAN_SHOW_PIP | CompositorVideo::HAS_ACRYLIC);
16
+ const bool ret = commonGUICreate(m_qmlView.get(), m_qmlView.get(),
17
+ CompositorVideo::CAN_SHOW_PIP | CompositorVideo::HAS_ACRYLIC);
18
+
19
+ if (ret)
20
+ m_qmlView->show();
21
+
22
+ return ret;
23
}
24
25
QWindow* CompositorWayland::interfaceMainWindow() const
26
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/maininterface/compositor_win7.cpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/maininterface/compositor_win7.cpp
Changed
19
1
2
connect(m_nativeEventFilter.get(), &Win7NativeEventFilter::windowStyleChanged,
3
this, &CompositorWin7::resetVideoZOrder);
4
5
- m_qmlView->show();
6
-
7
m_qmlWindowHWND = (HWND)m_qmlView->winId();
8
9
- return commonGUICreate(m_qmlView.get(), m_qmlView.get(), CompositorVideo::CAN_SHOW_PIP);
10
+ const bool ret = commonGUICreate(m_qmlView.get(), m_qmlView.get(), CompositorVideo::CAN_SHOW_PIP);
11
+
12
+ if (ret)
13
+ m_qmlView->show();
14
+
15
+ return ret;
16
}
17
18
void CompositorWin7::destroyMainInterface()
19
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/maininterface/compositor_x11.cpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/maininterface/compositor_x11.cpp
Changed
20
1
2
3
m_qmlView->setFlag(Qt::WindowType::WindowTransparentForInput);
4
m_qmlView->setParent(m_renderWindow.get());
5
- m_qmlView->winId();
6
- m_qmlView->show();
7
-
8
+ m_qmlView->create();
9
CompositorVideo::Flags flags = CompositorVideo::CAN_SHOW_PIP | HAS_ACRYLIC;
10
if (m_renderWindow->supportExtendedFrame())
11
flags |= CompositorVideo::HAS_EXTENDED_FRAME;
12
if (!commonGUICreate(m_renderWindow.get(), m_qmlView.get(), flags))
13
return false;
14
15
+ m_qmlView->show();
16
+
17
if (m_blurBehind)
18
m_renderWindow->m_hasAcrylic = true;
19
20
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/maininterface/qml/MainViewLoader.qml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/maininterface/qml/MainViewLoader.qml
Changed
53
1
2
property var pagePrefix:
3
4
// optional, loaded when isLoading is true
5
+ // only loaded on initial load, when count is less then 1
6
property Component loadingComponent: null
7
8
// NOTE: Sometimes the model has no 'loading' property.
9
10
// NOTE: We have to use a Component here. When using a var the onCurrentComponentChanged event
11
// gets called multiple times even when the currentComponent stays the same.
12
property Component currentComponent: {
13
- if (isLoading) {
14
+ if (isLoading && count < 1) {
15
if (loadingComponent)
16
return loadingComponent
17
+ // fall through to load 'grid' or 'list' view
18
} else if (count === 0)
19
return emptyLabel
20
21
22
_updateView()
23
24
// NOTE: This call is useful to avoid a binding loop on currentComponent.
25
- currentComponentChanged.connect(function() { _updateView() })
26
+ currentComponentChanged.connect(_updateView)
27
}
28
29
onModelChanged: resetFocus()
30
31
function _updateView() {
32
// NOTE: When the currentItem is null we default to the StackView focusReason.
33
if (currentItem && currentItem.activeFocus)
34
- _applyView(currentItem.focusReason)
35
+ _loadView(currentItem.focusReason)
36
else if (activeFocus)
37
- _applyView(focusReason)
38
+ _loadView(focusReason)
39
else
40
- replace(null, currentComponent)
41
+ _loadView()
42
}
43
44
- function _applyView(reason) {
45
+ function _loadView(reason) {
46
replace(null, currentComponent)
47
48
- setCurrentItemFocus(reason)
49
+ if (typeof reason !== "undefined")
50
+ setCurrentItemFocus(reason)
51
}
52
}
53
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/maininterface/videosurface.cpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/maininterface/videosurface.cpp
Changed
34
1
2
setAcceptedMouseButtons(Qt::AllButtons);
3
setFlag(ItemAcceptsInputMethod, true);
4
setFlag(ItemHasContents, true);
5
-
6
- connect(this, &QQuickItem::xChanged, this, &VideoSurface::onSurfacePositionChanged);
7
- connect(this, &QQuickItem::yChanged, this, &VideoSurface::onSurfacePositionChanged);
8
- connect(this, &QQuickItem::widthChanged, this, &VideoSurface::onSurfaceSizeChanged);
9
- connect(this, &QQuickItem::heightChanged, this, &VideoSurface::onSurfaceSizeChanged);
10
- connect(this, &VideoSurface::enabledChanged, this, &VideoSurface::updatePositionAndSize);
11
}
12
13
MainCtx* VideoSurface::getCtx()
14
15
return node;
16
}
17
18
+void VideoSurface::componentComplete()
19
+{
20
+ ViewBlockingRectangle::componentComplete();
21
+
22
+ connect(this, &QQuickItem::xChanged, this, &VideoSurface::onSurfacePositionChanged);
23
+ connect(this, &QQuickItem::yChanged, this, &VideoSurface::onSurfacePositionChanged);
24
+ connect(this, &QQuickItem::widthChanged, this, &VideoSurface::onSurfaceSizeChanged);
25
+ connect(this, &QQuickItem::heightChanged, this, &VideoSurface::onSurfaceSizeChanged);
26
+ connect(this, &VideoSurface::enabledChanged, this, &VideoSurface::updatePositionAndSize);
27
+
28
+ updatePositionAndSize();
29
+}
30
+
31
void VideoSurface::onProviderVideoChanged(bool hasVideo)
32
{
33
if (!hasVideo)
34
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/maininterface/videosurface.hpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/maininterface/videosurface.hpp
Changed
10
1
2
3
QSGNode* updatePaintNode(QSGNode *, QQuickItem::UpdatePaintNodeData *) override;
4
5
+ void componentComplete() override;
6
+
7
signals:
8
void ctxChanged(MainCtx*);
9
void surfaceSizeChanged(QSizeF);
10
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/medialibrary/qml/VideoAllSubDisplay.qml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/medialibrary/qml/VideoAllSubDisplay.qml
Changed
10
1
2
property SortMenuVideo sortMenu: SortMenuVideo {
3
ctx: MainCtx
4
5
- onGrouping: (groupping) => { MainCtx.grouping = grouping }
6
+ onGrouping: (grouping) => { MainCtx.grouping = grouping }
7
}
8
9
// Private
10
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/network/networkmediamodel.hpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/network/networkmediamodel.hpp
Changed
9
1
2
inline ItemType getType() const { return m_type; }
3
inline bool isIndexed() const { return m_indexed; }
4
inline bool canBeIndexed() const { return m_canBeIndexed; }
5
- int getCount() const;
6
7
Q_INVOKABLE bool insertIntoPlaylist( const QModelIndexList& itemIdList, ssize_t playlistIndex );
8
Q_INVOKABLE bool addToPlaylist( int index );
9
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/network/qml/BrowseTreeDisplay.qml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/network/qml/BrowseTreeDisplay.qml
Changed
200
1
2
readonly property int contentLeftMargin: currentItem?.contentLeftMargin ?? 0
3
readonly property int contentRightMargin: currentItem?.contentRightMargin ?? 0
4
5
- // 'loading' property is not available with NetworkDevicesModel
6
- readonly property bool loading: model?.loading ?? false
7
-
8
// fixme remove this
9
property Item _currentView: currentItem
10
11
12
grid: gridComponent
13
list: tableComponent
14
15
- loadingComponent: emptyLabelComponent
16
+ loadingComponent: busyIndicatorComponent
17
18
emptyLabel: emptyLabelComponent
19
20
21
Component {
22
id: emptyLabelComponent
23
24
- FocusScope {
25
- id: focusScope
26
+ StandardView {
27
+ view: Widgets.EmptyLabelButton {
28
+ id: emptyLabel
29
30
- // NOTE: This is required to pass the focusReason when the current view changes in
31
- // MainViewLoader.
32
- property int focusReason: (header.activeFocus) ? header.focusReason
33
- : emptyLabel.focusReason
34
+ visible: !root.isLoading
35
36
- Navigation.navigable: layout.Navigation.navigable || (emptyLabel.visible && emptyLabel.button.enabled)
37
+ // FIXME: find better cover
38
+ cover: VLCStyle.noArtVideoCover
39
+ coverWidth : VLCStyle.dp(182, VLCStyle.scale)
40
+ coverHeight: VLCStyle.dp(114, VLCStyle.scale)
41
42
- // used by MainDisplay to transfer focus
43
- function setCurrentItemFocus(reason) {
44
- if (!Navigation.navigable)
45
- return
46
+ text: qsTr("Nothing to see here, go back.")
47
48
- if (header.Navigation.navigable)
49
- Helpers.enforceFocus(header, reason)
50
- else
51
- Helpers.enforceFocus(emptyLabel, reason)
52
- }
53
+ button.iconTxt: VLCIcons.back
54
+ button.text: qsTr("Back")
55
+ button.enabled: !History.previousEmpty
56
+ button.width: button.implicitWidth
57
+
58
+ function onNavigate(reason) {
59
+ History.previous(reason)
60
+ }
61
+
62
+ Layout.fillHeight: true
63
+ Layout.fillWidth: true
64
65
- ColumnLayout {
66
- id: layout
67
+ Navigation.parentItem: root
68
+ }
69
+ }
70
+ }
71
72
- anchors.fill: parent
73
+ Component {
74
+ id: busyIndicatorComponent
75
76
- BrowseTreeHeader {
77
- id: header
78
+ StandardView {
79
+ view: Item {
80
+ Navigation.navigable: false
81
82
- focus: true
83
+ visible: root.isLoading
84
85
- providerModel: root.model
86
+ Layout.fillHeight: true
87
+ Layout.fillWidth: true
88
89
- Layout.fillWidth: true
90
+ Widgets.BusyIndicatorExt {
91
+ id: busyIndicator
92
93
- Navigation.parentItem: root
94
- Navigation.downItem: emptyLabel
95
+ runningDelayed: root.isLoading
96
+ anchors.centerIn: parent
97
+ z: 1
98
}
99
+ }
100
+ }
101
+ }
102
103
- Widgets.EmptyLabelButton {
104
- id: emptyLabel
105
+ // Helper view i.e a ColumnLayout with BrowseHeader
106
+ component StandardView : FocusScope {
107
+ required property Item view
108
109
- visible: !root.loading
110
+ // NOTE: This is required to pass the focusReason when the current view changes in
111
+ // MainViewLoader.
112
+ property int focusReason: (header.activeFocus) ? header.focusReason
113
+ : view?.focusReason ?? Qt.NoFocusReason
114
115
- // FIXME: find better cover
116
- cover: VLCStyle.noArtVideoCover
117
- coverWidth : VLCStyle.dp(182, VLCStyle.scale)
118
- coverHeight: VLCStyle.dp(114, VLCStyle.scale)
119
+ // used by MainDisplay to transfer focus
120
+ function setCurrentItemFocus(reason) {
121
+ if (!Navigation.navigable)
122
+ return
123
124
- text: qsTr("Nothing to see here, go back.")
125
+ if (header.Navigation.navigable)
126
+ Helpers.enforceFocus(header, reason)
127
+ else
128
+ Helpers.enforceFocus(view, reason)
129
+ }
130
131
- button.iconTxt: VLCIcons.back
132
- button.text: qsTr("Back")
133
- button.enabled: !History.previousEmpty
134
- button.width: button.implicitWidth
135
+ onViewChanged: {
136
+ if (layout.children.length === 2)
137
+ layout.children.pop()
138
139
- function onNavigate(reason) {
140
- History.previous(reason)
141
- }
142
+ layout.children.push(view)
143
+ view.Navigation.upAction = function () {
144
+ // FIXME: for some reason default navigation flow doesn't work
145
+ // i.e setting Navigtaion.upItem doesn't fallthrough to parent's
146
+ // action if it's navigable is false
147
148
- Layout.fillHeight: true
149
- Layout.fillWidth: true
150
+ if (header.Navigation.navigable)
151
+ header.forceActiveFocus(Qt.BacktabFocusReason)
152
+ else
153
+ return false // fallthrough default action
154
+ }
155
+ }
156
157
- Navigation.parentItem: root
158
- Navigation.upAction: function () {
159
- // FIXME: for some reason default navigation flow doesn't work
160
- // i.e setting Navigtaion.upItem doesn't fallthrough to parent's
161
- // action if Navigtaion.upItem.Navigtaion.navigble is false
162
+ ColumnLayout {
163
+ id: layout
164
165
- if (header.Navigation.navigable)
166
- header.forceActiveFocus(Qt.TabFocusReason)
167
- else
168
- return false // fallthrough default action
169
- }
170
- }
171
+ anchors.fill: parent
172
173
- Item {
174
- visible: root.loading
175
+ BrowseTreeHeader {
176
+ id: header
177
178
- Layout.fillHeight: true
179
- Layout.fillWidth: true
180
+ focus: true
181
182
- Widgets.BusyIndicatorExt {
183
- id: busyIndicator
184
+ providerModel: root.model
185
186
- runningDelayed: root.loading
187
- anchors.centerIn: parent
188
- z: 1
189
- }
190
- }
191
+ Layout.fillWidth: true
192
+
193
+ Navigation.parentItem: root
194
+ Navigation.downItem: (view.Navigation.navigable) ? view : null
195
}
196
}
197
-
198
}
199
}
200
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/network/qml/BrowseTreeHeader.qml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/network/qml/BrowseTreeHeader.qml
Changed
44
1
2
import "qrc:///widgets/" as Widgets
3
import "qrc:///style/"
4
5
-T.Control {
6
+T.Pane {
7
id: root
8
9
// Network* model
10
11
colorSet: ColorContext.View
12
}
13
14
- height: implicitHeight
15
- implicitHeight: layout.implicitHeight + topPadding + bottomPadding
16
-
17
topPadding: VLCStyle.layoutTitle_top_padding
18
bottomPadding: VLCStyle.layoutTitle_bottom_padding
19
20
- focus: medialibraryBtn.visible
21
+ height: implicitHeight
22
+ implicitHeight: layout.implicitHeight + topPadding + bottomPadding
23
+ implicitWidth: layout.implicitWidth + leftPadding + rightPadding
24
25
+ focus: medialibraryBtn.visible
26
Navigation.navigable: medialibraryBtn.visible
27
28
RowLayout {
29
id: layout
30
31
- anchors {
32
- fill: parent
33
-
34
- leftMargin: root.leftPadding
35
- rightMargin: root.rightPadding
36
-
37
- topMargin: root.topPadding
38
- bottomMargin: root.bottomPadding
39
- }
40
+ anchors.fill: parent
41
42
Widgets.SubtitleLabel {
43
text: providerModel.name
44
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/player/player_controlbar_model.cpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/player/player_controlbar_model.cpp
Changed
33
1
2
return m_dirty;
3
}
4
5
+bool PlayerControlbarModel::empty() const
6
+{
7
+ return m_empty;
8
+}
9
+
10
std::array<QVector<int>, 3> PlayerControlbarModel::serializeModels() const
11
{
12
return { left()->getControls(),
13
14
{
15
setDirty(true);
16
17
+ {
18
+ bool empty = true;
19
+ if ((m_left && m_left->rowCount() > 0) ||
20
+ (m_center && m_center->rowCount() > 0) ||
21
+ (m_right && m_right->rowCount() > 0))
22
+ empty = false;
23
+
24
+ if (empty != m_empty)
25
+ {
26
+ m_empty = empty;
27
+ emit emptyChanged(empty);
28
+ }
29
+ }
30
+
31
emit controlListChanged();
32
}
33
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/player/player_controlbar_model.hpp -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/player/player_controlbar_model.hpp
Changed
30
1
2
Q_OBJECT
3
4
Q_PROPERTY(bool dirty READ dirty WRITE setDirty NOTIFY dirtyChanged FINAL)
5
+ Q_PROPERTY(bool empty READ empty NOTIFY emptyChanged FINAL)
6
7
Q_PROPERTY(ControlListModel* left READ left CONSTANT FINAL)
8
Q_PROPERTY(ControlListModel* center READ center CONSTANT FINAL)
9
10
~PlayerControlbarModel();
11
12
bool dirty() const;
13
+ bool empty() const;
14
15
std::array<QVector<int>, 3> serializeModels() const;
16
void loadModels(const std::array<QVector<int>, 3>& array);
17
18
19
signals:
20
void dirtyChanged(bool dirty);
21
+ void emptyChanged(bool);
22
void controlListChanged();
23
24
private:
25
bool m_dirty = false;
26
+ bool m_empty = true;
27
28
ControlListModel* m_left = nullptr;
29
ControlListModel* m_center = nullptr;
30
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/player/qml/ControlBar.qml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/player/qml/ControlBar.qml
Changed
10
1
2
implicitHeight: MainCtx.pinVideoControls ? VLCStyle.controlLayoutHeightPinned
3
: VLCStyle.controlLayoutHeight
4
5
+ visible: !model?.empty ?? false
6
+
7
Navigation.upItem: trackPositionSlider.enabled ? trackPositionSlider : root.Navigation.upItem
8
9
onRequestLockUnlockAutoHide: (lock) => root.requestLockUnlockAutoHide(lock)
10
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/player/qml/PlayerControlLayout.qml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/player/qml/PlayerControlLayout.qml
Changed
11
1
2
implicitWidth: loaderLeftRight.active ? loaderLeftRight.implicitWidth
3
: (loaderLeft.implicitWidth + loaderCenter.implicitWidth + loaderRight.implicitWidth)
4
5
- implicitHeight: Math.max(loaderLeft.implicitHeight, loaderCenter.implicitHeight, loaderRight.implicitHeight)
6
+ implicitHeight: loaderLeftRight.active ? loaderLeftRight.implicitHeight
7
+ : Math.max(loaderLeft.implicitHeight, loaderCenter.implicitHeight, loaderRight.implicitHeight)
8
9
// Events
10
11
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/modules/gui/qt/widgets/qml/TextFieldExt.qml -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/modules/gui/qt/widgets/qml/TextFieldExt.qml
Changed
14
1
2
selectedTextColor : theme.fg.highlight
3
selectionColor : theme.bg.highlight
4
color : theme.fg.primary
5
+ placeholderTextColor: theme.fg.secondary
6
+
7
font.pixelSize: VLCStyle.fontSize_normal
8
9
+ verticalAlignment: Text.AlignVCenter
10
+
11
background: Rectangle {
12
implicitWidth: 200
13
implicitHeight: 40
14
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/src/audio_output/dec.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/src/audio_output/dec.c
Changed
22
1
2
{
3
vlc_mutex_lock(&stream->timing.lock);
4
5
- if (unlikely(stream->timing.first_pts == VLC_TICK_INVALID))
6
- {
7
- /* While closing the stream, it is possible (but unlikely) that the
8
- * module updates a timing point just after the stream is reset, and
9
- * just before the module is stopped. */
10
- vlc_mutex_unlock(&stream->timing.lock);
11
- return;
12
- }
13
-
14
vlc_tick_t rate_audio_ts = stream->timing.rate_audio_ts;
15
vlc_tick_t rate_system_ts = stream->timing.rate_system_ts;
16
17
- audio_ts += stream->timing.first_pts;
18
-
19
if (rate_audio_ts != VLC_TICK_INVALID)
20
{
21
/* Drop timing updates that comes before the rate change */
22
_service:obs_scm:vlc-beta-20240510.24e663be6f.obscpio/test/src/player/player.c -> _service:obs_scm:vlc-beta-20240517.361f419997.obscpio/test/src/player/player.c
Changed
34
1
2
3
struct aout_sys
4
{
5
+ vlc_tick_t first_pts;
6
vlc_tick_t first_play_date;
7
vlc_tick_t pos;
8
};
9
10
struct aout_sys *sys = aout->sys;
11
12
if (sys->first_play_date == VLC_TICK_INVALID)
13
+ {
14
+ assert(sys->first_pts == VLC_TICK_INVALID);
15
sys->first_play_date = date;
16
+ sys->first_pts = block->i_pts;
17
+ }
18
19
- aout_TimingReport(aout, sys->first_play_date + sys->pos - VLC_TICK_0, sys->pos);
20
+ aout_TimingReport(aout, sys->first_play_date + sys->pos - VLC_TICK_0,
21
+ sys->first_pts + sys->pos);
22
sys->pos += block->i_length;
23
block_Release(block);
24
}
25
26
{
27
struct aout_sys *sys = aout->sys;
28
sys->pos = 0;
29
- sys->first_play_date = VLC_TICK_INVALID;
30
+ sys->first_pts = sys->first_play_date = VLC_TICK_INVALID;
31
}
32
33
static int aout_Start(audio_output_t *aout, audio_sample_format_t *restrict fmt)
34
_service:obs_scm:vlc-beta.obsinfo
Changed
9
1
2
name: vlc-beta
3
-version: 20240510.24e663be6f
4
-mtime: 1715348858
5
-commit: 24e663be6f40820db3c12f32f0d2772ef7abaaff
6
+version: 20240517.361f419997
7
+mtime: 1715931988
8
+commit: 361f419997a2f325c3534d34fdc4b0d24cc4a85a
9