openjfx22: 22.0.1-ga -> 22.0.2-ga; openjfx{11,17,21,22}: add upstream patch for FFmpeg 7 (#339357)
This commit is contained in:
commit
b34e8e9ce1
@ -1,5 +1,5 @@
|
||||
{ stdenv, lib, pkgs, fetchFromGitHub, writeText, gradle_7, pkg-config, perl, cmake
|
||||
, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsa-lib, ffmpeg_6-headless, python3, ruby
|
||||
, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsa-lib, ffmpeg_7-headless, python3, ruby
|
||||
, openjdk11-bootstrap
|
||||
, withMedia ? true
|
||||
, withWebKit ? false
|
||||
@ -27,9 +27,10 @@ in stdenv.mkDerivation {
|
||||
|
||||
patches = [
|
||||
../backport-ffmpeg-6-support-jfx11.patch
|
||||
../backport-ffmpeg-7-support-jfx11.patch
|
||||
];
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_6-headless ];
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_7-headless ];
|
||||
nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ stdenv, lib, pkgs, fetchFromGitHub, writeText, openjdk17_headless, gradle_7
|
||||
, pkg-config, perl, cmake, gperf, gtk2, gtk3, libXtst, libXxf86vm, glib, alsa-lib
|
||||
, ffmpeg_6-headless, python3, ruby
|
||||
, ffmpeg_7-headless, python3, ruby
|
||||
, withMedia ? true
|
||||
, withWebKit ? false
|
||||
}:
|
||||
@ -27,9 +27,10 @@ in stdenv.mkDerivation {
|
||||
|
||||
patches = [
|
||||
../backport-ffmpeg-6-support-jfx11.patch
|
||||
../backport-ffmpeg-7-support-jfx11.patch
|
||||
];
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_6-headless ];
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_7-headless ];
|
||||
nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ stdenv, lib, pkgs, fetchFromGitHub, writeText
|
||||
, openjdk21_headless, gradle_7, pkg-config, perl, cmake, gperf, gtk2, gtk3, libXtst
|
||||
, libXxf86vm, glib, alsa-lib, ffmpeg_6, python3, ruby
|
||||
, libXxf86vm, glib, alsa-lib, ffmpeg_7, python3, ruby
|
||||
, withMedia ? true
|
||||
, withWebKit ? false
|
||||
}:
|
||||
@ -25,7 +25,11 @@ in stdenv.mkDerivation {
|
||||
hash = "sha256-7z0GIbkQwG9mXY9dssaicqaKpMo3FkNEpyAvkswoQQ4=";
|
||||
};
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_6 ];
|
||||
patches = [
|
||||
../backport-ffmpeg-7-support-jfx21.patch
|
||||
];
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_7 ];
|
||||
nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
@ -2,6 +2,7 @@
|
||||
, lib
|
||||
, pkgs
|
||||
, fetchFromGitHub
|
||||
, fetchpatch2
|
||||
, writeText
|
||||
, openjdk21_headless
|
||||
, gradle
|
||||
@ -15,7 +16,7 @@
|
||||
, libXxf86vm
|
||||
, glib
|
||||
, alsa-lib
|
||||
, ffmpeg_6
|
||||
, ffmpeg_7
|
||||
, python3
|
||||
, ruby
|
||||
, withMedia ? true
|
||||
@ -25,7 +26,7 @@
|
||||
let
|
||||
pname = "openjfx-modular-sdk";
|
||||
major = "22";
|
||||
update = ".0.1";
|
||||
update = ".0.2";
|
||||
build = "-ga";
|
||||
repover = "${major}${update}${build}";
|
||||
jdk = openjdk21_headless;
|
||||
@ -38,10 +39,19 @@ in stdenv.mkDerivation {
|
||||
owner = "openjdk";
|
||||
repo = "jfx22u";
|
||||
rev = repover;
|
||||
hash = "sha256-VoEufSO+LciUCvoAM86MG1iMjCA3FSb60Ik4OP2Rk/Q=";
|
||||
hash = "sha256-7Q9nZ2p3KfQPt1A2ULwk64OU/5/ghEkcsf9ECD6Ln2g=";
|
||||
};
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_6 ];
|
||||
patches = [
|
||||
# 8338701: Provide media support for libavcodec version 61
|
||||
# <https://github.com/openjdk/jfx/pull/1552>
|
||||
(fetchpatch2 {
|
||||
url = "https://github.com/openjdk/jfx/commit/6115b396bacf62f39dcaa93c7c0adcd60b428b8c.patch?full_index=1";
|
||||
hash = "sha256-6EES4qsumFgXePZSDEetJC1Li65zquz3UjwRbq/6YJM=";
|
||||
})
|
||||
];
|
||||
|
||||
buildInputs = [ gtk2 gtk3 libXtst libXxf86vm glib alsa-lib ffmpeg_7 ];
|
||||
nativeBuildInputs = [ gradle perl pkg-config cmake gperf python3 ruby ];
|
||||
|
||||
dontUseCmakeConfigure = true;
|
||||
|
@ -7,8 +7,8 @@
|
||||
}
|
||||
},
|
||||
"https://github.com": {
|
||||
"unicode-org/icu/releases/download/release-73-1/icu4c-73_1-data-bin-l": {
|
||||
"zip": "sha256-QDgpjuAqDDiRcYXvj/Tr3pyLVSx3f9A+TfbGtLGCXiA="
|
||||
"unicode-org/icu/releases/download/release-74-2/icu4c-74_2-data-bin-l": {
|
||||
"zip": "sha256-Ks2xuYIigECWPRg7LdnTISUsYT4PTbIT1LvBBBfN5Wk="
|
||||
}
|
||||
},
|
||||
"https://repo.maven.apache.org/maven2": {
|
||||
|
@ -0,0 +1,155 @@
|
||||
Backported from <https://github.com/openjdk/jfx/pull/1552>.
|
||||
|
||||
Original author: Alexander Matveev <alexander.matveev@oracle.com>
|
||||
|
||||
diff --git a/build.gradle b/build.gradle
|
||||
index d1ae3b401f..848a385f36 100644
|
||||
--- a/build.gradle
|
||||
+++ b/build.gradle
|
||||
@@ -3343,6 +3343,7 @@
|
||||
media name: "ffmpeg-4.0.2", ext: "tar.gz"
|
||||
media name: "ffmpeg-5.1.2", ext: "tar.gz"
|
||||
media name: "ffmpeg-6.0", ext: "tar.gz"
|
||||
+ media name: "ffmpeg-7.0.2", ext: "tar.gz"
|
||||
}
|
||||
implementation project(":base")
|
||||
implementation project(":graphics")
|
||||
@@ -3689,8 +3690,8 @@
|
||||
doLast {
|
||||
project.ext.libav = [:]
|
||||
project.ext.libav.basedir = "${buildDir}/native/linux/ffmpeg"
|
||||
- project.ext.libav.versions = [ "3.3.3", "4.0.2", "5.1.2", "6.0" ]
|
||||
- project.ext.libav.versionmap = [ "3.3.3" : "57", "4.0.2" : "58", "5.1.2" : "59", "6.0" : "60" ]
|
||||
+ project.ext.libav.versions = [ "3.3.3", "4.0.2", "5.1.2", "6.0", "7.0.2" ]
|
||||
+ project.ext.libav.versionmap = [ "3.3.3" : "57", "4.0.2" : "58", "5.1.2" : "59", "6.0" : "60", "7.0.2" : "61" ]
|
||||
|
||||
libav.versions.each { version ->
|
||||
def libavDir = "${libav.basedir}/ffmpeg-${version}"
|
||||
@@ -3770,7 +3771,7 @@
|
||||
project.ext.libav.libavffmpeg.versions = [ "56" ]
|
||||
project.ext.libav.ffmpeg = [:]
|
||||
project.ext.libav.ffmpeg.basedir = "${buildDir}/native/linux/ffmpeg/ffmpeg"
|
||||
- project.ext.libav.ffmpeg.versions = [ "57", "58", "59", "60" ]
|
||||
+ project.ext.libav.ffmpeg.versions = [ "57", "58", "59", "60", "61" ]
|
||||
|
||||
project.ext.libav.versions.each { version ->
|
||||
def libavDir = "${project.ext.libav.basedir}-${version}"
|
||||
diff --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
|
||||
index b05bb68341..2add519ed4 100644
|
||||
--- 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
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
+ * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -126,6 +126,7 @@
|
||||
dependencies.add("avplugin-ffmpeg-58");
|
||||
dependencies.add("avplugin-ffmpeg-59");
|
||||
dependencies.add("avplugin-ffmpeg-60");
|
||||
+ dependencies.add("avplugin-ffmpeg-61");
|
||||
}
|
||||
if (HostUtils.isMacOSX()) {
|
||||
dependencies.add("fxplugins");
|
||||
diff --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
|
||||
index ee64e4bafd..0204db4250 100644
|
||||
--- 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
|
||||
@@ -146,7 +146,7 @@
|
||||
// For ffmpeg (libavcodec-ffmpeg.so)
|
||||
static const int AVCODEC_FFMPEG_EXPLICIT_VERSIONS[] = { 56 };
|
||||
// For libav or ffmpeg (libavcodec.so)
|
||||
-static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57, 58, 59, 60 };
|
||||
+static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57, 58, 59, 60, 61 };
|
||||
|
||||
/*
|
||||
* Callback passed to dl_iterate_phdr(): finds the path of
|
||||
diff --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
|
||||
index bb93df5f96..a09b954714 100644
|
||||
--- a/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h
|
||||
+++ b/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
+ * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -50,5 +50,14 @@
|
||||
// Do not call avcodec_register_all() and av_register_all()
|
||||
// Not required since 58 and removed in 59
|
||||
#define NO_REGISTER_ALL (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,0,0))
|
||||
+
|
||||
+// Do not use reordered_opaque to pass PTS. Use AVPacket.pts/AVFrame.pts instead.
|
||||
+// reordered_opaque is removed since 61.
|
||||
+#define NO_REORDERED_OPAQUE (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(61,0,0))
|
||||
+
|
||||
+// Use AVCodecContext.frame_num instead of AVCodecContext.frame_number. They same
|
||||
+// except frame_num is 64-bit and frame_number is 32-bit. Since 61.
|
||||
+#define USE_FRAME_NUM (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(61,0,0))
|
||||
+
|
||||
#endif /* AVDEFINES_H */
|
||||
|
||||
diff --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
|
||||
index fe1f96b9cb..9179ef8b68 100644
|
||||
--- a/modules/javafx.media/src/main/native/gstreamer/plugins/av/videodecoder.c
|
||||
+++ b/modules/javafx.media/src/main/native/gstreamer/plugins/av/videodecoder.c
|
||||
@@ -397,10 +397,17 @@
|
||||
if (av_new_packet(&decoder->packet, info.size) == 0)
|
||||
{
|
||||
memcpy(decoder->packet.data, info.data, info.size);
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
+ decoder->packet.pts = (int64_t)GST_BUFFER_TIMESTAMP(buf);
|
||||
+ else
|
||||
+ decoder->packet.pts = AV_NOPTS_VALUE;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
base->context->reordered_opaque = GST_BUFFER_TIMESTAMP(buf);
|
||||
else
|
||||
base->context->reordered_opaque = AV_NOPTS_VALUE;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
#if USE_SEND_RECEIVE
|
||||
num_dec = avcodec_send_packet(base->context, &decoder->packet);
|
||||
if (num_dec == 0)
|
||||
@@ -432,10 +439,17 @@
|
||||
av_init_packet(&decoder->packet);
|
||||
decoder->packet.data = info.data;
|
||||
decoder->packet.size = info.size;
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
+ decoder->packet.pts = (int64_t)GST_BUFFER_TIMESTAMP(buf);
|
||||
+ else
|
||||
+ decoder->packet.pts = AV_NOPTS_VALUE;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
base->context->reordered_opaque = GST_BUFFER_TIMESTAMP(buf);
|
||||
else
|
||||
base->context->reordered_opaque = AV_NOPTS_VALUE;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
|
||||
#if USE_SEND_RECEIVE
|
||||
num_dec = avcodec_send_packet(base->context, &decoder->packet);
|
||||
@@ -480,10 +494,20 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
+#if USE_FRAME_NUM
|
||||
+ GST_BUFFER_OFFSET(outbuf) = base->context->frame_num;
|
||||
+#else // USE_FRAME_NUM
|
||||
GST_BUFFER_OFFSET(outbuf) = base->context->frame_number;
|
||||
+#endif // USE_FRAME_NUM
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ if (base->frame->pts != AV_NOPTS_VALUE)
|
||||
+ {
|
||||
+ GST_BUFFER_TIMESTAMP(outbuf) = base->frame->pts;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
if (base->frame->reordered_opaque != AV_NOPTS_VALUE)
|
||||
{
|
||||
GST_BUFFER_TIMESTAMP(outbuf) = base->frame->reordered_opaque;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
GST_BUFFER_DURATION(outbuf) = GST_BUFFER_DURATION(buf); // Duration for video usually same
|
||||
}
|
||||
|
@ -0,0 +1,213 @@
|
||||
Backported from <https://github.com/openjdk/jfx/pull/1552>.
|
||||
|
||||
Original author: Alexander Matveev <alexander.matveev@oracle.com>
|
||||
|
||||
diff --git a/build.gradle b/build.gradle
|
||||
index f9dbc53076..77856226a6 100644
|
||||
--- a/build.gradle
|
||||
+++ b/build.gradle
|
||||
@@ -2946,6 +2946,7 @@
|
||||
media name: "ffmpeg-4.0.2", ext: "tar.gz"
|
||||
media name: "ffmpeg-5.1.2", ext: "tar.gz"
|
||||
media name: "ffmpeg-6.0", ext: "tar.gz"
|
||||
+ media name: "ffmpeg-7.0.2", ext: "tar.gz"
|
||||
}
|
||||
implementation project(":base")
|
||||
implementation project(":graphics")
|
||||
@@ -3292,8 +3293,8 @@
|
||||
doLast {
|
||||
project.ext.libav = [:]
|
||||
project.ext.libav.basedir = "${buildDir}/native/linux/ffmpeg"
|
||||
- project.ext.libav.versions = [ "3.3.3", "4.0.2", "5.1.2", "6.0" ]
|
||||
- project.ext.libav.versionmap = [ "3.3.3" : "57", "4.0.2" : "58", "5.1.2" : "59", "6.0" : "60" ]
|
||||
+ project.ext.libav.versions = [ "3.3.3", "4.0.2", "5.1.2", "6.0", "7.0.2" ]
|
||||
+ project.ext.libav.versionmap = [ "3.3.3" : "57", "4.0.2" : "58", "5.1.2" : "59", "6.0" : "60", "7.0.2" : "61" ]
|
||||
|
||||
libav.versions.each { version ->
|
||||
def libavDir = "${libav.basedir}/ffmpeg-${version}"
|
||||
@@ -3373,7 +3374,7 @@
|
||||
project.ext.libav.libavffmpeg.versions = [ "56" ]
|
||||
project.ext.libav.ffmpeg = [:]
|
||||
project.ext.libav.ffmpeg.basedir = "${buildDir}/native/linux/ffmpeg/ffmpeg"
|
||||
- project.ext.libav.ffmpeg.versions = [ "57", "58", "59", "60" ]
|
||||
+ project.ext.libav.ffmpeg.versions = [ "57", "58", "59", "60", "61" ]
|
||||
|
||||
project.ext.libav.versions.each { version ->
|
||||
def libavDir = "${project.ext.libav.basedir}-${version}"
|
||||
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
|
||||
index 887b9d100c..a10610b0f5 100644
|
||||
--- a/gradle/verification-metadata.xml
|
||||
+++ b/gradle/verification-metadata.xml
|
||||
@@ -28,6 +28,11 @@
|
||||
<sha256 value="f4ccf961403752c93961927715f524576d1f4dd02cd76d8c76aed3bbe6686656" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
+ <component group="" name="ffmpeg-7.0.2" version="">
|
||||
+ <artifact name="ffmpeg-7.0.2-.tar.gz">
|
||||
+ <sha256 value="1233b3a93dd7517cc3c56b72a67f64041c044848d981e3deff4bebffa25f1054" origin="Generated by Gradle"/>
|
||||
+ </artifact>
|
||||
+ </component>
|
||||
<component group="" name="icu4c-73_1-data-bin-l" version="">
|
||||
<artifact name="icu4c-73_1-data-bin-l-.zip">
|
||||
<sha256 value="4038298ee02a0c38917185ef8ff4ebde9c8b552c777fd03e4df6c6b4b1825e20" origin="Generated by Gradle"/>
|
||||
diff --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
|
||||
index 097004bd17..0c2ae1ddbc 100644
|
||||
--- 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
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
+ * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -127,6 +127,7 @@
|
||||
dependencies.add("avplugin-ffmpeg-58");
|
||||
dependencies.add("avplugin-ffmpeg-59");
|
||||
dependencies.add("avplugin-ffmpeg-60");
|
||||
+ dependencies.add("avplugin-ffmpeg-61");
|
||||
}
|
||||
if (PlatformUtil.isMac()) {
|
||||
dependencies.add("fxplugins");
|
||||
diff --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
|
||||
index 22c8be9300..38bae197fe 100644
|
||||
--- 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
|
||||
@@ -146,7 +146,7 @@
|
||||
// For ffmpeg (libavcodec-ffmpeg.so)
|
||||
static const int AVCODEC_FFMPEG_EXPLICIT_VERSIONS[] = { 56 };
|
||||
// For libav or ffmpeg (libavcodec.so)
|
||||
-static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57, 58, 59, 60 };
|
||||
+static const int AVCODEC_EXPLICIT_VERSIONS[] = { 57, 58, 59, 60, 61 };
|
||||
|
||||
/*
|
||||
* Callback passed to dl_iterate_phdr(): finds the path of
|
||||
diff --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
|
||||
index 60fa7b631c..f49ad56e1e 100644
|
||||
--- a/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h
|
||||
+++ b/modules/javafx.media/src/main/native/gstreamer/plugins/av/avdefines.h
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
+ * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@@ -53,5 +53,13 @@
|
||||
// Not required since 58 and removed in 59
|
||||
#define NO_REGISTER_ALL (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,0,0))
|
||||
|
||||
+// Do not use reordered_opaque to pass PTS. Use AVPacket.pts/AVFrame.pts instead.
|
||||
+// reordered_opaque is removed since 61.
|
||||
+#define NO_REORDERED_OPAQUE (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(61,0,0))
|
||||
+
|
||||
+// Use AVCodecContext.frame_num instead of AVCodecContext.frame_number. They same
|
||||
+// except frame_num is 64-bit and frame_number is 32-bit. Since 61.
|
||||
+#define USE_FRAME_NUM (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(61,0,0))
|
||||
+
|
||||
#endif /* AVDEFINES_H */
|
||||
|
||||
diff --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
|
||||
index c9fa787e63..8a5cd78f2d 100644
|
||||
--- a/modules/javafx.media/src/main/native/gstreamer/plugins/av/videodecoder.c
|
||||
+++ b/modules/javafx.media/src/main/native/gstreamer/plugins/av/videodecoder.c
|
||||
@@ -554,7 +554,11 @@
|
||||
if (ret < 0)
|
||||
return FALSE;
|
||||
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ decoder->dest_frame->pts = base->frame->pts;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
decoder->dest_frame->reordered_opaque = base->frame->reordered_opaque;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@@ -679,7 +683,7 @@
|
||||
GstMapInfo info2;
|
||||
gboolean unmap_buf = FALSE;
|
||||
gboolean set_frame_values = TRUE;
|
||||
- int64_t reordered_opaque = AV_NOPTS_VALUE;
|
||||
+ int64_t pts = AV_NOPTS_VALUE;
|
||||
unsigned int out_buf_size = 0;
|
||||
gboolean copy_error = FALSE;
|
||||
uint8_t* data0 = NULL;
|
||||
@@ -711,10 +715,17 @@
|
||||
if (av_new_packet(&decoder->packet, info.size) == 0)
|
||||
{
|
||||
memcpy(decoder->packet.data, info.data, info.size);
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
+ decoder->packet.pts = (int64_t)GST_BUFFER_TIMESTAMP(buf);
|
||||
+ else
|
||||
+ decoder->packet.pts = AV_NOPTS_VALUE;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
base->context->reordered_opaque = GST_BUFFER_TIMESTAMP(buf);
|
||||
else
|
||||
base->context->reordered_opaque = AV_NOPTS_VALUE;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
#if USE_SEND_RECEIVE
|
||||
num_dec = avcodec_send_packet(base->context, &decoder->packet);
|
||||
if (num_dec == 0)
|
||||
@@ -746,10 +757,17 @@
|
||||
av_init_packet(&decoder->packet);
|
||||
decoder->packet.data = info.data;
|
||||
decoder->packet.size = info.size;
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
+ decoder->packet.pts = (int64_t)GST_BUFFER_TIMESTAMP(buf);
|
||||
+ else
|
||||
+ decoder->packet.pts = AV_NOPTS_VALUE;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
if (GST_BUFFER_TIMESTAMP_IS_VALID(buf))
|
||||
base->context->reordered_opaque = GST_BUFFER_TIMESTAMP(buf);
|
||||
else
|
||||
base->context->reordered_opaque = AV_NOPTS_VALUE;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
|
||||
#if USE_SEND_RECEIVE
|
||||
num_dec = avcodec_send_packet(base->context, &decoder->packet);
|
||||
@@ -796,7 +814,11 @@
|
||||
goto _exit;
|
||||
}
|
||||
|
||||
- reordered_opaque = decoder->dest_frame->reordered_opaque;
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ pts = decoder->dest_frame->pts;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
+ pts = decoder->dest_frame->reordered_opaque;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
data0 = decoder->dest_frame->data[0];
|
||||
data1 = decoder->dest_frame->data[1];
|
||||
data2 = decoder->dest_frame->data[2];
|
||||
@@ -806,7 +828,11 @@
|
||||
|
||||
if (set_frame_values)
|
||||
{
|
||||
- reordered_opaque = base->frame->reordered_opaque;
|
||||
+#if NO_REORDERED_OPAQUE
|
||||
+ pts = base->frame->pts;
|
||||
+#else // NO_REORDERED_OPAQUE
|
||||
+ pts = base->frame->reordered_opaque;
|
||||
+#endif // NO_REORDERED_OPAQUE
|
||||
data0 = base->frame->data[0];
|
||||
data1 = base->frame->data[1];
|
||||
data2 = base->frame->data[2];
|
||||
@@ -825,10 +851,14 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
+#if USE_FRAME_NUM
|
||||
+ GST_BUFFER_OFFSET(outbuf) = base->context->frame_num;
|
||||
+#else // USE_FRAME_NUM
|
||||
GST_BUFFER_OFFSET(outbuf) = base->context->frame_number;
|
||||
- if (reordered_opaque != AV_NOPTS_VALUE)
|
||||
+#endif // USE_FRAME_NUM
|
||||
+ if (pts != AV_NOPTS_VALUE)
|
||||
{
|
||||
- GST_BUFFER_TIMESTAMP(outbuf) = reordered_opaque;
|
||||
+ GST_BUFFER_TIMESTAMP(outbuf) = pts;
|
||||
GST_BUFFER_DURATION(outbuf) = GST_BUFFER_DURATION(buf); // Duration for video usually same
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user