1- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
2- From: Alexander Matveev <almatvee@openjdk.org >
3- Date: Tue, 3 Sep 2024 20:13:30 +0000
4- Subject: [PATCH] 8338701 : Provide media support for libavcodec version 61
1+ From 1d2bf739f975ca265455cf93e300b7c69f940127 Mon Sep 17 00:00:00 2001
2+ From: Jakob Gezelius <jakob@knugen.nu >
3+ Date: Sun, 19 Apr 2026 09:00:46 +0200
4+ Subject: [PATCH] 8378510 : Provide media support for libavcodec version 62
55
6- Reviewed-by: sykora, arapte
76---
8- build.gradle | 7 ++--
9- gradle/verification-metadata.xml | 5 +++
10- .../jfxmediaimpl/NativeMediaManager.java | 3 +-
7+ build.gradle | 8 ++--
8+ gradle/verification-metadata.xml | 10 ++ +++
9+ .../jfxmediaimpl/NativeMediaManager.java | 4 +-
1110 .../gstreamer/gst/gstregistry.c | 2 +-
12- .../native/gstreamer/plugins/av/avdefines.h | 10 ++++-
11+ .../native/gstreamer/plugins/av/avdefines.h | 15 ++++++-
12+ .../native/gstreamer/plugins/av/decoder.c | 7 +++-
1313 .../gstreamer/plugins/av/videodecoder.c | 40 ++++++++++++++++---
14- 6 files changed, 56 insertions(+), 11 deletions(-)
14+ 7 files changed, 74 insertions(+), 12 deletions(-)
1515
1616diff --git a/build.gradle b/build.gradle
17- index f9dbc53076..77856226a6 100644
17+ index f9dbc53076..361dbac1ff 100644
1818--- a/build.gradle
1919+++ b/build.gradle
20- @@ -2946,6 +2946,7 @@ project(":media") {
20+ @@ -2946,6 +2946,8 @@ project(":media") {
2121 media name: "ffmpeg-4.0.2", ext: "tar.gz"
2222 media name: "ffmpeg-5.1.2", ext: "tar.gz"
2323 media name: "ffmpeg-6.0", ext: "tar.gz"
2424+ media name: "ffmpeg-7.0.2", ext: "tar.gz"
25+ + media name: "ffmpeg-8.1", ext: "tar.gz"
2526 }
2627 implementation project(":base")
2728 implementation project(":graphics")
28- @@ -3292,8 +3293 ,8 @@ project(":media") {
29+ @@ -3292,8 +3294 ,8 @@ project(":media") {
2930 doLast {
3031 project.ext.libav = [:]
3132 project.ext.libav.basedir = "${buildDir}/native/linux/ffmpeg"
3233- project.ext.libav.versions = [ "3.3.3", "4.0.2", "5.1.2", "6.0" ]
3334- project.ext.libav.versionmap = [ "3.3.3" : "57", "4.0.2" : "58", "5.1.2" : "59", "6.0" : "60" ]
34- + project.ext.libav.versions = [ "3.3.3", "4.0.2", "5.1.2", "6.0", "7.0.2" ]
35- + project.ext.libav.versionmap = [ "3.3.3" : "57", "4.0.2" : "58", "5.1.2" : "59", "6.0" : "60", "7.0.2" : "61" ]
35+ + project.ext.libav.versions = [ "3.3.3", "4.0.2", "5.1.2", "6.0", "7.0.2", "8.1" ]
36+ + project.ext.libav.versionmap = [ "3.3.3" : "57", "4.0.2" : "58", "5.1.2" : "59", "6.0" : "60", "7.0.2" : "61", "8.1" : "62" ]
3637
3738 libav.versions.each { version ->
3839 def libavDir = "${libav.basedir}/ffmpeg-${version}"
39- @@ -3373,7 +3374 ,7 @@ project(":media") {
40+ @@ -3373,7 +3375 ,7 @@ project(":media") {
4041 project.ext.libav.libavffmpeg.versions = [ "56" ]
4142 project.ext.libav.ffmpeg = [:]
4243 project.ext.libav.ffmpeg.basedir = "${buildDir}/native/linux/ffmpeg/ffmpeg"
4344- project.ext.libav.ffmpeg.versions = [ "57", "58", "59", "60" ]
44- + project.ext.libav.ffmpeg.versions = [ "57", "58", "59", "60", "61" ]
45+ + project.ext.libav.ffmpeg.versions = [ "57", "58", "59", "60", "61", "62" ]
4546
4647 project.ext.libav.versions.each { version ->
4748 def libavDir = "${project.ext.libav.basedir}-${version}"
4849diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
49- index 887b9d100c..a10610b0f5 100644
50+ index 887b9d100c..80ebc6219b 100644
5051--- a/gradle/verification-metadata.xml
5152+++ b/gradle/verification-metadata.xml
52- @@ -28,6 +28,11 @@
53+ @@ -28,6 +28,16 @@
5354 <sha256 value="f4ccf961403752c93961927715f524576d1f4dd02cd76d8c76aed3bbe6686656" origin="Generated by Gradle"/>
5455 </artifact>
5556 </component>
5657+ <component group="" name="ffmpeg-7.0.2" version="">
5758+ <artifact name="ffmpeg-7.0.2-.tar.gz">
5859+ <sha256 value="1233b3a93dd7517cc3c56b72a67f64041c044848d981e3deff4bebffa25f1054" origin="Generated by Gradle"/>
5960+ </artifact>
61+ + </component>
62+ + <component group="" name="ffmpeg-8.1" version="">
63+ + <artifact name="ffmpeg-8.1-.tar.gz">
64+ + <sha256 value="b13510e7a6a4ca28fa04307f2be54ef5a31e168eb2bbe055a7f4e4d2cadd51b1" origin="Generated by Gradle"/>
65+ + </artifact>
6066+ </component>
6167 <component group="" name="icu4c-73_1-data-bin-l" version="">
6268 <artifact name="icu4c-73_1-data-bin-l-.zip">
6369 <sha256 value="4038298ee02a0c38917185ef8ff4ebde9c8b552c777fd03e4df6c6b4b1825e20" origin="Generated by Gradle"/>
6470diff --git a/modules/javafx.media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaManager.java b/modules/javafx.media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaManager.java
65- index 097004bd17..0c2ae1ddbc 100644
71+ index 097004bd17..7916e2660e 100644
6672--- a/modules/javafx.media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaManager.java
6773+++ b/modules/javafx.media/src/main/java/com/sun/media/jfxmediaimpl/NativeMediaManager.java
6874@@ -1,5 +1,5 @@
6975 /*
7076- * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved.
71- + * Copyright (c) 2010, 2024 , Oracle and/or its affiliates. All rights reserved.
77+ + * Copyright (c) 2010, 2026 , Oracle and/or its affiliates. All rights reserved.
7278 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7379 *
7480 * This code is free software; you can redistribute it and/or modify it
75- @@ -127,6 +127,7 @@ public class NativeMediaManager {
81+ @@ -127,6 +127,8 @@ public class NativeMediaManager {
7682 dependencies.add("avplugin-ffmpeg-58");
7783 dependencies.add("avplugin-ffmpeg-59");
7884 dependencies.add("avplugin-ffmpeg-60");
7985+ dependencies.add("avplugin-ffmpeg-61");
86+ + dependencies.add("avplugin-ffmpeg-62");
8087 }
8188 if (PlatformUtil.isMac()) {
8289 dependencies.add("fxplugins");
8390diff --git a/modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gstreamer/gst/gstregistry.c b/modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gstreamer/gst/gstregistry.c
84- index 22c8be9300..38bae197fe 100644
91+ index 22c8be9300..d4aafec26b 100644
8592--- a/modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gstreamer/gst/gstregistry.c
8693+++ b/modules/javafx.media/src/main/native/gstreamer/gstreamer-lite/gstreamer/gst/gstregistry.c
8794@@ -146,7 +146,7 @@ static const int AVCODEC_LIBAV_EXPLICIT_VERSIONS[] = { 54, 56 };
8895 // For ffmpeg (libavcodec-ffmpeg.so)
8996 static const int AVCODEC_FFMPEG_EXPLICIT_VERSIONS[] = { 56 };
9097 // For libav or ffmpeg (libavcodec.so)
9198- static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57, 58, 59, 60 };
92- + static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57, 58, 59, 60, 61 };
99+ + static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57, 58, 59, 60, 61, 62 };
93100
94101 /*
95102 * Callback passed to dl_iterate_phdr(): finds the path of
96103diff --git a/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h b/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h
97- index 60fa7b631c..f49ad56e1e 100644
104+ index 60fa7b631c..bf7e57e0e2 100644
98105--- a/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h
99106+++ b/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h
100107@@ -1,5 +1,5 @@
101108 /*
102109- * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
103- + * Copyright (c) 2010, 2024 , Oracle and/or its affiliates. All rights reserved.
110+ + * Copyright (c) 2010, 2026 , Oracle and/or its affiliates. All rights reserved.
104111 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
105112 *
106113 * This code is free software; you can redistribute it and/or modify it
107- @@ -53,5 +53,13 @@
114+ @@ -53,5 +53,18 @@
108115 // Not required since 58 and removed in 59
109116 #define NO_REGISTER_ALL (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,0,0))
110117
@@ -115,9 +122,39 @@ index 60fa7b631c..f49ad56e1e 100644
115122+ // Use AVCodecContext.frame_num instead of AVCodecContext.frame_number. They same
116123+ // except frame_num is 64-bit and frame_number is 32-bit. Since 61.
117124+ #define USE_FRAME_NUM (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(61,0,0))
125+ +
126+ + // avcodec_close() is removed in 62 and avcodec_free_context() should be used
127+ + // instead. Note: avcodec_free_context() will free pointer as well, so no need to
128+ + // call av_free().
129+ + #define USE_FREE_CONTEXT (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(62,0,0))
118130+
119131 #endif /* AVDEFINES_H */
120132
133+ diff --git a/modules/javafx.media/src/main/native/gstreamer/plugins/av/decoder.c b/modules/javafx.media/src/main/native/gstreamer/plugins/av/decoder.c
134+ index 954e520950..8142eb9375 100644
135+ --- a/modules/javafx.media/src/main/native/gstreamer/plugins/av/decoder.c
136+ +++ b/modules/javafx.media/src/main/native/gstreamer/plugins/av/decoder.c
137+ @@ -1,5 +1,5 @@
138+ /*
139+ - * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
140+ + * Copyright (c) 2010, 2026, Oracle and/or its affiliates. All rights reserved.
141+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
142+ *
143+ * This code is free software; you can redistribute it and/or modify it
144+ @@ -187,8 +187,13 @@ void basedecoder_close_decoder(BaseDecoder *decoder)
145+ {
146+ if (decoder->context)
147+ {
148+ + #if USE_FREE_CONTEXT
149+ + // avcodec_free_context() will set pointer to NULL
150+ + avcodec_free_context(&decoder->context);
151+ + #else
152+ avcodec_close(decoder->context);
153+ av_free(decoder->context);
154+ + #endif
155+ }
156+ decoder->context = NULL;
157+
121158diff --git a/modules/javafx.media/src/main/native/gstreamer/plugins/av/videodecoder.c b/modules/javafx.media/src/main/native/gstreamer/plugins/av/videodecoder.c
122159index c9fa787e63..8a5cd78f2d 100644
123160--- a/modules/javafx.media/src/main/native/gstreamer/plugins/av/videodecoder.c
@@ -222,3 +259,6 @@ index c9fa787e63..8a5cd78f2d 100644
222259 GST_BUFFER_DURATION(outbuf) = GST_BUFFER_DURATION(buf); // Duration for video usually same
223260 }
224261
262+ - -
263+ 2.53.0
264+
0 commit comments