Loading pkgs/development/compilers/openjdk/openjfx/11/default.nix +3 −2 Original line number Diff line number Diff line { 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 Loading Loading @@ -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; Loading pkgs/development/compilers/openjdk/openjfx/17/default.nix +3 −2 Original line number Diff line number Diff line { 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 }: Loading @@ -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; Loading pkgs/development/compilers/openjdk/openjfx/21/default.nix +6 −2 Original line number Diff line number Diff line { 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 }: Loading @@ -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; Loading pkgs/development/compilers/openjdk/openjfx/22/default.nix +12 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ , lib , pkgs , fetchFromGitHub , fetchpatch2 , writeText , openjdk21_headless , gradle Loading @@ -15,7 +16,7 @@ , libXxf86vm , glib , alsa-lib , ffmpeg_6 , ffmpeg_7 , python3 , ruby , withMedia ? true Loading @@ -41,7 +42,16 @@ in stdenv.mkDerivation { 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; Loading pkgs/development/compilers/openjdk/openjfx/backport-ffmpeg-7-support-jfx11.patch 0 → 100644 +155 −0 Original line number Diff line number Diff line 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 } Loading
pkgs/development/compilers/openjdk/openjfx/11/default.nix +3 −2 Original line number Diff line number Diff line { 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 Loading Loading @@ -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; Loading
pkgs/development/compilers/openjdk/openjfx/17/default.nix +3 −2 Original line number Diff line number Diff line { 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 }: Loading @@ -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; Loading
pkgs/development/compilers/openjdk/openjfx/21/default.nix +6 −2 Original line number Diff line number Diff line { 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 }: Loading @@ -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; Loading
pkgs/development/compilers/openjdk/openjfx/22/default.nix +12 −2 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ , lib , pkgs , fetchFromGitHub , fetchpatch2 , writeText , openjdk21_headless , gradle Loading @@ -15,7 +16,7 @@ , libXxf86vm , glib , alsa-lib , ffmpeg_6 , ffmpeg_7 , python3 , ruby , withMedia ? true Loading @@ -41,7 +42,16 @@ in stdenv.mkDerivation { 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; Loading
pkgs/development/compilers/openjdk/openjfx/backport-ffmpeg-7-support-jfx11.patch 0 → 100644 +155 −0 Original line number Diff line number Diff line 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 }