Patch SVT-AV1 to avoid corrupted files with MSVC (#3257)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a0a8d88..d743ef8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,9 @@
 
 * Update LocalAvm.cmake: v1.0.0
 * Copy XMP/Exif in avifgainmaputil tonemap
+* Apply patch to SVT-AV1 with AVIF_CODEC_SVT=LOCAL to fix corrupted encoded
+  files when SVT-AV1 is built with MSVC. See
+  https://github.com/AOMediaCodec/libavif/issues/3255.
 
 ## [1.4.2] - 2026-05-26
 
diff --git a/cmake/Modules/LocalSvt.cmake b/cmake/Modules/LocalSvt.cmake
index 770989a..33a1d5d 100644
--- a/cmake/Modules/LocalSvt.cmake
+++ b/cmake/Modules/LocalSvt.cmake
@@ -42,6 +42,8 @@
         GIT_TAG "${AVIF_SVT_GIT_TAG}"
         UPDATE_COMMAND ""
         GIT_SHALLOW ON
+        # See https://github.com/AOMediaCodec/libavif/issues/3255.
+        PATCH_COMMAND git apply ${AVIF_SOURCE_DIR}/cmake/Modules/LocalSvt.diff
     )
 
     set(BUILD_DEC OFF CACHE BOOL "")
diff --git a/cmake/Modules/LocalSvt.diff b/cmake/Modules/LocalSvt.diff
new file mode 100644
index 0000000..72d88ef
--- /dev/null
+++ b/cmake/Modules/LocalSvt.diff
@@ -0,0 +1,19 @@
+diff --git a/Source/Lib/ASM_AVX2/synonyms_avx2.h b/Source/Lib/ASM_AVX2/synonyms_avx2.h
+index ce35493..48fef09 100644
+--- a/Source/Lib/ASM_AVX2/synonyms_avx2.h
++++ b/Source/Lib/ASM_AVX2/synonyms_avx2.h
+@@ -83,7 +83,13 @@ static INLINE __m256i yy_loadu2_128(const void* hi, const void* lo) {
+     return yy_set_m128i(mhi, mlo);
+ }
+ 
+-static INLINE __m256i yy_unpacklo_epi128(const __m256i in0, const __m256i in1) {
++#if defined(_MSC_VER) && _MSC_VER >= 1950
++#define MAYBE_INLINE NOINLINE
++#else
++#define MAYBE_INLINE INLINE
++#endif
++
++static MAYBE_INLINE __m256i yy_unpacklo_epi128(const __m256i in0, const __m256i in1) {
+     return _mm256_inserti128_si256(in0, _mm256_castsi256_si128(in1), 1);
+ }
+