Re: graphics/ffmpeg: update to 9.0.1

Theo Buehler <[email protected]>
Newsgroups gmane.os.openbsd.ports
Message-ID <[email protected]>
On Mon, Aug 24, 2026 at 12:02:38PM +0200, Kirill A. Korinsky wrote:
> On Mon, 24 Aug 2026 10:09:10 +0200,
> Theo Buehler <[email protected]> wrote:
> > 
> > On Mon, Aug 24, 2026 at 12:25:19AM +0200, Kirill A. Korinsky wrote:
> > > On Sun, 23 Aug 2026 16:22:53 +0200,
> > > Theo Buehler <[email protected]> wrote:
> > > > 
> > > > On Sun, Aug 23, 2026 at 06:50:10AM -0400, Brad Smith wrote:
> > > > > On Sun, Aug 23, 2026 at 10:53:25AM +0200, Kirill A. Korinsky wrote:
> > > > > > On Thu, 13 Aug 2026 12:13:54 +0200,
> > > > > > Kirill A. Korinsky <[email protected]> wrote:
> > > > > > > 
> > > > > > > ports@, Brad,
> > > > > > > 
> > > > > > > here a diff to update graphics/ffmpeg to 9.0.1, and it fixes and bumps
> > > > > > > x11/mplayer as well.
> > > > > > > 
> > > > > > > Bulk on amd64 with previous diffs and this one successeded, unsigned
> > > > > > > packages available here: https://kirill.korins.ky/pub/packages/ffmpeg-9.0.1/
> > > > > > > 
> > > > > > > Tests and OKs are welcome.
> > > > > > > 
> > > > > > 
> > > > > > The previous version was without subject what is fixed now.
> > > > > > 
> > > > > > Also, it survives a few bulks on amd64 but I haven't tested BTI/IBT amd64,
> > > > > > so any tests are welcome.
> > > > > 
> > > > > Here is an updated diff. The configure patch SSL changes can be
> > > > > simplified a bit and add in my MIPS fix for CABAC.
> > > > 
> > > > It works for me in some light testing. Tests run into segfaults on both
> > > > amd64 and arm64, which is not necessarily a blocker but a bit annoying.
> > > > 
> > > > Quite a few tests do run with amd64/ibt without SIGILL, so that is
> > > > reassuring.
> > > > 
> > > > 
> > > > apple M1:
> > > > 
> > > > NEON:
> > > > FAILURE: float_fft_16384_neon (segmentation fault)
> > > >  - av_tx             [FAILED]
> > > > checkasm: 1 of 8 tests failed
> > > > threads=1
> > > > 
> > > > on both
> > > > 
> > > > cpu0: 12th Gen Intel(R) Core(TM) i7-1260P, 1995.55 MHz, 06-9a-03, patch 0000043b
> > > > cpu0: AMD Ryzen 7 PRO 5850U with Radeon Graphics, 1900.00 MHz, 19-50-00, patch 0a500012
> > > > 
> > > > I see this:
> > > > 
> > > > ffmpeg version 9.0.1 Copyright (c) 2000-2026 the FFmpeg developers
> > > >   built with OpenBSD clang version 22.1.6
> > > >   configuration: --enable-shared --arch=amd64 --cc=cc --cxx=c++ --enable-debug --disable-stripping --disable-indev=jack --disable-vulkan --enable-fontconfig --enable-frei0r --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libdav1d --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libopus --enable-libspeex --enable-libsvtav1 --enable-libtheora --enable-libv4l2 --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-nonfree --enable-openssl --enable-libvidstab --extra-cflags='-I/usr/local/include -I/usr/X11R6/include' --extra-libs='-L/usr/local/lib -L/usr/X11R6/lib' --extra-ldsoflags= --mandir=/u
 sr/local/man --objcc=/usr/bin/false --optflags='-O2 -pipe -g -Wno-redundant-decls'
> > > >   libavutil      61.  1.101 / 61.  1.101
> > > >   libavcodec     63.  1.101 / 63.  1.101
> > > >   libavformat    63.  1.101 / 63.  1.101
> > > >   libavdevice    63.  1.101 / 63.  1.101
> > > >   libavfilter    12.  1.101 / 12.  1.101
> > > >   libswscale     10.  1.101 / 10.  1.101
> > > >   libswresample   7.  1.101 /  7.  1.101
> > > > Stream mapping:
> > > >   crop:default -> Stream #0:0 (rawvideo)
> > > > Segmentation fault (core dumped) 
> > > > threads=1
> > > > 
> > > > Program terminated with signal SIGSEGV, Segmentation fault.
> > > > #0  memcpy (dst0=0xf3c943c2000, src0=0xf3c87d941c4 <ff_init_hscaler_mmxext+180>, length=44)
> > > >     at /usr/src/lib/libc/string/memcpy.c:97
> > > > 97			TLOOP1(*dst++ = *src++);
> > > > [Current thread is 1 (process 148644)]
> > > > (gdb) bt
> > > > #0  memcpy (dst0=0xf3c943c2000, src0=0xf3c87d941c4 <ff_init_hscaler_mmxext+180>, length=44)
> > > >     at /usr/src/lib/libc/string/memcpy.c:97
> > > > #1  0x00000f3c87d943b5 in ff_init_hscaler_mmxext (dstW=40032, xInc=65504,
> > > >     filterCode=0xf3c943c2000 "", filter=0xf3bda2a8000, filterPos=0xf3c966f6000,
> > > >     numSplits=<optimized out>) at src/libswscale/x86/hscale_fast_bilinear_simd.c:157
> > > > #2  0x00000f3c87d90eb0 in ff_sws_init_single_context (sws=0xf3c09903000,
> > > >     srcFilter=0xf3c227dd770, dstFilter=0xf3c227dd770) at src/libswscale/utils.c:1705
> > > > #3  0x00000f3c87c9c8ab in add_legacy_sws_pass (graph=0xf3c2131d400, src=0xf3c227dd988,
> > > >     dst=0xf3c227dd900, input=0x0, output=0xf3c227dd8e8) at src/libswscale/graph.c:584
> > > > 
> > > > 
> > > 
> > > Thanks for testing amd64, here updated diff which fixes a bug.
> > 
> > Thanks. Makes sense and passes regress on my IBT machine.
> 
> I have an idea what can trigger crash on your M1, it uses ldr =constant
> instruction which should crash when it tries to read from segment without
> read permission.
> 
> So, here a blind short. May I ask you to give it a try?
> 

