From: Brad Smith Subject: UPDATE: VLC 3.0.23 To: ports@openbsd.org Date: Sun, 11 Jan 2026 20:00:48 -0500 Here is an update to VLC 3.0.23. Changes between 3.0.22 and 3.0.23: ---------------------------------- Codecs: * Fix WebVTT line positioning * Expose additional audio codec information (notably for Flac 24bit) Demuxers: * fix some JPEG files wih JFIF headers Security: * Fix null deref in libass, undefined shift in theora and cc-708, integer overflow in daala, Infinite loop in h264 parsing, buffer overflow in png and multiple format-overflows Misc: * Prepare compatibility for taglib 2.0, Qt6, FFmpeg8, mingw-w64 v13 and newer versions of libplacebo and pupnp Changes between 3.0.21 and 3.0.22: ---------------------------------- Core: * Assume subpictures are in SDR by default Decoders: * Fix Opus channel mapping * Fix hardware decoding with VideoToolbox of XVID MPEG-4 video * Add dav1d-all-layers option * Fix DVD CEA-608 captions parsing * Fix ProRes 4:4:4:4 * Disable decoding using libdca, libmpeg2 and liba52 by default in favor of libavcodec Demuxers: * Add support for DMX audio music (MUS) files * Handle mkv-use-chapter-codec option * Add A_ATRAC/AT1 support in matroska * Prevent FLAC seeking logic get stuck * Handle pictures in FLAC * Fix VOB/AOB LPCM/MLP detection failing occasionally * Cut QNap title on first invalid character * Fix display of certain JPEG files * Fix playback of very short ASF files (duration less than 1s) * Multiple fixes in MPEG-TS * Fix crashes in multiple demuxers (reported by rub.de, oss-fuzz and others) Input: * Fix SFTP seeking for large files on 32-bit OS Interface: * Qt: Add option to use dark palette * Qt: Add compilation support for newer versions of Qt5 * Qt: Fix scrolling on volume slider * macOS: fix crashes when drag'n drop items in the playlist * KDE: fix MPRIS state when started from file Service Discovery: * UPnP: remove SAT>IP channel list fallback Video Output: * Use a better stretch mode in wingdi * Fetch missing device information when running in UWP Video Filter: * Add AMD GPU Frame Rate Doubler (Direct3D11) * Improve visualization of low frequencies in spectrogram Misc: * gnutls: remove manual DH prime bits setting * Avoid very large fonts in portrait mode * Update of most translations Security: * Heap Buffer Overflow READ in TY, NSV, CVDsub, SPU, Subrip, TX3G, MPJEG demuxers and decoders * Heap Buffer Overflow Write in RLE, MP4, TX3G demuxers and decoders * Assert failure in AVI, MP4 demuxers and Core * Null dereferences in CSS, Flac and VTT modules * Use-after Free in SVG decoder * Crash in Subtitles core, in jpeg2 inside TS * Multiple crashes and OOB in CEA-708 subtitles * OOB read on Oggspot, MP4 * Multiple leaks in MKV, ASF/WMV, CAF and PS demuxers, Ogg, Theora, Vorbis, WebVTT and SVCD decoders * Busy loop in WebVTT (The list above is not exhaustive) Index: Makefile =================================================================== RCS file: /cvs/ports/x11/vlc/Makefile,v retrieving revision 1.289 diff -u -p -u -p -r1.289 Makefile --- Makefile 1 Nov 2025 11:16:43 -0000 1.289 +++ Makefile 9 Jan 2026 04:06:55 -0000 @@ -1,15 +1,13 @@ COMMENT-main= VideoLAN client; multimedia player COMMENT-jack= JACK audio output module for VLC -V= 3.0.21 +V= 3.0.23 DISTNAME= vlc-${V} PKGNAME-main= ${DISTNAME} PKGNAME-jack= vlc-jack-${V} CATEGORIES= x11 SITES= https://download.videolan.org/pub/videolan/vlc/${V}/ EXTRACT_SUFX= .tar.xz -REVISION-jack= 1 -REVISION-main= 10 USE_NOBTCFI= Yes @@ -68,10 +66,10 @@ WANTLIB-main += gio-2.0 glapi glib-2.0 g WANTLIB-main += gpg-error graphite2 gsm gthread-2.0 gtk-3 harfbuzz WANTLIB-main += hogweed icudata icui18n icuuc idn2 jpeg lz4 lzma matroska WANTLIB-main += mp3lame nettle nfs notify ogg opus p11-kit pango-1.0 -WANTLIB-main += pangocairo-1.0 pangoft2-1.0 pciaccess pcre2-16 pcre2-8 +WANTLIB-main += pangocairo-1.0 pangoft2-1.0 pcre2-16 pcre2-8 WANTLIB-main += pixman-1 png protobuf-lite rsvg-2 sharpyuv WANTLIB-main += smb2 sndio soxr speex speexdsp ssl swresample swscale -WANTLIB-main += tag tar tasn1 theoradec theoraenc tiff udfread unibreak +WANTLIB-main += tag tasn1 theoradec theoraenc tiff udfread unibreak WANTLIB-main += unistring usbhid utf8_range utf8_validity va va-drm WANTLIB-main += va-x11 vorbis vorbisenc vpx wayland-client wayland-cursor WANTLIB-main += wayland-egl webp webpmux x264 x265 xcb xcb-composite @@ -88,7 +86,7 @@ WANTLIB-main+= v4l2 WANTLIB-jack= db execinfo jack vlccore ${WANTLIB-common} -AUTOCONF_VERSION= 2.71 +AUTOCONF_VERSION= 2.69 AUTOMAKE_VERSION= 1.16 AUTORECONF= ./bootstrap @@ -109,13 +107,12 @@ LIB_DEPENDS-main= ${MODQT5_LIB_DEPENDS} x11/qt5/qtsvg,-main \ x11/qt5/qtx11extras \ archivers/libarchive \ - archivers/libtar \ audio/libcddb \ audio/libsoxr \ audio/libvorbis \ audio/opus \ audio/speex \ - audio/taglib>=2.0.2 \ + audio/taglib \ devel/fribidi \ devel/gettext,-runtime \ devel/harfbuzz \ @@ -160,8 +157,7 @@ USE_GMAKE= Yes LIBTOOL_FLAGS= --tag=disable-static CONFIGURE_STYLE= autoreconf MODGNU_CONFIG_GUESS_DIRS= ${WRKSRC}/autotools -CONFIGURE_ARGS+=--disable-a52 \ - --disable-alsa \ +CONFIGURE_ARGS+=--disable-alsa \ --disable-altivec \ --disable-aom \ --disable-aribb25 \ @@ -172,7 +168,6 @@ CONFIGURE_ARGS+=--disable-a52 \ --disable-crystalhd \ --disable-dav1d \ --disable-dc1394 \ - --disable-dca \ --disable-decklink \ --disable-dsm \ --disable-dv1394 \ @@ -186,9 +181,7 @@ CONFIGURE_ARGS+=--disable-a52 \ --disable-gst-decode \ --disable-kate \ --disable-kwallet \ - --disable-libmpeg2 \ --disable-libplacebo \ - --disable-libva \ --disable-linsys \ --disable-live555 \ --disable-mad \ Index: distinfo =================================================================== RCS file: /cvs/ports/x11/vlc/distinfo,v retrieving revision 1.49 diff -u -p -u -p -r1.49 distinfo --- distinfo 16 Nov 2024 09:26:57 -0000 1.49 +++ distinfo 9 Jan 2026 04:06:55 -0000 @@ -1,2 +1,2 @@ -SHA256 (vlc-3.0.21.tar.xz) = JNu+HX367qCZTV3vC73iABdzRxNtv+Vz9bakzuJa+7A= -SIZE (vlc-3.0.21.tar.xz) = 25649288 +SHA256 (vlc-3.0.23.tar.xz) = 6JHK5qo8zaab+UFz1RBcvFXHp9mx0hubIWZuae/z5+A= +SIZE (vlc-3.0.23.tar.xz) = 26486988 Index: patches/patch-compat_Makefile_am =================================================================== RCS file: /cvs/ports/x11/vlc/patches/patch-compat_Makefile_am,v retrieving revision 1.4 diff -u -p -u -p -r1.4 patch-compat_Makefile_am --- patches/patch-compat_Makefile_am 11 Mar 2022 20:17:31 -0000 1.4 +++ patches/patch-compat_Makefile_am 9 Jan 2026 04:06:55 -0000 @@ -4,7 +4,8 @@ plugins is not portable. Index: compat/Makefile.am --- compat/Makefile.am.orig +++ compat/Makefile.am -@@ -1,7 +1,7 @@ +@@ -1,8 +1,8 @@ + noinst_HEADERS = stdckdint/stdckdint.h -pkglib_LTLIBRARIES = libcompat.la +noinst_LTLIBRARIES = libcompat.la libcompat_la_SOURCES = dummy.c Index: patches/patch-configure_ac =================================================================== RCS file: /cvs/ports/x11/vlc/patches/patch-configure_ac,v retrieving revision 1.46 diff -u -p -u -p -r1.46 patch-configure_ac --- patches/patch-configure_ac 19 Mar 2025 11:13:38 -0000 1.46 +++ patches/patch-configure_ac 9 Jan 2026 04:06:55 -0000 @@ -1,7 +1,3 @@ -- libass: fix fontconfig detection - d19599c42141eaf72cae9a0cb21b5889cd01c860 -- configure: look for backtrace() in libexecinfo - b3179e1e0993b8c15b735c93282c7675632c183c Index: configure.ac --- configure.ac.orig @@ -16,7 +12,7 @@ Index: configure.ac ;; netbsd*) SYS=netbsd -@@ -1122,22 +1121,6 @@ AC_ARG_ENABLE(optimizations, +@@ -1170,22 +1169,6 @@ AC_ARG_ENABLE(optimizations, dnl Check for various optimization flags AS_IF([test "${enable_optimizations}" != "no"], [ @@ -39,24 +35,7 @@ Index: configure.ac dnl Check for fast maths AX_APPEND_COMPILE_FLAGS([-fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range], [CFLAGS]) AX_APPEND_COMPILE_FLAGS([-fno-math-errno -funsafe-math-optimizations -fno-rounding-math -fno-signaling-nans -fcx-limited-range], [CXXFLAGS]) -@@ -1246,9 +1229,14 @@ case "${host_cpu}" in - esac - - dnl Check for backtrace() support --AC_CHECK_HEADERS(execinfo.h) --AC_CHECK_FUNCS(backtrace) -+AC_CHECK_HEADERS([execinfo.h]) -+AC_CHECK_FUNCS([backtrace],, [ -+ AC_CHECK_LIB([execinfo], [backtrace], [ -+ LIBEXECINFO="-lexecinfo"]) -+]) -+AC_SUBST(LIBEXECINFO) - -+ - dnl - dnl default modules - dnl -@@ -1668,7 +1656,7 @@ AC_ARG_ENABLE(lua, +@@ -1758,7 +1741,7 @@ AC_ARG_ENABLE(lua, [disable LUA scripting support (default enabled)])]) if test "${enable_lua}" != "no" then @@ -65,55 +44,3 @@ Index: configure.ac [ have_lua=yes ], [ AC_MSG_WARN([${LUA_PKG_ERRORS}, trying lua 5.1 instead]) -@@ -2989,25 +2977,6 @@ AS_IF( [test "${enable_telx}" != "no" ],[ - ]) - - dnl --dnl libass subtitle rendering module --dnl --AC_ARG_ENABLE(libass, -- [ --enable-libass Subtitle support using libass (default enabled)]) --AS_IF( [test "${enable_libass}" != "no"], [ -- PKG_CHECK_MODULES(LIBASS, [libass >= 0.9.8], -- [ -- VLC_ADD_PLUGIN([libass]) -- -- AC_CHECK_HEADERS(fontconfig/fontconfig.h, -- [VLC_ADD_CPPFLAGS([libass],[-DHAVE_FONTCONFIG]) -- VLC_ADD_LIBS([libass],[-lfontconfig]) -- ]) -- ],[ -- AC_MSG_WARN([${LIBASS_PKG_ERRORS}.]) -- ]) -- ]) -- --dnl - dnl ARIB subtitles rendering module - dnl - AC_ARG_ENABLE(aribsub, -@@ -3346,6 +3315,25 @@ AM_CONDITIONAL([HAVE_FREETYPE], [test "${have_freetype - AM_CONDITIONAL([HAVE_FONTCONFIG], [test "${have_fontconfig}" = "yes"]) - AM_CONDITIONAL([HAVE_FRIBIDI], [test "${have_fribidi}" = "yes"]) - AM_CONDITIONAL([HAVE_HARFBUZZ], [test "${have_harfbuzz}" = "yes"]) -+ -+dnl -+dnl libass subtitle rendering module -+dnl -+AC_ARG_ENABLE(libass, -+ [ --enable-libass Subtitle support using libass (default enabled)]) -+AS_IF( [test "${enable_libass}" != "no"], [ -+ PKG_CHECK_MODULES(LIBASS, [libass >= 0.9.8], -+ [ -+ VLC_ADD_PLUGIN([libass]) -+ -+ if test "${have_fontconfig}" != "no"; then -+ VLC_ADD_CPPFLAGS([libass],[-DHAVE_FONTCONFIG]) -+ VLC_ADD_LIBS([libass],[${FONTCONFIG_LIBS}]) -+ fi -+ ],[ -+ AC_MSG_WARN([${LIBASS_PKG_ERRORS}.]) -+ ]) -+ ]) - - dnl - dnl SAPI (text to Speech renderer for Windows) Index: patches/patch-modules_access_nfs_c =================================================================== RCS file: patches/patch-modules_access_nfs_c diff -N patches/patch-modules_access_nfs_c --- patches/patch-modules_access_nfs_c 16 Jul 2025 09:42:36 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,32 +0,0 @@ -- nfs: fix libnfs API v2 support - 41f1c168a5a9c5ac5c88ecbbe0f8f4ddef8b999f - -Index: modules/access/nfs.c ---- modules/access/nfs.c.orig -+++ modules/access/nfs.c -@@ -189,7 +189,8 @@ nfs_read_cb(int i_status, struct nfs_context *p_nfs, v - else - { - p_sys->res.read.i_len = i_status; -- memcpy(p_sys->res.read.p_buf, p_data, i_status); -+ if (p_sys->res.read.p_buf != NULL && p_data != NULL) -+ memcpy(p_sys->res.read.p_buf, p_data, i_status); - } - } - -@@ -209,9 +210,15 @@ FileRead(stream_t *p_access, void *p_buf, size_t i_len - return 0; - - p_sys->res.read.i_len = 0; -+#ifdef LIBNFS_API_V2 -+ p_sys->res.read.p_buf = NULL; -+ if (nfs_read_async(p_sys->p_nfs, p_sys->p_nfsfh, p_buf, i_len, nfs_read_cb, -+ p_access) < 0) -+#else - p_sys->res.read.p_buf = p_buf; - if (nfs_read_async(p_sys->p_nfs, p_sys->p_nfsfh, i_len, nfs_read_cb, - p_access) < 0) -+#endif - { - msg_Err(p_access, "nfs_read_async failed"); - return 0; Index: patches/patch-modules_codec_avcodec_audio_c =================================================================== RCS file: patches/patch-modules_codec_avcodec_audio_c diff -N patches/patch-modules_codec_avcodec_audio_c --- patches/patch-modules_codec_avcodec_audio_c 21 Oct 2025 13:08:08 -0000 1.10 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,154 +0,0 @@ -https://code.videolan.org/videolan/vlc/-/merge_requests/2814 -https://code.videolan.org/videolan/vlc/-/merge_requests/3872 - -Index: modules/codec/avcodec/audio.c ---- modules/codec/avcodec/audio.c.orig -+++ modules/codec/avcodec/audio.c -@@ -139,7 +139,11 @@ static int OpenAudioCodec( decoder_t *p_dec ) - } - - ctx->sample_rate = p_dec->fmt_in.audio.i_rate; -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)) -+ av_channel_layout_default( &ctx->ch_layout, p_dec->fmt_in.audio.i_channels ); -+#else - ctx->channels = p_dec->fmt_in.audio.i_channels; -+#endif - ctx->block_align = p_dec->fmt_in.audio.i_blockalign; - ctx->bit_rate = p_dec->fmt_in.i_bitrate; - ctx->bits_per_coded_sample = p_dec->fmt_in.audio.i_bitspersample; -@@ -261,12 +265,6 @@ int InitAudioDec( vlc_object_t *obj ) - p_dec->pf_decode = DecodeAudio; - p_dec->pf_flush = Flush; - -- /* XXX: Writing input format makes little sense. */ -- if( avctx->profile != FF_PROFILE_UNKNOWN ) -- p_dec->fmt_in.i_profile = avctx->profile; -- if( avctx->level != FF_LEVEL_UNKNOWN ) -- p_dec->fmt_in.i_level = avctx->level; -- - return VLC_SUCCESS; - } - -@@ -395,12 +393,17 @@ static int DecodeBlock( decoder_t *p_dec, block_t **pp - ret = avcodec_receive_frame( ctx, frame ); - if( ret == 0 ) - { -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)) -+ int channels = frame->ch_layout.nb_channels; -+#else -+ int channels = ctx->channels; -+#endif - /* checks and init from first decoded frame */ -- if( ctx->channels <= 0 || ctx->channels > INPUT_CHAN_MAX -+ if( channels <= 0 || channels > INPUT_CHAN_MAX - || ctx->sample_rate <= 0 ) - { - msg_Warn( p_dec, "invalid audio properties channels count %d, sample rate %d", -- ctx->channels, ctx->sample_rate ); -+ channels, ctx->sample_rate ); - goto drop; - } - else if( p_dec->fmt_out.audio.i_rate != (unsigned int)ctx->sample_rate ) -@@ -484,15 +487,15 @@ static block_t * ConvertAVFrame( decoder_t *p_dec, AVF - /* Interleave audio if required */ - if( av_sample_fmt_is_planar( ctx->sample_fmt ) ) - { -- p_block = block_Alloc(frame->linesize[0] * ctx->channels); -+ p_block = block_Alloc(frame->linesize[0] * p_dec->fmt_out.audio.i_channels ); - if ( likely(p_block) ) - { -- const void *planes[ctx->channels]; -- for (int i = 0; i < ctx->channels; i++) -+ const void *planes[p_dec->fmt_out.audio.i_channels]; -+ for (int i = 0; i < p_dec->fmt_out.audio.i_channels; i++) - planes[i] = frame->extended_data[i]; - - aout_Interleave(p_block->p_buffer, planes, frame->nb_samples, -- ctx->channels, p_dec->fmt_out.audio.i_format); -+ p_dec->fmt_out.audio.i_channels, p_dec->fmt_out.audio.i_format); - p_block->i_nb_samples = frame->nb_samples; - } - av_frame_free(&frame); -@@ -511,7 +514,7 @@ static block_t * ConvertAVFrame( decoder_t *p_dec, AVF - { - aout_ChannelExtract( p_buffer->p_buffer, - p_dec->fmt_out.audio.i_channels, -- p_block->p_buffer, ctx->channels, -+ p_block->p_buffer, p_dec->fmt_out.audio.i_channels, - p_block->i_nb_samples, p_sys->pi_extraction, - p_dec->fmt_out.audio.i_bitspersample ); - p_buffer->i_nb_samples = p_block->i_nb_samples; -@@ -568,6 +571,7 @@ static const uint64_t pi_channels_map[][2] = - { AV_CH_TOP_BACK_RIGHT, 0 }, - { AV_CH_STEREO_LEFT, 0 }, - { AV_CH_STEREO_RIGHT, 0 }, -+ { 0, 0 }, - }; - - static void SetupOutputFormat( decoder_t *p_dec, bool b_trust ) -@@ -580,6 +584,16 @@ static void SetupOutputFormat( decoder_t *p_dec, bool - p_dec->fmt_out.audio.i_rate = p_sys->p_context->sample_rate; - - /* */ -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)) -+ if( p_sys->i_previous_channels == p_sys->p_context->ch_layout.nb_channels && -+ p_sys->i_previous_layout == p_sys->p_context->ch_layout.u.mask ) -+ return; -+ if( b_trust ) -+ { -+ p_sys->i_previous_channels = p_sys->p_context->ch_layout.nb_channels; -+ p_sys->i_previous_layout = p_sys->p_context->ch_layout.u.mask; -+ } -+#else - if( p_sys->i_previous_channels == p_sys->p_context->channels && - p_sys->i_previous_layout == p_sys->p_context->channel_layout ) - return; -@@ -588,25 +602,31 @@ static void SetupOutputFormat( decoder_t *p_dec, bool - p_sys->i_previous_channels = p_sys->p_context->channels; - p_sys->i_previous_layout = p_sys->p_context->channel_layout; - } -+#endif - -- const unsigned i_order_max = sizeof(pi_channels_map)/sizeof(*pi_channels_map); -- uint32_t pi_order_src[i_order_max]; -+ uint32_t pi_order_src[AOUT_CHAN_MAX] = { 0 }; - - int i_channels_src = 0; -- int64_t channel_layout = -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)) -+ uint64_t channel_layout_mask = p_sys->p_context->ch_layout.u.mask; -+ int channel_count = p_sys->p_context->ch_layout.nb_channels; -+#else -+ uint64_t channel_layout_mask = - p_sys->p_context->channel_layout ? p_sys->p_context->channel_layout : - av_get_default_channel_layout( p_sys->p_context->channels ); -+ int channel_count = p_sys->p_context->channels; -+#endif - -- if( channel_layout ) -+ if( channel_layout_mask ) - { -- for( unsigned i = 0; i < i_order_max -- && i_channels_src < p_sys->p_context->channels; i++ ) -+ for( unsigned i = 0; pi_channels_map[i][0] -+ && i_channels_src < channel_count; i++ ) - { -- if( channel_layout & pi_channels_map[i][0] ) -+ if( channel_layout_mask & pi_channels_map[i][0] ) - pi_order_src[i_channels_src++] = pi_channels_map[i][1]; - } - -- if( i_channels_src != p_sys->p_context->channels && b_trust ) -+ if( i_channels_src != channel_count && b_trust ) - msg_Err( p_dec, "Channel layout not understood" ); - - /* Detect special dual mono case */ -@@ -638,7 +658,7 @@ static void SetupOutputFormat( decoder_t *p_dec, bool - { - msg_Warn( p_dec, "no channel layout found"); - p_dec->fmt_out.audio.i_physical_channels = 0; -- p_dec->fmt_out.audio.i_channels = p_sys->p_context->channels; -+ p_dec->fmt_out.audio.i_channels = channel_count; - } - - aout_FormatPrepare( &p_dec->fmt_out.audio ); Index: patches/patch-modules_codec_avcodec_avcommon_compat_h =================================================================== RCS file: patches/patch-modules_codec_avcodec_avcommon_compat_h diff -N patches/patch-modules_codec_avcodec_avcommon_compat_h --- patches/patch-modules_codec_avcodec_avcommon_compat_h 21 Oct 2025 13:08:08 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,18 +0,0 @@ -ffmpeg8 removes it without any replacment - -Index: modules/codec/avcodec/avcommon_compat.h ---- modules/codec/avcodec/avcommon_compat.h.orig -+++ modules/codec/avcodec/avcommon_compat.h -@@ -71,8 +71,11 @@ - #ifndef AV_CODEC_CAP_SMALL_LAST_FRAME - # define AV_CODEC_CAP_SMALL_LAST_FRAME CODEC_CAP_SMALL_LAST_FRAME - #endif --#ifndef AV_INPUT_BUFFER_MIN_SIZE -+#if !defined(AV_INPUT_BUFFER_MIN_SIZE) && defined(FF_MIN_BUFFER_SIZE) - # define AV_INPUT_BUFFER_MIN_SIZE FF_MIN_BUFFER_SIZE -+#endif -+#ifndef AV_INPUT_BUFFER_MIN_SIZE -+# define AV_INPUT_BUFFER_MIN_SIZE 16384 - #endif - #ifndef FF_MAX_B_FRAMES - # define FF_MAX_B_FRAMES 16 // FIXME: remove this Index: patches/patch-modules_codec_avcodec_encoder_c =================================================================== RCS file: patches/patch-modules_codec_avcodec_encoder_c diff -N patches/patch-modules_codec_avcodec_encoder_c --- patches/patch-modules_codec_avcodec_encoder_c 21 Oct 2025 13:08:08 -0000 1.9 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,422 +0,0 @@ -https://code.videolan.org/videolan/vlc/-/merge_requests/6657 -https://code.videolan.org/videolan/vlc/-/merge_requests/3854 - -Index: modules/codec/avcodec/encoder.c ---- modules/codec/avcodec/encoder.c.orig -+++ modules/codec/avcodec/encoder.c -@@ -181,6 +181,7 @@ static const uint64_t pi_channels_map[][2] = - { AV_CH_STEREO_RIGHT, 0 }, - }; - -+#if (LIBAVCODEC_VERSION_INT < AV_VERSION_INT( 59, 24, 100 )) - static const uint32_t channel_mask[][2] = { - {0,0}, - {AOUT_CHAN_CENTER, AV_CH_LAYOUT_MONO}, -@@ -193,6 +194,7 @@ static const uint32_t channel_mask[][2] = { - {AOUT_CHANS_7_1, AV_CH_LAYOUT_7POINT1}, - {AOUT_CHANS_8_1, AV_CH_LAYOUT_OCTAGONAL}, - }; -+#endif - - static const char *const ppsz_enc_options[] = { - "keyint", "bframes", "vt", "qmin", "qmax", "codec", "hq", -@@ -252,19 +254,29 @@ static void probe_video_frame_rate( encoder_t *p_enc, - ( p_enc->fmt_out.i_codec == VLC_CODEC_MP4V ? 25 : CLOCK_FREQ ); - - msg_Dbg( p_enc, "Time base for probing set to %d/%d", p_context->time_base.num, p_context->time_base.den ); -- if( p_codec->supported_framerates ) -+ -+ const AVRational *supported_framerates; -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 61, 13, 100 )) -+ if (avcodec_get_supported_config(p_context, p_codec, AV_CODEC_CONFIG_FRAME_RATE, 0, -+ (const void **)&supported_framerates, NULL) < 0) -+ supported_framerates = NULL; -+#else -+ supported_framerates = p_codec->supported_framerates; -+#endif -+ -+ if( supported_framerates ) - { - /* We are finding fps values so 1/time_base */ - AVRational target = { - .num = p_context->time_base.den, - .den = p_context->time_base.num - }; -- int idx = av_find_nearest_q_idx(target, p_codec->supported_framerates); -+ int idx = av_find_nearest_q_idx(target, supported_framerates); - -- p_context->time_base.num = p_codec->supported_framerates[idx].den ? -- p_codec->supported_framerates[idx].den : 1; -- p_context->time_base.den = p_codec->supported_framerates[idx].den ? -- p_codec->supported_framerates[idx].num : CLOCK_FREQ; -+ p_context->time_base.num = supported_framerates[idx].den ? -+ supported_framerates[idx].den : 1; -+ p_context->time_base.den = supported_framerates[idx].den ? -+ supported_framerates[idx].num : CLOCK_FREQ; - - /* If we have something reasonable on supported framerates, use that*/ - if( p_context->time_base.den && p_context->time_base.den < CLOCK_FREQ ) -@@ -468,30 +480,30 @@ int InitVideoEnc( vlc_object_t *p_this ) - psz_val = var_GetString( p_enc, ENC_CFG_PREFIX "aac-profile" ); - /* libavcodec uses faac encoder atm, and it has issues with - * other than low-complexity profile, so default to that */ -- p_sys->i_aac_profile = FF_PROFILE_AAC_LOW; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_LOW; - if( psz_val && *psz_val ) - { - if( !strncmp( psz_val, "main", 4 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_MAIN; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_MAIN; - else if( !strncmp( psz_val, "low", 3 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_LOW; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_LOW; - else if( !strncmp( psz_val, "ssr", 3 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_SSR; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_SSR; - else if( !strncmp( psz_val, "ltp", 3 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_LTP; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_LTP; - /* These require libavcodec with libfdk-aac */ - else if( !strncmp( psz_val, "hev2", 4 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_HE_V2; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_HE_V2; - else if( !strncmp( psz_val, "hev1", 4 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_HE; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_HE; - else if( !strncmp( psz_val, "ld", 2 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_LD; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_LD; - else if( !strncmp( psz_val, "eld", 3 ) ) -- p_sys->i_aac_profile = FF_PROFILE_AAC_ELD; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_ELD; - else - { - msg_Warn( p_enc, "unknown AAC profile requested, setting it to low" ); -- p_sys->i_aac_profile = FF_PROFILE_AAC_LOW; -+ p_sys->i_aac_profile = AV_PROFILE_AAC_LOW; - } - } - free( psz_val ); -@@ -553,7 +565,16 @@ int InitVideoEnc( vlc_object_t *p_this ) - p_enc->fmt_in.video.i_chroma = p_enc->fmt_in.i_codec; - GetFfmpegChroma( &p_context->pix_fmt, &p_enc->fmt_in.video ); - -- if( p_codec->pix_fmts ) -+ const enum AVPixelFormat *pix_fmts; -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 61, 13, 100 )) -+ if (avcodec_get_supported_config(p_context, p_codec, AV_CODEC_CONFIG_PIX_FORMAT, 0, -+ (const void **)&pix_fmts, NULL) < 0) -+ pix_fmts = NULL; -+#else -+ pix_fmts = p_codec->pix_fmts; -+#endif -+ -+ if( pix_fmts ) - { - static const enum AVPixelFormat vlc_pix_fmts[] = { - AV_PIX_FMT_YUV420P, -@@ -561,8 +582,8 @@ int InitVideoEnc( vlc_object_t *p_this ) - AV_PIX_FMT_RGB24, - }; - bool found = false; -- const enum PixelFormat *p = p_codec->pix_fmts; -- for( ; !found && *p != -1; p++ ) -+ const enum AVPixelFormat *p = pix_fmts; -+ for( ; !found && *p != AV_PIX_FMT_NONE; p++ ) - { - for( size_t i = 0; i < ARRAY_SIZE(vlc_pix_fmts); ++i ) - { -@@ -574,7 +595,7 @@ int InitVideoEnc( vlc_object_t *p_this ) - } - } - } -- if (!found) p_context->pix_fmt = p_codec->pix_fmts[0]; -+ if (!found) p_context->pix_fmt = pix_fmts[0]; - GetVlcChroma( &p_enc->fmt_in.video, p_context->pix_fmt ); - p_enc->fmt_in.i_codec = p_enc->fmt_in.video.i_chroma; - } -@@ -699,22 +720,29 @@ int InitVideoEnc( vlc_object_t *p_this ) - } - else if( p_enc->fmt_in.i_cat == AUDIO_ES ) - { -+ const enum AVSampleFormat *sample_fmts; -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 61, 13, 100 )) -+ if (avcodec_get_supported_config(p_context, p_codec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, -+ (const void **)&sample_fmts, NULL) < 0) -+ sample_fmts = NULL; -+#else -+ sample_fmts = p_codec->sample_fmts; -+#endif -+ - p_context->codec_type = AVMEDIA_TYPE_AUDIO; -- p_context->sample_fmt = p_codec->sample_fmts ? -- p_codec->sample_fmts[0] : -- AV_SAMPLE_FMT_S16; -+ p_context->sample_fmt = sample_fmts ? sample_fmts[0] : AV_SAMPLE_FMT_S16; - - /* Try to match avcodec input format to vlc format so we could avoid one - format conversion */ - if( GetVlcAudioFormat( p_context->sample_fmt ) != p_enc->fmt_in.i_codec -- && p_codec->sample_fmts ) -+ && sample_fmts ) - { - msg_Dbg( p_enc, "Trying to find more suitable sample format instead of %s", av_get_sample_fmt_name( p_context->sample_fmt ) ); -- for( unsigned int i=0; p_codec->sample_fmts[i] != -1; i++ ) -+ for( unsigned int i=0; sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++ ) - { -- if( GetVlcAudioFormat( p_codec->sample_fmts[i] ) == p_enc->fmt_in.i_codec ) -+ if( GetVlcAudioFormat( sample_fmts[i] ) == p_enc->fmt_in.i_codec ) - { -- p_context->sample_fmt = p_codec->sample_fmts[i]; -+ p_context->sample_fmt = sample_fmts[i]; - msg_Dbg( p_enc, "Using %s as new sample format", av_get_sample_fmt_name( p_context->sample_fmt ) ); - break; - } -@@ -723,14 +751,14 @@ int InitVideoEnc( vlc_object_t *p_this ) - p_sys->b_planar = av_sample_fmt_is_planar( p_context->sample_fmt ); - // Try if we can use interleaved format for codec input as VLC doesn't really do planar audio yet - // FIXME: Remove when planar/interleaved audio in vlc is equally supported -- if( p_sys->b_planar && p_codec->sample_fmts ) -+ if( p_sys->b_planar && sample_fmts ) - { - msg_Dbg( p_enc, "Trying to find packet sample format instead of planar %s", av_get_sample_fmt_name( p_context->sample_fmt ) ); -- for( unsigned int i=0; p_codec->sample_fmts[i] != -1; i++ ) -+ for( unsigned int i=0; sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++ ) - { -- if( !av_sample_fmt_is_planar( p_codec->sample_fmts[i] ) ) -+ if( !av_sample_fmt_is_planar( sample_fmts[i] ) ) - { -- p_context->sample_fmt = p_codec->sample_fmts[i]; -+ p_context->sample_fmt = sample_fmts[i]; - msg_Dbg( p_enc, "Changing to packet format %s as new sample format", av_get_sample_fmt_name( p_context->sample_fmt ) ); - break; - } -@@ -745,58 +773,43 @@ int InitVideoEnc( vlc_object_t *p_this ) - date_Set( &p_sys->buffer_date, AV_NOPTS_VALUE ); - p_context->time_base.num = 1; - p_context->time_base.den = p_context->sample_rate; -- p_context->channels = p_enc->fmt_out.audio.i_channels; --#if LIBAVUTIL_VERSION_CHECK( 52, 2, 6, 0, 0) -- p_context->channel_layout = channel_mask[p_context->channels][1]; - -- /* Setup Channel ordering for multichannel audio -+ /* Setup Channel ordering for audio - * as VLC channel order isn't same as libavcodec expects - */ - - p_sys->i_channels_to_reorder = 0; - -- /* Specified order -+ /* Create channel layout for avcodec - * Copied from audio.c - */ -- const unsigned i_order_max = 8 * sizeof(p_context->channel_layout); - uint32_t pi_order_dst[AOUT_CHAN_MAX] = { }; - uint32_t order_mask = 0; - int i_channels_src = 0; - -- if( p_context->channel_layout ) -- { -- msg_Dbg( p_enc, "Creating channel order for reordering"); -- for( unsigned i = 0; i < sizeof(pi_channels_map)/sizeof(*pi_channels_map); i++ ) -+ msg_Dbg( p_enc, "Creating channel order for reordering"); -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 )) -+ av_channel_layout_default( &p_context->ch_layout, p_enc->fmt_out.audio.i_channels ); -+ uint64_t channel_mask = p_context->ch_layout.u.mask; -+#else -+ p_context->channels = p_enc->fmt_out.audio.i_channels; -+ p_context->channel_layout = channel_mask[p_context->channels][1]; -+ uint64_t channel_mask = p_context->channel_layout; -+#endif -+ for( unsigned i = 0; i < sizeof(pi_channels_map)/sizeof(*pi_channels_map); i++ ) -+ if( channel_mask & pi_channels_map[i][0] ) - { -- if( p_context->channel_layout & pi_channels_map[i][0] ) -- { -- msg_Dbg( p_enc, "%d %"PRIx64" mapped to %"PRIx64"", i_channels_src, pi_channels_map[i][0], pi_channels_map[i][1]); -- pi_order_dst[i_channels_src++] = pi_channels_map[i][1]; -- order_mask |= pi_channels_map[i][1]; -- } -+ msg_Dbg( p_enc, "%d %"PRIx64" mapped to %"PRIx64"", i_channels_src, pi_channels_map[i][0], pi_channels_map[i][1]); -+ pi_order_dst[i_channels_src++] = pi_channels_map[i][1]; -+ order_mask |= pi_channels_map[i][1]; - } -- } -- else -- { -- msg_Dbg( p_enc, "Creating default channel order for reordering"); -- /* Create default order */ -- for( unsigned int i = 0; i < __MIN( i_order_max, (unsigned)p_sys->p_context->channels ); i++ ) -- { -- if( i < sizeof(pi_channels_map)/sizeof(*pi_channels_map) ) -- { -- msg_Dbg( p_enc, "%d channel is %"PRIx64"", i_channels_src, pi_channels_map[i][1]); -- pi_order_dst[i_channels_src++] = pi_channels_map[i][1]; -- order_mask |= pi_channels_map[i][1]; -- } -- } -- } -- if( i_channels_src != p_context->channels ) -+ -+ if( i_channels_src != p_enc->fmt_out.audio.i_channels ) - msg_Err( p_enc, "Channel layout not understood" ); - - p_sys->i_channels_to_reorder = - aout_CheckChannelReorder( NULL, pi_order_dst, order_mask, - p_sys->pi_reorder_layout ); --#endif - - if ( p_enc->fmt_out.i_codec == VLC_CODEC_MP4A ) - { -@@ -897,7 +910,7 @@ int InitVideoEnc( vlc_object_t *p_this ) - if( ret ) - { - if( p_enc->fmt_in.i_cat != AUDIO_ES || -- (p_context->channels <= 2 && i_codec_id != AV_CODEC_ID_MP2 -+ (p_enc->fmt_out.audio.i_channels <= 2 && i_codec_id != AV_CODEC_ID_MP2 - && i_codec_id != AV_CODEC_ID_MP3) ) - errmsg: - { -@@ -922,10 +935,14 @@ errmsg: - goto error; - } - -- if( p_context->channels > 2 ) -+ if( p_enc->fmt_out.audio.i_channels > 2 ) - { -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 )) -+ av_channel_layout_default( &p_context->ch_layout, 2 ); -+#else - p_context->channels = 2; - p_context->channel_layout = channel_mask[p_context->channels][1]; -+#endif - - /* Change fmt_in in order to ask for a channels conversion */ - p_enc->fmt_in.audio.i_channels = -@@ -1028,7 +1045,7 @@ errmsg: - p_context->frame_size : - AV_INPUT_BUFFER_MIN_SIZE; - p_sys->i_buffer_out = av_samples_get_buffer_size(NULL, -- p_sys->p_context->channels, p_sys->i_frame_size, -+ p_enc->fmt_out.audio.i_channels, p_sys->i_frame_size, - p_sys->p_context->sample_fmt, DEFAULT_ALIGN); - p_sys->p_buffer = av_malloc( p_sys->i_buffer_out ); - if ( unlikely( p_sys->p_buffer == NULL ) ) -@@ -1227,8 +1244,19 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture - frame->pict_type = 0; - - frame->repeat_pict = p_pict->i_nb_fields - 2; -+#if (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT( 58, 7, 100 )) -+ if (p_pict->b_progressive) -+ frame->flags &= ~AV_FRAME_FLAG_INTERLACED; -+ else -+ frame->flags |= AV_FRAME_FLAG_INTERLACED; -+ if (p_pict->b_top_field_first) -+ frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST; -+ else -+ frame->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST; -+#else - frame->interlaced_frame = !p_pict->b_progressive; - frame->top_field_first = !!p_pict->b_top_field_first; -+#endif - - frame->format = p_sys->p_context->pix_fmt; - frame->width = p_sys->p_context->width; -@@ -1278,13 +1306,17 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, - { - block_t *p_block = NULL; - //How much we need to copy from new packet -- const size_t leftover = leftover_samples * p_sys->p_context->channels * p_sys->i_sample_bytes; -+ const size_t leftover = leftover_samples * p_enc->fmt_out.audio.i_channels * p_sys->i_sample_bytes; - - av_frame_unref( p_sys->frame ); - p_sys->frame->format = p_sys->p_context->sample_fmt; - p_sys->frame->nb_samples = leftover_samples + p_sys->i_samples_delay; -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 )) -+ av_channel_layout_copy(&p_sys->frame->ch_layout, &p_sys->p_context->ch_layout); -+#else - p_sys->frame->channel_layout = p_sys->p_context->channel_layout; - p_sys->frame->channels = p_sys->p_context->channels; -+#endif - - p_sys->frame->pts = date_Get( &p_sys->buffer_date ) * p_sys->p_context->time_base.den / - CLOCK_FREQ / p_sys->p_context->time_base.num; -@@ -1301,7 +1333,7 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, - // We need to deinterleave from p_aout_buf to p_buffer the leftover bytes - if( p_sys->b_planar ) - aout_Deinterleave( p_sys->p_interleave_buf, p_sys->p_buffer, -- p_sys->i_frame_size, p_sys->p_context->channels, p_enc->fmt_in.i_codec ); -+ p_sys->i_frame_size, p_enc->fmt_out.audio.i_channels, p_enc->fmt_in.i_codec ); - else - memcpy( p_sys->p_buffer + buffer_delay, p_aout_buf->p_buffer, leftover); - -@@ -1319,7 +1351,7 @@ static block_t *handle_delay_buffer( encoder_t *p_enc, - memset( p_sys->p_buffer + (leftover+buffer_delay), 0, padding_size ); - buffer_delay += padding_size; - } -- if( avcodec_fill_audio_frame( p_sys->frame, p_sys->p_context->channels, -+ if( avcodec_fill_audio_frame( p_sys->frame, p_enc->fmt_out.audio.i_channels, - p_sys->p_context->sample_fmt, p_sys->b_planar ? p_sys->p_interleave_buf : p_sys->p_buffer, - p_sys->i_buffer_out, - DEFAULT_ALIGN) < 0 ) -@@ -1349,7 +1381,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t - - //i_bytes_left is amount of bytes we get - i_samples_left = p_aout_buf ? p_aout_buf->i_nb_samples : 0; -- buffer_delay = p_sys->i_samples_delay * p_sys->i_sample_bytes * p_sys->p_context->channels; -+ buffer_delay = p_sys->i_samples_delay * p_sys->i_sample_bytes * p_enc->fmt_out.audio.i_channels; - - //p_sys->i_buffer_out = p_sys->i_frame_size * chan * p_sys->i_sample_bytes - //Calculate how many bytes we would need from current buffer to fill frame -@@ -1414,16 +1446,20 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t - p_sys->frame->pts = date_Get( &p_sys->buffer_date ) * p_sys->p_context->time_base.den / - CLOCK_FREQ / p_sys->p_context->time_base.num; - -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 )) -+ av_channel_layout_copy(&p_sys->frame->ch_layout, &p_sys->p_context->ch_layout); -+#else - p_sys->frame->channel_layout = p_sys->p_context->channel_layout; - p_sys->frame->channels = p_sys->p_context->channels; -+#endif - - const int in_bytes = p_sys->frame->nb_samples * -- p_sys->p_context->channels * p_sys->i_sample_bytes; -+ p_enc->fmt_out.audio.i_channels* p_sys->i_sample_bytes; - - if( p_sys->b_planar ) - { - aout_Deinterleave( p_sys->p_buffer, p_aout_buf->p_buffer, -- p_sys->frame->nb_samples, p_sys->p_context->channels, p_enc->fmt_in.i_codec ); -+ p_sys->frame->nb_samples, p_enc->fmt_out.audio.i_channels, p_enc->fmt_in.i_codec ); - - } - else -@@ -1431,7 +1467,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t - memcpy(p_sys->p_buffer, p_aout_buf->p_buffer, in_bytes); - } - -- if( avcodec_fill_audio_frame( p_sys->frame, p_sys->p_context->channels, -+ if( avcodec_fill_audio_frame( p_sys->frame, p_enc->fmt_out.audio.i_channels, - p_sys->p_context->sample_fmt, - p_sys->p_buffer, - p_sys->i_buffer_out, -@@ -1457,7 +1493,7 @@ static block_t *EncodeAudio( encoder_t *p_enc, block_t - if( p_aout_buf->i_nb_samples > 0 ) - { - memcpy( p_sys->p_buffer + buffer_delay, p_aout_buf->p_buffer, -- p_aout_buf->i_nb_samples * p_sys->i_sample_bytes * p_sys->p_context->channels); -+ p_aout_buf->i_nb_samples * p_sys->i_sample_bytes * p_enc->fmt_out.audio.i_channels); - p_sys->i_samples_delay += p_aout_buf->i_nb_samples; - } - -@@ -1475,9 +1511,8 @@ void EndVideoEnc( vlc_object_t *p_this ) - av_frame_free( &p_sys->frame ); - - vlc_avcodec_lock(); -- avcodec_close( p_sys->p_context ); -- vlc_avcodec_unlock(); - avcodec_free_context( &p_sys->p_context ); -+ vlc_avcodec_unlock(); - - - av_free( p_sys->p_interleave_buf ); Index: patches/patch-modules_codec_avcodec_fourcc_c =================================================================== RCS file: patches/patch-modules_codec_avcodec_fourcc_c diff -N patches/patch-modules_codec_avcodec_fourcc_c --- patches/patch-modules_codec_avcodec_fourcc_c 21 Oct 2025 13:08:08 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,16 +0,0 @@ -https://code.videolan.org/videolan/vlc/-/merge_requests/5304 -Index: modules/codec/avcodec/fourcc.c ---- modules/codec/avcodec/fourcc.c.orig -+++ modules/codec/avcodec/fourcc.c -@@ -183,7 +183,11 @@ static const struct vlc_avcodec_fourcc video_codecs[] - { VLC_CODEC_TMV, AV_CODEC_ID_TMV }, - { VLC_CODEC_V210, AV_CODEC_ID_V210 }, - #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 54, 50, 100 ) && LIBAVCODEC_VERSION_MICRO >= 100 -+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 142, 100 ) -+ { VLC_CODEC_VUYA, AV_CODEC_ID_RAWVIDEO }, -+#else - { VLC_CODEC_VUYA, AV_CODEC_ID_AYUV }, -+#endif - #endif - /* AV_CODEC_ID_DPX */ - { VLC_CODEC_MAD, AV_CODEC_ID_MAD }, Index: patches/patch-modules_codec_avcodec_video_c =================================================================== RCS file: patches/patch-modules_codec_avcodec_video_c diff -N patches/patch-modules_codec_avcodec_video_c --- patches/patch-modules_codec_avcodec_video_c 21 Oct 2025 13:08:08 -0000 1.6 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,72 +0,0 @@ -https://code.videolan.org/videolan/vlc/-/merge_requests/6656 -https://code.videolan.org/videolan/vlc/-/merge_requests/6659 -https://code.videolan.org/videolan/vlc/-/merge_requests/2814 - -Index: modules/codec/avcodec/video.c ---- modules/codec/avcodec/video.c.orig -+++ modules/codec/avcodec/video.c -@@ -204,8 +204,7 @@ static int lavc_GetVideoFormat(decoder_t *dec, video_f - else if (ctx->time_base.num > 0 && ctx->time_base.den > 0) - { - fmt->i_frame_rate = ctx->time_base.den; -- fmt->i_frame_rate_base = ctx->time_base.num -- * __MAX(ctx->ticks_per_frame, 1); -+ fmt->i_frame_rate_base = ctx->time_base.num; - } - - /* FIXME we should only set the known values and let the core decide -@@ -327,12 +326,10 @@ static int lavc_UpdateVideoFormat(decoder_t *dec, AVCo - - /* always have date in fields/ticks units */ - if(dec->p_sys->pts.i_divider_num) -- date_Change(&dec->p_sys->pts, fmt_out.i_frame_rate * -- __MAX(ctx->ticks_per_frame, 1), -+ date_Change(&dec->p_sys->pts, fmt_out.i_frame_rate, - fmt_out.i_frame_rate_base); - else -- date_Init(&dec->p_sys->pts, fmt_out.i_frame_rate * -- __MAX(ctx->ticks_per_frame, 1), -+ date_Init(&dec->p_sys->pts, fmt_out.i_frame_rate, - fmt_out.i_frame_rate_base); - - fmt_out.p_palette = dec->fmt_out.video.p_palette; -@@ -625,11 +622,6 @@ static int InitVideoDecCommon( decoder_t *p_dec ) - p_dec->pf_decode = DecodeVideo; - p_dec->pf_flush = Flush; - -- /* XXX: Writing input format makes little sense. */ -- if( p_context->profile != FF_PROFILE_UNKNOWN ) -- p_dec->fmt_in.i_profile = p_context->profile; -- if( p_context->level != FF_LEVEL_UNKNOWN ) -- p_dec->fmt_in.i_level = p_context->level; - return VLC_SUCCESS; - } - -@@ -945,9 +937,11 @@ static vlc_tick_t interpolate_next_pts( decoder_t *p_d - p_sys->pts.i_divider_num == 0 ) - return VLC_TICK_INVALID; - -+#if (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 12, 100)) -+ int i_tick = p_context->codec_descriptor->props & AV_CODEC_PROP_FIELDS ? 2 : 1; -+#else - int i_tick = p_context->ticks_per_frame; -- if( i_tick <= 0 ) -- i_tick = 1; -+#endif - - /* interpolate the next PTS */ - return date_Increment( &p_sys->pts, i_tick + frame->repeat_pict ); -@@ -1426,8 +1420,13 @@ static picture_t *DecodeBlock( decoder_t *p_dec, block - /* Hack to force display of still pictures */ - p_pic->b_force = p_sys->b_first_frame; - p_pic->i_nb_fields = 2 + frame->repeat_pict; -+#if (LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(58, 7, 100)) -+ p_pic->b_progressive = !(frame->flags & AV_FRAME_FLAG_INTERLACED); -+ p_pic->b_top_field_first = !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST); -+#else - p_pic->b_progressive = !frame->interlaced_frame; - p_pic->b_top_field_first = frame->top_field_first; -+#endif - - if (DecodeSidedata(p_dec, frame, p_pic)) - i_pts = VLC_TICK_INVALID; Index: patches/patch-modules_demux_avformat_demux_c =================================================================== RCS file: patches/patch-modules_demux_avformat_demux_c diff -N patches/patch-modules_demux_avformat_demux_c --- patches/patch-modules_demux_avformat_demux_c 21 Oct 2025 13:08:08 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,46 +0,0 @@ -https://code.videolan.org/videolan/vlc/-/merge_requests/6658 -https://code.videolan.org/videolan/vlc/-/merge_requests/5304 - -Index: modules/demux/avformat/demux.c ---- modules/demux/avformat/demux.c.orig -+++ modules/demux/avformat/demux.c -@@ -112,6 +112,18 @@ static vlc_fourcc_t CodecTagToFourcc( uint32_t codec_t - #endif - } - -+static inline void* GetStreamSideData(const AVStream *s, enum AVPacketSideDataType type) -+{ -+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 60, 29, 100 ) -+ const AVCodecParameters *cp = s->codecpar; -+ const AVPacketSideData *psd = -+ av_packet_side_data_get(cp->coded_side_data, cp->nb_coded_side_data, type); -+ return psd ? psd->data : NULL; -+#else -+ return av_stream_get_side_data(s, type, NULL); -+#endif -+} -+ - /***************************************************************************** - * Open - *****************************************************************************/ -@@ -138,7 +150,7 @@ static void get_rotation(es_format_t *fmt, AVStream *s - else - fmt->video.orientation = ORIENT_NORMAL; - } -- int32_t *matrix = (int32_t *)av_stream_get_side_data(s, AV_PKT_DATA_DISPLAYMATRIX, NULL); -+ int32_t *matrix = GetStreamSideData(s, AV_PKT_DATA_DISPLAYMATRIX); - if( matrix ) { - angle = lround(av_display_rotation_get(matrix)); - -@@ -401,7 +413,11 @@ int avformat_OpenDemux( vlc_object_t *p_this ) - es_format_Init( &es_fmt, AUDIO_ES, fcc ); - es_fmt.i_original_fourcc = CodecTagToFourcc( cp->codec_tag ); - es_fmt.i_bitrate = cp->bit_rate; -+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 ) -+ es_fmt.audio.i_channels = cp->ch_layout.nb_channels; -+#else - es_fmt.audio.i_channels = cp->channels; -+#endif - es_fmt.audio.i_rate = cp->sample_rate; - es_fmt.audio.i_bitspersample = cp->bits_per_coded_sample; - es_fmt.audio.i_blockalign = cp->block_align; Index: patches/patch-modules_demux_avformat_mux_c =================================================================== RCS file: patches/patch-modules_demux_avformat_mux_c diff -N patches/patch-modules_demux_avformat_mux_c --- patches/patch-modules_demux_avformat_mux_c 21 Oct 2025 13:08:08 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,17 +0,0 @@ -https://code.videolan.org/videolan/vlc/-/merge_requests/5304 - -Index: modules/demux/avformat/mux.c ---- modules/demux/avformat/mux.c.orig -+++ modules/demux/avformat/mux.c -@@ -267,7 +267,11 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t - { - case AUDIO_ES: - codecpar->codec_type = AVMEDIA_TYPE_AUDIO; -+#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT( 59, 24, 100 ) -+ av_channel_layout_default( &codecpar->ch_layout, fmt->audio.i_channels ); -+#else - codecpar->channels = fmt->audio.i_channels; -+#endif - codecpar->sample_rate = fmt->audio.i_rate; - stream->time_base = (AVRational){1, codecpar->sample_rate}; - if (fmt->i_bitrate == 0) { Index: patches/patch-modules_meta_engine_taglib_cpp =================================================================== RCS file: patches/patch-modules_meta_engine_taglib_cpp diff -N patches/patch-modules_meta_engine_taglib_cpp --- patches/patch-modules_meta_engine_taglib_cpp 6 Jun 2025 05:45:15 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,158 +0,0 @@ -Backport upstream fixes for taglib 2.x support and remove usages of member -functions that were deprecated in taglib 1.x and removed in 2.x. -Obtained from: -https://code.videolan.org/videolan/vlc/-/commit/d2663d6c3fe3af76bdefd58367b4a45c598b83e4 -https://code.videolan.org/videolan/vlc/-/commit/ac59d0ba59ba800c52c0a92ec1d9576d2653dbe2 -https://code.videolan.org/videolan/vlc/-/commit/c404fdb24183031a419667639846edddca3401f8 -https://code.videolan.org/videolan/vlc/-/commit/ec29dfca1e59530dd412d779e0b045079b72ffb6 -Index: modules/meta_engine/taglib.cpp ---- modules/meta_engine/taglib.cpp.orig -+++ modules/meta_engine/taglib.cpp -@@ -125,7 +125,11 @@ VLCTagLib::ExtResolver::ExtResolver(const std::stri - template - File *VLCTagLib::ExtResolver::createFile(FileName fileName, bool, AudioProperties::ReadStyle) const - { -+#if defined(_WIN32) && TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ std::string filename = fileName.toString().to8Bit(true); -+#else - std::string filename = std::string(fileName); -+#endif - std::size_t namesize = filename.size(); - - if (namesize > ext.length()) -@@ -180,12 +184,16 @@ class VlcIostream : public IOStream (public) - return m_stream->psz_location; - } - -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ ByteVector readBlock(size_t length) -+#else - ByteVector readBlock(ulong length) -+#endif - { - ByteVector res(length, 0); - ssize_t i_read = vlc_stream_Read( m_stream, res.data(), length); - if (i_read < 0) -- return ByteVector::null; -+ return {}; - else if ((size_t)i_read != length) - res.resize(i_read); - return res; -@@ -196,11 +204,19 @@ class VlcIostream : public IOStream (public) - // Let's stay Read-Only for now - } - -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ void insert(const ByteVector&, offset_t, size_t) -+#else - void insert(const ByteVector&, ulong, ulong) -+#endif - { - } - -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ void removeBlock(offset_t, size_t) -+#else - void removeBlock(ulong, ulong) -+#endif - { - } - -@@ -214,7 +230,11 @@ class VlcIostream : public IOStream (public) - return true; - } - -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ void seek(offset_t offset, Position p) -+#else - void seek(long offset, Position p) -+#endif - { - uint64_t pos = 0; - switch (p) -@@ -237,12 +257,20 @@ class VlcIostream : public IOStream (public) - return; - } - -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ offset_t tell() const -+#else - long tell() const -+#endif - { - return m_previousPos; - } - -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ offset_t length() -+#else - long length() -+#endif - { - uint64_t i_size; - if (vlc_stream_GetSize( m_stream, &i_size ) != VLC_SUCCESS) -@@ -250,7 +278,11 @@ class VlcIostream : public IOStream (public) - return i_size; - } - -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ void truncate(offset_t) -+#else - void truncate(long) -+#endif - { - } - -@@ -465,7 +497,7 @@ static void ReadMetaFromASF( ASF::Tag* tag, demux_meta - static void ReadMetaFromBasicTag(const Tag* tag, vlc_meta_t *dest) - { - #define SET( accessor, meta ) \ -- if( !tag->accessor().isNull() && !tag->accessor().isEmpty() ) \ -+ if( !tag->accessor().isEmpty() ) \ - vlc_meta_Set##meta( dest, tag->accessor().toCString(true) ) - #define SETINT( accessor, meta ) \ - if( tag->accessor() ) \ -@@ -806,15 +838,15 @@ static void ReadMetaFromMP4( MP4::Tag* tag, demux_meta - { - MP4::Item list; - #define SET( keyName, metaName ) \ -- if( tag->itemListMap().contains(keyName) ) \ -+ if( tag->contains(keyName) ) \ - { \ -- list = tag->itemListMap()[keyName]; \ -+ list = tag->item(keyName); \ - vlc_meta_Set##metaName( p_meta, list.toStringList().front().toCString( true ) ); \ - } - #define SET_EXTRA( keyName, metaName ) \ -- if( tag->itemListMap().contains(keyName) ) \ -+ if( tag->contains(keyName) ) \ - { \ -- list = tag->itemListMap()[keyName]; \ -+ list = tag->item(keyName); \ - vlc_meta_AddExtra( p_meta, metaName, list.toStringList().front().toCString( true ) ); \ - } - -@@ -824,9 +856,9 @@ static void ReadMetaFromMP4( MP4::Tag* tag, demux_meta - #undef SET - #undef SET_EXTRA - -- if( tag->itemListMap().contains("covr") ) -+ if( tag->contains("covr") ) - { -- MP4::CoverArtList list = tag->itemListMap()["covr"].toCoverArtList(); -+ MP4::CoverArtList list = tag->item("covr").toCoverArtList(); - const char *psz_format = list[0].format() == MP4::CoverArt::PNG ? "image/png" : "image/jpeg"; - - msg_Dbg( p_demux_meta, "Found embedded art (%s) is %i bytes", -@@ -1337,7 +1369,11 @@ static int WriteMeta( vlc_object_t *p_this ) - if( RIFF::AIFF::File* riff_aiff = dynamic_cast(f.file()) ) - WriteMetaToId3v2( riff_aiff->tag(), p_item ); - else if( RIFF::WAV::File* riff_wav = dynamic_cast(f.file()) ) -+#if TAGLIB_VERSION >= VERSION_INT(2, 0, 0) -+ WriteMetaToId3v2( riff_wav->ID3v2Tag(), p_item ); -+#else - WriteMetaToId3v2( riff_wav->tag(), p_item ); -+#endif - } - else if( TrueAudio::File* trueaudio = dynamic_cast(f.file()) ) - { Index: patches/patch-src_Makefile_am =================================================================== RCS file: patches/patch-src_Makefile_am diff -N patches/patch-src_Makefile_am --- patches/patch-src_Makefile_am 19 Mar 2025 11:13:38 -0000 1.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,14 +0,0 @@ -- configure: look for backtrace() in libexecinfo - b3179e1e0993b8c15b735c93282c7675632c183c - -Index: src/Makefile.am ---- src/Makefile.am.orig -+++ src/Makefile.am -@@ -419,6 +419,7 @@ libvlccore_la_SOURCES += \ - darwin/specific.c \ - darwin/thread.c - else -+libvlccore_la_LIBADD += $(LIBEXECINFO) - libvlccore_la_SOURCES += \ - posix/dirs.c \ - posix/error.c \ Index: pkg/PLIST-main =================================================================== RCS file: /cvs/ports/x11/vlc/pkg/PLIST-main,v retrieving revision 1.58 diff -u -p -u -p -r1.58 PLIST-main --- pkg/PLIST-main 28 Oct 2025 09:39:55 -0000 1.58 +++ pkg/PLIST-main 9 Jan 2026 04:06:55 -0000 @@ -267,6 +267,8 @@ lib/vlc/plugins/codec/ @so lib/vlc/plugins/codec/libtextst_plugin.so @so lib/vlc/plugins/codec/libttml_plugin.so @so lib/vlc/plugins/codec/libuleaddvaudio_plugin.so +@so lib/vlc/plugins/codec/libvaapi_drm_plugin.so +@so lib/vlc/plugins/codec/libvaapi_plugin.so @so lib/vlc/plugins/codec/libvorbis_plugin.so @so lib/vlc/plugins/codec/libwebvtt_plugin.so @so lib/vlc/plugins/codec/libx26410b_plugin.so @@ -296,6 +298,7 @@ lib/vlc/plugins/demux/ @so lib/vlc/plugins/demux/libdemuxdump_plugin.so @so lib/vlc/plugins/demux/libdiracsys_plugin.so @so lib/vlc/plugins/demux/libdirectory_demux_plugin.so +@so lib/vlc/plugins/demux/libdmxmus_plugin.so @so lib/vlc/plugins/demux/libes_plugin.so @so lib/vlc/plugins/demux/libflacsys_plugin.so @so lib/vlc/plugins/demux/libh26x_plugin.so @@ -434,6 +437,8 @@ lib/vlc/plugins/stream_out/ lib/vlc/plugins/text_renderer/ @so lib/vlc/plugins/text_renderer/libfreetype_plugin.so @so lib/vlc/plugins/text_renderer/libtdummy_plugin.so +lib/vlc/plugins/vaapi/ +@so lib/vlc/plugins/vaapi/libvaapi_filters_plugin.so lib/vlc/plugins/video_chroma/ @so lib/vlc/plugins/video_chroma/libchain_plugin.so @so lib/vlc/plugins/video_chroma/libgrey_yuv_plugin.so @@ -494,6 +499,8 @@ lib/vlc/plugins/video_output/ @so lib/vlc/plugins/video_output/libegl_x11_plugin.so @so lib/vlc/plugins/video_output/libflaschen_plugin.so @so lib/vlc/plugins/video_output/libgl_plugin.so +@so lib/vlc/plugins/video_output/libglconv_vaapi_drm_plugin.so +@so lib/vlc/plugins/video_output/libglconv_vaapi_x11_plugin.so @so lib/vlc/plugins/video_output/libglx_plugin.so @so lib/vlc/plugins/video_output/libvdummy_plugin.so @so lib/vlc/plugins/video_output/libvmem_plugin.so @@ -581,9 +588,7 @@ share/locale/am_ET/LC_MESSAGES/ share/locale/am_ET/LC_MESSAGES/vlc.mo share/locale/an/LC_MESSAGES/vlc.mo share/locale/ar/LC_MESSAGES/vlc.mo -share/locale/as_IN/ -share/locale/as_IN/LC_MESSAGES/ -share/locale/as_IN/LC_MESSAGES/vlc.mo +share/locale/as/LC_MESSAGES/vlc.mo share/locale/ast/LC_MESSAGES/vlc.mo share/locale/be/LC_MESSAGES/vlc.mo share/locale/bg/LC_MESSAGES/vlc.mo @@ -708,7 +713,7 @@ share/locale/zh_CN/LC_MESSAGES/vlc.mo share/locale/zh_TW/LC_MESSAGES/vlc.mo share/locale/zu/LC_MESSAGES/vlc.mo share/metainfo/ -share/metainfo/vlc.appdata.xml +share/metainfo/org.videolan.vlc.appdata.xml share/vlc/ share/vlc/lua/ share/vlc/lua/http/