From 2ecf00d7733c473358b652c50b83cb95f65174ff Mon Sep 17 00:00:00 2001
From: Sven Gothel
Date: Thu, 23 Feb 2023 22:18:39 +0100
Subject: FFMPEGMediaPlayer: Add implementation update for FFmpeg version 4.*
(Debian 11), 5.* (Debian 12) and 6.* (Current Development trunk)
From here on, libav support has been dropped.
Required FFmpeg libraries to be fully matched by their major runtime- and compiletime-versions are:
- avcodec
- avformat
- avutil
- swresample
Library avdevice is optional and only used for video input devices (camera).
Library avresample has been removed, since FFmpeg dropped it as well in version 6.*
and swresample is preferred for lower versions.
The matching major-versions of each library to the FFmpeg version
is documented within FFMPEGMediaPlayer class API-doc.
Each implementation version uses the non-deprecated FFmpeg code-path
and compilation using matching header files is warning-free.
---
.../av/impl/FFMPEGDynamicLibraryBundleInfo.java | 319 +++++++++------------
.../opengl/util/av/impl/FFMPEGMediaPlayer.java | 110 +++----
.../jogamp/opengl/util/av/impl/FFMPEGNatives.java | 6 +-
.../opengl/util/av/impl/FFMPEGv0400Natives.java | 78 +++++
.../opengl/util/av/impl/FFMPEGv0500Natives.java | 78 +++++
.../opengl/util/av/impl/FFMPEGv0600Natives.java | 78 +++++
.../opengl/util/av/impl/FFMPEGv08Natives.java | 78 -----
.../opengl/util/av/impl/FFMPEGv09Natives.java | 78 -----
.../opengl/util/av/impl/FFMPEGv10Natives.java | 78 -----
.../opengl/util/av/impl/FFMPEGv11Natives.java | 78 -----
10 files changed, 418 insertions(+), 563 deletions(-)
create mode 100644 src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0400Natives.java
create mode 100644 src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0500Natives.java
create mode 100644 src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0600Natives.java
delete mode 100644 src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java
delete mode 100644 src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java
delete mode 100644 src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java
delete mode 100644 src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv11Natives.java
(limited to 'src/jogl/classes/jogamp/opengl/util/av/impl')
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGDynamicLibraryBundleInfo.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGDynamicLibraryBundleInfo.java
index f1049ce6e..71fa70080 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGDynamicLibraryBundleInfo.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGDynamicLibraryBundleInfo.java
@@ -51,41 +51,39 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
private static final List glueLibNames = new ArrayList(); // none
- private static final int symbolCount = 65;
+ private static final int symbolCount = 59;
private static final String[] symbolNames = {
"avutil_version",
"avformat_version",
"avcodec_version",
- "avresample_version",
-/* 5 */ "swresample_version",
+ "avdevice_version", // (opt)
+ "swresample_version",
+ /* 5 */
// libavcodec
- "avcodec_register_all",
"avcodec_close",
"avcodec_string",
"avcodec_find_decoder",
- "avcodec_open2", // 53.6.0 (opt)
- "avcodec_alloc_frame",
- "avcodec_get_frame_defaults",
- "avcodec_free_frame", // 54.28.0 (opt)
- "avcodec_default_get_buffer", // <= 54 (opt), else sp_avcodec_default_get_buffer2
- "avcodec_default_release_buffer", // <= 54 (opt), else sp_av_frame_unref
- "avcodec_default_get_buffer2", // 55 (opt)
- "avcodec_get_edge_width",
+ "avcodec_alloc_context3",
+ "avcodec_free_context",
+ "avcodec_parameters_to_context",
+ "avcodec_open2", // 53.6.0
+ "av_frame_alloc", // >= 55.28.1
+ "av_frame_free", // >= 55.28.1
+ "avcodec_default_get_buffer2", // 55
"av_image_fill_linesizes",
- "avcodec_align_dimensions",
- "avcodec_align_dimensions2",
"avcodec_flush_buffers",
- "av_init_packet",
+ "av_packet_alloc",
+ "av_packet_free",
"av_new_packet",
- "av_destruct_packet",
- "av_free_packet",
- "avcodec_decode_audio4", // 53.25.0 (opt)
-/* 27 */ "avcodec_decode_video2", // 52.23.0
+ "av_packet_unref",
+ "avcodec_send_packet", // 57
+ "avcodec_receive_frame", // 57
+ /* +18 = 23 */
// libavutil
- "av_pix_fmt_descriptors",
- "av_frame_unref", // 55.0.0 (opt)
+ "av_pix_fmt_desc_get", // >= lavu 51.45
+ "av_frame_unref", // 55.0.0
"av_realloc",
"av_free",
"av_get_bits_per_pixel",
@@ -93,15 +91,19 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
"av_get_bytes_per_sample", // 51.4.0
"av_opt_set_int", // 51.12.0
"av_dict_get",
- "av_dict_count", // 54.* (opt)
+ "av_dict_count", // 54.* (opt)
"av_dict_set",
-/* 28 */ "av_dict_free",
+ "av_dict_free",
+ "av_channel_layout_default", // >= 59 (opt)
+ "av_channel_layout_uninit", // >= 59 (opt)
+ "av_channel_layout_describe", // >= 59 (opt)
+ "av_opt_set_chlayout", // >= 59
+ /* +16 = 39 */
// libavformat
"avformat_alloc_context",
- "avformat_free_context", // 52.96.0 (opt)
- "avformat_close_input", // 53.17.0 (opt)
- "av_register_all",
+ "avformat_free_context", // 52.96.0
+ "avformat_close_input", // 53.17.0
"av_find_input_format",
"avformat_open_input",
"av_dump_format",
@@ -112,85 +114,74 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
"av_read_pause",
"avformat_network_init", // 53.13.0 (opt)
"avformat_network_deinit", // 53.13.0 (opt)
-/* 54 */ "avformat_find_stream_info", // 53.3.0 (opt)
+ "avformat_find_stream_info", // 53.3.0 (opt)
+ /* +14 = 53 */
// libavdevice
-/* 55 */ "avdevice_register_all", // supported in all version <= 56
+ "avdevice_register_all", // supported in all versions (opt)
+ /* +1 = 54 */
- // libavresample
- "avresample_alloc_context", // 1.0.1
- "avresample_open",
- "avresample_close",
- "avresample_free",
-/* 60 */ "avresample_convert",
-
- // libavresample
+ // libswresample
"av_opt_set_sample_fmt", // actually lavu .. but exist only w/ swresample!
"swr_alloc",
"swr_init",
"swr_free",
-/* 65 */ "swr_convert",
-
+ "swr_convert",
+ /* +5 = 59 */
};
// optional symbol names
private static final String[] optionalSymbolNames = {
"avformat_seek_file", // ??? (opt)
- "avcodec_free_frame", // 54.28.0 (opt)
- "av_frame_unref", // 55.0.0 (opt)
"av_dict_count", // 54.* (opt)
- "avcodec_default_get_buffer", // <= 54 (opt), else sp_avcodec_default_get_buffer2
- "avcodec_default_release_buffer", // <= 54 (opt), else sp_av_frame_unref
- "avcodec_default_get_buffer2", // 55 (opt)
+
+ // libavutil
+ "av_channel_layout_default", // >= 59 (opt)
+ "av_channel_layout_uninit", // >= 59 (opt)
+ "av_channel_layout_describe", // >= 59 (opt)
+ "av_opt_set_chlayout", // >= 59
// libavdevice
+ "avdevice_version", // (opt)
"avdevice_register_all", // 53.0.0 (opt)
- // libavresample
- "avresample_version", // 1.0.1
- "avresample_alloc_context", // 1.0.1
- "avresample_open",
- "avresample_close",
- "avresample_free",
- "avresample_convert",
-
// libswresample
"av_opt_set_sample_fmt", // actually lavu .. but exist only w/ swresample!
- "swresample_version", // 0
"swr_alloc",
"swr_init",
"swr_free",
"swr_convert",
};
- /** util, format, codec, device, avresample, swresample */
- private static final boolean[] libLoaded = new boolean[6];
+ private static final int LIB_COUNT = 5;
+ private static final int LIB_IDX_UTI = 0;
+ private static final int LIB_IDX_FMT = 1;
+ private static final int LIB_IDX_COD = 2;
+ private static final int LIB_IDX_DEV = 3;
+ private static final int LIB_IDX_SWR = 4;
+
+ /** util, format, codec, device, swresample */
+ private static final boolean[] libLoaded = new boolean[LIB_COUNT];
private static final long[] symbolAddr = new long[symbolCount];
private static final boolean ready;
- private static final boolean libsUFCLoaded;
+ private static final boolean libsCFUSLoaded;
static final VersionNumber avCodecVersion;
static final VersionNumber avFormatVersion;
static final VersionNumber avUtilVersion;
- static final VersionNumber avResampleVersion;
+ static final VersionNumber avDeviceVersion;
static final VersionNumber swResampleVersion;
private static final FFMPEGNatives natives;
- private static final int LIB_IDX_UTI = 0;
- private static final int LIB_IDX_FMT = 1;
- private static final int LIB_IDX_COD = 2;
- private static final int LIB_IDX_DEV = 3;
- private static final int LIB_IDX_AVR = 4;
- private static final int LIB_IDX_SWR = 5;
-
private static final PrivilegedAction privInitSymbolsAction = new PrivilegedAction() {
@Override
public DynamicLibraryBundle run() {
final DynamicLibraryBundle dl = new DynamicLibraryBundle(new FFMPEGDynamicLibraryBundleInfo());
- for(int i=0; i<6; i++) {
+ for(int i=0; i: not optional, no alternatives.");
+ System.err.println("FFmpeg: Fail: Could not resolve symbol <"+symbolNames[i]+">: not optional, no alternatives.");
res = false;
} else if(DEBUG) {
- System.err.println("OK: Unresolved optional symbol <"+symbolNames[i]+">");
+ System.err.println("FFmpeg: OK: Unresolved optional symbol <"+symbolNames[i]+">");
}
}
}
- versions[0] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[0]));
- versions[1] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[1]));
- versions[2] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[2]));
- versions[3] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[3]));
- versions[4] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[4]));
+ versions[LIB_IDX_UTI] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[LIB_IDX_UTI]));
+ versions[LIB_IDX_FMT] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[LIB_IDX_FMT]));
+ versions[LIB_IDX_COD] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[LIB_IDX_COD]));
+ if( 0 != symbolAddr[LIB_IDX_DEV] ) {
+ versions[LIB_IDX_DEV] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[LIB_IDX_DEV]));
+ } else {
+ versions[LIB_IDX_DEV] = new VersionNumber(0, 0, 0);
+ }
+ versions[LIB_IDX_SWR] = FFMPEGStaticNatives.getAVVersion(FFMPEGStaticNatives.getAvVersion0(symbolAddr[LIB_IDX_SWR]));
return res;
}
@@ -254,58 +248,75 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
GLProfile.initSingleton();
boolean _ready = false;
- /** util, format, codec, avresample, swresample */
- final VersionNumber[] _versions = new VersionNumber[5];
+ /** util, format, codec, swresample */
+ final VersionNumber[] _versions = new VersionNumber[LIB_COUNT];
try {
_ready = initSymbols(_versions);
} catch (final Throwable t) {
ExceptionUtils.dumpThrowable("", t);
}
- libsUFCLoaded = libLoaded[LIB_IDX_UTI] && libLoaded[LIB_IDX_FMT] && libLoaded[LIB_IDX_COD];
- avUtilVersion = _versions[0];
- avFormatVersion = _versions[1];
- avCodecVersion = _versions[2];
- avResampleVersion = _versions[3];
- swResampleVersion = _versions[4];
- if(!libsUFCLoaded) {
- System.err.println("LIB_AV Not Available: lavu, lavc, lavu");
+ libsCFUSLoaded = libLoaded[LIB_IDX_COD] && libLoaded[LIB_IDX_FMT] && libLoaded[LIB_IDX_UTI] && libLoaded[LIB_IDX_SWR];
+ avUtilVersion = _versions[LIB_IDX_UTI];
+ avFormatVersion = _versions[LIB_IDX_FMT];
+ avCodecVersion = _versions[LIB_IDX_COD];
+ avDeviceVersion = _versions[LIB_IDX_DEV];
+ swResampleVersion = _versions[LIB_IDX_SWR];
+ if(!libsCFUSLoaded) {
+ String missing = "";
+ if( !libLoaded[LIB_IDX_COD] ) {
+ missing = missing + "avcodec, ";
+ }
+ if( !libLoaded[LIB_IDX_FMT] ) {
+ missing = missing + "avformat, ";
+ }
+ if( !libLoaded[LIB_IDX_UTI] ) {
+ missing = missing + "avutil, ";
+ }
+ if( !libLoaded[LIB_IDX_SWR] ) {
+ missing = missing + "swresample";
+ }
+ System.err.println("FFmpeg Not Available, missing libs: "+missing);
natives = null;
ready = false;
} else if(!_ready) {
- System.err.println("LIB_AV Not Matching");
+ System.err.println("FFmpeg Symbol Lookup Failed");
natives = null;
ready = false;
} else {
final int avCodecMajor = avCodecVersion.getMajor();
final int avFormatMajor = avFormatVersion.getMajor();
final int avUtilMajor = avUtilVersion.getMajor();
- if( avCodecMajor == 53 && avFormatMajor == 53 && avUtilMajor == 51 ) {
- // lavc53.lavf53.lavu51
- natives = new FFMPEGv08Natives();
- } else if( avCodecMajor == 54 && avFormatMajor == 54 && avUtilMajor == 52 ) {
- // lavc54.lavf54.lavu52.lavr01
- natives = new FFMPEGv09Natives();
- } else if( avCodecMajor == 55 && avFormatMajor == 55 && ( avUtilMajor == 52 || avUtilMajor == 53 ) ) {
- // lavc55.lavf55.lavu52.lavr01 (ffmpeg) or lavc55.lavf55.lavu53.lavr01 (libav)
- natives = new FFMPEGv10Natives();
- } else if( avCodecMajor == 56 && avFormatMajor == 56 && avUtilMajor == 54 ) {
- // lavc56.lavf56.lavu54.lavr02
- natives = new FFMPEGv11Natives();
+ final int avDeviceMajor = avDeviceVersion.getMajor();
+ final int swResampleMajor = swResampleVersion.getMajor();
+ if( avCodecMajor == 58 && avFormatMajor == 58 && ( avDeviceMajor == 58 || avDeviceMajor == 0 ) && avUtilMajor == 56 && swResampleMajor == 3) {
+ // Exact match: ffmpeg 4.x.y
+ natives = new FFMPEGv0400Natives();
+ } else if( avCodecMajor == 59 && avFormatMajor == 59 && ( avDeviceMajor == 59 || avDeviceMajor == 0 ) && avUtilMajor == 57 && swResampleMajor == 4) {
+ // Exact match: ffmpeg 5.x.y
+ natives = new FFMPEGv0500Natives();
+ } else if( avCodecMajor == 60 && avFormatMajor == 60 && ( avDeviceMajor == 60 || avDeviceMajor == 0 ) && avUtilMajor == 58 && swResampleMajor == 4) {
+ // Exact match: ffmpeg 6.x.y
+ natives = new FFMPEGv0600Natives();
} else {
- System.err.println("LIB_AV No Version/Native-Impl Match");
natives = null;
}
- if( null != natives && FFMPEGStaticNatives.initIDs0() ) {
+ if( null == natives ) {
+ System.err.println("FFmpeg Native Class matching runtime-versions not found.");
+ ready = false;
+ } else if( FFMPEGStaticNatives.initIDs0() ) {
ready = natives.initSymbols0(symbolAddr, symbolCount);
+ if( !ready ) {
+ System.err.println("FFmpeg Native Symbols Initialization Failed");
+ }
} else {
+ System.err.println("FFmpeg Native ID Initialization Failed");
ready = false;
}
}
}
- static boolean libsLoaded() { return libsUFCLoaded; }
+ static boolean libsLoaded() { return libsCFUSLoaded; }
static boolean avDeviceLoaded() { return libLoaded[LIB_IDX_DEV]; }
- static boolean avResampleLoaded() { return libLoaded[LIB_IDX_AVR]; }
static boolean swResampleLoaded() { return libLoaded[LIB_IDX_SWR]; }
static FFMPEGNatives getNatives() { return natives; }
static boolean initSingleton() { return ready; }
@@ -354,21 +365,13 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
} else {
avutil.add("internal_avutil"); // internal
}
- avutil.add("libavutil.so.56"); // ffmpeg 4.[0-x] (Debian-10)
- avutil.add("libavutil.so.55"); //
- avutil.add("libavutil.so.54"); // ffmpeg 2.[4-x] / libav 11
- avutil.add("libavutil.so.53"); // ffmpeg 2.[0-3] / libav 10
- avutil.add("libavutil.so.52"); // ffmpeg 1.2 + 2.[0-3] / libav 9
- avutil.add("libavutil.so.51"); // 0.8
- avutil.add("libavutil.so.50"); // 0.7
+ avutil.add("libavutil.so.58"); // ffmpeg 6.[0-x]
+ avutil.add("libavutil.so.57"); // ffmpeg 5.[0-x]
+ avutil.add("libavutil.so.56"); // ffmpeg 4.[0-x] (Debian-11)
+ avutil.add("avutil-58"); // ffmpeg 6.[0-x]
+ avutil.add("avutil-57"); // ffmpeg 5.[0-x]
avutil.add("avutil-56"); // ffmpeg 4.[0-x]
- avutil.add("avutil-55"); //
- avutil.add("avutil-54"); // ffmpeg 2.[4-x] / libav 11
- avutil.add("avutil-53"); // ffmpeg 2.[0-3] / libav 10
- avutil.add("avutil-52"); // ffmpeg 1.2 + 2.[0-3] / libav 9
- avutil.add("avutil-51"); // 0.8
- avutil.add("avutil-50"); // 0.7
if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
avutil.add("internal_avutil"); // internal
} else {
@@ -382,21 +385,13 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
} else {
avformat.add("internal_avformat"); // internal
}
- avformat.add("libavformat.so.58"); // ffmpeg 4.[0-x] (Debian-10)
- avformat.add("libavformat.so.57"); //
- avformat.add("libavformat.so.56"); // ffmpeg 2.[4-x] / libav 11
- avformat.add("libavformat.so.55"); // ffmpeg 2.[0-3] / libav 10
- avformat.add("libavformat.so.54"); // ffmpeg 1.2 / libav 9
- avformat.add("libavformat.so.53"); // 0.8
- avformat.add("libavformat.so.52"); // 0.7
+ avformat.add("libavformat.so.60"); // ffmpeg 6.[0-x]
+ avformat.add("libavformat.so.59"); // ffmpeg 5.[0-x]
+ avformat.add("libavformat.so.58"); // ffmpeg 4.[0-x] (Debian-11)
+ avformat.add("avformat-60"); // ffmpeg 6.[0-x]
+ avformat.add("avformat-59"); // ffmpeg 5.[0-x]
avformat.add("avformat-58"); // ffmpeg 4.[0-x]
- avformat.add("avformat-57"); //
- avformat.add("avformat-56"); // ffmpeg 2.[4-x] / libav 11
- avformat.add("avformat-55"); // ffmpeg 2.[0-3] / libav 10
- avformat.add("avformat-54"); // ffmpeg 1.2 / libav 9
- avformat.add("avformat-53"); // 0.8
- avformat.add("avformat-52"); // 0.7
if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
avformat.add("internal_avformat"); // internal
} else {
@@ -410,21 +405,13 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
} else {
avcodec.add("internal_avcodec"); // internal
}
- avcodec.add("libavcodec.so.58"); // ffmpeg 4.[0-x] (Debian-10)
- avcodec.add("libavcodec.so.57"); //
- avcodec.add("libavcodec.so.56"); // ffmpeg 2.[4-x] / libav 11
- avcodec.add("libavcodec.so.55"); // ffmpeg 2.[0-3] / libav 10
- avcodec.add("libavcodec.so.54"); // ffmpeg 1.2 / libav 9
- avcodec.add("libavcodec.so.53"); // 0.8
- avcodec.add("libavcodec.so.52"); // 0.7
+ avcodec.add("libavcodec.so.60"); // ffmpeg 6.[0-x]
+ avcodec.add("libavcodec.so.59"); // ffmpeg 5.[0-x]
+ avcodec.add("libavcodec.so.58"); // ffmpeg 4.[0-x] (Debian-11)
+ avcodec.add("avcodec-60"); // ffmpeg 6.[0-x]
+ avcodec.add("avcodec-59"); // ffmpeg 5.[0-x]
avcodec.add("avcodec-58"); // ffmpeg 4.[0-x]
- avcodec.add("avcodec-57"); //
- avcodec.add("avcodec-56"); // ffmpeg 2.[4-x] / libav 11
- avcodec.add("avcodec-55"); // ffmpeg 2.[0-3] / libav 10
- avcodec.add("avcodec-54"); // ffmpeg 1.2 / libav 9
- avcodec.add("avcodec-53"); // 0.8
- avcodec.add("avcodec-52"); // 0.7
if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
avcodec.add("internal_avcodec"); // internal
} else {
@@ -438,19 +425,13 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
} else {
avdevice.add("internal_avdevice"); // internal
}
- avdevice.add("libavdevice.so.58"); // ffmpeg 4.[0-x] (Debian-10)
- avdevice.add("libavdevice.so.57"); //
- avdevice.add("libavdevice.so.56"); // ffmpeg 2.[4-x]
- avdevice.add("libavdevice.so.55"); // ffmpeg 2.[0-3] / libav 11
- avdevice.add("libavdevice.so.54"); // ffmpeg 1.2 / libav 10
- avdevice.add("libavdevice.so.53"); // 0.8 && libav 9
+ avdevice.add("libavdevice.so.60"); // ffmpeg 6.[0-x]
+ avdevice.add("libavdevice.so.59"); // ffmpeg 5.[0-x]
+ avdevice.add("libavdevice.so.58"); // ffmpeg 4.[0-x] (Debian-11)
+ avdevice.add("avdevice-60"); // ffmpeg 6.[0-x]
+ avdevice.add("avdevice-59"); // ffmpeg 5.[0-x]
avdevice.add("avdevice-58"); // ffmpeg 4.[0-x]
- avdevice.add("avdevice-57"); //
- avdevice.add("avdevice-56"); // ffmpeg 2.[4-x]
- avdevice.add("avdevice-55"); // ffmpeg 2.[0-3] / libav 11
- avdevice.add("avdevice-54"); // ffmpeg 1.2 / libav 10
- avdevice.add("avdevice-53"); // 0.8 && libav 9
if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
avdevice.add("internal_avdevice"); // internal
} else {
@@ -458,43 +439,17 @@ class FFMPEGDynamicLibraryBundleInfo implements DynamicLibraryBundleInfo {
}
libsList.add(avdevice);
- final List avresample = new ArrayList();
- if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
- avresample.add("avresample"); // system default
- } else {
- avresample.add("internal_avresample");// internal
- }
- avresample.add("libavresample.so.4"); // ffmpeg 4.[0-x] (Debian-10)
- avresample.add("libavresample.so.3"); //
- avresample.add("libavresample.so.2"); // libav 11
- avresample.add("libavresample.so.1"); // libav 9 + 10
-
- avresample.add("avresample-4"); // ffmpeg 4.[0-x]
- avresample.add("avresample-3"); //
- avresample.add("avresample-2"); // libav 11
- avresample.add("avresample-1"); // libav 9 + 10
- if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
- avresample.add("internal_avresample");// internal
- } else {
- avresample.add("avresample"); // system default
- }
- libsList.add(avresample);
-
final List swresample = new ArrayList();
if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
swresample.add("swresample"); // system default
} else {
swresample.add("internal_swresample");// internal
}
- swresample.add("libswresample.so.3"); // ffmpeg 4.[0-x] (Debian-10)
- swresample.add("libswresample.so.2"); //
- swresample.add("libswresample.so.1"); // ffmpeg 2.[4-x]
- swresample.add("libswresample.so.0"); // ffmpeg 1.2 + 2.[0-3]
+ swresample.add("libswresample.so.4"); // ffmpeg 5.[0-x] - 6.[0-x]
+ swresample.add("libswresample.so.3"); // ffmpeg 4.[0-x] (Debian-11)
+ swresample.add("swresample-4"); // ffmpeg 5.[0-x] - 6.[0-x]
swresample.add("swresample-3"); // ffmpeg 4.[0-x]
- swresample.add("swresample-2"); //
- swresample.add("swresample-1"); // ffmpeg 2.[4-x]
- swresample.add("swresample-0"); // ffmpeg 1.2 + 2.[0-3]
if( FFMPEGMediaPlayer.PREFER_SYSTEM_LIBS ) {
swresample.add("internal_swresample");// internal
} else {
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
index 6e44dcc37..c1a7eceda 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java
@@ -56,16 +56,12 @@ import jogamp.opengl.util.av.GLMediaPlayerImpl;
import jogamp.opengl.util.av.VideoPixelFormat;
/***
- * Implementation utilizes Libav
- * or FFmpeg which are ubiquitous
+ * Implementation utilizes FFmpeg which is ubiquitous
* available and usually pre-installed on Unix platforms.
*
- * Due to legal reasons we cannot deploy binaries of it, which contains patented codecs.
- *
- *
* Besides the default BSD/Linux/.. repositories and installations,
* precompiled binaries can be found at the
- * listed location below.
+ * listed location below.
*
*
* Implementation specifics
@@ -90,29 +86,26 @@ import jogamp.opengl.util.av.VideoPixelFormat;
*
*
*
- * Libav Specifics
+ * FFmpeg Specifics
*
- * Utilizes a slim dynamic and native binding to the Lib_av
- * libraries:
+ * Utilizes a slim dynamic and native binding to the FFmpeg libraries:
*
- * - libavcodec
- * - libavformat
- * - libavutil
- * - libavresample (opt)
- * - libavdevice (opt)
+ * - avcodec
+ * - avformat
+ * - avutil
+ * - avdevice (optional for video input devices)
+ * - swresample
*
*
*
- * LibAV Compatibility
+ * FFmpeg Compatibility
*
- * Currently we are binary compatible w/:
+ * Currently we are binary compatible with the following major versions:
*
- * libav / ffmpeg | lavc | lavf | lavu | lavr/lswr | FFMPEG* class |
- * 0.8 | 53 | 53 | 51 | | FFMPEGv08 |
- * 9.0 / 1.2 | 54 | 54 | 52 | 01/00 | FFMPEGv09 |
- * 10 / 2.[0-3] | 55 | 55 | 53/52 | 01/00 | FFMPEGv10 |
- * 11 / 2.[4-8] | 56 | 56 | 54 | 02/01 | FFMPEGv11 |
- * 12 / 2.[9-x] | 57 | 57 | 55 | 02/01 | TODO |
+ * ffmpeg | lavcodec | lavformat | lavdevice | lavutil | swresample | FFMPEG* class |
+ * 4 | 58 | 58 | 58 | 56 | 03 | FFMPEGv0400 |
+ * 5 | 59 | 59 | 59 | 57 | 04 | FFMPEGv0500 |
+ * 6 | 60 | 60 | 60 | 58 | 04 | FFMPEGv0600 |
*
*
*
@@ -121,11 +114,6 @@ import jogamp.opengl.util.av.VideoPixelFormat;
*
http://ffmpeg.org/documentation.html
* http://git.videolan.org/?p=ffmpeg.git;a=blob;f=doc/APIchanges;hb=HEAD
*
- * See libav:
- *
- * - https://libav.org/documentation.html
- * - http://upstream-tracker.org/versions/libav.html
- *
*
*
* Check tag 'FIXME: Add more planar formats !'
@@ -141,15 +129,14 @@ import jogamp.opengl.util.av.VideoPixelFormat;
*
*
*
- * FFMPEG / LibAV Availability
+ * FFmpeg Availability
*
*
- * - GNU/Linux: ffmpeg or libav are deployed in most distributions.
+ * - GNU/Linux: ffmpeg is deployed in most distributions.
* - Windows:
*
* - https://ffmpeg.org/download.html#build-windows
* - http://ffmpeg.zeranoe.com/builds/ (ffmpeg) recommended, works w/ dshow
- * - http://win32.libav.org/releases/ (libav)
*
* - MacOSX
*
@@ -211,11 +198,9 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
private static final int avUtilMajorVersionCC;
private static final int avFormatMajorVersionCC;
private static final int avCodecMajorVersionCC;
- private static final int avResampleMajorVersionCC;
+ private static final int avDeviceMajorVersionCC;
private static final int swResampleMajorVersionCC;
private static final boolean available;
- private static final boolean enableAvResample;
- private static final boolean enableSwResample;
static {
// PREFER_SYSTEM_LIBS default on all systems is true for now!
@@ -230,58 +215,51 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
avCodecMajorVersionCC = natives.getAvCodecMajorVersionCC0();
avFormatMajorVersionCC = natives.getAvFormatMajorVersionCC0();
avUtilMajorVersionCC = natives.getAvUtilMajorVersionCC0();
- avResampleMajorVersionCC = natives.getAvResampleMajorVersionCC0();
+ avDeviceMajorVersionCC = natives.getAvDeviceMajorVersionCC0();
swResampleMajorVersionCC = natives.getSwResampleMajorVersionCC0();
} else {
avUtilMajorVersionCC = 0;
avFormatMajorVersionCC = 0;
avCodecMajorVersionCC = 0;
- avResampleMajorVersionCC = 0;
+ avDeviceMajorVersionCC = 0;
swResampleMajorVersionCC = 0;
}
final VersionNumber avCodecVersion = FFMPEGDynamicLibraryBundleInfo.avCodecVersion;
final VersionNumber avFormatVersion = FFMPEGDynamicLibraryBundleInfo.avFormatVersion;
final VersionNumber avUtilVersion = FFMPEGDynamicLibraryBundleInfo.avUtilVersion;
- final VersionNumber avResampleVersion = FFMPEGDynamicLibraryBundleInfo.avResampleVersion;
- final boolean avResampleLoaded = FFMPEGDynamicLibraryBundleInfo.avResampleLoaded();
+ final VersionNumber avDeviceVersion = FFMPEGDynamicLibraryBundleInfo.avDeviceVersion;
final VersionNumber swResampleVersion = FFMPEGDynamicLibraryBundleInfo.swResampleVersion;
+ final boolean avDeviceLoaded = FFMPEGDynamicLibraryBundleInfo.avDeviceLoaded();
final boolean swResampleLoaded = FFMPEGDynamicLibraryBundleInfo.swResampleLoaded();
- if( DEBUG ) {
- System.err.println("LIB_AV Codec : "+avCodecVersion+" [cc "+avCodecMajorVersionCC+"]");
- System.err.println("LIB_AV Format : "+avFormatVersion+" [cc "+avFormatMajorVersionCC+"]");
- System.err.println("LIB_AV Util : "+avUtilVersion+" [cc "+avUtilMajorVersionCC+"]");
- System.err.println("LIB_AV Resample: "+avResampleVersion+" [cc "+avResampleMajorVersionCC+", loaded "+avResampleLoaded+"]");
- System.err.println("LIB_SW Resample: "+swResampleVersion+" [cc "+swResampleMajorVersionCC+", loaded "+swResampleLoaded+"]");
- System.err.println("LIB_AV Device : [loaded "+FFMPEGDynamicLibraryBundleInfo.avDeviceLoaded()+"]");
- System.err.println("LIB_AV Class : "+(null!= natives ? natives.getClass().getSimpleName() : "n/a"));
- }
final int avCodecMajor = avCodecVersion.getMajor();
final int avFormatMajor = avFormatVersion.getMajor();
final int avUtilMajor = avUtilVersion.getMajor();
+ final int avDeviceMajor = avDeviceVersion.getMajor();
+ final int swResampleMajor = swResampleVersion.getMajor();
libAVVersionGood = avCodecMajorVersionCC == avCodecMajor &&
avFormatMajorVersionCC == avFormatMajor &&
- ( avUtilMajorVersionCC == avUtilMajor ||
- 55 == avCodecMajorVersionCC && 53 == avUtilMajorVersionCC && 52 == avUtilMajor /* ffmpeg 2.x */
- );
- enableAvResample = avResampleLoaded && avResampleMajorVersionCC == avResampleVersion.getMajor();
- enableSwResample = swResampleLoaded && swResampleMajorVersionCC == swResampleVersion.getMajor();
- if( DEBUG ) {
- System.err.println("LIB_AV Resample: enabled "+enableAvResample);
- System.err.println("LIB_SW Resample: enabled "+enableSwResample);
- }
+ avUtilMajorVersionCC == avUtilMajor &&
+ ( avDeviceMajorVersionCC == avDeviceMajor || 0 == avDeviceMajor ) &&
+ swResampleMajorVersionCC == swResampleMajor;
if( !libAVVersionGood ) {
- System.err.println("LIB_AV Not Matching Compile-Time / Runtime Major-Version");
+ System.err.println("FFmpeg Not Matching Compile-Time / Runtime Major-Version");
+ }
+ if( !libAVVersionGood || DEBUG ) {
+ System.err.println("FFmpeg Codec : "+avCodecVersion+" [cc "+avCodecMajorVersionCC+"]");
+ System.err.println("FFmpeg Format : "+avFormatVersion+" [cc "+avFormatMajorVersionCC+"]");
+ System.err.println("FFmpeg Util : "+avUtilVersion+" [cc "+avUtilMajorVersionCC+"]");
+ System.err.println("FFmpeg Device : "+avDeviceVersion+" [cc "+avDeviceMajorVersionCC+", loaded "+avDeviceLoaded+"]");
+ System.err.println("FFmpeg Resample: "+swResampleVersion+" [cc "+swResampleMajorVersionCC+", loaded "+swResampleLoaded+"]");
+ System.err.println("FFmpeg Class : "+(null!= natives ? natives.getClass().getSimpleName() : "n/a"));
}
} else {
natives = null;
avUtilMajorVersionCC = 0;
avFormatMajorVersionCC = 0;
avCodecMajorVersionCC = 0;
- avResampleMajorVersionCC = 0;
+ avDeviceMajorVersionCC = 0;
swResampleMajorVersionCC = 0;
libAVVersionGood = false;
- enableAvResample = false;
- enableSwResample = false;
}
available = libAVGood && libAVVersionGood && null != natives;
}
@@ -319,7 +297,7 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
if(!available) {
throw new RuntimeException("FFMPEGMediaPlayer not available");
}
- moviePtr = natives.createInstance0(this, enableAvResample, enableSwResample, DEBUG_NATIVE);
+ moviePtr = natives.createInstance0(this, DEBUG_NATIVE);
if(0==moviePtr) {
throw new GLException("Couldn't create FFMPEGInstance");
}
@@ -521,8 +499,8 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
/**
* Native callback
- * Converts the given libav/ffmpeg values to {@link AudioFormat} and returns {@link AudioSink#isSupported(AudioFormat)}.
- * @param audioSampleFmt ffmpeg/libav audio-sample-format, see {@link AudioSampleFormat}.
+ * Converts the given ffmpeg values to {@link AudioFormat} and returns {@link AudioSink#isSupported(AudioFormat)}.
+ * @param audioSampleFmt ffmpeg audio-sample-format, see {@link AudioSampleFormat}.
* @param audioSampleRate sample rate in Hz (1/s)
* @param audioChannels number of channels
*/
@@ -537,8 +515,8 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
}
/**
- * Returns {@link AudioFormat} as converted from the given libav/ffmpeg values.
- * @param audioSampleFmt ffmpeg/libav audio-sample-format, see {@link AudioSampleFormat}.
+ * Returns {@link AudioFormat} as converted from the given ffmpeg values.
+ * @param audioSampleFmt ffmpeg audio-sample-format, see {@link AudioSampleFormat}.
* @param audioSampleRate sample rate in Hz (1/s)
* @param audioChannels number of channels
*/
@@ -853,7 +831,7 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
}
final int errno = natives.play0(moviePtr);
if( DEBUG_NATIVE && errno != 0 && errno != -ENOSYS) {
- System.err.println("libav play err: "+errno);
+ System.err.println("ffmpeg play err: "+errno);
}
return true;
}
@@ -865,7 +843,7 @@ public class FFMPEGMediaPlayer extends GLMediaPlayerImpl {
}
final int errno = natives.pause0(moviePtr);
if( DEBUG_NATIVE && errno != 0 && errno != -ENOSYS) {
- System.err.println("libav pause err: "+errno);
+ System.err.println("ffmpeg pause err: "+errno);
}
return true;
}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java
index 3b8fc83d9..9099bfb08 100644
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGNatives.java
@@ -1,5 +1,5 @@
/**
- * Copyright 2013 JogAmp Community. All rights reserved.
+ * Copyright 2013-2023 JogAmp Community. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
@@ -40,10 +40,10 @@ import com.jogamp.opengl.util.texture.TextureSequence.TextureFrame;
abstract int getAvUtilMajorVersionCC0();
abstract int getAvFormatMajorVersionCC0();
abstract int getAvCodecMajorVersionCC0();
- abstract int getAvResampleMajorVersionCC0();
+ abstract int getAvDeviceMajorVersionCC0();
abstract int getSwResampleMajorVersionCC0();
- abstract long createInstance0(FFMPEGMediaPlayer upstream, boolean enableAvResample, boolean enableSwResample, boolean verbose);
+ abstract long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
abstract void destroyInstance0(long moviePtr);
/**
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0400Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0400Natives.java
new file mode 100644
index 000000000..0f7d02904
--- /dev/null
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0400Natives.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright 2015-2023 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+package jogamp.opengl.util.av.impl;
+
+class FFMPEGv0400Natives extends FFMPEGNatives {
+ @Override
+ native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
+
+ @Override
+ native int getAvUtilMajorVersionCC0();
+
+ @Override
+ native int getAvFormatMajorVersionCC0();
+
+ @Override
+ native int getAvCodecMajorVersionCC0();
+
+ @Override
+ native int getAvDeviceMajorVersionCC0();
+
+ @Override
+ native int getSwResampleMajorVersionCC0();
+
+ @Override
+ native long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
+
+ @Override
+ native void destroyInstance0(long moviePtr);
+
+ @Override
+ native void setStream0(long moviePtr, String url, boolean isCameraInput, int vid, String sizes, int vWidth, int vHeight, int vRate, int aid, int aMaxChannelCount, int aPrefSampleRate);
+
+ @Override
+ native void setGLFuncs0(long moviePtr, long procAddrGLTexSubImage2D, long procAddrGLGetError, long procAddrGLFlush, long procAddrGLFinish);
+
+ @Override
+ native int getVideoPTS0(long moviePtr);
+
+ @Override
+ native int getAudioPTS0(long moviePtr);
+
+ @Override
+ native int readNextPacket0(long moviePtr, int texTarget, int texFmt, int texType);
+
+ @Override
+ native int play0(long moviePtr);
+
+ @Override
+ native int pause0(long moviePtr);
+
+ @Override
+ native int seek0(long moviePtr, int position);
+}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0500Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0500Natives.java
new file mode 100644
index 000000000..8d62ac1c5
--- /dev/null
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0500Natives.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright 2015-2023 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+package jogamp.opengl.util.av.impl;
+
+class FFMPEGv0500Natives extends FFMPEGNatives {
+ @Override
+ native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
+
+ @Override
+ native int getAvUtilMajorVersionCC0();
+
+ @Override
+ native int getAvFormatMajorVersionCC0();
+
+ @Override
+ native int getAvCodecMajorVersionCC0();
+
+ @Override
+ native int getAvDeviceMajorVersionCC0();
+
+ @Override
+ native int getSwResampleMajorVersionCC0();
+
+ @Override
+ native long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
+
+ @Override
+ native void destroyInstance0(long moviePtr);
+
+ @Override
+ native void setStream0(long moviePtr, String url, boolean isCameraInput, int vid, String sizes, int vWidth, int vHeight, int vRate, int aid, int aMaxChannelCount, int aPrefSampleRate);
+
+ @Override
+ native void setGLFuncs0(long moviePtr, long procAddrGLTexSubImage2D, long procAddrGLGetError, long procAddrGLFlush, long procAddrGLFinish);
+
+ @Override
+ native int getVideoPTS0(long moviePtr);
+
+ @Override
+ native int getAudioPTS0(long moviePtr);
+
+ @Override
+ native int readNextPacket0(long moviePtr, int texTarget, int texFmt, int texType);
+
+ @Override
+ native int play0(long moviePtr);
+
+ @Override
+ native int pause0(long moviePtr);
+
+ @Override
+ native int seek0(long moviePtr, int position);
+}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0600Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0600Natives.java
new file mode 100644
index 000000000..0de167285
--- /dev/null
+++ b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv0600Natives.java
@@ -0,0 +1,78 @@
+/**
+ * Copyright 2015-2023 JogAmp Community. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification, are
+ * permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this list of
+ * conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice, this list
+ * of conditions and the following disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * The views and conclusions contained in the software and documentation are those of the
+ * authors and should not be interpreted as representing official policies, either expressed
+ * or implied, of JogAmp Community.
+ */
+package jogamp.opengl.util.av.impl;
+
+class FFMPEGv0600Natives extends FFMPEGNatives {
+ @Override
+ native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
+
+ @Override
+ native int getAvUtilMajorVersionCC0();
+
+ @Override
+ native int getAvFormatMajorVersionCC0();
+
+ @Override
+ native int getAvCodecMajorVersionCC0();
+
+ @Override
+ native int getAvDeviceMajorVersionCC0();
+
+ @Override
+ native int getSwResampleMajorVersionCC0();
+
+ @Override
+ native long createInstance0(FFMPEGMediaPlayer upstream, boolean verbose);
+
+ @Override
+ native void destroyInstance0(long moviePtr);
+
+ @Override
+ native void setStream0(long moviePtr, String url, boolean isCameraInput, int vid, String sizes, int vWidth, int vHeight, int vRate, int aid, int aMaxChannelCount, int aPrefSampleRate);
+
+ @Override
+ native void setGLFuncs0(long moviePtr, long procAddrGLTexSubImage2D, long procAddrGLGetError, long procAddrGLFlush, long procAddrGLFinish);
+
+ @Override
+ native int getVideoPTS0(long moviePtr);
+
+ @Override
+ native int getAudioPTS0(long moviePtr);
+
+ @Override
+ native int readNextPacket0(long moviePtr, int texTarget, int texFmt, int texType);
+
+ @Override
+ native int play0(long moviePtr);
+
+ @Override
+ native int pause0(long moviePtr);
+
+ @Override
+ native int seek0(long moviePtr, int position);
+}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java
deleted file mode 100644
index eff9ee5f5..000000000
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv08Natives.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Copyright 2013 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of JogAmp Community.
- */
-package jogamp.opengl.util.av.impl;
-
-class FFMPEGv08Natives extends FFMPEGNatives {
- @Override
- native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
-
- @Override
- native int getAvUtilMajorVersionCC0();
-
- @Override
- native int getAvFormatMajorVersionCC0();
-
- @Override
- native int getAvCodecMajorVersionCC0();
-
- @Override
- native int getAvResampleMajorVersionCC0();
-
- @Override
- native int getSwResampleMajorVersionCC0();
-
- @Override
- native long createInstance0(FFMPEGMediaPlayer upstream, boolean enableAvResample, boolean enableSwResample, boolean verbose);
-
- @Override
- native void destroyInstance0(long moviePtr);
-
- @Override
- native void setStream0(long moviePtr, String url, boolean isCameraInput, int vid, String sizes, int vWidth, int vHeight, int vRate, int aid, int aMaxChannelCount, int aPrefSampleRate);
-
- @Override
- native void setGLFuncs0(long moviePtr, long procAddrGLTexSubImage2D, long procAddrGLGetError, long procAddrGLFlush, long procAddrGLFinish);
-
- @Override
- native int getVideoPTS0(long moviePtr);
-
- @Override
- native int getAudioPTS0(long moviePtr);
-
- @Override
- native int readNextPacket0(long moviePtr, int texTarget, int texFmt, int texType);
-
- @Override
- native int play0(long moviePtr);
-
- @Override
- native int pause0(long moviePtr);
-
- @Override
- native int seek0(long moviePtr, int position);
-}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java
deleted file mode 100644
index d61b39c77..000000000
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv09Natives.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Copyright 2013 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of JogAmp Community.
- */
-package jogamp.opengl.util.av.impl;
-
-class FFMPEGv09Natives extends FFMPEGNatives {
- @Override
- native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
-
- @Override
- native int getAvUtilMajorVersionCC0();
-
- @Override
- native int getAvFormatMajorVersionCC0();
-
- @Override
- native int getAvCodecMajorVersionCC0();
-
- @Override
- native int getAvResampleMajorVersionCC0();
-
- @Override
- native int getSwResampleMajorVersionCC0();
-
- @Override
- native long createInstance0(FFMPEGMediaPlayer upstream, boolean enableAvResample, boolean enableSwResample, boolean verbose);
-
- @Override
- native void destroyInstance0(long moviePtr);
-
- @Override
- native void setStream0(long moviePtr, String url, boolean isCameraInput, int vid, String sizes, int vWidth, int vHeight, int vRate, int aid, int aMaxChannelCount, int aPrefSampleRate);
-
- @Override
- native void setGLFuncs0(long moviePtr, long procAddrGLTexSubImage2D, long procAddrGLGetError, long procAddrGLFlush, long procAddrGLFinish);
-
- @Override
- native int getVideoPTS0(long moviePtr);
-
- @Override
- native int getAudioPTS0(long moviePtr);
-
- @Override
- native int readNextPacket0(long moviePtr, int texTarget, int texFmt, int texType);
-
- @Override
- native int play0(long moviePtr);
-
- @Override
- native int pause0(long moviePtr);
-
- @Override
- native int seek0(long moviePtr, int position);
-}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java
deleted file mode 100644
index 109fd8953..000000000
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv10Natives.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Copyright 2013 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of JogAmp Community.
- */
-package jogamp.opengl.util.av.impl;
-
-class FFMPEGv10Natives extends FFMPEGNatives {
- @Override
- native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
-
- @Override
- native int getAvUtilMajorVersionCC0();
-
- @Override
- native int getAvFormatMajorVersionCC0();
-
- @Override
- native int getAvCodecMajorVersionCC0();
-
- @Override
- native int getAvResampleMajorVersionCC0();
-
- @Override
- native int getSwResampleMajorVersionCC0();
-
- @Override
- native long createInstance0(FFMPEGMediaPlayer upstream, boolean enableAvResample, boolean enableSwResample, boolean verbose);
-
- @Override
- native void destroyInstance0(long moviePtr);
-
- @Override
- native void setStream0(long moviePtr, String url, boolean isCameraInput, int vid, String sizes, int vWidth, int vHeight, int vRate, int aid, int aMaxChannelCount, int aPrefSampleRate);
-
- @Override
- native void setGLFuncs0(long moviePtr, long procAddrGLTexSubImage2D, long procAddrGLGetError, long procAddrGLFlush, long procAddrGLFinish);
-
- @Override
- native int getVideoPTS0(long moviePtr);
-
- @Override
- native int getAudioPTS0(long moviePtr);
-
- @Override
- native int readNextPacket0(long moviePtr, int texTarget, int texFmt, int texType);
-
- @Override
- native int play0(long moviePtr);
-
- @Override
- native int pause0(long moviePtr);
-
- @Override
- native int seek0(long moviePtr, int position);
-}
diff --git a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv11Natives.java b/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv11Natives.java
deleted file mode 100644
index 9654eca82..000000000
--- a/src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGv11Natives.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Copyright 2015 JogAmp Community. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification, are
- * permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this list of
- * conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list
- * of conditions and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation are those of the
- * authors and should not be interpreted as representing official policies, either expressed
- * or implied, of JogAmp Community.
- */
-package jogamp.opengl.util.av.impl;
-
-class FFMPEGv11Natives extends FFMPEGNatives {
- @Override
- native boolean initSymbols0(Object mutex_avcodec_openclose, long[] symbols, int count);
-
- @Override
- native int getAvUtilMajorVersionCC0();
-
- @Override
- native int getAvFormatMajorVersionCC0();
-
- @Override
- native int getAvCodecMajorVersionCC0();
-
- @Override
- native int getAvResampleMajorVersionCC0();
-
- @Override
- native int getSwResampleMajorVersionCC0();
-
- @Override
- native long createInstance0(FFMPEGMediaPlayer upstream, boolean enableAvResample, boolean enableSwResample, boolean verbose);
-
- @Override
- native void destroyInstance0(long moviePtr);
-
- @Override
- native void setStream0(long moviePtr, String url, boolean isCameraInput, int vid, String sizes, int vWidth, int vHeight, int vRate, int aid, int aMaxChannelCount, int aPrefSampleRate);
-
- @Override
- native void setGLFuncs0(long moviePtr, long procAddrGLTexSubImage2D, long procAddrGLGetError, long procAddrGLFlush, long procAddrGLFinish);
-
- @Override
- native int getVideoPTS0(long moviePtr);
-
- @Override
- native int getAudioPTS0(long moviePtr);
-
- @Override
- native int readNextPacket0(long moviePtr, int texTarget, int texFmt, int texType);
-
- @Override
- native int play0(long moviePtr);
-
- @Override
- native int pause0(long moviePtr);
-
- @Override
- native int seek0(long moviePtr, int position);
-}
--
cgit v1.2.3