From: Rafael Sadowski Subject: Re: UPDATE: VLC To: Brad Smith Cc: ports@openbsd.org Date: Sat, 7 Feb 2026 01:04:49 +0100 On Fri Feb 06, 2026 at 05:16:23PM -0500, Brad Smith wrote: > Backport support for VVC codec. Committed > > > Index: Makefile > =================================================================== > RCS file: /cvs/ports/x11/vlc/Makefile,v > retrieving revision 1.293 > diff -u -p -u -p -r1.293 Makefile > --- Makefile 31 Jan 2026 18:25:27 -0000 1.293 > +++ Makefile 6 Feb 2026 22:13:56 -0000 > @@ -2,7 +2,7 @@ COMMENT-main= VideoLAN client; multimedi > COMMENT-jack= JACK audio output module for VLC > > V= 3.0.23 > -REVISION-main= 2 > +REVISION-main= 3 > DISTNAME= vlc-${V} > PKGNAME-main= ${DISTNAME} > PKGNAME-jack= vlc-jack-${V} > @@ -228,8 +228,6 @@ CONFIGURE_ENV+= BUILDCC="${CC}" \ > PKG_CONFIG_PATH="${LOCALBASE}/lib/qt5/pkgconfig" \ > RCC="${LOCALBASE}/bin/rcc-qt5" \ > LUAC="${LOCALBASE}/bin/luac${MODLUA_DEP_VERSION}" > - > -CFLAGS+= -Wno-unreachable-code-generic-assoc > > PSEUDO_FLAVORS= no_jack > FLAVOR?= > Index: patches/patch-include_vlc_fourcc_h > =================================================================== > RCS file: patches/patch-include_vlc_fourcc_h > diff -N patches/patch-include_vlc_fourcc_h > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-include_vlc_fourcc_h 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,14 @@ > +- fourcc: add VVC > + 18c0e3a45baad15fed2adf9df4d1b73f9d146a27 > + > +Index: include/vlc_fourcc.h > +--- include/vlc_fourcc.h.orig > ++++ include/vlc_fourcc.h > +@@ -40,6 +40,7 @@ > + #define VLC_CODEC_H263P VLC_FOURCC('I','L','V','R') > + #define VLC_CODEC_FLV1 VLC_FOURCC('F','L','V','1') > + #define VLC_CODEC_H261 VLC_FOURCC('h','2','6','1') > ++#define VLC_CODEC_VVC VLC_FOURCC('h','2','6','6') > + #define VLC_CODEC_MJPG VLC_FOURCC('M','J','P','G') > + #define VLC_CODEC_MJPGB VLC_FOURCC('m','j','p','b') > + #define VLC_CODEC_LJPG VLC_FOURCC('L','J','P','G') > 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 > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_codec_avcodec_fourcc_c 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,16 @@ > +- codec: avcodec: map VVC > + b2a8bb1be60315b7d8afa1151cfc6a19890aa977 > + > +Index: modules/codec/avcodec/fourcc.c > +--- modules/codec/avcodec/fourcc.c.orig > ++++ modules/codec/avcodec/fourcc.c > +@@ -262,6 +262,9 @@ static const struct vlc_avcodec_fourcc video_codecs[] > + > + { VLC_CODEC_DXV, AV_CODEC_ID_DXV }, > + > ++#if LIBAVCODEC_VERSION_CHECK( 61, 03, 100 ) > ++ { VLC_CODEC_VVC, AV_CODEC_ID_VVC }, > ++#endif > + /* ffmpeg only: AV_CODEC_ID_BRENDER_PIX */ > + /* ffmpeg only: AV_CODEC_ID_Y41P */ > + /* ffmpeg only: AV_CODEC_ID_EXR */ > 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 > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_codec_avcodec_video_c 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,18 @@ > +- codec: avcodec: map VVC > + b2a8bb1be60315b7d8afa1151cfc6a19890aa977 > + > +Index: modules/codec/avcodec/video.c > +--- modules/codec/avcodec/video.c.orig > ++++ modules/codec/avcodec/video.c > +@@ -486,6 +486,11 @@ static int InitVideoDecCommon( decoder_t *p_dec ) > + /* ***** Output always the frames ***** */ > + p_context->flags |= AV_CODEC_FLAG_OUTPUT_CORRUPT; > + > ++#if LIBAVCODEC_VERSION_CHECK( 61, 03, 100 ) > ++ if( p_dec->fmt_in.i_codec == VLC_CODEC_VVC ) > ++ p_context->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL; > ++#endif > ++ > + i_val = var_CreateGetInteger( p_dec, "avcodec-skiploopfilter" ); > + if( i_val >= 4 ) p_context->skip_loop_filter = AVDISCARD_ALL; > + else if( i_val == 3 ) p_context->skip_loop_filter = AVDISCARD_NONKEY; > Index: patches/patch-modules_demux_adaptive_tools_FormatNamespace_cpp > =================================================================== > RCS file: patches/patch-modules_demux_adaptive_tools_FormatNamespace_cpp > diff -N patches/patch-modules_demux_adaptive_tools_FormatNamespace_cpp > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_demux_adaptive_tools_FormatNamespace_cpp 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,19 @@ > +- demux: adaptive: map VVC > + e709012f02f752279784c58e3cdd9ff3883574d4 > + > +Index: modules/demux/adaptive/tools/FormatNamespace.cpp > +--- modules/demux/adaptive/tools/FormatNamespace.cpp.orig > ++++ modules/demux/adaptive/tools/FormatNamespace.cpp > +@@ -148,6 +148,12 @@ void FormatNamespace::Parse(vlc_fourcc_t fcc, const st > + fmt.i_level = std::stoi(elements.at(1), nullptr, 16); > + } > + break; > ++ case MP4RA("vvc1"): > ++ case MP4RA("vvi1"): > ++ es_format_Change(&fmt, VIDEO_ES, VLC_CODEC_VVC); > ++ if(elements.size() > 0) > ++ fmt.i_profile = std::stoi(elements.at(0), nullptr, 16); > ++ break; > + case MSFCC("AVC1"): > + case MSFCC("AVCB"): > + case MSFCC("H264"): > Index: patches/patch-modules_demux_mkv_matroska_segment_parse_cpp > =================================================================== > RCS file: patches/patch-modules_demux_mkv_matroska_segment_parse_cpp > diff -N patches/patch-modules_demux_mkv_matroska_segment_parse_cpp > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_demux_mkv_matroska_segment_parse_cpp 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,17 @@ > +- demux: mkv: add support for VVC > + 36decaa0b3f54e387c1ab923332d7c956f0c6ef1 > + > +Index: modules/demux/mkv/matroska_segment_parse.cpp > +--- modules/demux/mkv/matroska_segment_parse.cpp.orig > ++++ modules/demux/mkv/matroska_segment_parse.cpp > +@@ -1572,6 +1572,10 @@ bool matroska_segment_c::TrackInit( mkv_track_t * p_tk > + > + fill_extra_data( vars.p_tk, 0 ); > + } > ++ S_CASE("V_MPEGI/ISO/VVC") { > ++ vars.p_tk->fmt.i_codec = VLC_CODEC_VVC; > ++ fill_extra_data( vars.p_tk, 0 ); > ++ } > + S_CASE("V_QUICKTIME") { > + ONLY_FMT(VIDEO); > + if( vars.p_tk->i_extra_data > 4 ) > Index: patches/patch-modules_demux_mp4_essetup_c > =================================================================== > RCS file: patches/patch-modules_demux_mp4_essetup_c > diff -N patches/patch-modules_demux_mp4_essetup_c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_demux_mp4_essetup_c 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,50 @@ > +- demux: mp4: refactor extradata copy > + 249d247d895e9e730c8921b0a9b1b549ce6d0b13 > +- demux: mp4: map VVC > + 2790be79e54a0b4c6c036711f52275b6cf225845 > + > +Index: modules/demux/mp4/essetup.c > +--- modules/demux/mp4/essetup.c.orig > ++++ modules/demux/mp4/essetup.c > +@@ -35,8 +35,20 @@ > + #include > + > + > ++static void CopyExtradata( const uint8_t *p_extra, size_t i_extra, > ++ es_format_t *fmt ) > ++{ > ++ if( i_extra > 0 && !fmt->i_extra ) > ++ { > ++ fmt->p_extra = malloc( i_extra ); > ++ if( i_extra ) > ++ { > ++ fmt->i_extra = i_extra; > ++ memcpy( fmt->p_extra, p_extra, i_extra ); > ++ } > ++ } > ++} > + > +- > + static void SetupGlobalExtensions( mp4_track_t *p_track, MP4_Box_t *p_sample ) > + { > + if( !p_track->fmt.i_bitrate ) > +@@ -548,6 +560,19 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra > + if (p_track->fmt.i_extra <= 4) > + p_track->fmt.b_packetized = false; // force full extradata by the packetizer > + } > ++ } > ++ break; > ++ } > ++ > ++ case VLC_FOURCC( 'v', 'v', 'c', '1' ): > ++ { > ++ MP4_Box_t *p_vvcC = MP4_BoxGet( p_sample, "vvcC" ); > ++ if( p_vvcC && p_vvcC->data.p_binary && > ++ p_vvcC->data.p_binary->i_blob > 4 ) > ++ { > ++ CopyExtradata( ((uint8_t *)p_vvcC->data.p_binary->p_blob) + 4, > ++ p_vvcC->data.p_binary->i_blob - 4, > ++ &p_track->fmt ); > + } > + break; > + } > Index: patches/patch-modules_demux_mp4_libmp4_c > =================================================================== > RCS file: patches/patch-modules_demux_mp4_libmp4_c > diff -N patches/patch-modules_demux_mp4_libmp4_c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_demux_mp4_libmp4_c 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,14 @@ > +- demux: mp4: map VVC > + 2790be79e54a0b4c6c036711f52275b6cf225845 > + > +Index: modules/demux/mp4/libmp4.c > +--- modules/demux/mp4/libmp4.c.orig > ++++ modules/demux/mp4/libmp4.c > +@@ -4551,6 +4551,7 @@ static const struct > + { ATOM_av1C, MP4_ReadBox_av1C, ATOM_av01 }, > + { ATOM_avcC, MP4_ReadBox_avcC, ATOM_avc1 }, > + { ATOM_avcC, MP4_ReadBox_avcC, ATOM_avc3 }, > ++ { ATOM_vvcC, MP4_ReadBox_Binary, ATOM_vvc1 }, > + { ATOM_hvcC, MP4_ReadBox_Binary, 0 }, > + { ATOM_vpcC, MP4_ReadBox_vpcC, ATOM_vp08 }, > + { ATOM_vpcC, MP4_ReadBox_vpcC, ATOM_vp09 }, > Index: patches/patch-modules_demux_mp4_libmp4_h > =================================================================== > RCS file: patches/patch-modules_demux_mp4_libmp4_h > diff -N patches/patch-modules_demux_mp4_libmp4_h > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_demux_mp4_libmp4_h 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,34 @@ > +- demux: mp4: refactor extradata copy > + 249d247d895e9e730c8921b0a9b1b549ce6d0b13 > +- demux: mp4: map VVC > + 2790be79e54a0b4c6c036711f52275b6cf225845 > + > +Index: modules/demux/mp4/libmp4.h > +--- modules/demux/mp4/libmp4.h.orig > ++++ modules/demux/mp4/libmp4.h > +@@ -254,6 +254,8 @@ typedef int64_t stime_t; > + #define ATOM_av1C VLC_FOURCC( 'a', 'v', '1', 'C' ) > + #define ATOM_avcC VLC_FOURCC( 'a', 'v', 'c', 'C' ) > + #define ATOM_vpcC VLC_FOURCC( 'v', 'p', 'c', 'C' ) > ++#define ATOM_vvc1 VLC_FOURCC( 'v', 'v', 'c', '1' ) > ++#define ATOM_vvcC VLC_FOURCC( 'v', 'v', 'c', 'C' ) > + #define ATOM_m4ds VLC_FOURCC( 'm', '4', 'd', 's' ) > + > + #define ATOM_fiel VLC_FOURCC( 'f', 'i', 'e', 'l' ) > +@@ -1322,14 +1324,14 @@ typedef struct > + { > + WAVEFORMATEX Format; > + uint32_t i_extra; > +- char *p_extra; > ++ uint8_t *p_extra; > + } MP4_Box_data_WMA2_t; > + > + typedef struct > + { > + VLC_BITMAPINFOHEADER bmiHeader; > + uint32_t i_extra; > +- char *p_extra; > ++ uint8_t *p_extra; > + } MP4_Box_data_strf_t; > + > + typedef struct > Index: patches/patch-modules_demux_mp4_mpeg4_h > =================================================================== > RCS file: patches/patch-modules_demux_mp4_mpeg4_h > diff -N patches/patch-modules_demux_mp4_mpeg4_h > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_demux_mp4_mpeg4_h 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,36 @@ > +- demux: mp4: add missing values for object_type_indication > + 2123990073760a6faa34c92cef04d84703a8944a > +- packetizer: mpeg4: fix mapping entries for HEVC/VVC > + 00ee14f06457032edfd6b68959140a1bc528033a > + > +Index: modules/demux/mp4/mpeg4.h > +--- modules/demux/mp4/mpeg4.h.orig > ++++ modules/demux/mp4/mpeg4.h > +@@ -38,6 +38,12 @@ static inline bool MPEG4_Codec_By_ObjectType(uint8_t o > + case 0x21: /* H.264 */ > + *pi_codec = VLC_CODEC_H264; > + break; > ++ case 0x23: /* H.265 */ > ++ *pi_codec = VLC_CODEC_HEVC; > ++ break; > ++ case 0x33: /* H.266 */ > ++ *pi_codec = VLC_CODEC_VVC; > ++ break; > + case 0x40: > + case 0x41: > + *pi_codec = VLC_CODEC_MP4A; > +@@ -99,8 +105,14 @@ static inline bool MPEG4_Codec_By_ObjectType(uint8_t o > + case 0xac: /* Extension Substream containing only LBR */ > + *pi_codec = VLC_CODEC_DTS; > + break; > ++ case 0xB1: > ++ *pi_codec = VLC_CODEC_VP9; > ++ break; > + case 0xDD: > + *pi_codec = VLC_CODEC_VORBIS; > ++ break; > ++ case 0xE1: > ++ *pi_codec = VLC_CODEC_QCELP; > + break; > + default: > + return false; > Index: patches/patch-modules_demux_mpeg_ts_psi_c > =================================================================== > RCS file: patches/patch-modules_demux_mpeg_ts_psi_c > diff -N patches/patch-modules_demux_mpeg_ts_psi_c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-modules_demux_mpeg_ts_psi_c 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,16 @@ > +- demux: ts: map VVC > + 2932f39baaa4e87beb053f0b0aba92be810cde0f > + > +Index: modules/demux/mpeg/ts_psi.c > +--- modules/demux/mpeg/ts_psi.c.orig > ++++ modules/demux/mpeg/ts_psi.c > +@@ -1436,6 +1436,9 @@ static void PIDFillFormat( demux_t *p_demux, ts_stream > + case 0x24: /* HEVC */ > + es_format_Change( fmt, VIDEO_ES, VLC_CODEC_HEVC ); > + break; > ++ case 0x33: /* VVC */ > ++ es_format_Change( fmt, VIDEO_ES, VLC_CODEC_VVC ); > ++ break; > + case 0x42: /* CAVS (Chinese AVS) */ > + es_format_Change( fmt, VIDEO_ES, VLC_CODEC_CAVS ); > + break; > Index: patches/patch-src_input_decoder_c > =================================================================== > RCS file: patches/patch-src_input_decoder_c > diff -N patches/patch-src_input_decoder_c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-src_input_decoder_c 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,14 @@ > +- fourcc: add VVC > + 18c0e3a45baad15fed2adf9df4d1b73f9d146a27 > + > +Index: src/input/decoder.c > +--- src/input/decoder.c.orig > ++++ src/input/decoder.c > +@@ -510,6 +510,7 @@ static int vout_update_format( decoder_t *p_dec ) > + case VLC_CODEC_HEVC: > + case VLC_CODEC_H264: > + case VLC_CODEC_DIRAC: /* FIXME valid ? */ > ++ case VLC_CODEC_VVC: > + dpb_size = 18; > + break; > + case VLC_CODEC_AV1: > Index: patches/patch-src_misc_fourcc_list_h > =================================================================== > RCS file: patches/patch-src_misc_fourcc_list_h > diff -N patches/patch-src_misc_fourcc_list_h > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-src_misc_fourcc_list_h 6 Feb 2026 22:13:56 -0000 > @@ -0,0 +1,17 @@ > +- fourcc: add VVC > + 18c0e3a45baad15fed2adf9df4d1b73f9d146a27 > + > +Index: src/misc/fourcc_list.h > +--- src/misc/fourcc_list.h.orig > ++++ src/misc/fourcc_list.h > +@@ -226,6 +226,10 @@ static const staticentry_t p_list_video[] = { > + B(VLC_CODEC_SVQ3, "SVQ-3 (Sorenson Video v3)"), > + A("SVQ3"), > + > ++ /* VVC / H.266 */ > ++ B(VLC_CODEC_VVC, "MPEG-I Part3/VVC (H.266)"), > ++ A("vvc1"), > ++ > + /* HEVC / H.265 */ > + B(VLC_CODEC_HEVC, "MPEG-H Part2/HEVC (H.265)"), > + A("hevc"), >