Submitted By: Joe Locash 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 +#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));