Backport support for VVC codec.

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 <assert.h>
+ 
+ 
++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"),

Reply via email to