aboutsummaryrefslogtreecommitdiffstats
path: root/multimedia/vlc/files/vlc-3.0.21-ffmpeg8-1.patch
diff options
context:
space:
mode:
Diffstat (limited to 'multimedia/vlc/files/vlc-3.0.21-ffmpeg8-1.patch')
-rw-r--r--multimedia/vlc/files/vlc-3.0.21-ffmpeg8-1.patch393
1 files changed, 393 insertions, 0 deletions
diff --git a/multimedia/vlc/files/vlc-3.0.21-ffmpeg8-1.patch b/multimedia/vlc/files/vlc-3.0.21-ffmpeg8-1.patch
new file mode 100644
index 000000000000..a523b04968f3
--- /dev/null
+++ b/multimedia/vlc/files/vlc-3.0.21-ffmpeg8-1.patch
@@ -0,0 +1,393 @@
+Submitted By: Joe Locash <jlocash@gmail.com>
+Date: 2025-11-19
+Initial Package Version: 3.0.21
+Upstream Status: Unknown
+Origin: Upstream
+Description: Fixes compilation with ffmpeg-8.0
+
+diff -Nuarp vlc-3.0.21.orig/modules/codec/avcodec/audio.c vlc-3.0.21/modules/codec/avcodec/audio.c
+--- vlc-3.0.21.orig/modules/codec/avcodec/audio.c 2025-11-17 18:16:27.482219213 -0500
++++ vlc-3.0.21/modules/codec/avcodec/audio.c 2025-11-17 18:17:09.717861987 -0500
+@@ -44,6 +44,12 @@
+ #include <libavutil/channel_layout.h>
+
+
++#if ! LIBAVCODEC_VERSION_CHECK(61, 33, 102) // Compatibility for profiles <= FFMPEG 8
++# define AV_PROFILE_UNKNOWN FF_PROFILE_UNKNOWN
++# define AV_LEVEL_UNKNOWN FF_LEVEL_UNKNOWN
++# define AV_INPUT_BUFFER_PADDING_SIZE FF_INPUT_BUFFER_PADDING_SIZE
++#endif
++
+ /*****************************************************************************
+ * decoder_sys_t : decoder descriptor
+ *****************************************************************************/
+@@ -101,7 +107,7 @@ static void InitDecoderConfig( decoder_t
+ if( i_size > 0 )
+ {
+ p_context->extradata =
+- av_malloc( i_size + FF_INPUT_BUFFER_PADDING_SIZE );
++ av_malloc( i_size + AV_INPUT_BUFFER_PADDING_SIZE );
+ if( p_context->extradata )
+ {
+ uint8_t *p_dst = p_context->extradata;
+@@ -109,7 +115,7 @@ static void InitDecoderConfig( decoder_t
+ p_context->extradata_size = i_size;
+
+ memcpy( &p_dst[0], &p_src[i_offset], i_size );
+- memset( &p_dst[i_size], 0, FF_INPUT_BUFFER_PADDING_SIZE );
++ memset( &p_dst[i_size], 0, AV_INPUT_BUFFER_PADDING_SIZE );
+ }
+ }
+ }
+@@ -266,9 +272,9 @@ int InitAudioDec( vlc_object_t *obj )
+ p_dec->pf_flush = Flush;
+
+ /* XXX: Writing input format makes little sense. */
+- if( avctx->profile != FF_PROFILE_UNKNOWN )
++ if( avctx->profile != AV_PROFILE_UNKNOWN )
+ p_dec->fmt_in.i_profile = avctx->profile;
+- if( avctx->level != FF_LEVEL_UNKNOWN )
++ if( avctx->level != AV_LEVEL_UNKNOWN )
+ p_dec->fmt_in.i_level = avctx->level;
+
+ return VLC_SUCCESS;
+@@ -348,11 +354,11 @@ static int DecodeBlock( decoder_t *p_dec
+
+ if( (p_block->i_flags & BLOCK_FLAG_PRIVATE_REALLOCATED) == 0 )
+ {
+- *pp_block = p_block = block_Realloc( p_block, 0, p_block->i_buffer + FF_INPUT_BUFFER_PADDING_SIZE );
++ *pp_block = p_block = block_Realloc( p_block, 0, p_block->i_buffer + AV_INPUT_BUFFER_PADDING_SIZE );
+ if( !p_block )
+ goto end;
+- p_block->i_buffer -= FF_INPUT_BUFFER_PADDING_SIZE;
+- memset( &p_block->p_buffer[p_block->i_buffer], 0, FF_INPUT_BUFFER_PADDING_SIZE );
++ p_block->i_buffer -= AV_INPUT_BUFFER_PADDING_SIZE;
++ memset( &p_block->p_buffer[p_block->i_buffer], 0, AV_INPUT_BUFFER_PADDING_SIZE );
+
+ p_block->i_flags |= BLOCK_FLAG_PRIVATE_REALLOCATED;
+ }
+diff -Nuarp vlc-3.0.21.orig/modules/codec/avcodec/avcommon_compat.h vlc-3.0.21/modules/codec/avcodec/avcommon_compat.h
+--- vlc-3.0.21.orig/modules/codec/avcodec/avcommon_compat.h 2025-11-17 18:16:27.478199137 -0500
++++ vlc-3.0.21/modules/codec/avcodec/avcommon_compat.h 2025-11-17 18:17:09.718111806 -0500
+@@ -53,8 +53,11 @@
+ #ifndef AV_CODEC_FLAG2_FAST
+ # define AV_CODEC_FLAG2_FAST CODEC_FLAG2_FAST
+ #endif
+-#ifndef FF_INPUT_BUFFER_PADDING_SIZE
+-# define FF_INPUT_BUFFER_PADDING_SIZE AV_INPUT_BUFFER_PADDING_SIZE
++#if ! LIBAVCODEC_VERSION_CHECK(61, 33, 102) // Compatibility for profiles <= FFMPEG 8
++# ifndef FF_INPUT_BUFFER_PADDING_SIZE
++# define FF_INPUT_BUFFER_PADDING_SIZE 64
++# endif
++#define AV_INPUT_BUFFER_PADDING_SIZE FF_INPUT_BUFFER_PADDING_SIZE
+ #endif
+ #ifndef AV_CODEC_FLAG_INTERLACED_DCT
+ # define AV_CODEC_FLAG_INTERLACED_DCT CODEC_FLAG_INTERLACED_DCT
+@@ -72,7 +75,11 @@
+ # define AV_CODEC_CAP_SMALL_LAST_FRAME CODEC_CAP_SMALL_LAST_FRAME
+ #endif
+ #ifndef AV_INPUT_BUFFER_MIN_SIZE
+-# define AV_INPUT_BUFFER_MIN_SIZE FF_MIN_BUFFER_SIZE
++# ifdef FF_MIN_BUFFER_SIZE
++# define AV_INPUT_BUFFER_MIN_SIZE FF_MIN_BUFFER_SIZE
++# else
++# define AV_INPUT_BUFFER_MIN_SIZE 16384 // removed with ffmpeg 8
++# endif
+ #endif
+ #ifndef FF_MAX_B_FRAMES
+ # define FF_MAX_B_FRAMES 16 // FIXME: remove this
+diff -Nuarp vlc-3.0.21.orig/modules/codec/avcodec/encoder.c vlc-3.0.21/modules/codec/avcodec/encoder.c
+--- vlc-3.0.21.orig/modules/codec/avcodec/encoder.c 2025-11-17 18:16:27.481068106 -0500
++++ vlc-3.0.21/modules/codec/avcodec/encoder.c 2025-11-17 15:11:31.691944598 -0500
+@@ -65,6 +65,17 @@
+ # define AVC_MAYBE_CONST
+ #endif
+
++#if ! LIBAVCODEC_VERSION_CHECK(61, 33, 102) // Compatibility for profiles <= FFMPEG 8
++# define AV_PROFILE_AAC_MAIN FF_PROFILE_AAC_MAIN
++# define AV_PROFILE_AAC_LOW FF_PROFILE_AAC_LOW
++# define AV_PROFILE_AAC_SSR FF_PROFILE_AAC_SSR
++# define AV_PROFILE_AAC_LTP FF_PROFILE_AAC_LTP
++# define AV_PROFILE_AAC_HE_V2 FF_PROFILE_AAC_HE_V2
++# define AV_PROFILE_AAC_HE FF_PROFILE_AAC_HE
++# define AV_PROFILE_AAC_LD FF_PROFILE_AAC_LD
++# define AV_PROFILE_AAC_ELD FF_PROFILE_AAC_ELD
++#endif
++
+ /*****************************************************************************
+ * Local prototypes
+ *****************************************************************************/
+@@ -468,30 +479,30 @@ int InitVideoEnc( vlc_object_t *p_this )
+ psz_val = var_GetString( p_enc, ENC_CFG_PREFIX "aac-profile" );
+ /* libavcodec uses faac encoder atm, and it has issues with
+ * other than low-complexity profile, so default to that */
+- p_sys->i_aac_profile = FF_PROFILE_AAC_LOW;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_LOW;
+ if( psz_val && *psz_val )
+ {
+ if( !strncmp( psz_val, "main", 4 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_MAIN;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_MAIN;
+ else if( !strncmp( psz_val, "low", 3 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_LOW;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_LOW;
+ else if( !strncmp( psz_val, "ssr", 3 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_SSR;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_SSR;
+ else if( !strncmp( psz_val, "ltp", 3 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_LTP;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_LTP;
+ /* These require libavcodec with libfdk-aac */
+ else if( !strncmp( psz_val, "hev2", 4 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_HE_V2;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_HE_V2;
+ else if( !strncmp( psz_val, "hev1", 4 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_HE;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_HE;
+ else if( !strncmp( psz_val, "ld", 2 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_LD;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_LD;
+ else if( !strncmp( psz_val, "eld", 3 ) )
+- p_sys->i_aac_profile = FF_PROFILE_AAC_ELD;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_ELD;
+ else
+ {
+ msg_Warn( p_enc, "unknown AAC profile requested, setting it to low" );
+- p_sys->i_aac_profile = FF_PROFILE_AAC_LOW;
++ p_sys->i_aac_profile = AV_PROFILE_AAC_LOW;
+ }
+ }
+ free( psz_val );
+@@ -1217,8 +1228,19 @@ static block_t *EncodeVideo( encoder_t *
+ frame->pict_type = 0;
+
+ frame->repeat_pict = p_pict->i_nb_fields - 2;
++#if LIBAVUTIL_VERSION_CHECK( 58, 7, 100 )
++ if (p_pict->b_progressive)
++ frame->flags &= ~AV_FRAME_FLAG_INTERLACED;
++ else
++ frame->flags |= AV_FRAME_FLAG_INTERLACED;
++ if (p_pict->b_top_field_first)
++ frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST;
++ else
++ frame->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST;
++#else
+ frame->interlaced_frame = !p_pict->b_progressive;
+ frame->top_field_first = !!p_pict->b_top_field_first;
++#endif
+
+ frame->format = p_sys->p_context->pix_fmt;
+ frame->width = p_sys->p_context->width;
+@@ -1473,9 +1495,8 @@ void EndVideoEnc( vlc_object_t *p_this )
+ av_frame_free( &p_sys->frame );
+
+ vlc_avcodec_lock();
+- avcodec_close( p_sys->p_context );
+- vlc_avcodec_unlock();
+ avcodec_free_context( &p_sys->p_context );
++ vlc_avcodec_unlock();
+
+
+ av_free( p_sys->p_interleave_buf );
+diff -Nuarp vlc-3.0.21.orig/modules/codec/avcodec/subtitle.c vlc-3.0.21/modules/codec/avcodec/subtitle.c
+--- vlc-3.0.21.orig/modules/codec/avcodec/subtitle.c 2025-11-17 18:16:27.475904814 -0500
++++ vlc-3.0.21/modules/codec/avcodec/subtitle.c 2025-11-17 18:17:09.718626249 -0500
+@@ -174,11 +174,11 @@ static subpicture_t *DecodeBlock(decoder
+ *block_ptr =
+ block = block_Realloc(block,
+ 0,
+- block->i_buffer + FF_INPUT_BUFFER_PADDING_SIZE);
++ block->i_buffer + AV_INPUT_BUFFER_PADDING_SIZE);
+ if (!block)
+ return NULL;
+- block->i_buffer -= FF_INPUT_BUFFER_PADDING_SIZE;
+- memset(&block->p_buffer[block->i_buffer], 0, FF_INPUT_BUFFER_PADDING_SIZE);
++ block->i_buffer -= AV_INPUT_BUFFER_PADDING_SIZE;
++ memset(&block->p_buffer[block->i_buffer], 0, AV_INPUT_BUFFER_PADDING_SIZE);
+
+ /* */
+ AVSubtitle subtitle;
+diff -Nuarp vlc-3.0.21.orig/modules/codec/avcodec/vaapi.c vlc-3.0.21/modules/codec/avcodec/vaapi.c
+--- vlc-3.0.21.orig/modules/codec/avcodec/vaapi.c 2024-06-05 11:56:07.000000000 -0400
++++ vlc-3.0.21/modules/codec/avcodec/vaapi.c 2025-11-17 18:17:09.718869643 -0500
+@@ -87,9 +87,9 @@ static int GetVaProfile(AVCodecContext *
+ count = 18;
+ break;
+ case AV_CODEC_ID_HEVC:
+- if (ctx->profile == FF_PROFILE_HEVC_MAIN)
++ if (ctx->profile == AV_PROFILE_HEVC_MAIN)
+ i_profile = VAProfileHEVCMain;
+- else if (ctx->profile == FF_PROFILE_HEVC_MAIN_10)
++ else if (ctx->profile == AV_PROFILE_HEVC_MAIN_10)
+ {
+ i_profile = VAProfileHEVCMain10;
+ i_vlc_chroma = VLC_CODEC_VAAPI_420_10BPP;
+@@ -103,10 +103,10 @@ static int GetVaProfile(AVCodecContext *
+ count = 5;
+ break;
+ case AV_CODEC_ID_VP9:
+- if (ctx->profile == FF_PROFILE_VP9_0)
++ if (ctx->profile == AV_PROFILE_VP9_0)
+ i_profile = VAProfileVP9Profile0;
+ #if VA_CHECK_VERSION( 0, 39, 0 )
+- else if (ctx->profile == FF_PROFILE_VP9_2)
++ else if (ctx->profile == AV_PROFILE_VP9_2)
+ {
+ i_profile = VAProfileVP9Profile2;
+ i_vlc_chroma = VLC_CODEC_VAAPI_420_10BPP;
+diff -Nuarp vlc-3.0.21.orig/modules/codec/avcodec/video.c vlc-3.0.21/modules/codec/avcodec/video.c
+--- vlc-3.0.21.orig/modules/codec/avcodec/video.c 2025-11-17 18:16:27.479151968 -0500
++++ vlc-3.0.21/modules/codec/avcodec/video.c 2025-11-17 15:17:39.571811094 -0500
+@@ -50,6 +50,13 @@
+ #include "../../packetizer/av1.h"
+ #include "../codec/cc.h"
+
++#if ! LIBAVCODEC_VERSION_CHECK(61, 33, 102) // Compatibility for profiles <= FFMPEG 8
++# define AV_PROFILE_UNKNOWN FF_PROFILE_UNKNOWN
++# define AV_LEVEL_UNKNOWN FF_LEVEL_UNKNOWN
++# define AV_INPUT_BUFFER_PADDING_SIZE FF_INPUT_BUFFER_PADDING_SIZE
++#endif
++
++
+ /*****************************************************************************
+ * decoder_sys_t : decoder descriptor
+ *****************************************************************************/
+@@ -200,8 +207,7 @@ static int lavc_GetVideoFormat(decoder_t
+ else if (ctx->time_base.num > 0 && ctx->time_base.den > 0)
+ {
+ fmt->i_frame_rate = ctx->time_base.den;
+- fmt->i_frame_rate_base = ctx->time_base.num
+- * __MAX(ctx->ticks_per_frame, 1);
++ fmt->i_frame_rate_base = ctx->time_base.num;
+ }
+
+ /* FIXME we should only set the known values and let the core decide
+@@ -323,12 +329,10 @@ static int lavc_UpdateVideoFormat(decode
+
+ /* always have date in fields/ticks units */
+ if(dec->p_sys->pts.i_divider_num)
+- date_Change(&dec->p_sys->pts, fmt_out.i_frame_rate *
+- __MAX(ctx->ticks_per_frame, 1),
++ date_Change(&dec->p_sys->pts, fmt_out.i_frame_rate,
+ fmt_out.i_frame_rate_base);
+ else
+- date_Init(&dec->p_sys->pts, fmt_out.i_frame_rate *
+- __MAX(ctx->ticks_per_frame, 1),
++ date_Init(&dec->p_sys->pts, fmt_out.i_frame_rate,
+ fmt_out.i_frame_rate_base);
+
+ fmt_out.p_palette = dec->fmt_out.video.p_palette;
+@@ -622,9 +626,9 @@ static int InitVideoDecCommon( decoder_t
+ p_dec->pf_flush = Flush;
+
+ /* XXX: Writing input format makes little sense. */
+- if( p_context->profile != FF_PROFILE_UNKNOWN )
++ if( p_context->profile != AV_PROFILE_UNKNOWN )
+ p_dec->fmt_in.i_profile = p_context->profile;
+- if( p_context->level != FF_LEVEL_UNKNOWN )
++ if( p_context->level != AV_LEVEL_UNKNOWN )
+ p_dec->fmt_in.i_level = p_context->level;
+ return VLC_SUCCESS;
+ }
+@@ -937,9 +941,11 @@ static vlc_tick_t interpolate_next_pts(
+ p_sys->pts.i_divider_num == 0 )
+ return VLC_TICK_INVALID;
+
++#if LIBAVCODEC_VERSION_CHECK( 60, 12, 100 )
++ int i_tick = p_context->codec_descriptor->props & AV_CODEC_PROP_FIELDS ? 2 : 1;
++#else
+ int i_tick = p_context->ticks_per_frame;
+- if( i_tick <= 0 )
+- i_tick = 1;
++#endif
+
+ /* interpolate the next PTS */
+ return date_Increment( &p_sys->pts, i_tick + frame->repeat_pict );
+@@ -1179,13 +1185,13 @@ static picture_t *DecodeBlock( decoder_t
+ eos_spotted = ( p_block->i_flags & BLOCK_FLAG_END_OF_SEQUENCE ) != 0;
+
+ p_block = block_Realloc( p_block, 0,
+- p_block->i_buffer + FF_INPUT_BUFFER_PADDING_SIZE );
++ p_block->i_buffer + AV_INPUT_BUFFER_PADDING_SIZE );
+ if( !p_block )
+ return NULL;
+- p_block->i_buffer -= FF_INPUT_BUFFER_PADDING_SIZE;
++ p_block->i_buffer -= AV_INPUT_BUFFER_PADDING_SIZE;
+ *pp_block = p_block;
+ memset( p_block->p_buffer + p_block->i_buffer, 0,
+- FF_INPUT_BUFFER_PADDING_SIZE );
++ AV_INPUT_BUFFER_PADDING_SIZE );
+ }
+
+ do
+@@ -1414,8 +1420,13 @@ static picture_t *DecodeBlock( decoder_t
+ /* Hack to force display of still pictures */
+ p_pic->b_force = p_sys->b_first_frame;
+ p_pic->i_nb_fields = 2 + frame->repeat_pict;
++#if LIBAVUTIL_VERSION_CHECK( 58, 7, 100 )
++ p_pic->b_progressive = !(frame->flags & AV_FRAME_FLAG_INTERLACED);
++ p_pic->b_top_field_first = !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST);
++#else
+ p_pic->b_progressive = !frame->interlaced_frame;
+ p_pic->b_top_field_first = frame->top_field_first;
++#endif
+
+ if (DecodeSidedata(p_dec, frame, p_pic))
+ i_pts = VLC_TICK_INVALID;
+@@ -1502,7 +1513,7 @@ static void ffmpeg_InitCodec( decoder_t
+ p_sys->p_context->extradata_size = i_size + 12;
+ p = p_sys->p_context->extradata =
+ av_malloc( p_sys->p_context->extradata_size +
+- FF_INPUT_BUFFER_PADDING_SIZE );
++ AV_INPUT_BUFFER_PADDING_SIZE );
+ if( !p )
+ return;
+
+@@ -1539,13 +1550,13 @@ static void ffmpeg_InitCodec( decoder_t
+ {
+ p_sys->p_context->extradata_size = i_size;
+ p_sys->p_context->extradata =
+- av_malloc( i_size + FF_INPUT_BUFFER_PADDING_SIZE );
++ av_malloc( i_size + AV_INPUT_BUFFER_PADDING_SIZE );
+ if( p_sys->p_context->extradata )
+ {
+ memcpy( p_sys->p_context->extradata,
+ p_dec->fmt_in.p_extra, i_size );
+ memset( p_sys->p_context->extradata + i_size,
+- 0, FF_INPUT_BUFFER_PADDING_SIZE );
++ 0, AV_INPUT_BUFFER_PADDING_SIZE );
+ }
+ }
+ }
+diff -Nuarp vlc-3.0.21.orig/modules/demux/avformat/demux.c vlc-3.0.21/modules/demux/avformat/demux.c
+--- vlc-3.0.21.orig/modules/demux/avformat/demux.c 2025-11-17 18:16:27.482817115 -0500
++++ vlc-3.0.21/modules/demux/avformat/demux.c 2025-11-17 15:40:29.653691401 -0500
+@@ -112,6 +112,18 @@ static vlc_fourcc_t CodecTagToFourcc( ui
+ #endif
+ }
+
++static inline void* GetStreamSideData(const AVStream *s, enum AVPacketSideDataType type)
++{
++#if LIBAVCODEC_VERSION_CHECK( 60, 29, 100 )
++ const AVCodecParameters *cp = s->codecpar;
++ const AVPacketSideData *psd =
++ av_packet_side_data_get(cp->coded_side_data, cp->nb_coded_side_data, type);
++ return psd ? psd->data : NULL;
++#else
++ return av_stream_get_side_data(s, type, NULL);
++#endif
++}
++
+ /*****************************************************************************
+ * Open
+ *****************************************************************************/
+@@ -138,7 +150,8 @@ static void get_rotation(es_format_t *fm
+ else
+ fmt->video.orientation = ORIENT_NORMAL;
+ }
+- int32_t *matrix = (int32_t *)av_stream_get_side_data(s, AV_PKT_DATA_DISPLAYMATRIX, NULL);
++
++ int32_t *matrix = GetStreamSideData(s, AV_PKT_DATA_DISPLAYMATRIX);
+ if( matrix ) {
+ angle = lround(av_display_rotation_get(matrix));
+