1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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) {
|