From https://github.com/punesemu/puNES/commit/49f86fcf0fab37d4761b713b0a9e7dc342b8f594 From https://github.com/punesemu/puNES/commit/094686fc806c51b105167080fad093f830a9bc04 From https://github.com/punesemu/puNES/commit/057f49044ec547de1ace03911a317a99e31f25cc --- a/src/core/recording.c +++ b/src/core/recording.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2010-2024 Fabio Cavallo (aka FHorse) + * Copyright (C) 2010-2026 Fabio Cavallo (aka FHorse) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -204,8 +204,10 @@ void recording_init(void) { } av_dict_free(&opts); opts = NULL; +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 0, 0) avcodec_close(test); - av_free(test); +#endif + avcodec_free_context(&test); if (finded) { break; } @@ -487,7 +489,9 @@ static void ffmpeg_fstream_close(_ffmpeg_stream *fs) { fs->encode = FALSE; fs->avc = NULL; if (fs->avcc) { +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 0, 0) avcodec_close(fs->avcc); +#endif avcodec_free_context(&fs->avcc); } if (fs->avf) { @@ -1054,7 +1058,11 @@ static BYTE ffmpeg_video_add_stream_format_h264(void) { if (vbr < 4000) { vbr = 4000; } +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(60, 31, 102) + video->avcc->profile = AV_PROFILE_H264_HIGH; +#else video->avcc->profile = FF_PROFILE_H264_HIGH; +#endif video->avcc->bit_rate = (int64_t)vbr; } video->avcc->thread_count = FFMIN(8, gui_hardware_concurrency()); @@ -1453,8 +1461,16 @@ INLINE static BYTE ffmpeg_audio_write_frame(SWORD *data) { } static enum AVSampleFormat ffmpeg_audio_select_sample_fmt(const AVCodec *codec) { - const enum AVSampleFormat *p = codec->sample_fmts; + const enum AVSampleFormat *sample_fmts = NULL; + const enum AVSampleFormat *p = NULL; +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 13, 100) + sample_fmts = codec->sample_fmts; +#else + avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0, (const void **)&sample_fmts, NULL); +#endif + + p = sample_fmts; if (!p) { return (AV_SAMPLE_FMT_S16); } @@ -1465,13 +1481,20 @@ static enum AVSampleFormat ffmpeg_audio_select_sample_fmt(const AVCodec *codec) } p++; } - return (codec->sample_fmts[0]); + return (sample_fmts[0]); } static int ffmpeg_audio_select_samplerate(const AVCodec *codec) { int snd_sample_rate = (snd.samplerate ? snd.samplerate : 44100), best_samplerate = 0; + const int *supported_samplerates = NULL; const int *p = NULL; - if (!codec->supported_samplerates) { +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 13, 100) + supported_samplerates = codec->supported_samplerates; +#else + avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_SAMPLE_RATE, 0, (const void **)&supported_samplerates, NULL); +#endif + + if (supported_samplerates == NULL) { switch (codec->id) { case AV_CODEC_ID_PCM_S16LE: case AV_CODEC_ID_PCM_S16BE: @@ -1488,13 +1511,13 @@ static int ffmpeg_audio_select_samplerate(const AVCodec *codec) { } } - p = codec->supported_samplerates; + p = supported_samplerates; while (*p) { best_samplerate = FFMAX(*p, best_samplerate); p++; } - p = codec->supported_samplerates; + p = supported_samplerates; while (*p) { if ((*p) == snd_sample_rate) { best_samplerate = snd_sample_rate; @@ -1605,10 +1628,17 @@ static AVFrame *ffmpeg_audio_alloc_frame(enum AVSampleFormat sample_fmt, const A return (avframe); } static int ffmpeg_audio_select_channel_layout(const AVCodec *codec, AVChannelLayout *dst) { - const AVChannelLayout *p = NULL, *best_ch_layout = NULL; + const AVChannelLayout *best_ch_layout = NULL; + const AVChannelLayout *ch_layouts = NULL; + const AVChannelLayout *p = NULL; int best_nb_channels = 0; - if (!codec->ch_layouts) { +#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(61, 13, 100) + ch_layouts = codec->ch_layouts; +#else + avcodec_get_supported_config(NULL, codec, AV_CODEC_CONFIG_CHANNEL_LAYOUT, 0, (const void **)&ch_layouts, NULL); +#endif + if (ch_layouts == NULL) { switch (codec->id) { case AV_CODEC_ID_PCM_S16LE: case AV_CODEC_ID_PCM_S16BE: @@ -1628,7 +1658,7 @@ static int ffmpeg_audio_select_channel_layout(const AVCodec *codec, AVChannelLay } } - p = codec->ch_layouts; + p = ch_layouts; while (p->nb_channels) { int nb_channels = p->nb_channels; @@ -1639,7 +1669,7 @@ static int ffmpeg_audio_select_channel_layout(const AVCodec *codec, AVChannelLay p++; } - p = codec->ch_layouts; + p = ch_layouts; while (p->nb_channels) { int nb_channels = p->nb_channels;