On Fri, Feb 06, 2026 at 05:16:24PM -0500, Brad Smith wrote:
> Backport support for VVC codec.

Here is part two of my initial patch. I missed a small piece of the
whole set.

Also the WANTLIB adjustment as execinfo is common to the two
packages.


Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/vlc/Makefile,v
retrieving revision 1.295
diff -u -p -u -p -r1.295 Makefile
--- Makefile    7 Feb 2026 14:34:56 -0000       1.295
+++ Makefile    8 Feb 2026 10:11:22 -0000
@@ -2,14 +2,14 @@ COMMENT-main= VideoLAN client; multimedi
 COMMENT-jack=  JACK audio output module for VLC
 
 V=             3.0.23
-REVISION-main= 4
 DISTNAME=      vlc-${V}
 PKGNAME-main=  ${DISTNAME}
 PKGNAME-jack=  vlc-jack-${V}
+REVISION-main= 5
+REVISION-jack= 1
 CATEGORIES=    x11
 SITES=         https://download.videolan.org/pub/videolan/vlc/${V}/
 EXTRACT_SUFX=  .tar.xz
-REVISION-jack= 0
 
 USE_NOBTCFI=   Yes
 
@@ -24,7 +24,7 @@ MAINTAINER=   Brad Smith <[email protected]
 # LGPLv2.1+ and GPLv2+
 PERMIT_PACKAGE=        Yes
 
-WANTLIB-common=        dbus-1 iconv idn intl m pthread
+WANTLIB-common=        dbus-1 execinfo iconv idn intl m pthread
 
 WANTLIB-main += ${WANTLIB-common} ${MODLUA_WANTLIB}
 
@@ -62,7 +62,7 @@ WANTLIB-main += absl_vlog_config_interna
 WANTLIB-main += atspi avahi-client avahi-common avcodec avformat avutil
 WANTLIB-main += b2 bluray bz2 c cairo cairo-gobject cddb crypto curses dav1d
 WANTLIB-main += double-conversion drm drm_amdgpu dvbpsi dvdnav
-WANTLIB-main += dvdread ebml elf epoll-shim epoxy execinfo expat ffi
+WANTLIB-main += dvdread ebml elf epoll-shim epoxy expat ffi
 WANTLIB-main += fontconfig freetype fribidi gbm gcrypt gdk-3 gdk_pixbuf-2.0
 WANTLIB-main += gio-2.0 glapi glib-2.0 gmodule-2.0 gmp gnutls gobject-2.0
 WANTLIB-main += gpg-error graphite2 gsm gthread-2.0 gtk-3 harfbuzz
@@ -86,7 +86,7 @@ WANTLIB-main += drm_intel
 # v4l2 is dlopen'd
 WANTLIB-main+= v4l2
 
-WANTLIB-jack=  db execinfo jack vlccore ${WANTLIB-common}
+WANTLIB-jack=  db jack vlccore ${WANTLIB-common}
 
 AUTOCONF_VERSION= 2.69
 AUTOMAKE_VERSION= 1.16
Index: patches/patch-modules_demux_mp4_essetup_c
===================================================================
RCS file: /cvs/ports/x11/vlc/patches/patch-modules_demux_mp4_essetup_c,v
retrieving revision 1.1
diff -u -p -u -p -r1.1 patch-modules_demux_mp4_essetup_c
--- patches/patch-modules_demux_mp4_essetup_c   7 Feb 2026 14:34:56 -0000       
1.1
+++ patches/patch-modules_demux_mp4_essetup_c   8 Feb 2026 10:11:22 -0000
@@ -1,3 +1,5 @@
+- demux: mp4: set AVC profile/level
+  0907e4de305197a3d1110b4a5ac52e90e935a9ed
 - demux: mp4: refactor extradata copy
   249d247d895e9e730c8921b0a9b1b549ce6d0b13
 - demux: mp4: map VVC
@@ -28,14 +30,105 @@ Index: modules/demux/mp4/essetup.c
  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;
