Skip to content

Commit 97db5f8

Browse files
Merge branch 'main' into vulkna-10bit-windows
2 parents eab360c + 0c92273 commit 97db5f8

55 files changed

Lines changed: 3359 additions & 1912 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/build-linux/action.yml

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,22 @@ runs:
5050
run: df -h /
5151
shell: bash
5252

53-
# Rocky 9.8 dropped mesa-libOSMesa{,-devel} from the CRB repo. Pin all
54-
# subsequent dnf calls in this container to the 9.7 minor release until
55-
# OpenRV migrates off OSMesa. Remove this step once that's done.
56-
- name: Pin Rocky 9 to 9.7 minor release
53+
# Rocky 9.8 dropped mesa-libOSMesa{,-devel} from the CRB repo (Mesa upstream
54+
# deprecated OSMesa in favor of llvmpipe via EGL). Pin all subsequent dnf
55+
# calls in this container to the 9.7 minor release until OpenRV migrates off
56+
# OSMesa. 9.7 is now a superseded minor, so the production CDN no longer
57+
# serves it (the default 'extras' repo 404s); point the pinned repos at the
58+
# durable vault archive (dl.rockylinux.org/vault) instead. Remove this whole
59+
# step once OpenRV no longer needs OSMesa.
60+
- name: Pin Rocky 9 to 9.7 minor release (vault)
5761
if: ${{ inputs.rocky-version == '9' }}
58-
run: echo "9.7" > /etc/dnf/vars/releasever
62+
run: |
63+
echo "9.7" > /etc/dnf/vars/releasever
64+
sed -i \
65+
-e 's|^mirrorlist=|#mirrorlist=|g' \
66+
-e 's|^#\?baseurl=https\?://dl.rockylinux.org/\$contentdir/|baseurl=https://dl.rockylinux.org/vault/rocky/|g' \
67+
/etc/yum.repos.d/[Rr]ocky*.repo
68+
dnf clean all
5969
shell: bash
6070

6171
- name: Install system dependencies

.github/workflows/conan.yml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,15 @@ jobs:
100100
# Rocky 9.8 dropped mesa-libOSMesa{,-devel} from the CRB repo. Pin all
101101
# subsequent dnf calls in this container to the 9.7 minor release until
102102
# OpenRV migrates off OSMesa. Remove this step once that's done.
103-
- name: Pin Rocky 9 to 9.7 minor release
103+
- name: Pin Rocky 9 to 9.7 minor release (vault)
104104
if: ${{ matrix.rocky-version == '9' }}
105-
run: echo "9.7" > /etc/dnf/vars/releasever
105+
run: |
106+
echo "9.7" > /etc/dnf/vars/releasever
107+
sed -i \
108+
-e 's|^mirrorlist=|#mirrorlist=|g' \
109+
-e 's|^#\?baseurl=https\?://dl.rockylinux.org/\$contentdir/|baseurl=https://dl.rockylinux.org/vault/rocky/|g' \
110+
/etc/yum.repos.d/[Rr]ocky*.repo
111+
dnf clean all
106112
107113
- name: Install system dependencies
108114
run: |

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,6 @@ rvnuke_mode.mu
4949
*_rc.py
5050
# see generate_about_rv.py
5151
about_rv.cpp
52+
53+
# Dear ImgGui generated
54+
imgui.ini

.gitmodules

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,7 @@
33
url = https://github.com/shotgunsoftware/openrv-WFObj.git
44
[submodule "src/pub"]
55
path = src/pub
6-
url = https://github.com/shotgunsoftware/openrv-pub.git
6+
url = https://github.com/shotgunsoftware/openrv-pub.git
7+
[submodule "src/lib/geometry/twkpaint-src"]
8+
path = src/lib/geometry/twkpaint-src
9+
url = https://github.com/AcademySoftwareFoundation/OpenRV-annotation.git

