From: Brad Smith Subject: Re: UPDATE: VLC To: ports@openbsd.org Date: Sun, 8 Feb 2026 07:53:54 -0500 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 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);