-+        }
+@@ -91,13 +103,10 @@ static void SetupESDS( demux_t *p_demux, mp4_track_t *
+     p_track->fmt.i_original_fourcc = 0; /* so we don't have MP4A as original 
fourcc */
+     p_track->fmt.i_bitrate = p_decconfig->i_avg_bitrate;
+ 
+-    p_track->fmt.i_extra = p_decconfig->i_decoder_specific_info_len;
+-    if( p_track->fmt.i_extra > 0 )
+-    {
+-        p_track->fmt.p_extra = malloc( p_track->fmt.i_extra );
+-        memcpy( p_track->fmt.p_extra, p_decconfig->p_decoder_specific_info,
+-                p_track->fmt.i_extra );
+-    }
++    CopyExtradata( p_decconfig->p_decoder_specific_info,
++                   p_decconfig->i_decoder_specific_info_len,
++                   &p_track->fmt );
 +
+     if( p_track->fmt.i_codec == VLC_CODEC_SPU &&
+             p_track->fmt.i_extra >= 16 * 4 )
+     {
+@@ -476,15 +485,9 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+         case VLC_FOURCC( '3', 'I', 'V', '1' ):
+         case VLC_FOURCC( 'Z', 'y', 'G', 'o' ):
+         {
+-            p_track->fmt.i_extra =
+-                p_sample->data.p_sample_vide->i_qt_image_description;
+-            if( p_track->fmt.i_extra > 0 )
+-            {
+-                p_track->fmt.p_extra = malloc( p_track->fmt.i_extra );
+-                memcpy( p_track->fmt.p_extra,
+-                        p_sample->data.p_sample_vide->p_qt_image_description,
+-                        p_track->fmt.i_extra);
+-            }
++            CopyExtradata( 
p_sample->data.p_sample_vide->p_qt_image_description,
++                           
p_sample->data.p_sample_vide->i_qt_image_description,
++                           &p_track->fmt );
+             break;
+         }
+ 
+@@ -495,15 +498,11 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+         case VLC_CODEC_FFV1:
+         {
+             MP4_Box_t *p_binary = MP4_BoxGet( p_sample, "glbl" );
+-            if( p_binary && BOXDATA(p_binary) && BOXDATA(p_binary)->i_blob )
++            if( p_binary && BOXDATA(p_binary) )
+             {
+-                p_track->fmt.p_extra = malloc( BOXDATA(p_binary)->i_blob );
+-                if( p_track->fmt.p_extra )
+-                {
+-                    p_track->fmt.i_extra = BOXDATA(p_binary)->i_blob;
+-                    memcpy( p_track->fmt.p_extra, BOXDATA(p_binary)->p_blob,
+-                            p_track->fmt.i_extra );
+-                }
++                CopyExtradata( BOXDATA(p_binary)->p_blob,
++                               BOXDATA(p_binary)->i_blob,
++                               &p_track->fmt );
+             }
+             break;
+         }
+@@ -513,13 +512,9 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+             MP4_Box_t *p_dvc1 = MP4_BoxGet( p_sample, "dvc1" );
+             if( p_dvc1 && BOXDATA(p_dvc1) )
+             {
+-                p_track->fmt.i_extra = BOXDATA(p_dvc1)->i_vc1;
+-                if( p_track->fmt.i_extra > 0 )
+-                {
+-                    p_track->fmt.p_extra = malloc( BOXDATA(p_dvc1)->i_vc1 );
+-                    memcpy( p_track->fmt.p_extra, BOXDATA(p_dvc1)->p_vc1,
+-                            p_track->fmt.i_extra );
+-                }
++                CopyExtradata( BOXDATA(p_dvc1)->p_vc1,
++                               BOXDATA(p_dvc1)->i_vc1,
++                               &p_track->fmt );
+             }
+             else
+             {
+@@ -536,22 +531,28 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+             {
+                 p_track->fmt.i_profile = BOXDATA(p_av1C)->i_profile;
+                 p_track->fmt.i_level = BOXDATA(p_av1C)->i_level;
+-                if( BOXDATA(p_av1C)->i_av1C )
+-                {
+-                    p_track->fmt.p_extra = malloc( BOXDATA(p_av1C)->i_av1C );
+-                    if( p_track->fmt.p_extra )
+-                    {
+-                        memcpy( p_track->fmt.p_extra, BOXDATA(p_av1C)->p_av1C,
+-                                BOXDATA(p_av1C)->i_av1C );
+-                        p_track->fmt.i_extra = BOXDATA(p_av1C)->i_av1C;
+-                    }
+-                    if (p_track->fmt.i_extra <= 4)
+-                        p_track->fmt.b_packetized = false; // force full 
extradata by the packetizer
+-                }
++                CopyExtradata( BOXDATA(p_av1C)->p_av1C,
++                               BOXDATA(p_av1C)->i_av1C,
++                               &p_track->fmt );
++                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" );
@@ -45,6 +138,121 @@ Index: modules/demux/mp4/essetup.c
 +                CopyExtradata( ((uint8_t *)p_vvcC->data.p_binary->p_blob) + 4,
 +                               p_vvcC->data.p_binary->i_blob - 4,
 +                               &p_track->fmt );
++            }
++            break;
++        }
++
+         /* avc1: send avcC (h264 without annexe B, ie without start code)*/
+         case VLC_FOURCC( 'a', 'v', 'c', '3' ):
+         case VLC_FOURCC( 'a', 'v', 'c', '1' ):
+@@ -562,13 +563,11 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+ 
+             if( p_avcC && BOXDATA(p_avcC) )
+             {
+-                p_track->fmt.i_extra = BOXDATA(p_avcC)->i_avcC;
+-                if( p_track->fmt.i_extra > 0 )
+-                {
+-                    p_track->fmt.p_extra = malloc( BOXDATA(p_avcC)->i_avcC );
+-                    memcpy( p_track->fmt.p_extra, BOXDATA(p_avcC)->p_avcC,
+-                            p_track->fmt.i_extra );
+-                }
++                p_track->fmt.i_profile = BOXDATA(p_avcC)->i_profile;
++                p_track->fmt.i_level = BOXDATA(p_avcC)->i_level;
++                CopyExtradata( BOXDATA(p_avcC)->p_avcC,
++                               BOXDATA(p_avcC)->i_avcC,
++                               &p_track->fmt );
+             }
+             else
+             {
+@@ -587,15 +586,11 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+             if( p_sample->i_type == VLC_FOURCC( 'd', 'v', 'h', '1' ) )
+                 p_track->fmt.i_codec = VLC_FOURCC( 'd', 'v', 'h', 'e' );
+ 
+-            if( p_hvcC && p_hvcC->data.p_binary && 
p_hvcC->data.p_binary->i_blob )
++            if( p_hvcC && p_hvcC->data.p_binary )
+             {
+-                p_track->fmt.p_extra = malloc( p_hvcC->data.p_binary->i_blob 
);
+-                if( p_track->fmt.p_extra )
+-                {
+-                    p_track->fmt.i_extra = p_hvcC->data.p_binary->i_blob;
+-                    memcpy( p_track->fmt.p_extra, 
p_hvcC->data.p_binary->p_blob,
+-                            p_hvcC->data.p_binary->i_blob );
+-                }
++                CopyExtradata( p_hvcC->data.p_binary->p_blob,
++                               p_hvcC->data.p_binary->i_blob,
++                               &p_track->fmt );
+             }
+             else
+             {
+@@ -655,16 +650,9 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+                 p_track->fmt.video.b_color_range_full = p_data->i_fullrange;
+                 p_track->fmt.video.i_bits_per_pixel = p_data->i_bit_depth;
+ 
+-                if( p_data->i_codec_init_datasize )
+-                {
+-                    p_track->fmt.p_extra = malloc( 
p_data->i_codec_init_datasize );
+-                    if( p_track->fmt.p_extra )
+-                    {
+-                        p_track->fmt.i_extra = p_data->i_codec_init_datasize;
+-                        memcpy( p_track->fmt.p_extra, 
p_data->p_codec_init_data,
+-                                p_data->i_codec_init_datasize );
+-                    }
+-                }
++                CopyExtradata( p_data->p_codec_init_data,
++                               p_data->i_codec_init_datasize,
++                               &p_track->fmt );
+ 
+                 const MP4_Box_t *p_SmDm = MP4_BoxGet( p_sample, "SmDm" );
+                 if( p_SmDm && BOXDATA(p_SmDm) )
+@@ -701,13 +689,9 @@ int SetupVideoES( demux_t *p_demux, mp4_track_t *p_tra
+                 p_track->fmt.video.i_height = 
BOXDATA(p_strf)->bmiHeader.biHeight;
+                 p_track->fmt.video.i_visible_height 
=p_track->fmt.video.i_height;
+                 p_track->fmt.video.i_bits_per_pixel = 
BOXDATA(p_strf)->bmiHeader.biBitCount;
+-                p_track->fmt.i_extra = BOXDATA(p_strf)->i_extra;
+-                if( p_track->fmt.i_extra > 0 )
+-                {
+-                    p_track->fmt.p_extra = malloc( BOXDATA(p_strf)->i_extra );
+-                    memcpy( p_track->fmt.p_extra, BOXDATA(p_strf)->p_extra,
+-                            p_track->fmt.i_extra );
+-                }
++                CopyExtradata( BOXDATA(p_strf)->p_extra,
++                               BOXDATA(p_strf)->i_extra,
++                               &p_track->fmt );
              }
              break;
          }
+@@ -753,12 +737,9 @@ static bool SetupAudioFromWaveFormatEx( es_format_t *p
+         p_fmt->i_bitrate = BOXDATA(p_WMA2)->Format.nAvgBytesPerSec * 8;
+         p_fmt->audio.i_blockalign = BOXDATA(p_WMA2)->Format.nBlockAlign;
+         p_fmt->audio.i_bitspersample = BOXDATA(p_WMA2)->Format.wBitsPerSample;
+-        p_fmt->i_extra = BOXDATA(p_WMA2)->i_extra;
+-        if( p_fmt->i_extra > 0 )
+-        {
+-            p_fmt->p_extra = malloc( BOXDATA(p_WMA2)->i_extra );
+-            memcpy( p_fmt->p_extra, BOXDATA(p_WMA2)->p_extra, p_fmt->i_extra 
);
+-        }
++        CopyExtradata( BOXDATA(p_WMA2)->p_extra,
++                       BOXDATA(p_WMA2)->i_extra,
++                       p_fmt );
+         return true;
+     }
+     return false;
+@@ -1246,15 +1227,9 @@ int SetupAudioES( demux_t *p_demux, mp4_track_t *p_tra
+         case VLC_CODEC_QDM2:
+         case VLC_CODEC_ALAC:
+         {
+-            p_track->fmt.i_extra =
+-                p_sample->data.p_sample_soun->i_qt_description;
+-            if( p_track->fmt.i_extra > 0 )
+-            {
+-                p_track->fmt.p_extra = malloc( p_track->fmt.i_extra );
+-                memcpy( p_track->fmt.p_extra,
+-                        p_sample->data.p_sample_soun->p_qt_description,
+-                        p_track->fmt.i_extra);
+-            }
++            CopyExtradata( p_sample->data.p_sample_soun->p_qt_description,
++                           p_sample->data.p_sample_soun->i_qt_description,
++                           &p_track->fmt );
+             if( p_track->fmt.i_extra == 56 && p_sample->i_type == 
VLC_CODEC_ALAC )
+             {
+                 p_track->fmt.audio.i_channels = 
*((uint8_t*)p_track->fmt.p_extra + 41);

Reply via email to