git: b3488bf7c232 - main - emulators/dosbox-x: Fix build with FFmpeg 8

From: Nuno Teixeira <eduardo_at_FreeBSD.org>
Date: Mon, 25 Aug 2025 11:31:50 UTC
The branch main has been updated by eduardo:

URL: https://cgit.FreeBSD.org/ports/commit/?id=b3488bf7c2326f1c89fde8327663dca7243be000

commit b3488bf7c2326f1c89fde8327663dca7243be000
Author:     Nuno Teixeira <eduardo@FreeBSD.org>
AuthorDate: 2025-08-25 11:28:39 +0000
Commit:     Nuno Teixeira <eduardo@FreeBSD.org>
CommitDate: 2025-08-25 11:31:24 +0000

    emulators/dosbox-x: Fix build with FFmpeg 8
    
    Apply upstream patch to fix build
    
    PR:             289074
---
 emulators/dosbox-x/files/patch-fix-ffmpeg8 | 88 ++++++++++++++++++++++++++++++
 1 file changed, 88 insertions(+)

diff --git a/emulators/dosbox-x/files/patch-fix-ffmpeg8 b/emulators/dosbox-x/files/patch-fix-ffmpeg8
new file mode 100644
index 000000000000..7c1782a7b3bd
--- /dev/null
+++ b/emulators/dosbox-x/files/patch-fix-ffmpeg8
@@ -0,0 +1,88 @@
+Fix build with FFmpeg 8
+https://github.com/joncampbell123/dosbox-x/issues/5803
+
+--- src/hardware/hardware.cpp.orig	2025-08-25 08:00:00 UTC
++++ src/hardware/hardware.cpp
+@@ -123,20 +123,18 @@ void ffmpeg_closeall() {
+ 			ffmpeg_avformat_began = false;
+ 		}
+ 		avio_close(ffmpeg_fmt_ctx->pb);
+-		if (ffmpeg_vid_ctx != NULL) avcodec_close(ffmpeg_vid_ctx);
+-		if (ffmpeg_aud_ctx != NULL) avcodec_close(ffmpeg_aud_ctx);
++		if (ffmpeg_vid_ctx != NULL) avcodec_free_context(&ffmpeg_vid_ctx);
++		if (ffmpeg_aud_ctx != NULL) avcodec_free_context(&ffmpeg_aud_ctx);
+ 		avformat_free_context(ffmpeg_fmt_ctx);
+ 		ffmpeg_fmt_ctx = NULL;
+ 		ffmpeg_vid_ctx = NULL; // NTS: avformat_free_context() freed this for us, don't free again
+ 		ffmpeg_aud_ctx = NULL; // NTS: avformat_free_context() freed this for us, don't free again
+ 	}
+ 	if (ffmpeg_vid_ctx != NULL) {
+-		avcodec_close(ffmpeg_vid_ctx);
+ 		avcodec_free_context(&ffmpeg_vid_ctx);
+ 		ffmpeg_vid_ctx = NULL;
+ 	}
+ 	if (ffmpeg_aud_ctx != NULL) {
+-		avcodec_close(ffmpeg_aud_ctx);
+ 		avcodec_free_context(&ffmpeg_aud_ctx);
+ 		ffmpeg_aud_ctx = NULL;
+ 	}
+@@ -171,7 +169,6 @@ void ffmpeg_audio_frame_send() {
+ 
+ 	if (!pkt) E_Exit("Error: Unable to alloc packet");
+ 
+-	ffmpeg_aud_frame->key_frame = 1;
+ 	ffmpeg_aud_frame->pts = (int64_t)ffmpeg_audio_sample_counter;
+ 	r=avcodec_send_frame(ffmpeg_aud_ctx,ffmpeg_aud_frame);
+ 	if (r < 0 && r != AVERROR(EAGAIN))
+@@ -426,7 +423,6 @@ void ffmpeg_reopen_video(double fps,const int bpp) {
+ 
+ void ffmpeg_reopen_video(double fps,const int bpp) {
+ 	if (ffmpeg_vid_ctx != NULL) {
+-		avcodec_close(ffmpeg_vid_ctx);
+ 		avcodec_free_context(&ffmpeg_vid_ctx);
+ 		ffmpeg_vid_ctx = NULL;
+ 	}
+@@ -1271,7 +1267,7 @@ skip_shot:
+ 			ffmpeg_aud_ctx->sample_rate = (int)capture.video.audiorate;
+ 			ffmpeg_aud_ctx->flags = 0; // do not use global headers
+ 			ffmpeg_aud_ctx->bit_rate = 320000;
+-			ffmpeg_aud_ctx->profile = FF_PROFILE_AAC_LOW;
++			// ffmpeg_aud_ctx->profile = FF_PROFILE_AAC_LOW;
+ 
+ 			#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59,24,100)
+ 			ffmpeg_aud_ctx->channels = 2;
+@@ -1531,7 +1527,6 @@ skip_shot:
+ 
+ 				// encode it
+ 				ffmpeg_vid_frame->pts = (int64_t)capture.video.frames; // or else libx264 complains about non-monotonic timestamps
+-				ffmpeg_vid_frame->key_frame = ((capture.video.frames % 15) == 0)?1:0;
+ 
+ 				r=avcodec_send_frame(ffmpeg_vid_ctx,ffmpeg_vid_frame);
+ 				if (r < 0 && r != AVERROR(EAGAIN))
+@@ -1768,7 +1763,7 @@ skip_mt_wav:
+ }
+ 
+ #pragma pack(push,1)
+-typedef struct pcap_hdr_struct_t {
++typedef struct {
+ 	uint32_t magic_number;   /* magic number */
+ 	uint16_t version_major;  /* major version number */
+ 	uint16_t version_minor;  /* minor version number */
+@@ -1776,14 +1771,14 @@ typedef struct pcap_hdr_struct_t {
+ 	uint32_t sigfigs;        /* accuracy of timestamps */
+ 	uint32_t snaplen;        /* max length of captured packets, in octets */
+ 	uint32_t network;        /* data link type */
+-};
++} pcap_hdr_struct_t;
+ 
+-typedef struct pcaprec_hdr_struct_t {
++typedef struct {
+ 	uint32_t ts_sec;         /* timestamp seconds */
+ 	uint32_t ts_usec;        /* timestamp microseconds */
+ 	uint32_t incl_len;       /* number of octets of packet saved in file */
+ 	uint32_t orig_len;       /* actual length of packet */
+-};
++} pcaprec_hdr_struct_t;
+ #pragma pack(pop)
+ 
+ void Capture_WritePacket(bool /*send*/,const unsigned char *buf,size_t len) {