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 <brad@comstyle.co
# 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);
No comments:
Post a Comment