Not quite enough. The below passes regress on my m1. Would be nice if
someone with a bti-capable machine could run regress.

The vc1dsp_neon.S diff is pretty ugly. I hope there's a better way...


Index: graphics/ffmpeg/Makefile
===================================================================
RCS file: /cvs/ports/graphics/ffmpeg/Makefile,v
diff -u -p -r1.260 Makefile
--- graphics/ffmpeg/Makefile	17 Jun 2026 17:13:06 -0000	1.260
+++ graphics/ffmpeg/Makefile	24 Aug 2026 15:12:25 -0000
@@ -1,7 +1,7 @@
 COMMENT=	audio/video converter and streamer
 
 # keep it synced with x11/mplayer
-V=		8.1.2
+V=		9.0.1
 DISTNAME=	ffmpeg-${V}
 CATEGORIES=	graphics multimedia
 SITES=		https://ffmpeg.org/releases/
@@ -22,13 +22,13 @@ USE_NOBTCFI-amd64=	Yes
 
 EPOCH=		1
 
-SHARED_LIBS=	avcodec		27.2 \
-		avdevice	15.1 \
-		avfilter	13.2 \
-		avformat	24.2 \
-		avutil		17.2 \
-		swresample	6.1 \
-		swscale		9.2
+SHARED_LIBS=	avcodec		28.0 \
+		avdevice	16.0 \
+		avfilter	14.0 \
+		avformat	25.0 \
+		avutil		18.0 \
+		swresample	7.0 \
+		swscale		10.0
 
 HOMEPAGE=	https://ffmpeg.org/
 
Index: graphics/ffmpeg/distinfo
===================================================================
RCS file: /cvs/ports/graphics/ffmpeg/distinfo,v
diff -u -p -r1.74 distinfo
--- graphics/ffmpeg/distinfo	17 Jun 2026 17:13:06 -0000	1.74
+++ graphics/ffmpeg/distinfo	24 Aug 2026 10:06:27 -0000
@@ -1,2 +1,2 @@
-SHA256 (ffmpeg-8.1.2.tar.xz) = RkvrXnvwwxHmi0WuLwTpzCr4iFGrtAgiMXQqdNl7Ukw=
-SIZE (ffmpeg-8.1.2.tar.xz) = 11710924
+SHA256 (ffmpeg-9.0.1.tar.xz) = zzjg4ox+VgWULEp3dVNJsBRYBKOXrzfrH7THfLI39jU=
+SIZE (ffmpeg-9.0.1.tar.xz) = 12036420
Index: graphics/ffmpeg/patches/patch-configure
===================================================================
RCS file: /cvs/ports/graphics/ffmpeg/patches/patch-configure,v
diff -u -p -r1.80 patch-configure
--- graphics/ffmpeg/patches/patch-configure	2 Jun 2026 21:29:05 -0000	1.80
+++ graphics/ffmpeg/patches/patch-configure	24 Aug 2026 10:06:27 -0000
@@ -3,7 +3,7 @@
 Index: configure
 --- configure.orig
 +++ configure
-@@ -6076,7 +6076,6 @@ case $target_os in
+@@ -6159,7 +6159,6 @@ case $target_os in
          enable section_data_rel_ro
          striptype=""
          SHFLAGS='-shared'
@@ -11,7 +11,7 @@ Index: configure
          SLIB_INSTALL_LINKS=
          oss_indev_extralibs="-lossaudio"
          oss_outdev_extralibs="-lossaudio"
-@@ -6451,7 +6450,7 @@ set_default libdir
+@@ -6534,7 +6533,7 @@ set_default libdir
  set_default $PATHS_LIST
  set_default nm
  