cmake/defaults/rv_options.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ SET(RV_FFMPEG_SUPPORTED_OPTIONS
9595
)
9696
# Default option
9797
SET(_RV_FFMPEG
98-
"6"
98+
"8"
9999
)
100100

101101
IF(DEFINED RV_FFMPEG)

cmake/dependencies/ffmpeg.cmake

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,24 @@ IF(NOT RV_FFMPEG_CONFIG_OPTIONS)
234234
"vp9_v4l2m2m"
235235
)
236236

237+
# FFmpeg 8 introduced the prores_raw decoder, which (like the prores decoder) pulls in libavcodec/x86/proresdsp_init.o. That C init references the SSE2 asm
238+
# symbol ff_prores_idct_put_10_sse2, but the asm that defines it (x86/proresdsp.o) is only built when CONFIG_PRORES_DECODER is enabled. Because we disable the
239+
# non-free prores decoder above, leaving prores_raw enabled produces an undefined symbol in libavcodec on x86 (mio_ffmpeg fails to dlopen). Disable prores_raw
240+
# too for consistency with our non-free ProRes policy. Guarded on RV_FFMPEG_8 since the decoder does not exist in FFmpeg 6/7 and --disable-decoder on an
241+
# unknown decoder makes FFmpeg's configure fail.
242+
IF(RV_FFMPEG_8)
243+
LIST(APPEND NON_FREE_DECODERS_TO_DISABLE "prores_raw")
244+
245+
# We disable the non-free ac3 decoder above, which (via eac3_decoder_select="ac3_decoder") also disables the eac3 decoder, so CONFIG_EAC3_DECODER=0. But the
246+
# ac3_fixed decoder is left enabled, so libavcodec/ac3dec_fixed.c (which #includes ac3dec.c) is still compiled. With eac3 disabled, eac3dec.c -- which
247+
# defines the static ff_eac3_parse_header -- is never included into that TU, yet ac3dec.c still names the symbol in its `if (CONFIG_EAC3_DECODER)` branch.
248+
# GCC/Clang dead-code-eliminate the dead branch and only warn, but MSVC treats the referenced-but-undefined static as a fatal error C2129, breaking the
249+
# FFmpeg 8 build on Windows. ac3_fixed is the same non-free AC3 codec, so disable it (and eac3 explicitly) to drop the offending TU. Guarded on RV_FFMPEG_8
250+
# to keep the existing FFmpeg 6/7 builds unchanged.
251+
LIST(APPEND NON_FREE_DECODERS_TO_DISABLE "ac3_fixed")
252+
LIST(APPEND NON_FREE_DECODERS_TO_DISABLE "eac3")
253+
ENDIF()
254+
237255
FOREACH(
238256
NON_FREE_DECODER_TO_DISABLE
239257
${NON_FREE_DECODERS_TO_DISABLE}

cmake/dependencies/openssl.cmake

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -244,11 +244,7 @@ ENDIF()
244244
# For found packages, expose the pkgconfig directory so FFmpeg's configure can detect OpenSSL via pkg-config. This is critical on Windows where FFmpeg's
245245
# fallback `-lssl -lcrypto` translates to `ssl.lib`/`crypto.lib` (MSVC literal name), but vcpkg/OpenSSL 3.x ships `libssl.lib`/`libcrypto.lib`. The .pc files
246246
# contain the correct `-llibssl -llibcrypto` flags. On Unix this is also useful when the found package is in a non-standard prefix.
247-
IF(${_target}_FOUND
248-
AND EXISTS "${_lib_dir}/pkgconfig"
247+
SET_PROPERTY(
248+
GLOBAL APPEND
249+
PROPERTY "RV_DEPS_PKG_CONFIG_PATH" "${_lib_dir}/pkgconfig"
249250
)
250-
SET_PROPERTY(
251-
GLOBAL APPEND
252-
PROPERTY "RV_DEPS_PKG_CONFIG_PATH" "${_lib_dir}/pkgconfig"
253-
)
254-
ENDIF()

src/build/requirements.txt.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ numpy==@_numpy_version@ # License: BSD License (BSD-3-Clause) - Required by PySi
1515
opentimelineio @ git+https://github.com/cedrik-fuoco-adsk/OpenTimelineIO.git@fix-windows-debug-crash # License: Other/Proprietary License (Modified Apache 2.0 License)
1616
PyOpenGL==3.1.7 # License: BSD License (BSD)
1717
PyOpenGL_accelerate==3.1.10 # License: BSD License (BSD) - v3.1.10 includes Python 3 fix for Cython compatibility
18+
psutil==7.2.2 # License: BSD License (BSD-3-Clause)
1819

1920
# Additional packages required by RV and for testing the Python distribution
2021

src/lib/app/RvApp/RvSession.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,7 @@ namespace Rv
701701
if (string(extension(infiles[i])) == "rv")
702702
++rvFileCount;
703703

704-
if (rvFileCount > 1)
704+
if (rvFileCount && infiles.size() > 1)
705705
merge = true;
706706

707707
// PROGLOAD this func should take tag for when called from mu
@@ -3920,7 +3920,37 @@ namespace Rv
39203920
setSequenceEvents();
39213921
}
39223922

3923-
void RvSession::onGraphMediaSetEmpty() { userGenericEvent("after-progressive-loading", ""); }
3923+
void RvSession::onGraphMediaSetEmpty()
3924+
{
3925+
// The media-loading set can become transiently empty *between* sources
3926+
// while we are still progressively adding the sources of a single load
3927+
// request (e.g. when dropping multiple files). continueLoading() adds
3928+
// one source per event-loop iteration, so source N can finish loading
3929+
// in the gap before source N+1 starts, momentarily emptying the set.
3930+
//
3931+
// While m_loadState is still alive, more sources are about to be added
3932+
// and more media will start loading, so an empty set here is only
3933+
// transient. Emitting after-progressive-loading in that case would
3934+
// produce one after-progressive-loading event per source for a single
3935+
// before-progressive-loading event.
3936+
//
3937+
// We therefore only emit the event once the load request has been fully
3938+
// consumed (m_loadState == nullptr), i.e. once every source has been
3939+
// added and all of their media have finished loading. This guarantees a
3940+
// single after-progressive-loading event matching the single
3941+
// before-progressive-loading event.
3942+
//
3943+
// Note: this runs on the main thread (media completion is marshalled via
3944+
// dispatchToMainThread), serialized with continueLoading() which deletes
3945+
// m_loadState before returning -- so this read of m_loadState is safe and
3946+
// always observes the final state.
3947+
if (m_loadState != nullptr)
3948+
{
3949+
return;
3950+
}
3951+
3952+
userGenericEvent("after-progressive-loading", "");
3953+
}
39243954

39253955
// connects events from the sequence IP node
39263956
//

src/lib/app/RvCommon/RvApplication.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -908,11 +908,20 @@ namespace Rv
908908
//
909909
s->userGenericEvent("session-initialized", "");
910910

911-
if (s->loadTotal() == 0)
912911
//
913-
// We will not be loading media at all, so send
914-
// after-progressive-loading event.
912+
// If files were requested but none of them resulted in any media to
913+
// load (loadTotal() == 0), the asynchronous loading mechanism will
914+
// never emit the after-progressive-loading event that closes the
915+
// before-progressive-loading event emitted while processing those
916+
// files, so we emit it here.
915917
//
918+
// However, when no files were requested at all (e.g. launching RV with
919+
// an empty session), no before-progressive-loading event was ever
920+
// emitted, so emitting after-progressive-loading here would produce an
921+
// unmatched event. We therefore only emit it when files were actually
922+
// requested.
923+
//
924+
if (s->loadTotal() == 0 && !files.empty())
916925
{
917926
s->userGenericEvent("after-progressive-loading", "");
918927
}

0 commit comments

Comments
 (0)