emulators/dosbox-x: compatibility with ffmpeg 9.0

Kirill A. Korinsky <[email protected]>
Newsgroups gmane.os.openbsd.ports
Message-ID <[email protected]>
SASANO, ports@,

I'd like to to commit a fix for emulators/dosbox-x which switches it away
from deprecated API in ffmpeg which prevents it to build against ffmpeg 9.0

Build tested against ffmpeg-9.0 and ffmpeg-8.1.2

Ok?

Index: Makefile
===================================================================
RCS file: /home/cvs/ports/emulators/dosbox-x/Makefile,v
diff -u -p -r1.6 Makefile
--- Makefile	30 Jun 2025 21:51:32 -0000	1.6
+++ Makefile	12 Aug 2026 20:17:50 -0000
@@ -3,6 +3,7 @@ BROKEN-sparc64= error:union MMX_reg has 
 COMMENT=	x86 with DOS emulator targeted at playing games
 
 VERSION=	2025.05.03
+REVISION=	0
 DISTNAME=	dosbox-x-${VERSION}
 
 CATEGORIES=	games x11 emulators
Index: patches/patch-src_hardware_hardware_cpp
===================================================================
RCS file: /home/cvs/ports/emulators/dosbox-x/patches/patch-src_hardware_hardware_cpp,v
diff -u -p -r1.1 patch-src_hardware_hardware_cpp
--- patches/patch-src_hardware_hardware_cpp	21 Oct 2025 12:51:06 -0000	1.1
+++ patches/patch-src_hardware_hardware_cpp	12 Aug 2026 20:13:11 -0000
@@ -1,5 +1,7 @@
 https://github.com/joncampbell123/dosbox-x/commit/d1a6e4d79857455ffee77ed9ac48bff516504f8d
 
+Plus ffmpeg-9.0 fix
+
 Index: src/hardware/hardware.cpp
 --- src/hardware/hardware.cpp.orig
 +++ src/hardware/hardware.cpp
@@ -50,7 +52,18 @@ Index: src/hardware/hardware.cpp
  		avcodec_free_context(&ffmpeg_vid_ctx);
  		ffmpeg_vid_ctx = NULL;
  	}
-@@ -1271,7 +1268,7 @@ skip_shot:
+@@ -813,6 +810,10 @@ void CAPTURE_AddImage(Bitu width, Bitu height, Bitu bp
+ 	Bitu i;
+ 	uint8_t doubleRow[SCALER_MAXWIDTH*4];
+ 	Bitu countWidth = width;
++#if (C_AVCODEC)
++	const enum AVSampleFormat *sample_fmts;
++	int num_sample_fmts, ret;
++#endif
+ 
+ 	if (flags & CAPTURE_FLAG_DBLH)
+ 		height *= 2;
+@@ -1271,7 +1272,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;
@@ -59,7 +72,25 @@ Index: src/hardware/hardware.cpp
  
  			#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(59,24,100)
  			ffmpeg_aud_ctx->channels = 2;
-@@ -1531,7 +1528,7 @@ skip_shot:
+@@ -1280,8 +1281,15 @@ skip_shot:
+ 			ffmpeg_aud_ctx->ch_layout = AV_CHANNEL_LAYOUT_STEREO;
+ 			#endif
+ 
+-			if (ffmpeg_aud_codec->sample_fmts != NULL)
+-				ffmpeg_aud_ctx->sample_fmt = (ffmpeg_aud_codec->sample_fmts)[0];
++			ret = avcodec_get_supported_config(ffmpeg_aud_ctx, NULL,
++					AV_CODEC_CONFIG_SAMPLE_FORMAT, 0,
++					(const void **) &sample_fmts, &num_sample_fmts);
++			if (ret < 0) {
++				LOG_MSG("Failed to query audio codec sample formats");
++				goto skip_video;
++			}
++			if (sample_fmts != NULL && num_sample_fmts > 0)
++				ffmpeg_aud_ctx->sample_fmt = sample_fmts[0];
+ 			else
+ 				ffmpeg_aud_ctx->sample_fmt = AV_SAMPLE_FMT_FLT;
+ 
+@@ -1531,7 +1539,7 @@ skip_shot:
  
  				// encode it
  				ffmpeg_vid_frame->pts = (int64_t)capture.video.frames; // or else libx264 complains about non-monotonic timestamps
@@ -68,7 +99,7 @@ Index: src/hardware/hardware.cpp
  
  				r=avcodec_send_frame(ffmpeg_vid_ctx,ffmpeg_vid_frame);
  				if (r < 0 && r != AVERROR(EAGAIN))
-@@ -1768,7 +1765,7 @@ skip_mt_wav:
+@@ -1768,7 +1776,7 @@ skip_mt_wav:
  }
  
  #pragma pack(push,1)
@@ -77,7 +108,7 @@ Index: src/hardware/hardware.cpp
  	uint32_t magic_number;   /* magic number */
  	uint16_t version_major;  /* major version number */
  	uint16_t version_minor;  /* minor version number */
-@@ -1776,14 +1773,14 @@ typedef struct pcap_hdr_struct_t {
+@@ -1776,14 +1784,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 */
@@ -95,3 +126,8 @@ Index: src/hardware/hardware.cpp
  #pragma pack(pop)
  
  void Capture_WritePacket(bool /*send*/,const unsigned char *buf,size_t len) {
+@@ -2322,4 +2330,3 @@ bool capture_fmt_menu_callback(DOSBoxMenu * const menu
+ #endif
+     return true;
+ }
+-


-- 
wbr, Kirill
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.