@@ -20,7 +20,7 @@ Index: configure
  
  enable_weak_pic() {
      disabled pic && return
-@@ -6745,11 +6744,19 @@ elif enabled x86; then
+@@ -6830,11 +6829,19 @@ elif enabled x86; then
      # As 'i' is stored on the stack, this program will crash
      # if the base pointer is used to access it because the
      # base pointer is cleared in the inline assembly code.
@@ -41,7 +41,7 @@ Index: configure
  
      # check whether EBX is available on x86
      check_inline_asm ebx_available '""::"b"(0)' &&
-@@ -7002,7 +7009,7 @@ check_headers asm/types.h
+@@ -7090,7 +7097,7 @@ check_headers asm/types.h
  #
  # some configurations also require linking to libatomic, so try
  # both with -latomic and without
@@ -50,22 +50,12 @@ Index: configure
      check_builtin stdatomic stdatomic.h                                \
          "atomic_int foo, bar = -1; atomic_store(&foo, 0); foo += bar"  \
          $LATOMIC && eval stdatomic_extralibs="\$LATOMIC" && break
-@@ -7489,13 +7496,13 @@ enabled omx_rpi           && { test_code cc OMX_Core.h
- enabled omx               && require_headers OMX_Core.h && \
-     warn "The OpenMAX encoders are deprecated and will be removed in future versions"
- 
--enabled openssl           && { { check_pkg_config openssl "openssl >= 3.0.0" openssl/ssl.h DTLS_get_data_mtu &&
-+enabled openssl           && { { check_pkg_config openssl "openssl >= 3.0.0" openssl/ssl.h OPENSSL_init_ssl &&
+@@ -7551,7 +7558,7 @@ enabled opengl            && { check_lib opengl GL/glx
+ enabled openssl           && { { check_pkg_config openssl "openssl >= 3.0.0" openssl/ssl.h DTLS_get_data_mtu &&
                                   { enabled gplv3 || ! enabled gpl || enabled nonfree || die "ERROR: OpenSSL >=3.0.0 requires --enable-version3"; }; } ||
                                 { enabled gpl && ! enabled nonfree && die "ERROR: OpenSSL <3.0.0 is incompatible with the gpl"; } ||
 -                               check_pkg_config openssl "openssl >= 1.1.1" openssl/ssl.h DTLS_get_data_mtu ||
--                               check_lib openssl openssl/ssl.h DTLS_get_data_mtu -lssl -lcrypto ||
--                               check_lib openssl openssl/ssl.h DTLS_get_data_mtu -lssl -lcrypto -lws2_32 -lgdi32 ||
--                               die "ERROR: openssl (>= 1.1.1) not found"; }
 +                               check_pkg_config openssl "openssl >= 1.1.0" openssl/ssl.h OPENSSL_init_ssl ||
-+                               check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto ||
-+                               check_lib openssl openssl/ssl.h OPENSSL_init_ssl -lssl -lcrypto -lws2_32 -lgdi32 ||
-+                               die "ERROR: openssl (>= 1.1.0) not found"; }
- enabled pocketsphinx      && require_pkg_config pocketsphinx pocketsphinx pocketsphinx/pocketsphinx.h ps_init
- enabled rkmpp             && { require_pkg_config rkmpp "rockchip_mpp >= 1.3.8" "rockchip/rk_mpi.h rockchip/mpp_buffer.h" "mpp_create mpp_buffer_sync_begin_f" &&
-                                { enabled libdrm ||
+                                check_lib openssl openssl/ssl.h DTLS_get_data_mtu -lssl -lcrypto ||
+                                check_lib openssl openssl/ssl.h DTLS_get_data_mtu -lssl -lcrypto -lws2_32 -lgdi32 ||
+                                die "ERROR: openssl (>= 1.1.1) not found"; }
Index: graphics/ffmpeg/patches/patch-ffbuild_library_mak
===================================================================
RCS file: /cvs/ports/graphics/ffmpeg/patches/patch-ffbuild_library_mak,v
diff -u -p -r1.5 patch-ffbuild_library_mak
--- graphics/ffmpeg/patches/patch-ffbuild_library_mak	21 May 2026 16:24:15 -0000	1.5
+++ graphics/ffmpeg/patches/patch-ffbuild_library_mak	24 Aug 2026 10:06:27 -0000
@@ -1,7 +1,7 @@
 Index: ffbuild/library.mak
 --- ffbuild/library.mak.orig
 +++ ffbuild/library.mak
-@@ -96,8 +96,6 @@ clean::
+@@ -113,8 +113,6 @@ clean::
  install-lib$(NAME)-shared: $(SUBDIR)$(SLIBNAME)
  	$(Q)mkdir -p "$(SHLIBDIR)"
  	$$(INSTALL) -m 755 $$< "$(SHLIBDIR)/$(SLIB_INSTALL_NAME)"
Index: graphics/ffmpeg/patches/patch-libavcodec_aarch64_h26x_sao_neon_S
===================================================================
RCS file: graphics/ffmpeg/patches/patch-libavcodec_aarch64_h26x_sao_neon_S
diff -N graphics/ffmpeg/patches/patch-libavcodec_aarch64_h26x_sao_neon_S
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ graphics/ffmpeg/patches/patch-libavcodec_aarch64_h26x_sao_neon_S	24 Aug 2026 14:33:15 -0000
@@ -0,0 +1,55 @@
+Index: libavcodec/aarch64/h26x/sao_neon.S
+--- libavcodec/aarch64/h26x/sao_neon.S.orig
++++ libavcodec/aarch64/h26x/sao_neon.S
+@@ -100,6 +100,8 @@ function ff_h26x_sao_band_filter_16x16_8_neon, export=
+         ret
+ endfunc
+ 
++.section .rodata
++
+ .Lhevc_sao_edge_pos:
+ .word 1 // horizontal
+ .word HEVC_SAO_STRIDE // vertical
+@@ -112,8 +115,11 @@ endfunc
+ .word VVC_SAO_STRIDE + 1 // 45 degree
+ .word VVC_SAO_STRIDE - 1 // 135 degree
+ 
++.previous
++
+ function ff_vvc_sao_edge_filter_16x16_8_neon, export=1
+-        adr             x7, .Lvvc_sao_edge_pos
++        adrp            x7, .Lvvc_sao_edge_pos
++        add             x7, x7, :lo12:.Lvvc_sao_edge_pos
+         mov             x15, #VVC_SAO_STRIDE
+         b               1f
+ endfunc
+@@ -121,7 +127,8 @@ endfunc
+ // ff_hevc_sao_edge_filter_16x16_8_neon(char *dst, char *src, ptrdiff stride_dst,
+ //                                      int16 *sao_offset_val, int eo, int width, int height)
+ function ff_hevc_sao_edge_filter_16x16_8_neon, export=1
+-        adr             x7, .Lhevc_sao_edge_pos
++        adrp            x7, .Lhevc_sao_edge_pos
++        add             x7, x7, :lo12:.Lhevc_sao_edge_pos
+         mov             x15, #HEVC_SAO_STRIDE
+ 1:
+         ld1             {v3.8h}, [x3]              // load sao_offset_val
+@@ -180,7 +187,8 @@ function ff_hevc_sao_edge_filter_16x16_8_neon, export=
+ endfunc
+ 
+ function ff_vvc_sao_edge_filter_8x8_8_neon, export=1
+-        adr             x7, .Lvvc_sao_edge_pos
++        adrp            x7, .Lvvc_sao_edge_pos
++        add             x7, x7, :lo12:.Lvvc_sao_edge_pos
+         mov             x15, #VVC_SAO_STRIDE
+         b               1f
+ endfunc
+@@ -188,7 +196,8 @@ endfunc
+ // ff_hevc_sao_edge_filter_8x8_8_neon(char *dst, char *src, ptrdiff stride_dst,
+ //                                    int16 *sao_offset_val, int eo, int width, int height)
+ function ff_hevc_sao_edge_filter_8x8_8_neon, export=1
+-        adr             x7, .Lhevc_sao_edge_pos
++        adrp            x7, .Lhevc_sao_edge_pos
++        add             x7, x7, :lo12:.Lhevc_sao_edge_pos
+         mov             x15, #HEVC_SAO_STRIDE
+ 1:
+         ldr             w4, [x7, w4, uxtw #2]
Index: graphics/ffmpeg/patches/patch-libavcodec_aarch64_vc1dsp_neon_S
===================================================================
RCS file: graphics/ffmpeg/patches/patch-libavcodec_aarch64_vc1dsp_neon_S
diff -N graphics/ffmpeg/patches/patch-libavcodec_aarch64_vc1dsp_neon_S
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ graphics/ffmpeg/patches/patch-libavcodec_aarch64_vc1dsp_neon_S	24 Aug 2026 14:56:01 -0000
@@ -0,0 +1,121 @@
+Index: libavcodec/aarch64/vc1dsp_neon.S
+--- libavcodec/aarch64/vc1dsp_neon.S.orig
++++ libavcodec/aarch64/vc1dsp_neon.S
+@@ -37,7 +37,8 @@ function ff_vc1_inv_trans_8x8_neon, export=1
+         shl             v7.8h, v2.8h, #4        //          16 * src[8]
+         shl             v18.8h, v2.8h, #2       //           4 * src[8]
+         shl             v19.8h, v4.8h, #4       //                        16 * src[24]
+-        ldr             d0, .Lcoeffs_it8
++        adrp            x0, .Lcoeffs_it8
++        ldr             d0, [x0, :lo12:.Lcoeffs_it8]
+         shl             v5.8h, v5.8h, #2        //                                      8/2 * src[32]
+         shl             v20.8h, v6.8h, #4       //                                       16 * src[40]
+         shl             v21.8h, v6.8h, #2       //                                        4 * src[40]
+@@ -190,7 +191,8 @@ function ff_vc1_inv_trans_8x4_neon, export=1
+         ld1             {v1.8b, v2.8b, v3.8b, v4.8b}, [x2], #32
+         mov             x3, x0
+         ld1             {v16.8b, v17.8b, v18.8b, v19.8b}, [x2]
+-        ldr             q0, .Lcoeffs_it8        // includes 4-point coefficients in upper half of vector
++        adrp            x4, .Lcoeffs_it8
++        ldr             q0, [x4, :lo12:.Lcoeffs_it8]        // includes 4-point coefficients in upper half of vector
+         ld1             {v5.8b}, [x0], x1
+         trn2            v6.4h, v1.4h, v3.4h
+         trn2            v7.4h, v2.4h, v4.4h
+@@ -318,7 +320,8 @@ endfunc
+ //   array at x0 updated by saturated addition of (narrowed) transformed block
+ function ff_vc1_inv_trans_4x8_neon, export=1
+         mov             x3, #16
+-        ldr             q0, .Lcoeffs_it8        // includes 4-point coefficients in upper half of vector
++        adrp            x4, .Lcoeffs_it8
++        ldr             q0, [x4, :lo12:.Lcoeffs_it8]        // includes 4-point coefficients in upper half of vector
+         mov             x4, x0
+         ld1             {v1.d}[0], [x2], x3     // 00 01 02 03
+         ld1             {v2.d}[0], [x2], x3     // 10 11 12 13
+@@ -459,7 +462,8 @@ endfunc
+ //   array at x0 updated by saturated addition of (narrowed) transformed block
+ function ff_vc1_inv_trans_4x4_neon, export=1
+         mov             x3, #16
+-        ldr             d0, .Lcoeffs_it4
++        adrp            x4, .Lcoeffs_it4
++        ldr             d0, [x4, :lo12:.Lcoeffs_it4]
+         mov             x4, x0
+         ld1             {v1.d}[0], [x2], x3     // 00 01 02 03
+         ld1             {v2.d}[0], [x2], x3     // 10 11 12 13
+@@ -696,6 +700,8 @@ function ff_vc1_inv_trans_4x4_dc_neon, export=1
+         ret
+ endfunc
+ 
++.section .rodata
++
+ .align  5
+ .Lcoeffs_it8:
+ .quad   0x000F00090003
+@@ -704,6 +710,8 @@ endfunc
+ .Lcoeffs:
+ .quad   0x00050002
+ 
++.previous
++
+ // VC-1 in-loop deblocking filter for 4 pixel pairs at boundary of vertically-neighbouring blocks
+ // On entry:
+ //   x0 -> top-left pel of lower block
+@@ -711,7 +719,8 @@ endfunc
+ //   w2 = PQUANT bitstream parameter
+ function ff_vc1_v_loop_filter4_neon, export=1
+         sub             x3, x0, w1, sxtw #2
+-        ldr             d0, .Lcoeffs
++        adrp            x4, .Lcoeffs
++        ldr             d0, [x4, :lo12:.Lcoeffs]
+         ld1             {v1.s}[0], [x0], x1     // P5
+         ld1             {v2.s}[0], [x3], x1     // P1
+         ld1             {v3.s}[0], [x3], x1     // P2
+@@ -783,7 +792,8 @@ endfunc
+ //   w2 = PQUANT bitstream parameter
+ function ff_vc1_h_loop_filter4_neon, export=1
+         sub             x3, x0, #4              // where to start reading
+-        ldr             d0, .Lcoeffs
++        adrp            x4, .Lcoeffs
++        ldr             d0, [x4, :lo12:.Lcoeffs]
+         ld1             {v1.8b}, [x3], x1
+         sub             x0, x0, #1              // where to start writing
+         ld1             {v2.8b}, [x3], x1
+@@ -856,7 +866,8 @@ endfunc
+ //   w2 = PQUANT bitstream parameter
+ function ff_vc1_v_loop_filter8_neon, export=1
+         sub             x3, x0, w1, sxtw #2
+-        ldr             d0, .Lcoeffs
++        adrp            x4, .Lcoeffs
++        ldr             d0, [x4, :lo12:.Lcoeffs]
+         ld1             {v1.8b}, [x0], x1       // P5
+         movi            v2.2d, #0x0000ffff00000000
+         ld1             {v3.8b}, [x3], x1       // P1
+@@ -933,7 +944,8 @@ endfunc
+ //   w2 = PQUANT bitstream parameter
+ function ff_vc1_h_loop_filter8_neon, export=1
+         sub             x3, x0, #4              // where to start reading
+-        ldr             d0, .Lcoeffs
++        adrp            x4, .Lcoeffs
++        ldr             d0, [x4, :lo12:.Lcoeffs]
+         ld1             {v1.8b}, [x3], x1       // P1[0], P2[0]...
+         sub             x0, x0, #1              // where to start writing
+         ld1             {v2.8b}, [x3], x1
+@@ -1041,7 +1053,8 @@ endfunc
+ //   w2 = PQUANT bitstream parameter
+ function ff_vc1_v_loop_filter16_neon, export=1
+         sub             x3, x0, w1, sxtw #2
+-        ldr             d0, .Lcoeffs
++        adrp            x4, .Lcoeffs
++        ldr             d0, [x4, :lo12:.Lcoeffs]
+         ld1             {v1.16b}, [x0], x1      // P5
+         movi            v2.2d, #0x0000ffff00000000
+         ld1             {v3.16b}, [x3], x1      // P1
+@@ -1172,7 +1185,8 @@ endfunc
+ //   w2 = PQUANT bitstream parameter
+ function ff_vc1_h_loop_filter16_neon, export=1
+         sub             x3, x0, #4              // where to start reading
+-        ldr             d0, .Lcoeffs
++        adrp            x4, .Lcoeffs
++        ldr             d0, [x4, :lo12:.Lcoeffs]
+         ld1             {v1.8b}, [x3], x1       // P1[0], P2[0]...
+         sub             x0, x0, #1              // where to start writing
+         ld1             {v2.8b}, [x3], x1
Index: graphics/ffmpeg/patches/patch-libavcodec_cabac_functions_h
===================================================================
RCS file: graphics/ffmpeg/patches/patch-libavcodec_cabac_functions_h
diff -N graphics/ffmpeg/patches/patch-libavcodec_cabac_functions_h
--- graphics/ffmpeg/patches/patch-libavcodec_cabac_functions_h	20 Jan 2026 17:22:00 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,15 +0,0 @@
-
-Disable mips64-specific asm code that clang fails to assemble.
-
-Index: libavcodec/cabac_functions.h
---- libavcodec/cabac_functions.h.orig
-+++ libavcodec/cabac_functions.h
-@@ -48,7 +48,7 @@
- #if ARCH_X86
- #   include "x86/cabac.h"
- #endif
--#if ARCH_MIPS
-+#if 0
- #   include "mips/cabac.h"
- #endif
- #if ARCH_LOONGARCH64
Index: graphics/ffmpeg/patches/patch-libavcodec_mips_cabac_h
===================================================================
RCS file: graphics/ffmpeg/patches/patch-libavcodec_mips_cabac_h
diff -N graphics/ffmpeg/patches/patch-libavcodec_mips_cabac_h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ graphics/ffmpeg/patches/patch-libavcodec_mips_cabac_h	24 Aug 2026 10:06:27 -0000
@@ -0,0 +1,89 @@
+- avcodec/mips/cabac: Fix building on OpenBSD/mips64
+  7c533d0f86f13a06ec93968f6194349665b3536a
+
+Index: libavcodec/mips/cabac.h
+--- libavcodec/mips/cabac.h.orig
++++ libavcodec/mips/cabac.h
+@@ -101,8 +101,15 @@ static av_always_inline int get_cabac_inline_mips(CABA
+ #else
+         "slt          %[tmp0],         %[c_bytestream],     %[c_bytestream_end]  \n\t"
+         PTR_ADDIU    "%[tmp2],         %[c_bytestream],     0x02                 \n\t"
++#if HAVE_MIPS32R2 || HAVE_MIPS64R2
+         "movn         %[c_bytestream], %[tmp2],             %[tmp0]              \n\t"
++#else
++        "beqz         %[tmp0],         2f                                      \n\t"
++        " nop                                                               \n\t"
++        "move         %[c_bytestream], %[tmp2]                               \n\t"
++        "2:                                                                 \n\t"
+ #endif
++#endif
+         "1:                                                        \n\t"
+     : [bit]"=&r"(bit), [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [tmp2]"=&r"(tmp2),
+       [c_range]"+&r"(c->range), [c_low]"+&r"(c->low),
+@@ -152,14 +159,29 @@ static av_always_inline int get_cabac_bypass_mips(CABA
+ #else
+         "slt        %[tmp0],         %[c_bytestream], %[c_bytestream_end] \n\t"
+         PTR_ADDIU  "%[tmp1],         %[c_bytestream], 0x02                \n\t"
++#if HAVE_MIPS32R2 || HAVE_MIPS64R2
+         "movn       %[c_bytestream], %[tmp1],         %[tmp0]             \n\t"
++#else
++        "beqz       %[tmp0],         2f                                  \n\t"
++        " nop                                                            \n\t"
++        "move       %[c_bytestream], %[tmp1]                              \n\t"
++        "2:                                                              \n\t"
+ #endif
++#endif
+         "1:                                                               \n\t"
+         PTR_SLL    "%[tmp1],         %[c_range],      0x11                \n\t"
+         "slt        %[tmp0],         %[c_low],        %[tmp1]             \n\t"
+         PTR_SUBU   "%[tmp1],         %[c_low],        %[tmp1]             \n\t"
++#if HAVE_MIPS32R2 || HAVE_MIPS64R2
+         "movz       %[res],          %[one],          %[tmp0]             \n\t"
+         "movz       %[c_low],        %[tmp1],         %[tmp0]             \n\t"
++#else
++        "bnez       %[tmp0],         2f                                \n\t"
++        " nop                                                      \n\t"
++        "move       %[res],          %[one]                          \n\t"
++        "move       %[c_low],        %[tmp1]                         \n\t"
++        "2:                                                       \n\t"
++#endif
+         : [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [res]"+&r"(res),
+           [c_range]"+&r"(c->range), [c_low]"+&r"(c->low),
+           [c_bytestream]"+&r"(c->bytestream)
+@@ -204,15 +226,36 @@ static av_always_inline int get_cabac_bypass_sign_mips
+ #else
+         "slt        %[tmp0],         %[c_bytestream], %[c_bytestream_end] \n\t"
+         PTR_ADDIU  "%[tmp1],         %[c_bytestream], 0x02                \n\t"
++#if HAVE_MIPS32R2 || HAVE_MIPS64R2
+         "movn       %[c_bytestream], %[tmp1],         %[tmp0]             \n\t"
++#else
++        "beqz       %[tmp0],         2f                                  \n\t"
++        " nop                                                            \n\t"
++        "move       %[c_bytestream], %[tmp1]                              \n\t"
++        "2:                                                              \n\t"
+ #endif
++#endif
+         "1:                                                               \n\t"
+         PTR_SLL    "%[tmp1],         %[c_range],      0x11                \n\t"
+         "slt        %[tmp0],         %[c_low],        %[tmp1]             \n\t"
+         PTR_SUBU   "%[tmp1],         %[c_low],        %[tmp1]             \n\t"
++#if HAVE_MIPS32R2 || HAVE_MIPS64R2
+         "movz       %[c_low],        %[tmp1],         %[tmp0]             \n\t"
++#else
++        "bnez       %[tmp0],         2f                                  \n\t"
++        " nop                                                            \n\t"
++        "move       %[c_low],        %[tmp1]                              \n\t"
++        "2:                                                              \n\t"
++#endif
+         PTR_SUBU   "%[tmp1],         %[zero],         %[res]              \n\t"
++#if HAVE_MIPS32R2 || HAVE_MIPS64R2
+         "movn       %[res],          %[tmp1],         %[tmp0]             \n\t"
++#else
++        "beqz       %[tmp0],         3f                                  \n\t"
++        " nop                                                            \n\t"
++        "move       %[res],          %[tmp1]                              \n\t"
++        "3:                                                              \n\t"
++#endif
+         : [tmp0]"=&r"(tmp0), [tmp1]"=&r"(tmp1), [res]"+&r"(res),
+           [c_range]"+&r"(c->range), [c_low]"+&r"(c->low),
+           [c_bytestream]"+&r"(c->bytestream)
Index: graphics/ffmpeg/patches/patch-libavformat_avformat_h
===================================================================
RCS file: /cvs/ports/graphics/ffmpeg/patches/patch-libavformat_avformat_h,v
diff -u -p -r1.7 patch-libavformat_avformat_h
--- graphics/ffmpeg/patches/patch-libavformat_avformat_h	21 May 2026 16:24:15 -0000	1.7
+++ graphics/ffmpeg/patches/patch-libavformat_avformat_h	24 Aug 2026 10:06:27 -0000
@@ -3,7 +3,7 @@ Add av_stream_get_first_dts for Chromium
 Index: libavformat/avformat.h
 --- libavformat/avformat.h.orig
 +++ libavformat/avformat.h
-@@ -1178,6 +1178,10 @@ typedef struct AVStreamGroup {
+@@ -1229,6 +1229,10 @@ typedef struct AVStreamGroup {
  
  struct AVCodecParserContext *av_stream_get_parser(const AVStream *s);
  
Index: graphics/ffmpeg/patches/patch-libavformat_tls_openssl_c
===================================================================
RCS file: /cvs/ports/graphics/ffmpeg/patches/patch-libavformat_tls_openssl_c,v
diff -u -p -r1.4 patch-libavformat_tls_openssl_c
--- graphics/ffmpeg/patches/patch-libavformat_tls_openssl_c	21 May 2026 16:24:15 -0000	1.4
+++ graphics/ffmpeg/patches/patch-libavformat_tls_openssl_c	24 Aug 2026 10:06:27 -0000
@@ -1,17 +1,16 @@
 Index: libavformat/tls_openssl.c
 --- libavformat/tls_openssl.c.orig
 +++ libavformat/tls_openssl.c
-@@ -32,13 +32,18 @@
- #include <openssl/ssl.h>
- #include <openssl/err.h>
- #include <openssl/x509v3.h>
-+#include <string.h>
+@@ -39,6 +39,8 @@
+ #endif
+ #include <string.h>
  
 +#define TLS_ST_OK SSL_ST_OK
 +
+ #define DTLS_HANDSHAKE_TIMEOUT_US 30000000
  /**
   * Convert an EVP_PKEY to a PEM string.
-  */
+@@ -46,6 +48,8 @@
  static int pkey_to_pem_string(EVP_PKEY *pkey, char *out, size_t out_sz)
  {
      BIO *mem = NULL;
@@ -20,7 +19,7 @@ Index: libavformat/tls_openssl.c
      size_t read_bytes = 0;
  
      if (!pkey || !out || !out_sz)
-@@ -50,9 +55,13 @@ static int pkey_to_pem_string(EVP_PKEY *pkey, char *ou
+@@ -57,9 +61,13 @@ static int pkey_to_pem_string(EVP_PKEY *pkey, char *ou
      if (!PEM_write_bio_PrivateKey(mem, pkey, NULL, NULL, 0, NULL, NULL))
          goto done;
  
@@ -35,7 +34,7 @@ Index: libavformat/tls_openssl.c
  done:
      BIO_free(mem);
      if (out && out_sz)
-@@ -66,6 +75,8 @@ done:
+@@ -73,6 +81,8 @@ done:
  static int cert_to_pem_string(X509 *cert, char *out, size_t out_sz)
  {
      BIO *mem = NULL;
@@ -44,7 +43,7 @@ Index: libavformat/tls_openssl.c
      size_t read_bytes = 0;
  
      if (!cert || !out || !out_sz)
-@@ -77,9 +88,13 @@ static int cert_to_pem_string(X509 *cert, char *out, s
+@@ -84,9 +94,13 @@ static int cert_to_pem_string(X509 *cert, char *out, s
      if (!PEM_write_bio_X509(mem, cert))
          goto done;
  
@@ -59,21 +58,21 @@ Index: libavformat/tls_openssl.c
  done:
      BIO_free(mem);
      if (out && out_sz)
-@@ -801,7 +816,9 @@ static int dtls_start(URLContext *h, const char *url, 
-         s->mtu = 1096;
-     SSL_set_options(c->ssl, SSL_OP_NO_QUERY_MTU);
-     SSL_set_mtu(c->ssl, s->mtu);
+@@ -847,7 +861,9 @@ static int tls_open(URLContext *h, const char *uri, in
+             s->mtu = 1096;
+         SSL_set_options(c->ssl, SSL_OP_NO_QUERY_MTU);
+         SSL_set_mtu(c->ssl, s->mtu);
 +#ifdef DTLS_set_link_mtu
-     DTLS_set_link_mtu(c->ssl, s->mtu);
+         DTLS_set_link_mtu(c->ssl, s->mtu);
 +#endif
-     init_bio_method(h);
+     }
  
-     /* This seems to be necessary despite explicitly setting client/server method above. */
-@@ -925,10 +942,12 @@ static int tls_write(URLContext *h, const uint8_t *buf
+     init_bio_method(h);
+@@ -960,10 +976,12 @@ static int tls_write(URLContext *h, const uint8_t *buf
      uc->flags &= ~AVIO_FLAG_NONBLOCK;
      uc->flags |= h->flags & AVIO_FLAG_NONBLOCK;
  
-+#ifdef DTLS_get_link_mtu
++#ifdef DTLS_get_data_mtu
      if (s->is_dtls) {
          const size_t mtu_size = DTLS_get_data_mtu(c->ssl);
          size = FFMIN(size, mtu_size);
Index: graphics/ffmpeg/patches/patch-libavutil_aarch64_tx_float_neon_S
===================================================================
RCS file: graphics/ffmpeg/patches/patch-libavutil_aarch64_tx_float_neon_S
diff -N graphics/ffmpeg/patches/patch-libavutil_aarch64_tx_float_neon_S
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ graphics/ffmpeg/patches/patch-libavutil_aarch64_tx_float_neon_S	24 Aug 2026 12:49:55 -0000
@@ -0,0 +1,24 @@
+Index: libavutil/aarch64/tx_float_neon.S
+--- libavutil/aarch64/tx_float_neon.S.orig
++++ libavutil/aarch64/tx_float_neon.S
+@@ -439,7 +439,8 @@ FFT16_FN float,    0
+ FFT16_FN ns_float, 1
+ 
+ .macro SETUP_SR_RECOMB len, re, im, dec
+-        ldr             w5, =(\len - 4*7)
++        mov             w5, #(\len)
++        sub             w5, w5, #(4*7)
+         movrel          \re, X(ff_tx_tab_\len\()_float)
+         add             \im, \re, x5
+         mov             \dec, #-32
+@@ -928,8 +929,8 @@ FFT32_FN ns_float, 1
+         bl              32b
+         ldp             x20, x30, [sp], #16
+         AARCH64_VALIDATE_LINK_REGISTER
+-        ldr             w5, =(\len*6 + \len/2)
+-        sub             x1, x1, x5
++        sub             x1, x1, #(\len*6)
++        sub             x1, x1, #(\len/2)
+ 
+         SETUP_SR_RECOMB \len, x7, x8, x9
+ 
Index: graphics/ffmpeg/patches/patch-libswscale_x86_hscale_fast_bilinear_simd_c
===================================================================
RCS file: graphics/ffmpeg/patches/patch-libswscale_x86_hscale_fast_bilinear_simd_c
diff -N graphics/ffmpeg/patches/patch-libswscale_x86_hscale_fast_bilinear_simd_c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ graphics/ffmpeg/patches/patch-libswscale_x86_hscale_fast_bilinear_simd_c	24 Aug 2026 10:06:27 -0000
@@ -0,0 +1,35 @@
+Index: libswscale/x86/hscale_fast_bilinear_simd.c
+--- libswscale/x86/hscale_fast_bilinear_simd.c.orig
++++ libswscale/x86/hscale_fast_bilinear_simd.c
+@@ -53,6 +53,7 @@ av_cold int ff_init_hscaler_mmxext(int dstW, int xInc,
+     // code fragment
+ 
+     __asm__ volatile (
++        ".pushsection .rodata                           \n\t"
+         "jmp                         9f                 \n\t"
+         // Begin
+         "0:                                             \n\t"
+@@ -76,6 +77,7 @@ av_cold int ff_init_hscaler_mmxext(int dstW, int xInc,
+         "add                         $8, %%"FF_REG_a"   \n\t"
+         // End
+         "9:                                             \n\t"
++        ".popsection                                    \n\t"
+         "lea       " LOCAL_MANGLE(0b) ", %0             \n\t"
+         "lea       " LOCAL_MANGLE(1b) ", %1             \n\t"
+         "lea       " LOCAL_MANGLE(2b) ", %2             \n\t"
+@@ -92,6 +94,7 @@ av_cold int ff_init_hscaler_mmxext(int dstW, int xInc,
+         );
+ 
+     __asm__ volatile (
++        ".pushsection .rodata                           \n\t"
+         "jmp                         9f                 \n\t"
+         // Begin
+         "0:                                             \n\t"
+@@ -113,6 +116,7 @@ av_cold int ff_init_hscaler_mmxext(int dstW, int xInc,
+         "add                         $8, %%"FF_REG_a"   \n\t"
+         // End
+         "9:                                             \n\t"
++        ".popsection                                    \n\t"
+         "lea       " LOCAL_MANGLE(0b) ", %0             \n\t"
+         "lea       " LOCAL_MANGLE(1b) ", %1             \n\t"
+         "lea       " LOCAL_MANGLE(2b) ", %2             \n\t"
Index: graphics/ffmpeg/patches/patch-libswscale_x86_ops_int_asm
===================================================================
RCS file: graphics/ffmpeg/patches/patch-libswscale_x86_ops_int_asm
diff -N graphics/ffmpeg/patches/patch-libswscale_x86_ops_int_asm
--- graphics/ffmpeg/patches/patch-libswscale_x86_ops_int_asm	13 Jun 2026 11:17:07 -0000	1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
-Index: libswscale/x86/ops_int.asm
---- libswscale/x86/ops_int.asm.orig
-+++ libswscale/x86/ops_int.asm
-@@ -106,6 +106,7 @@ IF %1 > 3,  mov out3q, [execq + SwsOpExec.out3]
- %endif
- align function_align
- current_function %+ _return:
-+    _CET_ENDBR
- 
-             ; op chain always returns back here
-             mov implq, [rsp + 8]
Index: graphics/ffmpeg/pkg/PLIST
===================================================================
RCS file: /cvs/ports/graphics/ffmpeg/pkg/PLIST,v
diff -u -p -r1.45 PLIST
--- graphics/ffmpeg/pkg/PLIST	21 May 2026 16:24:15 -0000	1.45
+++ graphics/ffmpeg/pkg/PLIST	24 Aug 2026 10:06:27 -0000
@@ -122,6 +122,7 @@ include/libavutil/pixelutils.h
 include/libavutil/pixfmt.h
 include/libavutil/random_seed.h
 include/libavutil/rational.h
+include/libavutil/raw_color_params.h
 include/libavutil/rc4.h
 include/libavutil/refstruct.h
 include/libavutil/replaygain.h
Index: x11/mplayer/Makefile
===================================================================
RCS file: /cvs/ports/x11/mplayer/Makefile,v
diff -u -p -r1.344 Makefile
--- x11/mplayer/Makefile	19 Aug 2026 12:56:58 -0000	1.344
+++ x11/mplayer/Makefile	24 Aug 2026 10:06:27 -0000
@@ -1,8 +1,8 @@
 COMMENT=	movie player supporting many formats
 
 V=		20251123
-FFMPEG_V=	8.1.2
-REVISION=	4
+FFMPEG_V=	9.0.1
+REVISION=	5
 DISTNAME=	mplayer-${V}
 CATEGORIES=	x11 multimedia
 SITES=		https://comstyle.com/source/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.