diff --git a/.gitignore b/.gitignore
index 6b395b5..a9fe009 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,26 +1,14 @@
*.iml
.idea
-/ffmpeg4java-macos-test/test-frame-10.png
-/ffmpeg4java-macos-test/test-frame-20.png
-/ffmpeg4java-macos-test/test-frame-30.png
-/ffmpeg4java-macos-test/test-frame-40.png
-/ffmpeg4java-macos-test/test-video-48.mpg
-/ffmpeg4java-linux-test/test-frame-10.png
-/ffmpeg4java-linux-test/test-frame-20.png
-/ffmpeg4java-linux-test/test-frame-30.png
-/ffmpeg4java-linux-test/test-frame-40.png
-/ffmpeg4java-linux-test/test-video-48.mpg
-/ffmpeg4java-windows-test/test-frame-10.png
-/ffmpeg4java-windows-test/test-frame-20.png
-/ffmpeg4java-windows-test/test-frame-30.png
-/ffmpeg4java-windows-test/test-frame-40.png
-/ffmpeg4java-windows-test/test-video-48.mpg
/ffmpeg4java-macos/native/ffmpeg/
/ffmpeg4java-linux/native/ffmpeg/
/ffmpeg4java-windows/native/ffmpeg/
/ffmpeg4java-windows/src/main/resources/ffmpeg4java.dll
/ffmpeg4java-linux/src/main/resources/libffmpeg4java.so
/ffmpeg4java-macos/src/main/resources/libffmpeg4java.dylib
-/ffmpeg4java-macos-examples/output.mp4
-/ffmpeg4java-linux-examples/output.mp4
-/ffmpeg4java-windows-examples/output.mp4
+/ffmpeg4java-examples/output.mp4
+/ffmpeg4java-tests/test-frame-10.png
+/ffmpeg4java-tests/test-frame-20.png
+/ffmpeg4java-tests/test-frame-30.png
+/ffmpeg4java-tests/test-frame-40.png
+/ffmpeg4java-tests/test-video-48.mpg
diff --git a/Makefile b/Makefile
index 0b5389c..e58a7d4 100755
--- a/Makefile
+++ b/Makefile
@@ -30,8 +30,8 @@ dump:
verify:
test $(system)
@echo System = $(system)
- #MAVEN_OPTS="--enable-preview --enable-native-access=ALL-UNNAMED -Djava.library.path=ffmpeg4java-$(system)-test/target/lib -Djextract.trace.downcalls=false -Xlog:library" mvn verify -P$(system)
- MAVEN_OPTS="--enable-preview --enable-native-access=ALL-UNNAMED -Djava.library.path=ffmpeg4java-$(system)-test/target/lib -Djextract.trace.downcalls=false $(properties)" mvn verify -P$(system)
+ #MAVEN_OPTS="--enable-preview --enable-native-access=ALL-UNNAMED -Djava.library.path=ffmpeg4java-tests/target/lib -Djextract.trace.downcalls=false -Xlog:library" mvn verify -P$(system)
+ MAVEN_OPTS="--enable-preview --enable-native-access=ALL-UNNAMED -Djava.library.path=ffmpeg4java-tests/target/lib -Djextract.trace.downcalls=false $(properties)" mvn verify -P$(system)
.PHONY: copy-legal
copy-legal:
diff --git a/README.md b/README.md
index 9e74abb..a9ef88b 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,10 @@
-# FFmpeg4Java 7.0.1-1.1
+# FFmpeg4Java 7.0.1-1.2
FFmpeg4Java provides a Java wrapper of FFmpeg library version 7.0.1.
+Please note that starting from version 7.0.1-1.0 the wrapper requires Java 22 and the Java FFM API (which is still in preview).
+Older versions of the wrapper still work with Java 11 or later, but they use JNI with an old version of FFmpeg.
+
## License
@@ -54,19 +57,19 @@ If you are using Maven, add one of the following dependencies in your POM:
com.nextbreakpoint
com.nextbreakpoint.ffmpeg4java.macos
- 7.0.1-1.1
+ 7.0.1-1.2
com.nextbreakpoint
com.nextbreakpoint.ffmpeg4java.linux
- 7.0.1-1.1
+ 7.0.1-1.2
com.nextbreakpoint
com.nextbreakpoint.ffmpeg4java.windows
- 7.0.1-1.1
+ 7.0.1-1.2
Also, add one of the following to download the native library:
@@ -226,25 +229,25 @@ Compile and package the JARs:
The artifacts will be created in the target directory of each module:
- ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.1-x86_64.jar
- ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.1-x86_64-x86_64.jar
+ ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.2-x86_64.jar
+ ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.2-x86_64-x86_64.jar
- ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.1-x86_64.jar
- ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.1-x86_64-x86_64.jar
+ ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.2-x86_64.jar
+ ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.2-x86_64-x86_64.jar
- ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.1-x86_64.jar
- ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.1-x86_64-x86_64.jar
+ ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.2-x86_64.jar
+ ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.2-x86_64-x86_64.jar
List the content of the JAR files:
- unzip -t ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.1.jar
- unzip -t ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.1-x86_64.jar
+ unzip -t ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.2.jar
+ unzip -t ffmpeg4java-macos/target/com.nextbreakpoint.ffmpeg4java.macos-7.0.1-1.2-x86_64.jar
- unzip -t ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.1.jar
- unzip -t ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.1-x86_64.jar
+ unzip -t ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.2.jar
+ unzip -t ffmpeg4java-linux/target/com.nextbreakpoint.ffmpeg4java.linux-7.0.1-1.2-x86_64.jar
- unzip -t ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.1.jar
- unzip -t ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.1-x86_64.jar
+ unzip -t ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.2.jar
+ unzip -t ffmpeg4java-windows/target/com.nextbreakpoint.ffmpeg4java.windows-7.0.1-1.2-x86_64.jar
Install the artifacts in your local Maven repository:
@@ -287,15 +290,11 @@ Generate the code for Windows (must be executed on Windows):
## Code examples
-A simple example is provided for each supported system.
-
-See POM files for details about how to download the native library and execute the code:
-
- ffmpeg4java-macos-examples/pom.xml
+A simple example is provided for the module ffmpeg4Java-examples.
- ffmpeg4java-linux-examples/pom.xml
+See the POM file for details about how to download the native library and execute the example:
- ffmpeg4java-windows-examples/pom.xml
+ ffmpeg4java-examples/pom.xml
## References
diff --git a/ffmpeg4java-examples/pom.xml b/ffmpeg4java-examples/pom.xml
new file mode 100644
index 0000000..074c53e
--- /dev/null
+++ b/ffmpeg4java-examples/pom.xml
@@ -0,0 +1,177 @@
+
+ 4.0.0
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java
+ 7.0.1-1.2
+
+ com.nextbreakpoint.ffmpeg4java.examples
+ jar
+ FFmpeg4Java Examples
+ FFmpeg4Java provides a Java wrapper of FFmpeg library
+
+
+ macos
+
+ x86_64
+ macos
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.macos
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-lib
+ test-compile
+
+ unpack
+
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.macos
+ x86_64
+ jar
+ true
+ ${project.build.directory}/lib
+
+
+ **/*.dylib
+
+
+
+
+
+
+
+
+ linux
+
+ x86_64
+ linux
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.linux
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-lib
+ test-compile
+
+ unpack
+
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.linux
+ x86_64
+ jar
+ true
+ ${project.build.directory}/lib
+
+
+ **/*.so
+
+
+
+
+
+
+
+
+ windows
+
+ x86_64
+ windows
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.windows
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-lib
+ test-compile
+
+ unpack
+
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.windows
+ x86_64
+ jar
+ true
+ ${project.build.directory}/lib
+
+
+ **/*.dll
+
+
+
+
+
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+ run
+ test
+
+ exec
+
+
+ java
+
+ --enable-preview
+ --enable-native-access=ALL-UNNAMED
+ -classpath
+
+ -Djava.library.path=${project.build.directory}/lib
+ com.nextbreakpoint.ffmpeg4java.ConvertVideoMain
+ sample.mpg
+ output.mp4
+
+
+
+
+
+
+
+
diff --git a/ffmpeg4java-linux-examples/sample.mpg b/ffmpeg4java-examples/sample.mpg
similarity index 100%
rename from ffmpeg4java-linux-examples/sample.mpg
rename to ffmpeg4java-examples/sample.mpg
diff --git a/ffmpeg4java-linux-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/ConvertVideoMain.java b/ffmpeg4java-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/ConvertVideoMain.java
similarity index 67%
rename from ffmpeg4java-linux-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/ConvertVideoMain.java
rename to ffmpeg4java-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/ConvertVideoMain.java
index 9e06ca3..23b29df 100644
--- a/ffmpeg4java-linux-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/ConvertVideoMain.java
+++ b/ffmpeg4java-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/ConvertVideoMain.java
@@ -1,55 +1,55 @@
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.foreign.Arena;
import java.lang.foreign.MemorySegment;
import java.lang.foreign.ValueLayout;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_alloc_context3;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_close;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_open2;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_parameters_from_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_parameters_to_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_receive_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_receive_packet;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_send_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_send_packet;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.sws_freeContext;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.sws_getCachedContext;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.sws_scale;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.AV_CODEC_ID_NONE;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_dump_format;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_frame_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_guess_format;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_packet_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_packet_rescale_ts;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_packet_unref;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_read_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_stream_new_side_data;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_write_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_write_trailer;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avcodec_find_decoder;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avcodec_find_encoder;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avcodec_parameters_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_alloc_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_close_input;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_find_stream_info;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_free_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_new_stream;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_open_input;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_write_header;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avio_close;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avio_open2;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AVIO_FLAG_WRITE;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AV_PIX_FMT_RGB24;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AV_PIX_FMT_YUV420P;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.C_POINTER;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.SWS_BILINEAR;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_free;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_image_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_image_fill_arrays;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_image_get_buffer_size;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_alloc_context3;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_close;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_open2;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_parameters_from_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_parameters_to_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_receive_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_receive_packet;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_send_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_send_packet;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.sws_freeContext;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.sws_getCachedContext;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.sws_scale;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.AV_CODEC_ID_NONE;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_dump_format;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_frame_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_guess_format;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_packet_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_packet_rescale_ts;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_packet_unref;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_read_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_stream_new_side_data;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_write_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_write_trailer;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avcodec_find_decoder;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avcodec_find_encoder;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avcodec_parameters_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_alloc_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_close_input;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_find_stream_info;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_free_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_new_stream;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_open_input;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_write_header;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avio_close;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avio_open2;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AVIO_FLAG_WRITE;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AV_PIX_FMT_RGB24;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AV_PIX_FMT_YUV420P;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.C_POINTER;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.SWS_BILINEAR;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_free;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_image_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_image_fill_arrays;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_image_get_buffer_size;
import static java.lang.foreign.MemorySegment.NULL;
class ConvertVideoMain {
@@ -63,8 +63,8 @@ public static void main(String[] args) {
System.out.println("Converting video...");
- System.out.println(STR."Source file \{sourceFileName}");
- System.out.println(STR."Output file \{outputFileName}");
+ System.out.printf("Source file %s%n", sourceFileName);
+ System.out.printf("Output file %s%n", outputFileName);
try (var arena = Arena.ofConfined()) {
var pInputFileName = arena.allocateFrom(sourceFileName);
@@ -90,13 +90,13 @@ public static void main(String[] args) {
ppInputFormatCtx = arena.allocate(C_POINTER);
if (avformat_open_input(ppInputFormatCtx, pInputFileName, NULL, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't open file"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't open file"));
}
final var pInputFormatCtx = ppInputFormatCtx.get(C_POINTER, 0);
if (avformat_find_stream_info(pInputFormatCtx, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find stream info"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't find stream info"));
}
av_dump_format(pInputFormatCtx, 0, pInputFileName, 0);
@@ -124,25 +124,25 @@ public static void main(String[] args) {
}
if (videoStreamIndex == -1) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find video stream"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't find video stream"));
}
if (pInputCodec.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find decoder"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't find decoder"));
}
pInputCodecCtx = avcodec_alloc_context3(pInputCodec);
if (avcodec_parameters_to_context(pInputCodecCtx, pInputCodecParameters) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't copy codec parameters"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't copy codec parameters"));
}
if (pInputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate codec context"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't allocate codec context"));
}
if (avcodec_open2(pInputCodecCtx, pInputCodec, NULL) < 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't open decoder"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't open decoder"));
}
final int frameWidth = AVCodecContext.width(pInputCodecCtx);
@@ -152,18 +152,18 @@ public static void main(String[] args) {
pInputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, pixelFormat, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), SWS_BILINEAR(), NULL, NULL, NULL);
if (pInputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate scale context"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't allocate scale context"));
}
pInputRGBFrame = av_frame_alloc();
pInputTMPFrame = av_frame_alloc();
if (pInputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate RGB frame"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't allocate RGB frame"));
}
if (pInputTMPFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate TMP frame"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't allocate TMP frame"));
}
final int inputRGBByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
@@ -171,7 +171,7 @@ public static void main(String[] args) {
pInputRGBBuffer = arena.allocate(ValueLayout.OfByte.JAVA_BYTE, inputRGBByteSize);
if (pInputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate RGB buffer"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't allocate RGB buffer"));
}
av_image_fill_arrays(AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame), pInputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
@@ -179,23 +179,23 @@ public static void main(String[] args) {
pInputPacket = av_packet_alloc();
if (pInputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate packet"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Can't allocate packet"));
}
pOutputFormatCtx = avformat_alloc_context();
if (pOutputFormatCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate format context"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't allocate format context"));
}
final var pOutputFormat = av_guess_format(NULL, pOutputFileName, NULL);
if (pOutputFormat.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate output format"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't allocate output format"));
}
if (AVOutputFormat.video_codec(pOutputFormat) == AV_CODEC_ID_NONE()) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Video codec not found"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Video codec not found"));
}
AVFormatContext.oformat(pOutputFormatCtx, pOutputFormat);
@@ -203,13 +203,13 @@ public static void main(String[] args) {
final var pOutputCodec = avcodec_find_encoder(AVOutputFormat.video_codec(pOutputFormat));
if (pOutputCodec.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't find encoder"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't find encoder"));
}
pOutputCodecCtx = avcodec_alloc_context3(pOutputCodec);
if (pOutputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate codec context"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't allocate codec context"));
}
final var pTimeBase = arena.allocate(AVRational.layout());
@@ -229,21 +229,21 @@ public static void main(String[] args) {
final var pOutputStream = avformat_new_stream(pOutputFormatCtx, pOutputCodec);
if (pOutputStream.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't create stream"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't create stream"));
}
if (AVFormatContext.nb_streams(pOutputFormatCtx) != 1) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Unexpected number of streams"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Unexpected number of streams"));
}
final var pOutputCodecParameters = avcodec_parameters_alloc();
if (pOutputCodecParameters.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate codec parameters"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't allocate codec parameters"));
}
if (avcodec_parameters_from_context(pOutputCodecParameters, pOutputCodecCtx) != 0) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't copy codec parameters"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't copy codec parameters"));
}
AVCodecParameters.codec_id(pOutputCodecParameters, AVOutputFormat.video_codec(pOutputFormat));
@@ -257,19 +257,19 @@ public static void main(String[] args) {
AVCPBProperties.buffer_size(pOutputProperties, frameWidth * frameHeight * 3L * 2L);
if (avcodec_open2(pOutputCodecCtx, pOutputCodec, NULL) != 0) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't open encoder"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't open encoder"));
}
final var ppOutputAVIOCtx = arena.allocate(C_POINTER);
if (avio_open2(ppOutputAVIOCtx, pOutputFileName, AVIO_FLAG_WRITE(), NULL, NULL) < 0) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't open file"));
+ throw new RuntimeException(encodeVideoError(outputFileName, "Can't open file"));
}
pOutputAVIOCtx = ppOutputAVIOCtx.get(C_POINTER, 0);
if (pOutputAVIOCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate IO context"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't allocate IO context"));
}
AVFormatContext.pb(pOutputFormatCtx, pOutputAVIOCtx);
@@ -277,18 +277,18 @@ public static void main(String[] args) {
pOutputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), SWS_BILINEAR(), NULL, NULL, NULL);
if (pOutputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate scale context"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't allocate scale context"));
}
pOutputRGBFrame = av_frame_alloc();
pOutputYUVFrame = av_frame_alloc();
if (pOutputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate RGB frame"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't allocate RGB frame"));
}
if (pOutputYUVFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate YUV frame"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't allocate YUV frame"));
}
AVFrame.width(pOutputRGBFrame, frameWidth);
@@ -308,11 +308,11 @@ public static void main(String[] args) {
pOutputYUVBuffer = arena.allocate(outputYUVByteSize);
if (pOutputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate RGB buffer"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't allocate RGB buffer"));
}
if (pOutputYUVBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate YUV buffer"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't allocate YUV buffer"));
}
av_image_fill_arrays(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), pOutputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
@@ -321,17 +321,17 @@ public static void main(String[] args) {
final var pOutputPacket = av_packet_alloc();
if (pOutputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate packet"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Can't allocate packet"));
}
AVPacket.stream_index(pOutputPacket, AVStream.index(pOutputStream));
if (inputRGBByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Unexpected buffer size"));
+ throw new RuntimeException(decodeVideoError(sourceFileName, "Unexpected buffer size"));
}
if (outputRGBByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Unexpected buffer size"));
+ throw new RuntimeException(decodeVideoError(outputFileName, "Unexpected buffer size"));
}
final byte[] buffer = new byte[outputRGBByteSize];
@@ -449,11 +449,11 @@ public static void main(String[] args) {
}
}
- private static String formatLoadVideoError(String fileName, String message) {
- return STR."Decode video error (file = \{fileName}). \{message}";
+ private static String decodeVideoError(String fileName, String message) {
+ return "Decode video error (file = %s). %s".formatted(fileName, message);
}
- private static String formatSaveVideoError(String fileName, String message) {
- return STR."Encode video error (file = \{fileName}). \{message}";
+ private static String encodeVideoError(String fileName, String message) {
+ return "Encode video error (file = %s). %s".formatted(fileName, message);
}
}
\ No newline at end of file
diff --git a/ffmpeg4java-linux-examples/pom.xml b/ffmpeg4java-linux-examples/pom.xml
deleted file mode 100644
index c47da98..0000000
--- a/ffmpeg4java-linux-examples/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
- 4.0.0
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
-
- com.nextbreakpoint.ffmpeg4java.linux.examples
- jar
- FFmpeg4Java Linux Examples
- FFmpeg4Java provides a Java wrapper of FFmpeg library
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.linux
- ${project.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-lib
- test-compile
-
- unpack
-
-
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.linux
- x86_64
- jar
- true
- ${project.build.directory}/lib
-
-
- **/*.so
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
-
- run
- test
-
- exec
-
-
- java
-
- --enable-preview
- --enable-native-access=ALL-UNNAMED
- -classpath
-
- -Djava.library.path=${project.build.directory}/lib
- com.nextbreakpoint.ffmpeg4java.linux.ConvertVideoMain
- sample.mpg
- output.mp4
-
-
-
-
-
-
-
-
diff --git a/ffmpeg4java-linux-test/pom.xml b/ffmpeg4java-linux-test/pom.xml
deleted file mode 100644
index 8c59b55..0000000
--- a/ffmpeg4java-linux-test/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
- 4.0.0
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
-
- com.nextbreakpoint.ffmpeg4java.linux.test
- jar
- FFmpeg4Java Linux Test
- FFmpeg4Java provides a Java wrapper of FFmpeg library
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.linux
- ${project.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-lib
- test-compile
-
- unpack
-
-
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.linux
- x86_64
- jar
- true
- ${project.build.directory}/lib
-
-
- **/*.so
-
-
-
-
-
-
-
diff --git a/ffmpeg4java-linux-test/src/test/java/com/nextbreakpoint/ffmpeg4java/linux/FFmpeg4JavaTest.java b/ffmpeg4java-linux-test/src/test/java/com/nextbreakpoint/ffmpeg4java/linux/FFmpeg4JavaTest.java
deleted file mode 100644
index dd152ff..0000000
--- a/ffmpeg4java-linux-test/src/test/java/com/nextbreakpoint/ffmpeg4java/linux/FFmpeg4JavaTest.java
+++ /dev/null
@@ -1,594 +0,0 @@
-package com.nextbreakpoint.ffmpeg4java.linux;
-
-import org.assertj.core.data.Offset;
-import org.junit.jupiter.api.Test;
-
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBufferInt;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.lang.foreign.Arena;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.ValueLayout;
-import java.util.function.BiConsumer;
-
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_alloc_context3;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_close;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_open2;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_parameters_from_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_parameters_to_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_receive_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_receive_packet;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_send_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.avcodec_send_packet;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.sws_freeContext;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.sws_getCachedContext;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg.sws_scale;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.AV_CODEC_ID_NONE;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_dump_format;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_frame_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_guess_format;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_packet_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_packet_rescale_ts;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_packet_unref;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_read_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_stream_new_side_data;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_write_frame;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.av_write_trailer;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avcodec_find_decoder;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avcodec_find_encoder;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avcodec_parameters_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_alloc_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_close_input;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_find_stream_info;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_free_context;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_new_stream;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_open_input;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avformat_write_header;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avio_close;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_1.avio_open2;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AVIO_FLAG_WRITE;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AV_PIX_FMT_RGB24;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.AV_PIX_FMT_YUV420P;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.C_POINTER;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.SWS_BILINEAR;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_free;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_image_alloc;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_image_fill_arrays;
-import static com.nextbreakpoint.ffmpeg4java.linux.Libffmpeg_2.av_image_get_buffer_size;
-import static java.lang.foreign.MemorySegment.NULL;
-import static org.assertj.core.api.Assertions.assertThat;
-
-class FFmpeg4JavaTest {
- @Test
- public void shouldDecode48Frames() {
- int frameCount = loadVideo(getFileName("fixture-video-48.mpg"), FFmpeg4JavaTest::printFrame);
- assertThat(frameCount).isEqualTo(48);
- }
-
- @Test
- public void shouldEncode48Frames() {
- int fps = 24;
- int frames = 48;
- int frameWidth = 640;
- int frameHeight = 480;
- int frameCount = saveVideo(getFileName("test-video-48.mpg"), fps, frames, frameWidth, frameHeight, FFmpeg4JavaTest::printFrame);
- assertThat(frameCount).isEqualTo(frames);
- }
-
- @Test
- public void shouldDecodeFrames() throws IOException {
- int frameWidth = 640;
- int frameHeight = 480;
- final BufferedImage image = new BufferedImage(frameWidth, frameHeight, BufferedImage.TYPE_INT_ARGB);
- loadVideo(getFileName("fixture-video-48.mpg"), (frameCount, bytes) -> saveFrame(frameCount, image, bytes));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-10.png"))), convertFormat(loadImage(getFileName("test-frame-10.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-20.png"))), convertFormat(loadImage(getFileName("test-frame-20.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-30.png"))), convertFormat(loadImage(getFileName("test-frame-30.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-40.png"))), convertFormat(loadImage(getFileName("test-frame-40.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- }
-
- @Test
- public void shouldEncodeFrames() throws IOException {
- int fps = 24;
- int frames = 48;
- int frameWidth = 640;
- int frameHeight = 480;
- final BufferedImage image = new BufferedImage(frameWidth, frameHeight, BufferedImage.TYPE_INT_ARGB);
- saveVideo(getFileName("test-video-48.mpg"), fps, frames, frameWidth, frameHeight, (frameCount, bytes) -> printFrame(frameCount, bytes, frames));
- loadVideo(getFileName("test-video-48.mpg"), (frameCount, bytes) -> saveFrame(frameCount, image, bytes));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-10.png"))), convertFormat(loadImage(getFileName("test-frame-10.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-20.png"))), convertFormat(loadImage(getFileName("test-frame-20.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-30.png"))), convertFormat(loadImage(getFileName("test-frame-30.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-40.png"))), convertFormat(loadImage(getFileName("test-frame-40.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- }
-
- private static int loadVideo(String fileName, BiConsumer consumer) {
- int frameCount = 0;
-
- try (var arena = Arena.ofConfined()) {
- var ppInputFormatCtx = NULL;
- var pInputCodecCtx = NULL;
- var pInputSwsContext = NULL;
- var pInputRGBFrame = NULL;
- var pInputRGBBuffer = NULL;
- var pInputTMPFrame = NULL;
- var pInputPacket = NULL;
-
- try {
- ppInputFormatCtx = arena.allocate(C_POINTER);
-
- final var pInputFileName = arena.allocateFrom(fileName);
-
- if (avformat_open_input(ppInputFormatCtx, pInputFileName, NULL, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't open file"));
- }
-
- final var pInputFormatCtx = ppInputFormatCtx.get(C_POINTER, 0);
-
- if (avformat_find_stream_info(pInputFormatCtx, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find stream info"));
- }
-
- av_dump_format(pInputFormatCtx, 0, pInputFileName, 0);
-
- final int nbStreams = AVFormatContext.nb_streams(pInputFormatCtx);
- final var pInputStreams = AVFormatContext.streams(pInputFormatCtx);
-
- var pInputCodecParameters = NULL;
- int videoStreamIndex = -1;
- var pInputCodec = NULL;
-
- for (int i = 0; i < nbStreams; i++) {
- final var pStream = pInputStreams.getAtIndex(C_POINTER, i);
-
- final var pVideoCodecParameters = AVStream.codecpar(pStream);
-
- final var codecType = AVCodecParameters.codec_type(pVideoCodecParameters);
-
- if (codecType == AVMEDIA_TYPE_VIDEO()) {
- videoStreamIndex = i;
- pInputCodecParameters = pVideoCodecParameters;
- pInputCodec = avcodec_find_decoder(AVCodecParameters.codec_id(pVideoCodecParameters));
- break;
- }
- }
-
- if (videoStreamIndex == -1) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find video stream"));
- }
-
- if (pInputCodec.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find decoder"));
- }
-
- pInputCodecCtx = avcodec_alloc_context3(pInputCodec);
-
- if (avcodec_parameters_to_context(pInputCodecCtx, pInputCodecParameters) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't copy codec parameters"));
- }
-
- if (pInputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate codec context"));
- }
-
- if (avcodec_open2(pInputCodecCtx, pInputCodec, NULL) < 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't open decoder"));
- }
-
- final int frameWidth = AVCodecContext.width(pInputCodecCtx);
- final int frameHeight = AVCodecContext.height(pInputCodecCtx);
- final int pixelFormat = AVCodecContext.pix_fmt(pInputCodecCtx);
-
- pInputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, pixelFormat, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pInputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate scale context"));
- }
-
- pInputRGBFrame = av_frame_alloc();
- pInputTMPFrame = av_frame_alloc();
-
- if (pInputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB frame"));
- }
-
- if (pInputTMPFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate TMP frame"));
- }
-
- final int rgbByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputRGBBuffer = arena.allocate(ValueLayout.OfByte.JAVA_BYTE, rgbByteSize);
-
- if (pInputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame), pInputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputPacket = av_packet_alloc();
-
- if (pInputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate packet"));
- }
-
- if (rgbByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Unexpected buffer size"));
- }
-
- final byte[] buffer = new byte[rgbByteSize];
-
- while (av_read_frame(pInputFormatCtx, pInputPacket) == 0) {
- if (AVPacket.stream_index(pInputPacket) == videoStreamIndex) {
- if (avcodec_send_packet(pInputCodecCtx, pInputPacket) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, rgbByteSize);
-
- consumer.accept(++frameCount, buffer);
- }
- }
- }
- }
-
- if (avcodec_send_packet(pInputCodecCtx, NULL) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, rgbByteSize);
-
- consumer.accept(++frameCount, buffer);
- }
- }
- } finally {
- if (!pInputPacket.equals(NULL)) {
- av_packet_unref(pInputPacket);
- }
-
- if (!pInputCodecCtx.equals(NULL)) {
- avcodec_close(pInputCodecCtx);
- }
-
- if (!pInputSwsContext.equals(NULL)) {
- sws_freeContext(pInputSwsContext);
- }
-
- if (!pInputTMPFrame.equals(NULL)) {
- av_free(pInputTMPFrame);
- }
-
- if (!pInputRGBFrame.equals(NULL)) {
- av_free(pInputRGBFrame);
- }
-
- if (!ppInputFormatCtx.equals(NULL)) {
- avformat_close_input(ppInputFormatCtx);
- }
- }
- }
- return frameCount;
- }
-
- private static int saveVideo(String fileName, int fps, int frames, int frameWidth, int frameHeight, BiConsumer consumer) {
- int frameCount = 0;
-
- try (var arena = Arena.ofConfined()) {
- var pOutputFormatCtx = NULL;
- var pOutputCodecCtx = NULL;
- var pOutputAVIOCtx = NULL;
- var pOutputSwsContext = NULL;
- var pOutputRGBFrame = NULL;
- var pOutputYUVFrame = NULL;
- var pOutputRGBBuffer = NULL;
- var pOutputYUVBuffer = NULL;
-
- try {
- pOutputFormatCtx = avformat_alloc_context();
-
- if (pOutputFormatCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate format context"));
- }
-
- final var pOutputFileName = arena.allocateFrom(fileName);
-
- final var pOutputFormat = av_guess_format(NULL, pOutputFileName, NULL);
-
- if (pOutputFormat.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate output format"));
- }
-
- final int outputVideoCodec = AVOutputFormat.video_codec(pOutputFormat);
-
- if (outputVideoCodec == AV_CODEC_ID_NONE()) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Video codec not found"));
- }
-
- AVFormatContext.oformat(pOutputFormatCtx, pOutputFormat);
-
- final var pOutputCodec = avcodec_find_encoder(outputVideoCodec);
-
- if (pOutputCodec.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't find encoder"));
- }
-
- pOutputCodecCtx = avcodec_alloc_context3(pOutputCodec);
-
- if (pOutputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate codec context"));
- }
-
- final var pTimeBase = arena.allocate(AVRational.layout());
- AVRational.num(pTimeBase, 1);
- AVRational.den(pTimeBase, fps);
-
- AVCodecContext.codec_id(pOutputCodecCtx, outputVideoCodec);
- AVCodecContext.codec_type(pOutputCodecCtx, AVMEDIA_TYPE_VIDEO());
- AVCodecContext.width(pOutputCodecCtx, frameWidth);
- AVCodecContext.height(pOutputCodecCtx, frameHeight);
- AVCodecContext.pix_fmt(pOutputCodecCtx, AV_PIX_FMT_YUV420P());
- AVCodecContext.time_base(pOutputCodecCtx, pTimeBase);
- AVCodecContext.gop_size(pOutputCodecCtx, 4);
- AVCodecContext.bit_rate(pOutputCodecCtx, 4096);
- AVCodecContext.max_b_frames(pOutputCodecCtx, 2);
-
- final var pOutputStream = avformat_new_stream(pOutputFormatCtx, pOutputCodec);
-
- if (pOutputStream.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't create stream"));
- }
-
- if (AVFormatContext.nb_streams(pOutputFormatCtx) != 1) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Unexpected number of streams"));
- }
-
- final var pOutputCodecParameters = avcodec_parameters_alloc();
-
- if (pOutputCodecParameters.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate codec parameters"));
- }
-
- if (avcodec_parameters_from_context(pOutputCodecParameters, pOutputCodecCtx) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't copy codec parameters"));
- }
-
- AVCodecParameters.codec_id(pOutputCodecParameters, outputVideoCodec);
- AVCodecParameters.codec_type(pOutputCodecParameters, AVMEDIA_TYPE_VIDEO());
- AVCodecParameters.width(pOutputCodecParameters, frameWidth);
- AVCodecParameters.height(pOutputCodecParameters, frameHeight);
- AVStream.codecpar(pOutputStream, pOutputCodecParameters);
- AVStream.time_base(pOutputStream, pTimeBase);
-
- final var pOutputProperties = av_stream_new_side_data(pOutputStream, AV_PKT_DATA_CPB_PROPERTIES(), AVCPBProperties.sizeof());
- AVCPBProperties.buffer_size(pOutputProperties, frameWidth * frameHeight * 3L * 2L);
-
- if (avcodec_open2(pOutputCodecCtx, pOutputCodec, NULL) != 0) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't open encoder"));
- }
-
- final var ppOutputAVIOCtx = arena.allocate(C_POINTER);
-
- if (avio_open2(ppOutputAVIOCtx, pOutputFileName, AVIO_FLAG_WRITE(), NULL, NULL) < 0) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't open file"));
- }
-
- pOutputAVIOCtx = ppOutputAVIOCtx.get(C_POINTER, 0);
-
- if (pOutputAVIOCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate IO context"));
- }
-
- AVFormatContext.pb(pOutputFormatCtx, pOutputAVIOCtx);
-
- pOutputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pOutputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate scale context"));
- }
-
- pOutputRGBFrame = av_frame_alloc();
- pOutputYUVFrame = av_frame_alloc();
-
- if (pOutputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB frame"));
- }
-
- if (pOutputYUVFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate YUV frame"));
- }
-
- AVFrame.width(pOutputRGBFrame, frameWidth);
- AVFrame.height(pOutputRGBFrame, frameHeight);
- AVFrame.format(pOutputRGBFrame, AV_PIX_FMT_RGB24());
- AVFrame.width(pOutputYUVFrame, frameWidth);
- AVFrame.height(pOutputYUVFrame, frameHeight);
- AVFrame.format(pOutputYUVFrame, AV_PIX_FMT_YUV420P());
-
- av_image_alloc(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), frameWidth, frameHeight, AV_PIX_FMT_RGB24(), 1);
- av_image_alloc(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), 1);
-
- final int rgbByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- final int yuvByteSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- pOutputRGBBuffer = arena.allocate(rgbByteSize);
- pOutputYUVBuffer = arena.allocate(yuvByteSize);
-
- if (pOutputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB buffer"));
- }
-
- if (pOutputYUVBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate YUV buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), pOutputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- av_image_fill_arrays(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), pOutputYUVBuffer, AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- final var pOutputPacket = av_packet_alloc();
-
- if (pOutputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate packet"));
- }
-
- AVPacket.stream_index(pOutputPacket, AVStream.index(pOutputStream));
-
- if (rgbByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Unexpected buffer size"));
- }
-
- final byte[] buffer = new byte[rgbByteSize];
-
- avformat_write_header(pOutputFormatCtx, NULL);
-
- for (int frame = 0; frame < frames; frame++) {
- final var pOutputData = AVFrame.data(pOutputRGBFrame);
- fillPixels(buffer, frameWidth, frameHeight, ((float) frame / (frames - 1)));
- MemorySegment.copy(MemorySegment.ofArray(buffer), 0, pOutputData.get(C_POINTER, 0), 0, rgbByteSize);
-
- consumer.accept(++frameCount, buffer);
-
- sws_scale(pOutputSwsContext, AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), 0, frameHeight, AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame));
-
- if (avcodec_send_frame(pOutputCodecCtx, pOutputYUVFrame) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
- }
-
- if (avcodec_send_frame(pOutputCodecCtx, NULL) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
-
- av_write_trailer(pOutputFormatCtx);
- } finally {
- if (!pOutputAVIOCtx.equals(NULL)) {
- avio_close(pOutputAVIOCtx);
- }
-
- if (!pOutputCodecCtx.equals(NULL)) {
- avcodec_close(pOutputCodecCtx);
- }
-
- if (!pOutputSwsContext.equals(NULL)) {
- sws_freeContext(pOutputSwsContext);
- }
-
- if (!pOutputYUVFrame.equals(NULL)) {
- av_free(pOutputYUVFrame);
- }
-
- if (!pOutputRGBFrame.equals(NULL)) {
- av_free(pOutputRGBFrame);
- }
-
- if (!pOutputFormatCtx.equals(NULL)) {
- avformat_free_context(pOutputFormatCtx);
- }
- }
- }
-
- return frameCount;
- }
-
- private static String formatLoadVideoError(String fileName, String message) {
- return STR."Load video failed (file = \{fileName}). \{message}";
- }
-
- private static String formatSaveVideoError(String fileName, String message) {
- return STR."Save video failed (file = \{fileName}). \{message}";
- }
-
- private static void fillPixels(byte[] data, int width, int height, float color) {
- byte p = (byte) (255 * color);
- for (int x = 0; x < width; x += 1) {
- for (int y = 0; y < height; y += 1) {
- int j = (y * width + x) * 3;
- if ((x / 5) % 2 == 0 || (y / 5) % 2 == 1) {
- data[j + 0] = p;
- data[j + 1] = p;
- data[j + 2] = p;
- } else {
- data[j + 0] = 0;
- data[j + 1] = 0;
- data[j + 2] = 0;
- }
- }
- }
- }
-
- private static void writeImage(BufferedImage image, int frame, String name) {
- if (frame % 10 == 0) {
- try (FileOutputStream output = new FileOutputStream(name)) {
- ImageIO.write(image, "png", output);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- private static void copyPixelsIntoImage(byte[] data, BufferedImage image) {
- int[] rgb_data = ((DataBufferInt) image.getData().getDataBuffer()).getData();
- for (int t = 0, k = 0; k < data.length; k += 3) {
- rgb_data[t++] = 0xFF000000 | ((((int) data[k]) << 16) & 0x00FF0000) | ((((int) data[k]) << 8) & 0x0000FF00) | ((((int) data[k])) & 0x000000FF);
- }
- image.setRGB(0, 0, image.getWidth(), image.getHeight(), rgb_data, 0, image.getWidth());
- }
-
- private static int[] loadImage(String file) throws IOException {
- BufferedImage image = ImageIO.read(new File(file));
- return image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth());
- }
-
- private static double error(byte[] data1, byte[] data2) {
- double error = 0;
- for (int j = 0; j < data1.length; j += 3) {
- error += distance(data1, data2, j);
- }
- return error / (data1.length / 3.0);
- }
-
- private static double distance(byte[] data1, byte[] data2, int i) {
- return Math.sqrt(Math.pow(data1[i + 0] - data2[i + 0], 2) + Math.pow(data1[i + 1] - data2[i + 1], 2) + Math.pow(data1[i + 2] - data2[i + 2], 2));
- }
-
- private static byte[] convertFormat(int[] data) {
- byte[] buffer = new byte[data.length * 3];
- for (int j = 0; j < data.length; j += 1) {
- buffer[j * 3 + 0] = (byte) (data[j] >> 16);
- buffer[j * 3 + 1] = (byte) (data[j] >> 8);
- buffer[j * 3 + 2] = (byte) (data[j] >> 0);
- }
- return buffer;
- }
-
- private static void printFrame(int frameCount, byte[] bytes) {
- System.out.println(STR."Frame \{frameCount}");
- }
-
- private static void printFrame(int frameCount, byte[] bytes, int frames) {
- System.out.println(STR."Frame \{frameCount} [ \{frameCount * 100 / frames}% ]");
- }
-
- private static String getFileName(String file) {
- return STR."\{System.getProperty("basedir", ".")}/\{file}";
- }
-
- private static void saveFrame(Integer frameCount, BufferedImage image, byte[] bytes) {
- copyPixelsIntoImage(bytes, image);
- writeImage(image, frameCount, getFileName(STR."test-frame-\{frameCount}.png"));
- }
-}
\ No newline at end of file
diff --git a/ffmpeg4java-linux/extract.sh b/ffmpeg4java-linux/extract.sh
index 938cc29..0b4f75b 100755
--- a/ffmpeg4java-linux/extract.sh
+++ b/ffmpeg4java-linux/extract.sh
@@ -6,7 +6,7 @@ export PATH=$PATH:${JEXTRACT_HOME}/bin
jextract @includes.txt \
--output src/main/java \
- --target-package com.nextbreakpoint.ffmpeg4java.linux \
+ --target-package com.nextbreakpoint.ffmpeg4java \
--include-dir "${FFMPEG_HOME}" \
--use-system-load-library \
--library ffmpeg4java \
diff --git a/ffmpeg4java-linux/pom.xml b/ffmpeg4java-linux/pom.xml
index 7651bf7..05a20ef 100644
--- a/ffmpeg4java-linux/pom.xml
+++ b/ffmpeg4java-linux/pom.xml
@@ -4,7 +4,7 @@
com.nextbreakpoint
com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
+ 7.0.1-1.2
com.nextbreakpoint.ffmpeg4java.linux
jar
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVBufferRef.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVBufferRef.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
index 2bc01fa..798fdec 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVBufferRef.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCPBProperties.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCPBProperties.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
index 8fa8870..93acc2f 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCPBProperties.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChannelCustom.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChannelCustom.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
index 7759821..0b26dd6 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChannelCustom.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChannelLayout.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChannelLayout.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
index 9fa3fab..0892cd3 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChannelLayout.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChapter.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChapter.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
index 1870d38..7942307 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChapter.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVClass.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVClass.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
index 763628b..ef6c19d 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVClass.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodec.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodec.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
index 773c9d4..3679060 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodec.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecContext.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecContext.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
index 705f791..97258b7 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecContext.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecDescriptor.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecDescriptor.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
index 84f1d9d..260225e 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecDescriptor.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecHWConfig.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecHWConfig.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
index 205fb3c..379dc37 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecHWConfig.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParameters.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParameters.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
index 92b3428..53324a5 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParameters.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParser.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParser.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
index 8986ce9..1da05c6 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParser.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParserContext.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParserContext.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
index 0aeb52e..adbfaa7 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecParserContext.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVComponentDescriptor.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVComponentDescriptor.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
index c0c3358..a532085 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVComponentDescriptor.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceInfo.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceInfo.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
index 37764b2..1178f5a 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceInfo.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceInfoList.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceInfoList.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
index 969cf29..a0d75dd 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceInfoList.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceRect.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceRect.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
index 277a912..4cde344 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceRect.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDictionaryEntry.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDictionaryEntry.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
index 8c16009..683cea7 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDictionaryEntry.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilter.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilter.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
index daa3af0..d79ef34 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilter.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterChain.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterChain.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
index 9f20c21..6956356 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterChain.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterContext.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterContext.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
index 3c5ac16..718ef5f 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterContext.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterFormatsConfig.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterFormatsConfig.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
index ac612c1..67bbb6c 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterFormatsConfig.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterGraph.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterGraph.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
index 95b2c69..6b49273 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterGraph.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterGraphSegment.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterGraphSegment.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
index 7d6af2f..714ad18 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterGraphSegment.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterInOut.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterInOut.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
index 3d3388b..6501b7c 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterInOut.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterLink.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterLink.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
index a98e260..34ad3ad 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterLink.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterPadParams.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
similarity index 98%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterPadParams.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
index 3055ff0..b1cd7fd 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterPadParams.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterParams.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterParams.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
index 8e0010c..010b9f0 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterParams.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFormatContext.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFormatContext.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
index 575257e..9f7b07f 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFormatContext.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFrame.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFrame.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
index 6ff33e9..3732841 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFrame.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFrameSideData.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFrameSideData.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
index 334b05b..aaf3149 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFrameSideData.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWAccel.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWAccel.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
index a7354f9..6fd8731 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWAccel.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWDeviceContext.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWDeviceContext.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
index f5858ab..516c53d 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWDeviceContext.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWFramesConstraints.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWFramesConstraints.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
index 3801dd9..6d22e25 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWFramesConstraints.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWFramesContext.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWFramesContext.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
index 607c3da..3497897 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWFramesContext.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIOContext.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIOContext.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
index cace408..4c58e98 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIOContext.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIODirEntry.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIODirEntry.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
index 17e69ad..1f00ba3 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIODirEntry.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIOInterruptCB.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIOInterruptCB.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
index 5ec83eb..a521135 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIOInterruptCB.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIndexEntry.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIndexEntry.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
index b21ad5e..d511d49 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVIndexEntry.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVInputFormat.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVInputFormat.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
index 86eb23b..f2defff 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVInputFormat.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOpenCallback.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOpenCallback.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
index cc4f5c8..643d7ea 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOpenCallback.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOption.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOption.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
index c8b9a86..c38124f 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOption.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionArrayDef.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionArrayDef.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
index 6bd5739..fcfc738 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionArrayDef.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionRange.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionRange.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
index 3583050..f30e365 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionRange.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionRanges.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionRanges.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
index d1fb657..1bef27a 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionRanges.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOutputFormat.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOutputFormat.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
index 6fe97a5..33b5c5b 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOutputFormat.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacket.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacket.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
index 1fac98b..56da977 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacket.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacketList.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacketList.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
index c36870f..2107496 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacketList.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacketSideData.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacketSideData.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
index 6d97fc5..4dc6da3 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPacketSideData.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPanScan.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPanScan.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
index 3f06651..38575f0 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPanScan.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPixFmtDescriptor.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPixFmtDescriptor.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
index c0dc053..6d60a46 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPixFmtDescriptor.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProbeData.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProbeData.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
index 8cd7037..7424394 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProbeData.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProducerReferenceTime.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProducerReferenceTime.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
index 5787765..7e9d92a 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProducerReferenceTime.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProfile.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProfile.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
index c54915e..4ed5725 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProfile.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProgram.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProgram.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
index 610b584..76ce293 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProgram.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVRational.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
similarity index 98%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVRational.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
index 8b9e84a..a3aa8b3 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVRational.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVRegionOfInterest.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVRegionOfInterest.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
index ae339a0..f9ac4e0 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVRegionOfInterest.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStream.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStream.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
index 7af3954..b577e52 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStream.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStreamGroup.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStreamGroup.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
index 5ecc8bc..a8fb7b3 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStreamGroup.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStreamGroupTileGrid.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStreamGroupTileGrid.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
index f2c59f8..88ba17b 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVStreamGroupTileGrid.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVSubtitle.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVSubtitle.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
index af69699..ddd0d65 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVSubtitle.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVSubtitleRect.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVSubtitleRect.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
index d9aff69..4d5fb00 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVSubtitleRect.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
index 5cbdfa8..47dd5f5 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg_1.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg_1.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
index cc50590..a301331 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg_1.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg_2.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg_2.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
index c956c7f..85edea7 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/Libffmpeg_2.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/RcOverride.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/RcOverride.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
index 5f131e4..c20f227 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/RcOverride.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/SwsFilter.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/SwsFilter.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
index 21b685d..e34e594 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/SwsFilter.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/SwsVector.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/SwsVector.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
index c6e7d43..3d123ff 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/SwsVector.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_create$free.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_create$free.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
index 5a41e74..77dff7c 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_create$free.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init$alloc.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init$alloc.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
index ff17609..f3725d5 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init$alloc.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init2$alloc.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init2$alloc.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
index db9f964..d829ccb 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init2$alloc.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init2$pool_free.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init2$pool_free.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
index 598d9f2..18ff37b 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init2$pool_free.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_format_control_message.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_format_control_message.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
index c59e60c..c733ac3 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_format_control_message.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_intfloat32.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
similarity index 98%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_intfloat32.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
index 6abe823..e10b45b 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_intfloat32.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_intfloat64.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
similarity index 98%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_intfloat64.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
index 51a1710..35d8cfc 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_intfloat64.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_log_set_callback$callback.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_log_set_callback$callback.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
index 57ce694..2345d41 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_log_set_callback$callback.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avcodec_default_execute$func.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avcodec_default_execute$func.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
index 68ca6b0..ea9b1f5 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avcodec_default_execute$func.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avcodec_default_execute2$func.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avcodec_default_execute2$func.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
index 5cca743..030cd52 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avcodec_default_execute2$func.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avfilter_action_func.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avfilter_action_func.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
index 5f47502..c71c86d 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avfilter_action_func.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avfilter_execute_func.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avfilter_execute_func.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
index ac56e7d..37eaf39 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avfilter_execute_func.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$read_packet.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$read_packet.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
index 9a525bb..f6132d7 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$read_packet.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$seek.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$seek.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
index 68c791f..36210b2 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$seek.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$write_packet.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$write_packet.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
index 95374ac..e873d91 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$write_packet.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/max_align_t.java b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/max_align_t.java
similarity index 98%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/max_align_t.java
rename to ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/max_align_t.java
index 47e914f..16db848 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/max_align_t.java
+++ b/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/max_align_t.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/module-info.java b/ffmpeg4java-linux/src/main/java/module-info.java
index 905e184..baed010 100644
--- a/ffmpeg4java-linux/src/main/java/module-info.java
+++ b/ffmpeg4java-linux/src/main/java/module-info.java
@@ -1,3 +1,3 @@
-module com.nextbreakpoint.ffmpeg4java.linux {
- exports com.nextbreakpoint.ffmpeg4java.linux;
+module com.nextbreakpoint.ffmpeg4java {
+ exports com.nextbreakpoint.ffmpeg4java;
}
\ No newline at end of file
diff --git a/ffmpeg4java-macos-examples/pom.xml b/ffmpeg4java-macos-examples/pom.xml
deleted file mode 100644
index 4100d7d..0000000
--- a/ffmpeg4java-macos-examples/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
- 4.0.0
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
-
- com.nextbreakpoint.ffmpeg4java.macos.examples
- jar
- FFmpeg4Java MacOS Examples
- FFmpeg4Java provides a Java wrapper of FFmpeg library
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.macos
- ${project.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-lib
- test-compile
-
- unpack
-
-
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.macos
- x86_64
- jar
- true
- ${project.build.directory}/lib
-
-
- **/*.dylib
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
-
- run
- test
-
- exec
-
-
- java
-
- --enable-preview
- --enable-native-access=ALL-UNNAMED
- -classpath
-
- -Djava.library.path=${project.build.directory}/lib
- com.nextbreakpoint.ffmpeg4java.macos.ConvertVideoMain
- sample.mpg
- output.mp4
-
-
-
-
-
-
-
-
diff --git a/ffmpeg4java-macos-examples/sample.mpg b/ffmpeg4java-macos-examples/sample.mpg
deleted file mode 100644
index 6e166a8..0000000
Binary files a/ffmpeg4java-macos-examples/sample.mpg and /dev/null differ
diff --git a/ffmpeg4java-macos-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/ConvertVideoMain.java b/ffmpeg4java-macos-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/ConvertVideoMain.java
deleted file mode 100644
index 13793b3..0000000
--- a/ffmpeg4java-macos-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/ConvertVideoMain.java
+++ /dev/null
@@ -1,459 +0,0 @@
-package com.nextbreakpoint.ffmpeg4java.macos;
-
-import java.lang.foreign.Arena;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.ValueLayout;
-
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_alloc_context3;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_close;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_open2;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_parameters_from_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_parameters_to_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_receive_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_receive_packet;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_send_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_send_packet;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.sws_freeContext;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.sws_getCachedContext;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.sws_scale;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.AV_CODEC_ID_NONE;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_dump_format;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_frame_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_guess_format;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_packet_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_packet_rescale_ts;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_packet_unref;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_read_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_stream_new_side_data;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_write_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_write_trailer;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avcodec_find_decoder;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avcodec_find_encoder;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avcodec_parameters_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_alloc_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_close_input;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_find_stream_info;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_free_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_new_stream;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_open_input;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_write_header;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avio_close;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avio_open2;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AVIO_FLAG_WRITE;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AV_PIX_FMT_RGB24;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AV_PIX_FMT_YUV420P;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.C_POINTER;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.SWS_BILINEAR;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_free;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_image_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_image_fill_arrays;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_image_get_buffer_size;
-import static java.lang.foreign.MemorySegment.NULL;
-
-class ConvertVideoMain {
- public static void main(String[] args) {
- if (args.length < 2) {
- throw new IllegalArgumentException("Invalid arguments");
- }
-
- final String sourceFileName = args[0];
- final String outputFileName = args[1];
-
- System.out.println("Converting video...");
-
- System.out.println(STR."Source file \{sourceFileName}");
- System.out.println(STR."Output file \{outputFileName}");
-
- try (var arena = Arena.ofConfined()) {
- var pInputFileName = arena.allocateFrom(sourceFileName);
- var pOutputFileName = arena.allocateFrom(outputFileName);
-
- var ppInputFormatCtx = NULL;
- var pInputCodecCtx = NULL;
- var pInputSwsContext = NULL;
- var pInputRGBFrame = NULL;
- var pInputTMPFrame = NULL;
- var pInputRGBBuffer = NULL;
- var pInputPacket = NULL;
- var pOutputFormatCtx = NULL;
- var pOutputCodecCtx = NULL;
- var pOutputAVIOCtx = NULL;
- var pOutputSwsContext = NULL;
- var pOutputRGBFrame = NULL;
- var pOutputYUVFrame = NULL;
- var pOutputRGBBuffer = NULL;
- var pOutputYUVBuffer = NULL;
-
- try {
- ppInputFormatCtx = arena.allocate(C_POINTER);
-
- if (avformat_open_input(ppInputFormatCtx, pInputFileName, NULL, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't open file"));
- }
-
- final var pInputFormatCtx = ppInputFormatCtx.get(C_POINTER, 0);
-
- if (avformat_find_stream_info(pInputFormatCtx, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find stream info"));
- }
-
- av_dump_format(pInputFormatCtx, 0, pInputFileName, 0);
-
- final int inputNbStreams = AVFormatContext.nb_streams(pInputFormatCtx);
- final var pInputStreams = AVFormatContext.streams(pInputFormatCtx);
-
- var pInputCodecParameters = NULL;
- int videoStreamIndex = -1;
- var pInputCodec = NULL;
-
- for (int i = 0; i < inputNbStreams; i++) {
- final var pStream = pInputStreams.getAtIndex(C_POINTER, i);
-
- final var pVideoCodecParameters = AVStream.codecpar(pStream);
-
- final var codecType = AVCodecParameters.codec_type(pVideoCodecParameters);
-
- if (codecType == AVMEDIA_TYPE_VIDEO()) {
- videoStreamIndex = i;
- pInputCodecParameters = pVideoCodecParameters;
- pInputCodec = avcodec_find_decoder(AVCodecParameters.codec_id(pVideoCodecParameters));
- break;
- }
- }
-
- if (videoStreamIndex == -1) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find video stream"));
- }
-
- if (pInputCodec.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find decoder"));
- }
-
- pInputCodecCtx = avcodec_alloc_context3(pInputCodec);
-
- if (avcodec_parameters_to_context(pInputCodecCtx, pInputCodecParameters) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't copy codec parameters"));
- }
-
- if (pInputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate codec context"));
- }
-
- if (avcodec_open2(pInputCodecCtx, pInputCodec, NULL) < 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't open decoder"));
- }
-
- final int frameWidth = AVCodecContext.width(pInputCodecCtx);
- final int frameHeight = AVCodecContext.height(pInputCodecCtx);
- final int pixelFormat = AVCodecContext.pix_fmt(pInputCodecCtx);
-
- pInputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, pixelFormat, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pInputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate scale context"));
- }
-
- pInputRGBFrame = av_frame_alloc();
- pInputTMPFrame = av_frame_alloc();
-
- if (pInputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate RGB frame"));
- }
-
- if (pInputTMPFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate TMP frame"));
- }
-
- final int inputRGBByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputRGBBuffer = arena.allocate(ValueLayout.OfByte.JAVA_BYTE, inputRGBByteSize);
-
- if (pInputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate RGB buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame), pInputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputPacket = av_packet_alloc();
-
- if (pInputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate packet"));
- }
-
- pOutputFormatCtx = avformat_alloc_context();
-
- if (pOutputFormatCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate format context"));
- }
-
- final var pOutputFormat = av_guess_format(NULL, pOutputFileName, NULL);
-
- if (pOutputFormat.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate output format"));
- }
-
- if (AVOutputFormat.video_codec(pOutputFormat) == AV_CODEC_ID_NONE()) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Video codec not found"));
- }
-
- AVFormatContext.oformat(pOutputFormatCtx, pOutputFormat);
-
- final var pOutputCodec = avcodec_find_encoder(AVOutputFormat.video_codec(pOutputFormat));
-
- if (pOutputCodec.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't find encoder"));
- }
-
- pOutputCodecCtx = avcodec_alloc_context3(pOutputCodec);
-
- if (pOutputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate codec context"));
- }
-
- final var pTimeBase = arena.allocate(AVRational.layout());
- AVRational.num(pTimeBase, 1);
- AVRational.den(pTimeBase, 24);
-
- AVCodecContext.codec_id(pOutputCodecCtx, AVOutputFormat.video_codec(pOutputFormat));
- AVCodecContext.codec_type(pOutputCodecCtx, AVMEDIA_TYPE_VIDEO());
- AVCodecContext.width(pOutputCodecCtx, frameWidth);
- AVCodecContext.height(pOutputCodecCtx, frameHeight);
- AVCodecContext.pix_fmt(pOutputCodecCtx, AV_PIX_FMT_YUV420P());
- AVCodecContext.time_base(pOutputCodecCtx, pTimeBase);
- AVCodecContext.gop_size(pOutputCodecCtx, 4);
- AVCodecContext.bit_rate(pOutputCodecCtx, 4096);
- AVCodecContext.max_b_frames(pOutputCodecCtx, 2);
-
- final var pOutputStream = avformat_new_stream(pOutputFormatCtx, pOutputCodec);
-
- if (pOutputStream.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't create stream"));
- }
-
- if (AVFormatContext.nb_streams(pOutputFormatCtx) != 1) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Unexpected number of streams"));
- }
-
- final var pOutputCodecParameters = avcodec_parameters_alloc();
-
- if (pOutputCodecParameters.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate codec parameters"));
- }
-
- if (avcodec_parameters_from_context(pOutputCodecParameters, pOutputCodecCtx) != 0) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't copy codec parameters"));
- }
-
- AVCodecParameters.codec_id(pOutputCodecParameters, AVOutputFormat.video_codec(pOutputFormat));
- AVCodecParameters.codec_type(pOutputCodecParameters, AVMEDIA_TYPE_VIDEO());
- AVCodecParameters.width(pOutputCodecParameters, frameWidth);
- AVCodecParameters.height(pOutputCodecParameters, frameHeight);
- AVStream.codecpar(pOutputStream, pOutputCodecParameters);
- AVStream.time_base(pOutputStream, pTimeBase);
-
- final var pOutputProperties = av_stream_new_side_data(pOutputStream, AV_PKT_DATA_CPB_PROPERTIES(), AVCPBProperties.sizeof());
- AVCPBProperties.buffer_size(pOutputProperties, frameWidth * frameHeight * 3L * 2L);
-
- if (avcodec_open2(pOutputCodecCtx, pOutputCodec, NULL) != 0) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't open encoder"));
- }
-
- final var ppOutputAVIOCtx = arena.allocate(C_POINTER);
-
- if (avio_open2(ppOutputAVIOCtx, pOutputFileName, AVIO_FLAG_WRITE(), NULL, NULL) < 0) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't open file"));
- }
-
- pOutputAVIOCtx = ppOutputAVIOCtx.get(C_POINTER, 0);
-
- if (pOutputAVIOCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate IO context"));
- }
-
- AVFormatContext.pb(pOutputFormatCtx, pOutputAVIOCtx);
-
- pOutputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pOutputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate scale context"));
- }
-
- pOutputRGBFrame = av_frame_alloc();
- pOutputYUVFrame = av_frame_alloc();
-
- if (pOutputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate RGB frame"));
- }
-
- if (pOutputYUVFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate YUV frame"));
- }
-
- AVFrame.width(pOutputRGBFrame, frameWidth);
- AVFrame.height(pOutputRGBFrame, frameHeight);
- AVFrame.format(pOutputRGBFrame, AV_PIX_FMT_RGB24());
- AVFrame.width(pOutputYUVFrame, frameWidth);
- AVFrame.height(pOutputYUVFrame, frameHeight);
- AVFrame.format(pOutputYUVFrame, AV_PIX_FMT_YUV420P());
-
- av_image_alloc(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), frameWidth, frameHeight, AV_PIX_FMT_RGB24(), 1);
- av_image_alloc(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), 1);
-
- final int outputRGBByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- final int outputYUVByteSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- pOutputRGBBuffer = arena.allocate(outputRGBByteSize);
- pOutputYUVBuffer = arena.allocate(outputYUVByteSize);
-
- if (pOutputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate RGB buffer"));
- }
-
- if (pOutputYUVBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate YUV buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), pOutputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- av_image_fill_arrays(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), pOutputYUVBuffer, AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- final var pOutputPacket = av_packet_alloc();
-
- if (pOutputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate packet"));
- }
-
- AVPacket.stream_index(pOutputPacket, AVStream.index(pOutputStream));
-
- if (inputRGBByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Unexpected buffer size"));
- }
-
- if (outputRGBByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Unexpected buffer size"));
- }
-
- final byte[] buffer = new byte[outputRGBByteSize];
-
- avformat_write_header(pOutputFormatCtx, NULL);
-
- while (av_read_frame(pInputFormatCtx, pInputPacket) == 0) {
- if (AVPacket.stream_index(pInputPacket) == videoStreamIndex) {
- if (avcodec_send_packet(pInputCodecCtx, pInputPacket) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, inputRGBByteSize);
-
- final var pOutputData = AVFrame.data(pOutputRGBFrame);
- MemorySegment.copy(MemorySegment.ofArray(buffer), 0, pOutputData.get(C_POINTER, 0), 0, outputRGBByteSize);
-
- sws_scale(pOutputSwsContext, AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), 0, frameHeight, AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame));
-
- if (avcodec_send_frame(pOutputCodecCtx, pOutputYUVFrame) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
- }
- }
- }
- }
-
- if (avcodec_send_packet(pInputCodecCtx, NULL) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, inputRGBByteSize);
-
- final var pOutputData = AVFrame.data(pOutputRGBFrame);
- MemorySegment.copy(MemorySegment.ofArray(buffer), 0, pOutputData.get(C_POINTER, 0), 0, outputRGBByteSize);
-
- sws_scale(pOutputSwsContext, AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), 0, frameHeight, AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame));
-
- if (avcodec_send_frame(pOutputCodecCtx, pOutputYUVFrame) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
- }
- }
-
- if (avcodec_send_frame(pOutputCodecCtx, NULL) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
-
- av_write_trailer(pOutputFormatCtx);
- } finally {
- if (!pInputPacket.equals(NULL)) {
- av_packet_unref(pInputPacket);
- }
-
- if (!pInputCodecCtx.equals(NULL)) {
- avcodec_close(pInputCodecCtx);
- }
-
- if (!pInputSwsContext.equals(NULL)) {
- sws_freeContext(pInputSwsContext);
- }
-
- if (!pInputTMPFrame.equals(NULL)) {
- av_free(pInputTMPFrame);
- }
-
- if (!pInputRGBFrame.equals(NULL)) {
- av_free(pInputRGBFrame);
- }
-
- if (!ppInputFormatCtx.equals(NULL)) {
- avformat_close_input(ppInputFormatCtx);
- }
-
- if (!pOutputAVIOCtx.equals(NULL)) {
- avio_close(pOutputAVIOCtx);
- }
-
- if (!pOutputCodecCtx.equals(NULL)) {
- avcodec_close(pOutputCodecCtx);
- }
-
- if (!pOutputSwsContext.equals(NULL)) {
- sws_freeContext(pOutputSwsContext);
- }
-
- if (!pOutputYUVFrame.equals(NULL)) {
- av_free(pOutputYUVFrame);
- }
-
- if (!pOutputRGBFrame.equals(NULL)) {
- av_free(pOutputRGBFrame);
- }
-
- if (!pOutputFormatCtx.equals(NULL)) {
- avformat_free_context(pOutputFormatCtx);
- }
- }
-
- System.out.println("Video converted");
- }
- }
-
- private static String formatLoadVideoError(String fileName, String message) {
- return STR."Decode video error (file = \{fileName}). \{message}";
- }
-
- private static String formatSaveVideoError(String fileName, String message) {
- return STR."Encode video error (file = \{fileName}). \{message}";
- }
-}
\ No newline at end of file
diff --git a/ffmpeg4java-macos-test/fixture-frame-10.png b/ffmpeg4java-macos-test/fixture-frame-10.png
deleted file mode 100644
index afa1bab..0000000
Binary files a/ffmpeg4java-macos-test/fixture-frame-10.png and /dev/null differ
diff --git a/ffmpeg4java-macos-test/fixture-frame-20.png b/ffmpeg4java-macos-test/fixture-frame-20.png
deleted file mode 100644
index ed6c116..0000000
Binary files a/ffmpeg4java-macos-test/fixture-frame-20.png and /dev/null differ
diff --git a/ffmpeg4java-macos-test/fixture-frame-30.png b/ffmpeg4java-macos-test/fixture-frame-30.png
deleted file mode 100644
index bcd577d..0000000
Binary files a/ffmpeg4java-macos-test/fixture-frame-30.png and /dev/null differ
diff --git a/ffmpeg4java-macos-test/fixture-frame-40.png b/ffmpeg4java-macos-test/fixture-frame-40.png
deleted file mode 100644
index 3017212..0000000
Binary files a/ffmpeg4java-macos-test/fixture-frame-40.png and /dev/null differ
diff --git a/ffmpeg4java-macos-test/fixture-video-48.mpg b/ffmpeg4java-macos-test/fixture-video-48.mpg
deleted file mode 100644
index b331d1c..0000000
Binary files a/ffmpeg4java-macos-test/fixture-video-48.mpg and /dev/null differ
diff --git a/ffmpeg4java-macos-test/pom.xml b/ffmpeg4java-macos-test/pom.xml
deleted file mode 100644
index bcafc44..0000000
--- a/ffmpeg4java-macos-test/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
- 4.0.0
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
-
- com.nextbreakpoint.ffmpeg4java.macos.test
- jar
- FFmpeg4Java MacOS Test
- FFmpeg4Java provides a Java wrapper of FFmpeg library
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.macos
- ${project.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-lib
- test-compile
-
- unpack
-
-
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.macos
- x86_64
- jar
- true
- ${project.build.directory}/lib
-
-
- **/*.dylib
-
-
-
-
-
-
-
diff --git a/ffmpeg4java-macos/extract.sh b/ffmpeg4java-macos/extract.sh
index 50fe87b..0b4f75b 100755
--- a/ffmpeg4java-macos/extract.sh
+++ b/ffmpeg4java-macos/extract.sh
@@ -6,7 +6,7 @@ export PATH=$PATH:${JEXTRACT_HOME}/bin
jextract @includes.txt \
--output src/main/java \
- --target-package com.nextbreakpoint.ffmpeg4java.macos \
+ --target-package com.nextbreakpoint.ffmpeg4java \
--include-dir "${FFMPEG_HOME}" \
--use-system-load-library \
--library ffmpeg4java \
diff --git a/ffmpeg4java-macos/pom.xml b/ffmpeg4java-macos/pom.xml
index 58d7090..bb9ff64 100644
--- a/ffmpeg4java-macos/pom.xml
+++ b/ffmpeg4java-macos/pom.xml
@@ -4,7 +4,7 @@
com.nextbreakpoint
com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
+ 7.0.1-1.2
com.nextbreakpoint.ffmpeg4java.macos
jar
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVBufferRef.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVBufferRef.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
index 519a915..798fdec 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVBufferRef.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCPBProperties.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCPBProperties.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
index a3c5b42..7daf5eb 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCPBProperties.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChannelCustom.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChannelCustom.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
index ed4741d..0b26dd6 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVChannelCustom.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChannelLayout.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChannelLayout.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
index 023deec..b033af9 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChannelLayout.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChapter.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChapter.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
index e3e9fd5..d4f10e0 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVChapter.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVClass.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVClass.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
index 3f06399..ef6c19d 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVClass.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodec.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodec.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
index ad8d168..3679060 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodec.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecContext.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecContext.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
index a2b3a41..5d3efce 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecContext.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecDescriptor.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecDescriptor.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
index 8c77062..260225e 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecDescriptor.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecHWConfig.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecHWConfig.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
index ec702de..379dc37 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVCodecHWConfig.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParameters.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParameters.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
index 5c6b77a..c51b4a0 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParameters.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParser.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParser.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
index a7200b2..1da05c6 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParser.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParserContext.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParserContext.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
index 3a60961..29f8729 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVCodecParserContext.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVComponentDescriptor.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVComponentDescriptor.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
index 219d7fa..a532085 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVComponentDescriptor.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceInfo.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceInfo.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
index b341c29..1178f5a 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceInfo.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceInfoList.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceInfoList.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
index 56c7f19..a0d75dd 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVDeviceInfoList.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceRect.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceRect.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
index 5086e46..4cde344 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDeviceRect.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDictionaryEntry.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDictionaryEntry.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
index c7ed97d..683cea7 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVDictionaryEntry.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilter.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilter.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
index 281a5f9..d79ef34 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilter.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterChain.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterChain.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
index 28d1dfe..6956356 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterChain.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterContext.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterContext.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
index a6231d1..718ef5f 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterContext.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterFormatsConfig.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterFormatsConfig.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
index 0c8d93d..67bbb6c 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterFormatsConfig.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterGraph.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterGraph.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
index fa188e7..6b49273 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterGraph.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterGraphSegment.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterGraphSegment.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
index 8d6f4c9..714ad18 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterGraphSegment.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterInOut.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterInOut.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
index 3659f80..6501b7c 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFilterInOut.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterLink.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterLink.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
index 895a183..1fa3a85 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterLink.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterPadParams.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
similarity index 98%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterPadParams.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
index 8780296..b1cd7fd 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterPadParams.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterParams.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterParams.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
index 528c386..010b9f0 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFilterParams.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFormatContext.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFormatContext.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
index 63b4c6d..2a0e983 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFormatContext.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFrame.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFrame.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
index 5009f43..4073c09 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVFrame.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFrameSideData.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFrameSideData.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
index 99fa7c7..aaf3149 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVFrameSideData.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWAccel.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWAccel.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
index bb03155..6fd8731 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWAccel.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWDeviceContext.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWDeviceContext.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
index 27fd7b1..516c53d 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWDeviceContext.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWFramesConstraints.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWFramesConstraints.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
index 87af5d0..6d22e25 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVHWFramesConstraints.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWFramesContext.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWFramesContext.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
index 49f350c..3497897 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVHWFramesContext.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIOContext.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIOContext.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
index 343d59e..184b5fb 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIOContext.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIODirEntry.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIODirEntry.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
index 688c507..e64a08e 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIODirEntry.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIOInterruptCB.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIOInterruptCB.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
index 32ec6d9..a521135 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIOInterruptCB.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIndexEntry.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIndexEntry.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
index d6cb70a..fda9437 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVIndexEntry.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVInputFormat.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVInputFormat.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
index 1fa18d0..f2defff 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVInputFormat.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOpenCallback.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOpenCallback.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
index a59d3e4..643d7ea 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOpenCallback.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOption.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOption.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
index f34965b..135b7c0 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOption.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionArrayDef.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionArrayDef.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
index 93ca0f5..fcfc738 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVOptionArrayDef.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionRange.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionRange.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
index aad3968..f30e365 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionRange.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionRanges.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionRanges.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
index d947d0f..1bef27a 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOptionRanges.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOutputFormat.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOutputFormat.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
index ff0efc1..33b5c5b 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVOutputFormat.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacket.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacket.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
index 790ffd5..e80349a 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacket.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacketList.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacketList.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
index 67735c0..2107496 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacketList.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacketSideData.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacketSideData.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
index 8130f21..4dc6da3 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPacketSideData.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPanScan.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPanScan.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
index 891353d..38575f0 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVPanScan.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPixFmtDescriptor.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPixFmtDescriptor.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
index 92c5095..114be23 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVPixFmtDescriptor.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProbeData.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProbeData.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
index bc95abf..7424394 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVProbeData.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProducerReferenceTime.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProducerReferenceTime.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
index 6ef7481..eb9b61e 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProducerReferenceTime.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProfile.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProfile.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
index e52f029..4ed5725 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProfile.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProgram.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProgram.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
index 9f60122..d8d3b76 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVProgram.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVRational.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
similarity index 98%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVRational.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
index 76a242d..a3aa8b3 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVRational.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVRegionOfInterest.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVRegionOfInterest.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
index 81c162a..f9ac4e0 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/AVRegionOfInterest.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStream.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStream.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
index 191a20c..bacf319 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStream.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStreamGroup.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStreamGroup.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
index 966fb0c..670851a 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStreamGroup.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStreamGroupTileGrid.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStreamGroupTileGrid.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
index 953794b..88ba17b 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVStreamGroupTileGrid.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVSubtitle.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVSubtitle.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
index 588d10b..de2c6f0 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVSubtitle.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVSubtitleRect.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVSubtitleRect.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
index 86fc073..4d5fb00 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/AVSubtitleRect.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
index 79c543c..7c55b7c 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg_1.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg_1.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
index d1b6b04..891241b 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg_1.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg_2.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg_2.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
index e8b6c05..bf8a5ea 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/Libffmpeg_2.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/RcOverride.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/RcOverride.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
index ad8a1ee..c20f227 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/RcOverride.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/SwsFilter.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/SwsFilter.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
index 56a07ed..e34e594 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/SwsFilter.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/SwsVector.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
similarity index 99%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/SwsVector.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
index 5cca146..3d123ff 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/SwsVector.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_create$free.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_create$free.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
index c4e1b2f..77dff7c 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_create$free.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init$alloc.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init$alloc.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
index 2d7d8d5..f3725d5 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_buffer_pool_init$alloc.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init2$alloc.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init2$alloc.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
index c7aa86f..d829ccb 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init2$alloc.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init2$pool_free.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init2$pool_free.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
index 325c697..18ff37b 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_buffer_pool_init2$pool_free.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_format_control_message.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
similarity index 99%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_format_control_message.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
index de585b5..c733ac3 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_format_control_message.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_intfloat32.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
similarity index 98%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_intfloat32.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
index 151abd8..e10b45b 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/av_intfloat32.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_intfloat64.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
similarity index 98%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_intfloat64.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
index c0c080a..5c9c235 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_intfloat64.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_log_set_callback$callback.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_log_set_callback$callback.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
index c0a21d2..2345d41 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/av_log_set_callback$callback.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avcodec_default_execute$func.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avcodec_default_execute$func.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
index b6dcd11..ea9b1f5 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avcodec_default_execute$func.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avcodec_default_execute2$func.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avcodec_default_execute2$func.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
index 19563f2..030cd52 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avcodec_default_execute2$func.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avfilter_action_func.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avfilter_action_func.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
index 3ec1b31..c71c86d 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avfilter_action_func.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avfilter_execute_func.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avfilter_execute_func.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
index 441a069..37eaf39 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avfilter_execute_func.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$read_packet.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$read_packet.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
index e4aaeb5..f6132d7 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$read_packet.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$seek.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
similarity index 97%
rename from ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$seek.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
index 9df6865..25aea59 100644
--- a/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/macos/avio_alloc_context$seek.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$write_packet.java b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
similarity index 97%
rename from ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$write_packet.java
rename to ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
index 86528ff..e873d91 100644
--- a/ffmpeg4java-linux/src/main/java/com/nextbreakpoint/ffmpeg4java/linux/avio_alloc_context$write_packet.java
+++ b/ffmpeg4java-macos/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.linux;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-macos/src/main/java/module-info.java b/ffmpeg4java-macos/src/main/java/module-info.java
index bd8f98b..baed010 100644
--- a/ffmpeg4java-macos/src/main/java/module-info.java
+++ b/ffmpeg4java-macos/src/main/java/module-info.java
@@ -1,3 +1,3 @@
-module com.nextbreakpoint.ffmpeg4java.macos {
- exports com.nextbreakpoint.ffmpeg4java.macos;
+module com.nextbreakpoint.ffmpeg4java {
+ exports com.nextbreakpoint.ffmpeg4java;
}
\ No newline at end of file
diff --git a/ffmpeg4java-linux-test/fixture-frame-10.png b/ffmpeg4java-tests/fixture-frame-10.png
similarity index 100%
rename from ffmpeg4java-linux-test/fixture-frame-10.png
rename to ffmpeg4java-tests/fixture-frame-10.png
diff --git a/ffmpeg4java-linux-test/fixture-frame-20.png b/ffmpeg4java-tests/fixture-frame-20.png
similarity index 100%
rename from ffmpeg4java-linux-test/fixture-frame-20.png
rename to ffmpeg4java-tests/fixture-frame-20.png
diff --git a/ffmpeg4java-linux-test/fixture-frame-30.png b/ffmpeg4java-tests/fixture-frame-30.png
similarity index 100%
rename from ffmpeg4java-linux-test/fixture-frame-30.png
rename to ffmpeg4java-tests/fixture-frame-30.png
diff --git a/ffmpeg4java-linux-test/fixture-frame-40.png b/ffmpeg4java-tests/fixture-frame-40.png
similarity index 100%
rename from ffmpeg4java-linux-test/fixture-frame-40.png
rename to ffmpeg4java-tests/fixture-frame-40.png
diff --git a/ffmpeg4java-linux-test/fixture-video-48.mpg b/ffmpeg4java-tests/fixture-video-48.mpg
similarity index 100%
rename from ffmpeg4java-linux-test/fixture-video-48.mpg
rename to ffmpeg4java-tests/fixture-video-48.mpg
diff --git a/ffmpeg4java-tests/pom.xml b/ffmpeg4java-tests/pom.xml
new file mode 100644
index 0000000..570870f
--- /dev/null
+++ b/ffmpeg4java-tests/pom.xml
@@ -0,0 +1,147 @@
+
+ 4.0.0
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java
+ 7.0.1-1.2
+
+ com.nextbreakpoint.ffmpeg4java.tests
+ jar
+ FFmpeg4Java Tests
+ FFmpeg4Java provides a Java wrapper of FFmpeg library
+
+
+ macos
+
+ x86_64
+ macos
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.macos
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-lib
+ test-compile
+
+ unpack
+
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.macos
+ x86_64
+ jar
+ true
+ ${project.build.directory}/lib
+
+
+ **/*.dylib
+
+
+
+
+
+
+
+
+ linux
+
+ x86_64
+ linux
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.linux
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-lib
+ test-compile
+
+ unpack
+
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.linux
+ x86_64
+ jar
+ true
+ ${project.build.directory}/lib
+
+
+ **/*.so
+
+
+
+
+
+
+
+
+ windows
+
+ x86_64
+ windows
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.windows
+ ${project.version}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-lib
+ test-compile
+
+ unpack
+
+
+
+
+ com.nextbreakpoint
+ com.nextbreakpoint.ffmpeg4java.windows
+ x86_64
+ jar
+ true
+ ${project.build.directory}/lib
+
+
+ **/*.dll
+
+
+
+
+
+
+
+
+
diff --git a/ffmpeg4java-macos-test/src/test/java/com/nextbreakpoint/ffmpeg4java/macos/FFmpeg4JavaTest.java b/ffmpeg4java-tests/src/test/java/com/nextbreakpoint/ffmpeg4java/FFmpeg4JavaTest.java
similarity index 73%
rename from ffmpeg4java-macos-test/src/test/java/com/nextbreakpoint/ffmpeg4java/macos/FFmpeg4JavaTest.java
rename to ffmpeg4java-tests/src/test/java/com/nextbreakpoint/ffmpeg4java/FFmpeg4JavaTest.java
index 458400d..00048c1 100644
--- a/ffmpeg4java-macos-test/src/test/java/com/nextbreakpoint/ffmpeg4java/macos/FFmpeg4JavaTest.java
+++ b/ffmpeg4java-tests/src/test/java/com/nextbreakpoint/ffmpeg4java/FFmpeg4JavaTest.java
@@ -1,4 +1,4 @@
-package com.nextbreakpoint.ffmpeg4java.macos;
+package com.nextbreakpoint.ffmpeg4java;
import org.assertj.core.data.Offset;
import org.junit.jupiter.api.Test;
@@ -14,52 +14,52 @@
import java.lang.foreign.ValueLayout;
import java.util.function.BiConsumer;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_alloc_context3;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_close;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_open2;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_parameters_from_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_parameters_to_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_receive_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_receive_packet;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_send_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.avcodec_send_packet;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.sws_freeContext;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.sws_getCachedContext;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg.sws_scale;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.AV_CODEC_ID_NONE;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_dump_format;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_frame_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_guess_format;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_packet_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_packet_rescale_ts;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_packet_unref;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_read_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_stream_new_side_data;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_write_frame;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.av_write_trailer;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avcodec_find_decoder;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avcodec_find_encoder;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avcodec_parameters_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_alloc_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_close_input;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_find_stream_info;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_free_context;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_new_stream;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_open_input;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avformat_write_header;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avio_close;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_1.avio_open2;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AVIO_FLAG_WRITE;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AV_PIX_FMT_RGB24;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.AV_PIX_FMT_YUV420P;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.C_POINTER;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.SWS_BILINEAR;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_free;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_image_alloc;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_image_fill_arrays;
-import static com.nextbreakpoint.ffmpeg4java.macos.Libffmpeg_2.av_image_get_buffer_size;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_alloc_context3;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_close;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_open2;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_parameters_from_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_parameters_to_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_receive_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_receive_packet;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_send_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.avcodec_send_packet;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.sws_freeContext;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.sws_getCachedContext;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg.sws_scale;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.AV_CODEC_ID_NONE;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_dump_format;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_frame_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_guess_format;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_packet_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_packet_rescale_ts;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_packet_unref;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_read_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_stream_new_side_data;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_write_frame;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.av_write_trailer;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avcodec_find_decoder;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avcodec_find_encoder;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avcodec_parameters_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_alloc_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_close_input;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_find_stream_info;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_free_context;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_new_stream;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_open_input;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avformat_write_header;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avio_close;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_1.avio_open2;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AVIO_FLAG_WRITE;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AV_PIX_FMT_RGB24;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.AV_PIX_FMT_YUV420P;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.C_POINTER;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.SWS_BILINEAR;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_free;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_image_alloc;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_image_fill_arrays;
+import static com.nextbreakpoint.ffmpeg4java.Libffmpeg_2.av_image_get_buffer_size;
import static java.lang.foreign.MemorySegment.NULL;
import static org.assertj.core.api.Assertions.assertThat;
@@ -125,13 +125,13 @@ private static int loadVideo(String fileName, BiConsumer consum
final var pInputFileName = arena.allocateFrom(fileName);
if (avformat_open_input(ppInputFormatCtx, pInputFileName, NULL, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't open file"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't open file"));
}
final var pInputFormatCtx = ppInputFormatCtx.get(C_POINTER, 0);
if (avformat_find_stream_info(pInputFormatCtx, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find stream info"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't find stream info"));
}
av_dump_format(pInputFormatCtx, 0, pInputFileName, 0);
@@ -159,25 +159,25 @@ private static int loadVideo(String fileName, BiConsumer consum
}
if (videoStreamIndex == -1) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find video stream"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't find video stream"));
}
if (pInputCodec.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find decoder"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't find decoder"));
}
pInputCodecCtx = avcodec_alloc_context3(pInputCodec);
if (avcodec_parameters_to_context(pInputCodecCtx, pInputCodecParameters) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't copy codec parameters"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't copy codec parameters"));
}
if (pInputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate codec context"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate codec context"));
}
if (avcodec_open2(pInputCodecCtx, pInputCodec, NULL) < 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't open decoder"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't open decoder"));
}
final int frameWidth = AVCodecContext.width(pInputCodecCtx);
@@ -187,18 +187,18 @@ private static int loadVideo(String fileName, BiConsumer consum
pInputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, pixelFormat, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), SWS_BILINEAR(), NULL, NULL, NULL);
if (pInputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate scale context"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate scale context"));
}
pInputRGBFrame = av_frame_alloc();
pInputTMPFrame = av_frame_alloc();
if (pInputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB frame"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate RGB frame"));
}
if (pInputTMPFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate TMP frame"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate TMP frame"));
}
final int rgbByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
@@ -206,7 +206,7 @@ private static int loadVideo(String fileName, BiConsumer consum
pInputRGBBuffer = arena.allocate(ValueLayout.OfByte.JAVA_BYTE, rgbByteSize);
if (pInputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB buffer"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate RGB buffer"));
}
av_image_fill_arrays(AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame), pInputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
@@ -214,11 +214,11 @@ private static int loadVideo(String fileName, BiConsumer consum
pInputPacket = av_packet_alloc();
if (pInputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate packet"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate packet"));
}
if (rgbByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Unexpected buffer size"));
+ throw new RuntimeException(decodeVideoError(fileName, "Unexpected buffer size"));
}
final byte[] buffer = new byte[rgbByteSize];
@@ -294,7 +294,7 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
pOutputFormatCtx = avformat_alloc_context();
if (pOutputFormatCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate format context"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't allocate format context"));
}
final var pOutputFileName = arena.allocateFrom(fileName);
@@ -302,13 +302,13 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
final var pOutputFormat = av_guess_format(NULL, pOutputFileName, NULL);
if (pOutputFormat.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate output format"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't allocate output format"));
}
final int outputVideoCodec = AVOutputFormat.video_codec(pOutputFormat);
if (outputVideoCodec == AV_CODEC_ID_NONE()) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Video codec not found"));
+ throw new RuntimeException(encodeVideoError(fileName, "Video codec not found"));
}
AVFormatContext.oformat(pOutputFormatCtx, pOutputFormat);
@@ -316,13 +316,13 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
final var pOutputCodec = avcodec_find_encoder(outputVideoCodec);
if (pOutputCodec.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't find encoder"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't find encoder"));
}
pOutputCodecCtx = avcodec_alloc_context3(pOutputCodec);
if (pOutputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate codec context"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't allocate codec context"));
}
final var pTimeBase = arena.allocate(AVRational.layout());
@@ -342,21 +342,21 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
final var pOutputStream = avformat_new_stream(pOutputFormatCtx, pOutputCodec);
if (pOutputStream.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't create stream"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't create stream"));
}
if (AVFormatContext.nb_streams(pOutputFormatCtx) != 1) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Unexpected number of streams"));
+ throw new RuntimeException(encodeVideoError(fileName, "Unexpected number of streams"));
}
final var pOutputCodecParameters = avcodec_parameters_alloc();
if (pOutputCodecParameters.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate codec parameters"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't allocate codec parameters"));
}
if (avcodec_parameters_from_context(pOutputCodecParameters, pOutputCodecCtx) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't copy codec parameters"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't copy codec parameters"));
}
AVCodecParameters.codec_id(pOutputCodecParameters, outputVideoCodec);
@@ -370,19 +370,19 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
AVCPBProperties.buffer_size(pOutputProperties, frameWidth * frameHeight * 3L * 2L);
if (avcodec_open2(pOutputCodecCtx, pOutputCodec, NULL) != 0) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't open encoder"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't open encoder"));
}
final var ppOutputAVIOCtx = arena.allocate(C_POINTER);
if (avio_open2(ppOutputAVIOCtx, pOutputFileName, AVIO_FLAG_WRITE(), NULL, NULL) < 0) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't open file"));
+ throw new RuntimeException(encodeVideoError(fileName, "Can't open file"));
}
pOutputAVIOCtx = ppOutputAVIOCtx.get(C_POINTER, 0);
if (pOutputAVIOCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate IO context"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate IO context"));
}
AVFormatContext.pb(pOutputFormatCtx, pOutputAVIOCtx);
@@ -390,18 +390,18 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
pOutputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), SWS_BILINEAR(), NULL, NULL, NULL);
if (pOutputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate scale context"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate scale context"));
}
pOutputRGBFrame = av_frame_alloc();
pOutputYUVFrame = av_frame_alloc();
if (pOutputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB frame"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate RGB frame"));
}
if (pOutputYUVFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate YUV frame"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate YUV frame"));
}
AVFrame.width(pOutputRGBFrame, frameWidth);
@@ -421,11 +421,11 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
pOutputYUVBuffer = arena.allocate(yuvByteSize);
if (pOutputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB buffer"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate RGB buffer"));
}
if (pOutputYUVBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate YUV buffer"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate YUV buffer"));
}
av_image_fill_arrays(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), pOutputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
@@ -434,13 +434,13 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
final var pOutputPacket = av_packet_alloc();
if (pOutputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate packet"));
+ throw new RuntimeException(decodeVideoError(fileName, "Can't allocate packet"));
}
AVPacket.stream_index(pOutputPacket, AVStream.index(pOutputStream));
if (rgbByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Unexpected buffer size"));
+ throw new RuntimeException(decodeVideoError(fileName, "Unexpected buffer size"));
}
final byte[] buffer = new byte[rgbByteSize];
@@ -504,14 +504,6 @@ private static int saveVideo(String fileName, int fps, int frames, int frameWidt
return frameCount;
}
- private static String formatLoadVideoError(String fileName, String message) {
- return STR."Load video failed (file = \{fileName}). \{message}";
- }
-
- private static String formatSaveVideoError(String fileName, String message) {
- return STR."Save video failed (file = \{fileName}). \{message}";
- }
-
private static void fillPixels(byte[] data, int width, int height, float color) {
byte p = (byte) (255 * color);
for (int x = 0; x < width; x += 1) {
@@ -576,19 +568,27 @@ private static byte[] convertFormat(int[] data) {
}
private static void printFrame(int frameCount, byte[] bytes) {
- System.out.println(STR."Frame \{frameCount}");
+ System.out.printf("Frame %d%n", frameCount);
}
private static void printFrame(int frameCount, byte[] bytes, int frames) {
- System.out.println(STR."Frame \{frameCount} [ \{frameCount * 100 / frames}% ]");
+ System.out.printf("Frame %d [ %d%% ]%n", frameCount, frameCount * 100 / frames);
+ }
+
+ private static String decodeVideoError(String fileName, String message) {
+ return "Load video failed (file = %s). %s".formatted(fileName, message);
+ }
+
+ private static String encodeVideoError(String fileName, String message) {
+ return "Save video failed (file = %s). %s".formatted(fileName, message);
}
private static String getFileName(String file) {
- return STR."\{System.getProperty("basedir", ".")}/\{file}";
+ return "%s/%s".formatted(System.getProperty("basedir", "."), file);
}
private static void saveFrame(Integer frameCount, BufferedImage image, byte[] bytes) {
copyPixelsIntoImage(bytes, image);
- writeImage(image, frameCount, getFileName(STR."test-frame-\{frameCount}.png"));
+ writeImage(image, frameCount, getFileName("test-frame-%d.png".formatted(frameCount)));
}
}
\ No newline at end of file
diff --git a/ffmpeg4java-windows-examples/pom.xml b/ffmpeg4java-windows-examples/pom.xml
deleted file mode 100644
index 63c0b7e..0000000
--- a/ffmpeg4java-windows-examples/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-
- 4.0.0
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
-
- com.nextbreakpoint.ffmpeg4java.windows.examples
- jar
- FFmpeg4Java Windows Examples
- FFmpeg4Java provides a Java wrapper of FFmpeg library
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.windows
- ${project.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-lib
- test-compile
-
- unpack
-
-
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.windows
- x86_64
- jar
- true
- ${project.build.directory}/lib
-
-
- **/*.dll
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
-
- run
- test
-
- exec
-
-
- java
-
- --enable-preview
- --enable-native-access=ALL-UNNAMED
- -classpath
-
- -Djava.library.path=${project.build.directory}/lib
- com.nextbreakpoint.ffmpeg4java.windows.ConvertVideoMain
- sample.mpg
- output.mp4
-
-
-
-
-
-
-
-
diff --git a/ffmpeg4java-windows-examples/sample.mpg b/ffmpeg4java-windows-examples/sample.mpg
deleted file mode 100644
index 6e166a8..0000000
Binary files a/ffmpeg4java-windows-examples/sample.mpg and /dev/null differ
diff --git a/ffmpeg4java-windows-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/ConvertVideoMain.java b/ffmpeg4java-windows-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/ConvertVideoMain.java
deleted file mode 100644
index e7d1115..0000000
--- a/ffmpeg4java-windows-examples/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/ConvertVideoMain.java
+++ /dev/null
@@ -1,460 +0,0 @@
-
-package com.nextbreakpoint.ffmpeg4java.windows;
-
-import java.lang.foreign.Arena;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.ValueLayout;
-
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_alloc_context3;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_close;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_open2;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_parameters_from_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_parameters_to_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_receive_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_receive_packet;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_send_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_send_packet;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.sws_freeContext;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.sws_getCachedContext;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.sws_scale;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.AV_CODEC_ID_NONE;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_dump_format;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_frame_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_guess_format;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_packet_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_packet_rescale_ts;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_packet_unref;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_read_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_stream_new_side_data;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_write_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_write_trailer;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avcodec_find_decoder;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avcodec_find_encoder;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avcodec_parameters_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_alloc_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_close_input;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_find_stream_info;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_free_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_new_stream;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_open_input;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_write_header;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avio_close;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avio_open2;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AVIO_FLAG_WRITE;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AV_PIX_FMT_RGB24;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AV_PIX_FMT_YUV420P;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.C_POINTER;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.SWS_BILINEAR;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_free;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_image_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_image_fill_arrays;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_image_get_buffer_size;
-import static java.lang.foreign.MemorySegment.NULL;
-
-class ConvertVideoMain {
- public static void main(String[] args) {
- if (args.length < 2) {
- throw new IllegalArgumentException("Invalid arguments");
- }
-
- final String sourceFileName = args[0];
- final String outputFileName = args[1];
-
- System.out.println("Converting video...");
-
- System.out.println(STR."Source file \{sourceFileName}");
- System.out.println(STR."Output file \{outputFileName}");
-
- try (var arena = Arena.ofConfined()) {
- var pInputFileName = arena.allocateFrom(sourceFileName);
- var pOutputFileName = arena.allocateFrom(outputFileName);
-
- var ppInputFormatCtx = NULL;
- var pInputCodecCtx = NULL;
- var pInputSwsContext = NULL;
- var pInputRGBFrame = NULL;
- var pInputTMPFrame = NULL;
- var pInputRGBBuffer = NULL;
- var pInputPacket = NULL;
- var pOutputFormatCtx = NULL;
- var pOutputCodecCtx = NULL;
- var pOutputAVIOCtx = NULL;
- var pOutputSwsContext = NULL;
- var pOutputRGBFrame = NULL;
- var pOutputYUVFrame = NULL;
- var pOutputRGBBuffer = NULL;
- var pOutputYUVBuffer = NULL;
-
- try {
- ppInputFormatCtx = arena.allocate(C_POINTER);
-
- if (avformat_open_input(ppInputFormatCtx, pInputFileName, NULL, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't open file"));
- }
-
- final var pInputFormatCtx = ppInputFormatCtx.get(C_POINTER, 0);
-
- if (avformat_find_stream_info(pInputFormatCtx, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find stream info"));
- }
-
- av_dump_format(pInputFormatCtx, 0, pInputFileName, 0);
-
- final int inputNbStreams = AVFormatContext.nb_streams(pInputFormatCtx);
- final var pInputStreams = AVFormatContext.streams(pInputFormatCtx);
-
- var pInputCodecParameters = NULL;
- int videoStreamIndex = -1;
- var pInputCodec = NULL;
-
- for (int i = 0; i < inputNbStreams; i++) {
- final var pStream = pInputStreams.getAtIndex(C_POINTER, i);
-
- final var pVideoCodecParameters = AVStream.codecpar(pStream);
-
- final var codecType = AVCodecParameters.codec_type(pVideoCodecParameters);
-
- if (codecType == AVMEDIA_TYPE_VIDEO()) {
- videoStreamIndex = i;
- pInputCodecParameters = pVideoCodecParameters;
- pInputCodec = avcodec_find_decoder(AVCodecParameters.codec_id(pVideoCodecParameters));
- break;
- }
- }
-
- if (videoStreamIndex == -1) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find video stream"));
- }
-
- if (pInputCodec.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't find decoder"));
- }
-
- pInputCodecCtx = avcodec_alloc_context3(pInputCodec);
-
- if (avcodec_parameters_to_context(pInputCodecCtx, pInputCodecParameters) != 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't copy codec parameters"));
- }
-
- if (pInputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate codec context"));
- }
-
- if (avcodec_open2(pInputCodecCtx, pInputCodec, NULL) < 0) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't open decoder"));
- }
-
- final int frameWidth = AVCodecContext.width(pInputCodecCtx);
- final int frameHeight = AVCodecContext.height(pInputCodecCtx);
- final int pixelFormat = AVCodecContext.pix_fmt(pInputCodecCtx);
-
- pInputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, pixelFormat, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pInputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate scale context"));
- }
-
- pInputRGBFrame = av_frame_alloc();
- pInputTMPFrame = av_frame_alloc();
-
- if (pInputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate RGB frame"));
- }
-
- if (pInputTMPFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate TMP frame"));
- }
-
- final int inputRGBByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputRGBBuffer = arena.allocate(ValueLayout.OfByte.JAVA_BYTE, inputRGBByteSize);
-
- if (pInputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate RGB buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame), pInputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputPacket = av_packet_alloc();
-
- if (pInputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Can't allocate packet"));
- }
-
- pOutputFormatCtx = avformat_alloc_context();
-
- if (pOutputFormatCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate format context"));
- }
-
- final var pOutputFormat = av_guess_format(NULL, pOutputFileName, NULL);
-
- if (pOutputFormat.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate output format"));
- }
-
- if (AVOutputFormat.video_codec(pOutputFormat) == AV_CODEC_ID_NONE()) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Video codec not found"));
- }
-
- AVFormatContext.oformat(pOutputFormatCtx, pOutputFormat);
-
- final var pOutputCodec = avcodec_find_encoder(AVOutputFormat.video_codec(pOutputFormat));
-
- if (pOutputCodec.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't find encoder"));
- }
-
- pOutputCodecCtx = avcodec_alloc_context3(pOutputCodec);
-
- if (pOutputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate codec context"));
- }
-
- final var pTimeBase = arena.allocate(AVRational.layout());
- AVRational.num(pTimeBase, 1);
- AVRational.den(pTimeBase, 24);
-
- AVCodecContext.codec_id(pOutputCodecCtx, AVOutputFormat.video_codec(pOutputFormat));
- AVCodecContext.codec_type(pOutputCodecCtx, AVMEDIA_TYPE_VIDEO());
- AVCodecContext.width(pOutputCodecCtx, frameWidth);
- AVCodecContext.height(pOutputCodecCtx, frameHeight);
- AVCodecContext.pix_fmt(pOutputCodecCtx, AV_PIX_FMT_YUV420P());
- AVCodecContext.time_base(pOutputCodecCtx, pTimeBase);
- AVCodecContext.gop_size(pOutputCodecCtx, 4);
- AVCodecContext.bit_rate(pOutputCodecCtx, 4096);
- AVCodecContext.max_b_frames(pOutputCodecCtx, 2);
-
- final var pOutputStream = avformat_new_stream(pOutputFormatCtx, pOutputCodec);
-
- if (pOutputStream.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't create stream"));
- }
-
- if (AVFormatContext.nb_streams(pOutputFormatCtx) != 1) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Unexpected number of streams"));
- }
-
- final var pOutputCodecParameters = avcodec_parameters_alloc();
-
- if (pOutputCodecParameters.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't allocate codec parameters"));
- }
-
- if (avcodec_parameters_from_context(pOutputCodecParameters, pOutputCodecCtx) != 0) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't copy codec parameters"));
- }
-
- AVCodecParameters.codec_id(pOutputCodecParameters, AVOutputFormat.video_codec(pOutputFormat));
- AVCodecParameters.codec_type(pOutputCodecParameters, AVMEDIA_TYPE_VIDEO());
- AVCodecParameters.width(pOutputCodecParameters, frameWidth);
- AVCodecParameters.height(pOutputCodecParameters, frameHeight);
- AVStream.codecpar(pOutputStream, pOutputCodecParameters);
- AVStream.time_base(pOutputStream, pTimeBase);
-
- final var pOutputProperties = av_stream_new_side_data(pOutputStream, AV_PKT_DATA_CPB_PROPERTIES(), AVCPBProperties.sizeof());
- AVCPBProperties.buffer_size(pOutputProperties, frameWidth * frameHeight * 3L * 2L);
-
- if (avcodec_open2(pOutputCodecCtx, pOutputCodec, NULL) != 0) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't open encoder"));
- }
-
- final var ppOutputAVIOCtx = arena.allocate(C_POINTER);
-
- if (avio_open2(ppOutputAVIOCtx, pOutputFileName, AVIO_FLAG_WRITE(), NULL, NULL) < 0) {
- throw new RuntimeException(formatSaveVideoError(outputFileName, "Can't open file"));
- }
-
- pOutputAVIOCtx = ppOutputAVIOCtx.get(C_POINTER, 0);
-
- if (pOutputAVIOCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate IO context"));
- }
-
- AVFormatContext.pb(pOutputFormatCtx, pOutputAVIOCtx);
-
- pOutputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pOutputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate scale context"));
- }
-
- pOutputRGBFrame = av_frame_alloc();
- pOutputYUVFrame = av_frame_alloc();
-
- if (pOutputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate RGB frame"));
- }
-
- if (pOutputYUVFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate YUV frame"));
- }
-
- AVFrame.width(pOutputRGBFrame, frameWidth);
- AVFrame.height(pOutputRGBFrame, frameHeight);
- AVFrame.format(pOutputRGBFrame, AV_PIX_FMT_RGB24());
- AVFrame.width(pOutputYUVFrame, frameWidth);
- AVFrame.height(pOutputYUVFrame, frameHeight);
- AVFrame.format(pOutputYUVFrame, AV_PIX_FMT_YUV420P());
-
- av_image_alloc(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), frameWidth, frameHeight, AV_PIX_FMT_RGB24(), 1);
- av_image_alloc(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), 1);
-
- final int outputRGBByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- final int outputYUVByteSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- pOutputRGBBuffer = arena.allocate(outputRGBByteSize);
- pOutputYUVBuffer = arena.allocate(outputYUVByteSize);
-
- if (pOutputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate RGB buffer"));
- }
-
- if (pOutputYUVBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate YUV buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), pOutputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- av_image_fill_arrays(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), pOutputYUVBuffer, AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- final var pOutputPacket = av_packet_alloc();
-
- if (pOutputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Can't allocate packet"));
- }
-
- AVPacket.stream_index(pOutputPacket, AVStream.index(pOutputStream));
-
- if (inputRGBByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(sourceFileName, "Unexpected buffer size"));
- }
-
- if (outputRGBByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(outputFileName, "Unexpected buffer size"));
- }
-
- final byte[] buffer = new byte[outputRGBByteSize];
-
- avformat_write_header(pOutputFormatCtx, NULL);
-
- while (av_read_frame(pInputFormatCtx, pInputPacket) == 0) {
- if (AVPacket.stream_index(pInputPacket) == videoStreamIndex) {
- if (avcodec_send_packet(pInputCodecCtx, pInputPacket) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, inputRGBByteSize);
-
- final var pOutputData = AVFrame.data(pOutputRGBFrame);
- MemorySegment.copy(MemorySegment.ofArray(buffer), 0, pOutputData.get(C_POINTER, 0), 0, outputRGBByteSize);
-
- sws_scale(pOutputSwsContext, AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), 0, frameHeight, AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame));
-
- if (avcodec_send_frame(pOutputCodecCtx, pOutputYUVFrame) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
- }
- }
- }
- }
-
- if (avcodec_send_packet(pInputCodecCtx, NULL) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, inputRGBByteSize);
-
- final var pOutputData = AVFrame.data(pOutputRGBFrame);
- MemorySegment.copy(MemorySegment.ofArray(buffer), 0, pOutputData.get(C_POINTER, 0), 0, outputRGBByteSize);
-
- sws_scale(pOutputSwsContext, AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), 0, frameHeight, AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame));
-
- if (avcodec_send_frame(pOutputCodecCtx, pOutputYUVFrame) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
- }
- }
-
- if (avcodec_send_frame(pOutputCodecCtx, NULL) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
-
- av_write_trailer(pOutputFormatCtx);
- } finally {
- if (!pInputPacket.equals(NULL)) {
- av_packet_unref(pInputPacket);
- }
-
- if (!pInputCodecCtx.equals(NULL)) {
- avcodec_close(pInputCodecCtx);
- }
-
- if (!pInputSwsContext.equals(NULL)) {
- sws_freeContext(pInputSwsContext);
- }
-
- if (!pInputTMPFrame.equals(NULL)) {
- av_free(pInputTMPFrame);
- }
-
- if (!pInputRGBFrame.equals(NULL)) {
- av_free(pInputRGBFrame);
- }
-
- if (!ppInputFormatCtx.equals(NULL)) {
- avformat_close_input(ppInputFormatCtx);
- }
-
- if (!pOutputAVIOCtx.equals(NULL)) {
- avio_close(pOutputAVIOCtx);
- }
-
- if (!pOutputCodecCtx.equals(NULL)) {
- avcodec_close(pOutputCodecCtx);
- }
-
- if (!pOutputSwsContext.equals(NULL)) {
- sws_freeContext(pOutputSwsContext);
- }
-
- if (!pOutputYUVFrame.equals(NULL)) {
- av_free(pOutputYUVFrame);
- }
-
- if (!pOutputRGBFrame.equals(NULL)) {
- av_free(pOutputRGBFrame);
- }
-
- if (!pOutputFormatCtx.equals(NULL)) {
- avformat_free_context(pOutputFormatCtx);
- }
- }
-
- System.out.println("Video converted");
- }
- }
-
- private static String formatLoadVideoError(String fileName, String message) {
- return STR."Decode video error (file = \{fileName}). \{message}";
- }
-
- private static String formatSaveVideoError(String fileName, String message) {
- return STR."Encode video error (file = \{fileName}). \{message}";
- }
-}
\ No newline at end of file
diff --git a/ffmpeg4java-windows-test/fixture-frame-10.png b/ffmpeg4java-windows-test/fixture-frame-10.png
deleted file mode 100644
index afa1bab..0000000
Binary files a/ffmpeg4java-windows-test/fixture-frame-10.png and /dev/null differ
diff --git a/ffmpeg4java-windows-test/fixture-frame-20.png b/ffmpeg4java-windows-test/fixture-frame-20.png
deleted file mode 100644
index ed6c116..0000000
Binary files a/ffmpeg4java-windows-test/fixture-frame-20.png and /dev/null differ
diff --git a/ffmpeg4java-windows-test/fixture-frame-30.png b/ffmpeg4java-windows-test/fixture-frame-30.png
deleted file mode 100644
index bcd577d..0000000
Binary files a/ffmpeg4java-windows-test/fixture-frame-30.png and /dev/null differ
diff --git a/ffmpeg4java-windows-test/fixture-frame-40.png b/ffmpeg4java-windows-test/fixture-frame-40.png
deleted file mode 100644
index 3017212..0000000
Binary files a/ffmpeg4java-windows-test/fixture-frame-40.png and /dev/null differ
diff --git a/ffmpeg4java-windows-test/fixture-video-48.mpg b/ffmpeg4java-windows-test/fixture-video-48.mpg
deleted file mode 100644
index b331d1c..0000000
Binary files a/ffmpeg4java-windows-test/fixture-video-48.mpg and /dev/null differ
diff --git a/ffmpeg4java-windows-test/pom.xml b/ffmpeg4java-windows-test/pom.xml
deleted file mode 100644
index 3e96cba..0000000
--- a/ffmpeg4java-windows-test/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
- 4.0.0
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
-
- com.nextbreakpoint.ffmpeg4java.windows.test
- jar
- FFmpeg4Java Windows Test
- FFmpeg4Java provides a Java wrapper of FFmpeg library
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.windows
- ${project.version}
-
-
-
-
-
- org.apache.maven.plugins
- maven-dependency-plugin
-
-
- copy-lib
- test-compile
-
- unpack
-
-
-
-
- com.nextbreakpoint
- com.nextbreakpoint.ffmpeg4java.windows
- x86_64
- jar
- true
- ${project.build.directory}/lib
-
-
- **/*.dll
-
-
-
-
-
-
-
diff --git a/ffmpeg4java-windows-test/src/test/java/com/nextbreakpoint/ffmpeg4java/windows/FFmpeg4JavaTest.java b/ffmpeg4java-windows-test/src/test/java/com/nextbreakpoint/ffmpeg4java/windows/FFmpeg4JavaTest.java
deleted file mode 100644
index 02a15ac..0000000
--- a/ffmpeg4java-windows-test/src/test/java/com/nextbreakpoint/ffmpeg4java/windows/FFmpeg4JavaTest.java
+++ /dev/null
@@ -1,594 +0,0 @@
-package com.nextbreakpoint.ffmpeg4java.windows;
-
-import org.assertj.core.data.Offset;
-import org.junit.jupiter.api.Test;
-
-import javax.imageio.ImageIO;
-import java.awt.image.BufferedImage;
-import java.awt.image.DataBufferInt;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.lang.foreign.Arena;
-import java.lang.foreign.MemorySegment;
-import java.lang.foreign.ValueLayout;
-import java.util.function.BiConsumer;
-
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_alloc_context3;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_close;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_open2;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_parameters_from_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_parameters_to_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_receive_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_receive_packet;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_send_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.avcodec_send_packet;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.sws_freeContext;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.sws_getCachedContext;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg.sws_scale;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.AV_CODEC_ID_NONE;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.AV_PKT_DATA_CPB_PROPERTIES;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_dump_format;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_frame_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_guess_format;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_packet_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_packet_rescale_ts;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_packet_unref;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_read_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_stream_new_side_data;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_write_frame;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.av_write_trailer;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avcodec_find_decoder;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avcodec_find_encoder;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avcodec_parameters_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_alloc_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_close_input;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_find_stream_info;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_free_context;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_new_stream;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_open_input;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avformat_write_header;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avio_close;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_1.avio_open2;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AVIO_FLAG_WRITE;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AVMEDIA_TYPE_VIDEO;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AV_PIX_FMT_RGB24;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.AV_PIX_FMT_YUV420P;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.C_POINTER;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.SWS_BILINEAR;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_free;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_image_alloc;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_image_fill_arrays;
-import static com.nextbreakpoint.ffmpeg4java.windows.Libffmpeg_2.av_image_get_buffer_size;
-import static java.lang.foreign.MemorySegment.NULL;
-import static org.assertj.core.api.Assertions.assertThat;
-
-class FFmpeg4JavaTest {
- @Test
- public void shouldDecode48Frames() {
- int frameCount = loadVideo(getFileName("fixture-video-48.mpg"), FFmpeg4JavaTest::printFrame);
- assertThat(frameCount).isEqualTo(48);
- }
-
- @Test
- public void shouldEncode48Frames() {
- int fps = 24;
- int frames = 48;
- int frameWidth = 640;
- int frameHeight = 480;
- int frameCount = saveVideo(getFileName("test-video-48.mpg"), fps, frames, frameWidth, frameHeight, FFmpeg4JavaTest::printFrame);
- assertThat(frameCount).isEqualTo(frames);
- }
-
- @Test
- public void shouldDecodeFrames() throws IOException {
- int frameWidth = 640;
- int frameHeight = 480;
- final BufferedImage image = new BufferedImage(frameWidth, frameHeight, BufferedImage.TYPE_INT_ARGB);
- loadVideo(getFileName("fixture-video-48.mpg"), (frameCount, bytes) -> saveFrame(frameCount, image, bytes));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-10.png"))), convertFormat(loadImage(getFileName("test-frame-10.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-20.png"))), convertFormat(loadImage(getFileName("test-frame-20.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-30.png"))), convertFormat(loadImage(getFileName("test-frame-30.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-40.png"))), convertFormat(loadImage(getFileName("test-frame-40.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- }
-
- @Test
- public void shouldEncodeFrames() throws IOException {
- int fps = 24;
- int frames = 48;
- int frameWidth = 640;
- int frameHeight = 480;
- final BufferedImage image = new BufferedImage(frameWidth, frameHeight, BufferedImage.TYPE_INT_ARGB);
- saveVideo(getFileName("test-video-48.mpg"), fps, frames, frameWidth, frameHeight, (frameCount, bytes) -> printFrame(frameCount, bytes, frames));
- loadVideo(getFileName("test-video-48.mpg"), (frameCount, bytes) -> saveFrame(frameCount, image, bytes));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-10.png"))), convertFormat(loadImage(getFileName("test-frame-10.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-20.png"))), convertFormat(loadImage(getFileName("test-frame-20.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-30.png"))), convertFormat(loadImage(getFileName("test-frame-30.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- assertThat(error(convertFormat(loadImage(getFileName("fixture-frame-40.png"))), convertFormat(loadImage(getFileName("test-frame-40.png"))))).isCloseTo(0.0, Offset.offset(10.0));
- }
-
- private static int loadVideo(String fileName, BiConsumer consumer) {
- int frameCount = 0;
-
- try (var arena = Arena.ofConfined()) {
- var ppInputFormatCtx = NULL;
- var pInputCodecCtx = NULL;
- var pInputSwsContext = NULL;
- var pInputRGBFrame = NULL;
- var pInputRGBBuffer = NULL;
- var pInputTMPFrame = NULL;
- var pInputPacket = NULL;
-
- try {
- ppInputFormatCtx = arena.allocate(C_POINTER);
-
- final var pInputFileName = arena.allocateFrom(fileName);
-
- if (avformat_open_input(ppInputFormatCtx, pInputFileName, NULL, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't open file"));
- }
-
- final var pInputFormatCtx = ppInputFormatCtx.get(C_POINTER, 0);
-
- if (avformat_find_stream_info(pInputFormatCtx, NULL) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find stream info"));
- }
-
- av_dump_format(pInputFormatCtx, 0, pInputFileName, 0);
-
- final int nbStreams = AVFormatContext.nb_streams(pInputFormatCtx);
- final var pInputStreams = AVFormatContext.streams(pInputFormatCtx);
-
- var pInputCodecParameters = NULL;
- int videoStreamIndex = -1;
- var pInputCodec = NULL;
-
- for (int i = 0; i < nbStreams; i++) {
- final var pStream = pInputStreams.getAtIndex(C_POINTER, i);
-
- final var pVideoCodecParameters = AVStream.codecpar(pStream);
-
- final var codecType = AVCodecParameters.codec_type(pVideoCodecParameters);
-
- if (codecType == AVMEDIA_TYPE_VIDEO()) {
- videoStreamIndex = i;
- pInputCodecParameters = pVideoCodecParameters;
- pInputCodec = avcodec_find_decoder(AVCodecParameters.codec_id(pVideoCodecParameters));
- break;
- }
- }
-
- if (videoStreamIndex == -1) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find video stream"));
- }
-
- if (pInputCodec.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't find decoder"));
- }
-
- pInputCodecCtx = avcodec_alloc_context3(pInputCodec);
-
- if (avcodec_parameters_to_context(pInputCodecCtx, pInputCodecParameters) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't copy codec parameters"));
- }
-
- if (pInputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate codec context"));
- }
-
- if (avcodec_open2(pInputCodecCtx, pInputCodec, NULL) < 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't open decoder"));
- }
-
- final int frameWidth = AVCodecContext.width(pInputCodecCtx);
- final int frameHeight = AVCodecContext.height(pInputCodecCtx);
- final int pixelFormat = AVCodecContext.pix_fmt(pInputCodecCtx);
-
- pInputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, pixelFormat, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pInputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate scale context"));
- }
-
- pInputRGBFrame = av_frame_alloc();
- pInputTMPFrame = av_frame_alloc();
-
- if (pInputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB frame"));
- }
-
- if (pInputTMPFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate TMP frame"));
- }
-
- final int rgbByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputRGBBuffer = arena.allocate(ValueLayout.OfByte.JAVA_BYTE, rgbByteSize);
-
- if (pInputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame), pInputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
-
- pInputPacket = av_packet_alloc();
-
- if (pInputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate packet"));
- }
-
- if (rgbByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Unexpected buffer size"));
- }
-
- final byte[] buffer = new byte[rgbByteSize];
-
- while (av_read_frame(pInputFormatCtx, pInputPacket) == 0) {
- if (AVPacket.stream_index(pInputPacket) == videoStreamIndex) {
- if (avcodec_send_packet(pInputCodecCtx, pInputPacket) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, rgbByteSize);
-
- consumer.accept(++frameCount, buffer);
- }
- }
- }
- }
-
- if (avcodec_send_packet(pInputCodecCtx, NULL) == 0) {
- while (avcodec_receive_frame(pInputCodecCtx, pInputTMPFrame) == 0) {
- sws_scale(pInputSwsContext, AVFrame.data(pInputTMPFrame), AVFrame.linesize(pInputTMPFrame), 0, frameHeight, AVFrame.data(pInputRGBFrame), AVFrame.linesize(pInputRGBFrame));
-
- final var pInputData = AVFrame.data(pInputRGBFrame);
- MemorySegment.copy(pInputData.get(C_POINTER, 0), 0, MemorySegment.ofArray(buffer), 0, rgbByteSize);
-
- consumer.accept(++frameCount, buffer);
- }
- }
- } finally {
- if (!pInputPacket.equals(NULL)) {
- av_packet_unref(pInputPacket);
- }
-
- if (!pInputCodecCtx.equals(NULL)) {
- avcodec_close(pInputCodecCtx);
- }
-
- if (!pInputSwsContext.equals(NULL)) {
- sws_freeContext(pInputSwsContext);
- }
-
- if (!pInputTMPFrame.equals(NULL)) {
- av_free(pInputTMPFrame);
- }
-
- if (!pInputRGBFrame.equals(NULL)) {
- av_free(pInputRGBFrame);
- }
-
- if (!ppInputFormatCtx.equals(NULL)) {
- avformat_close_input(ppInputFormatCtx);
- }
- }
- }
- return frameCount;
- }
-
- private static int saveVideo(String fileName, int fps, int frames, int frameWidth, int frameHeight, BiConsumer consumer) {
- int frameCount = 0;
-
- try (var arena = Arena.ofConfined()) {
- var pOutputFormatCtx = NULL;
- var pOutputCodecCtx = NULL;
- var pOutputAVIOCtx = NULL;
- var pOutputSwsContext = NULL;
- var pOutputRGBFrame = NULL;
- var pOutputYUVFrame = NULL;
- var pOutputRGBBuffer = NULL;
- var pOutputYUVBuffer = NULL;
-
- try {
- pOutputFormatCtx = avformat_alloc_context();
-
- if (pOutputFormatCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate format context"));
- }
-
- final var pOutputFileName = arena.allocateFrom(fileName);
-
- final var pOutputFormat = av_guess_format(NULL, pOutputFileName, NULL);
-
- if (pOutputFormat.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate output format"));
- }
-
- final int outputVideoCodec = AVOutputFormat.video_codec(pOutputFormat);
-
- if (outputVideoCodec == AV_CODEC_ID_NONE()) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Video codec not found"));
- }
-
- AVFormatContext.oformat(pOutputFormatCtx, pOutputFormat);
-
- final var pOutputCodec = avcodec_find_encoder(outputVideoCodec);
-
- if (pOutputCodec.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't find encoder"));
- }
-
- pOutputCodecCtx = avcodec_alloc_context3(pOutputCodec);
-
- if (pOutputCodecCtx.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate codec context"));
- }
-
- final var pTimeBase = arena.allocate(AVRational.layout());
- AVRational.num(pTimeBase, 1);
- AVRational.den(pTimeBase, fps);
-
- AVCodecContext.codec_id(pOutputCodecCtx, outputVideoCodec);
- AVCodecContext.codec_type(pOutputCodecCtx, AVMEDIA_TYPE_VIDEO());
- AVCodecContext.width(pOutputCodecCtx, frameWidth);
- AVCodecContext.height(pOutputCodecCtx, frameHeight);
- AVCodecContext.pix_fmt(pOutputCodecCtx, AV_PIX_FMT_YUV420P());
- AVCodecContext.time_base(pOutputCodecCtx, pTimeBase);
- AVCodecContext.gop_size(pOutputCodecCtx, 4);
- AVCodecContext.bit_rate(pOutputCodecCtx, 4096);
- AVCodecContext.max_b_frames(pOutputCodecCtx, 2);
-
- final var pOutputStream = avformat_new_stream(pOutputFormatCtx, pOutputCodec);
-
- if (pOutputStream.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't create stream"));
- }
-
- if (AVFormatContext.nb_streams(pOutputFormatCtx) != 1) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Unexpected number of streams"));
- }
-
- final var pOutputCodecParameters = avcodec_parameters_alloc();
-
- if (pOutputCodecParameters.equals(NULL)) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't allocate codec parameters"));
- }
-
- if (avcodec_parameters_from_context(pOutputCodecParameters, pOutputCodecCtx) != 0) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't copy codec parameters"));
- }
-
- AVCodecParameters.codec_id(pOutputCodecParameters, outputVideoCodec);
- AVCodecParameters.codec_type(pOutputCodecParameters, AVMEDIA_TYPE_VIDEO());
- AVCodecParameters.width(pOutputCodecParameters, frameWidth);
- AVCodecParameters.height(pOutputCodecParameters, frameHeight);
- AVStream.codecpar(pOutputStream, pOutputCodecParameters);
- AVStream.time_base(pOutputStream, pTimeBase);
-
- final var pOutputProperties = av_stream_new_side_data(pOutputStream, AV_PKT_DATA_CPB_PROPERTIES(), AVCPBProperties.sizeof());
- AVCPBProperties.buffer_size(pOutputProperties, frameWidth * frameHeight * 3L * 2L);
-
- if (avcodec_open2(pOutputCodecCtx, pOutputCodec, NULL) != 0) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't open encoder"));
- }
-
- final var ppOutputAVIOCtx = arena.allocate(C_POINTER);
-
- if (avio_open2(ppOutputAVIOCtx, pOutputFileName, AVIO_FLAG_WRITE(), NULL, NULL) < 0) {
- throw new RuntimeException(formatSaveVideoError(fileName, "Can't open file"));
- }
-
- pOutputAVIOCtx = ppOutputAVIOCtx.get(C_POINTER, 0);
-
- if (pOutputAVIOCtx.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate IO context"));
- }
-
- AVFormatContext.pb(pOutputFormatCtx, pOutputAVIOCtx);
-
- pOutputSwsContext = sws_getCachedContext(NULL, frameWidth, frameHeight, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), SWS_BILINEAR(), NULL, NULL, NULL);
-
- if (pOutputSwsContext.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate scale context"));
- }
-
- pOutputRGBFrame = av_frame_alloc();
- pOutputYUVFrame = av_frame_alloc();
-
- if (pOutputRGBFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB frame"));
- }
-
- if (pOutputYUVFrame.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate YUV frame"));
- }
-
- AVFrame.width(pOutputRGBFrame, frameWidth);
- AVFrame.height(pOutputRGBFrame, frameHeight);
- AVFrame.format(pOutputRGBFrame, AV_PIX_FMT_RGB24());
- AVFrame.width(pOutputYUVFrame, frameWidth);
- AVFrame.height(pOutputYUVFrame, frameHeight);
- AVFrame.format(pOutputYUVFrame, AV_PIX_FMT_YUV420P());
-
- av_image_alloc(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), frameWidth, frameHeight, AV_PIX_FMT_RGB24(), 1);
- av_image_alloc(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), frameWidth, frameHeight, AV_PIX_FMT_YUV420P(), 1);
-
- final int rgbByteSize = av_image_get_buffer_size(AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- final int yuvByteSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- pOutputRGBBuffer = arena.allocate(rgbByteSize);
- pOutputYUVBuffer = arena.allocate(yuvByteSize);
-
- if (pOutputRGBBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate RGB buffer"));
- }
-
- if (pOutputYUVBuffer.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate YUV buffer"));
- }
-
- av_image_fill_arrays(AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), pOutputRGBBuffer, AV_PIX_FMT_RGB24(), frameWidth, frameHeight, 1);
- av_image_fill_arrays(AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame), pOutputYUVBuffer, AV_PIX_FMT_YUV420P(), frameWidth, frameHeight, 1);
-
- final var pOutputPacket = av_packet_alloc();
-
- if (pOutputPacket.equals(NULL)) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Can't allocate packet"));
- }
-
- AVPacket.stream_index(pOutputPacket, AVStream.index(pOutputStream));
-
- if (rgbByteSize != 3 * frameWidth * frameHeight) {
- throw new RuntimeException(formatLoadVideoError(fileName, "Unexpected buffer size"));
- }
-
- final byte[] buffer = new byte[rgbByteSize];
-
- avformat_write_header(pOutputFormatCtx, NULL);
-
- for (int frame = 0; frame < frames; frame++) {
- final var pOutputData = AVFrame.data(pOutputRGBFrame);
- fillPixels(buffer, frameWidth, frameHeight, ((float) frame / (frames - 1)));
- MemorySegment.copy(MemorySegment.ofArray(buffer), 0, pOutputData.get(C_POINTER, 0), 0, rgbByteSize);
-
- consumer.accept(++frameCount, buffer);
-
- sws_scale(pOutputSwsContext, AVFrame.data(pOutputRGBFrame), AVFrame.linesize(pOutputRGBFrame), 0, frameHeight, AVFrame.data(pOutputYUVFrame), AVFrame.linesize(pOutputYUVFrame));
-
- if (avcodec_send_frame(pOutputCodecCtx, pOutputYUVFrame) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
- }
-
- if (avcodec_send_frame(pOutputCodecCtx, NULL) == 0) {
- while (avcodec_receive_packet(pOutputCodecCtx, pOutputPacket) == 0) {
- av_packet_rescale_ts(pOutputPacket, AVCodecContext.time_base(pOutputCodecCtx), AVStream.time_base(pOutputStream));
- av_write_frame(pOutputFormatCtx, pOutputPacket);
- }
- av_write_frame(pOutputFormatCtx, NULL);
- }
-
- av_write_trailer(pOutputFormatCtx);
- } finally {
- if (!pOutputAVIOCtx.equals(NULL)) {
- avio_close(pOutputAVIOCtx);
- }
-
- if (!pOutputCodecCtx.equals(NULL)) {
- avcodec_close(pOutputCodecCtx);
- }
-
- if (!pOutputSwsContext.equals(NULL)) {
- sws_freeContext(pOutputSwsContext);
- }
-
- if (!pOutputYUVFrame.equals(NULL)) {
- av_free(pOutputYUVFrame);
- }
-
- if (!pOutputRGBFrame.equals(NULL)) {
- av_free(pOutputRGBFrame);
- }
-
- if (!pOutputFormatCtx.equals(NULL)) {
- avformat_free_context(pOutputFormatCtx);
- }
- }
- }
-
- return frameCount;
- }
-
- private static String formatLoadVideoError(String fileName, String message) {
- return STR."Load video failed (file = \{fileName}). \{message}";
- }
-
- private static String formatSaveVideoError(String fileName, String message) {
- return STR."Save video failed (file = \{fileName}). \{message}";
- }
-
- private static void fillPixels(byte[] data, int width, int height, float color) {
- byte p = (byte) (255 * color);
- for (int x = 0; x < width; x += 1) {
- for (int y = 0; y < height; y += 1) {
- int j = (y * width + x) * 3;
- if ((x / 5) % 2 == 0 || (y / 5) % 2 == 1) {
- data[j + 0] = p;
- data[j + 1] = p;
- data[j + 2] = p;
- } else {
- data[j + 0] = 0;
- data[j + 1] = 0;
- data[j + 2] = 0;
- }
- }
- }
- }
-
- private static void writeImage(BufferedImage image, int frame, String name) {
- if (frame % 10 == 0) {
- try (FileOutputStream output = new FileOutputStream(name)) {
- ImageIO.write(image, "png", output);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- private static void copyPixelsIntoImage(byte[] data, BufferedImage image) {
- int[] rgb_data = ((DataBufferInt) image.getData().getDataBuffer()).getData();
- for (int t = 0, k = 0; k < data.length; k += 3) {
- rgb_data[t++] = 0xFF000000 | ((((int) data[k]) << 16) & 0x00FF0000) | ((((int) data[k]) << 8) & 0x0000FF00) | ((((int) data[k])) & 0x000000FF);
- }
- image.setRGB(0, 0, image.getWidth(), image.getHeight(), rgb_data, 0, image.getWidth());
- }
-
- private static int[] loadImage(String file) throws IOException {
- BufferedImage image = ImageIO.read(new File(file));
- return image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth());
- }
-
- private static double error(byte[] data1, byte[] data2) {
- double error = 0;
- for (int j = 0; j < data1.length; j += 3) {
- error += distance(data1, data2, j);
- }
- return error / (data1.length / 3.0);
- }
-
- private static double distance(byte[] data1, byte[] data2, int i) {
- return Math.sqrt(Math.pow(data1[i + 0] - data2[i + 0], 2) + Math.pow(data1[i + 1] - data2[i + 1], 2) + Math.pow(data1[i + 2] - data2[i + 2], 2));
- }
-
- private static byte[] convertFormat(int[] data) {
- byte[] buffer = new byte[data.length * 3];
- for (int j = 0; j < data.length; j += 1) {
- buffer[j * 3 + 0] = (byte) (data[j] >> 16);
- buffer[j * 3 + 1] = (byte) (data[j] >> 8);
- buffer[j * 3 + 2] = (byte) (data[j] >> 0);
- }
- return buffer;
- }
-
- private static void printFrame(int frameCount, byte[] bytes) {
- System.out.println(STR."Frame \{frameCount}");
- }
-
- private static void printFrame(int frameCount, byte[] bytes, int frames) {
- System.out.println(STR."Frame \{frameCount} [ \{frameCount * 100 / frames}% ]");
- }
-
- private static String getFileName(String file) {
- return STR."\{System.getProperty("basedir", ".")}/\{file}";
- }
-
- private static void saveFrame(Integer frameCount, BufferedImage image, byte[] bytes) {
- copyPixelsIntoImage(bytes, image);
- writeImage(image, frameCount, getFileName(STR."test-frame-\{frameCount}.png"));
- }
-}
\ No newline at end of file
diff --git a/ffmpeg4java-windows/extract.sh b/ffmpeg4java-windows/extract.sh
index 79f34af..21eccb4 100755
--- a/ffmpeg4java-windows/extract.sh
+++ b/ffmpeg4java-windows/extract.sh
@@ -7,7 +7,7 @@ export PATH=$PATH:${JEXTRACT_HOME}/bin
jextract @includes.txt \
--output src/main/java \
- --target-package com.nextbreakpoint.ffmpeg4java.windows \
+ --target-package com.nextbreakpoint.ffmpeg4java \
--include-dir "${FFMPEG_HOME}" \
--include-dir "${INCLUDE_PATH}" \
--use-system-load-library \
diff --git a/ffmpeg4java-windows/pom.xml b/ffmpeg4java-windows/pom.xml
index 0f48da6..43ba85b 100644
--- a/ffmpeg4java-windows/pom.xml
+++ b/ffmpeg4java-windows/pom.xml
@@ -4,7 +4,7 @@
com.nextbreakpoint
com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
+ 7.0.1-1.2
com.nextbreakpoint.ffmpeg4java.windows
jar
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVBufferRef.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVBufferRef.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
index b3095fc..bb921e5 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVBufferRef.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVBufferRef.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCPBProperties.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCPBProperties.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
index 5bf18f6..7daf5eb 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCPBProperties.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCPBProperties.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChannelCustom.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChannelCustom.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
index 0d615bb..0b26dd6 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChannelCustom.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelCustom.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChannelLayout.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChannelLayout.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
index 06c40ef..b033af9 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChannelLayout.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChannelLayout.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChapter.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChapter.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
index 9e264e6..d4f10e0 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVChapter.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVChapter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVClass.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVClass.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
index 1b9f6ed..0d14566 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVClass.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVClass.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodec.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodec.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
index 2a3baa8..2886e44 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodec.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodec.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecContext.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecContext.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
index cdd8946..ff3ea62 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecContext.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecDescriptor.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecDescriptor.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
index 87aef94..77178c5 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecDescriptor.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecHWConfig.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecHWConfig.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
index 11c9121..379dc37 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecHWConfig.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecHWConfig.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParameters.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParameters.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
index fa60d97..c51b4a0 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParameters.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParameters.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParser.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParser.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
index 27d5d1e..8d56a8d 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParser.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParser.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParserContext.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParserContext.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
index 6491fb5..02fa588 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVCodecParserContext.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVCodecParserContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVComponentDescriptor.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVComponentDescriptor.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
index 9920b9d..a532085 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVComponentDescriptor.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVComponentDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceInfo.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceInfo.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
index d681bf0..1178f5a 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceInfo.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfo.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceInfoList.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceInfoList.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
index 8264fb5..a0d75dd 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceInfoList.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceInfoList.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceRect.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceRect.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
index ed4ffce..4cde344 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDeviceRect.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDeviceRect.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDictionaryEntry.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDictionaryEntry.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
index 320c8df..683cea7 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVDictionaryEntry.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVDictionaryEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilter.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilter.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
index 7b8dd7f..39b080b 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilter.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterChain.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterChain.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
index 5f8b931..48c1ae8 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterChain.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterChain.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterContext.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterContext.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
index d9d82c2..e3ba06f 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterContext.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterFormatsConfig.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterFormatsConfig.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
index 0afbe7e..67bbb6c 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterFormatsConfig.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterFormatsConfig.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterGraph.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterGraph.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
index b3d81fd..91cec07 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterGraph.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraph.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterGraphSegment.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterGraphSegment.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
index 0873fcc..b00a36b 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterGraphSegment.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterGraphSegment.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterInOut.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterInOut.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
index 5096433..6501b7c 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterInOut.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterInOut.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterLink.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterLink.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
index 60dc805..1fa3a85 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterLink.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterLink.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterPadParams.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterPadParams.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
index adbcdd8..b1cd7fd 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterPadParams.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterPadParams.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterParams.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterParams.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
index 3e60a1b..010b9f0 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFilterParams.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFilterParams.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFormatContext.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFormatContext.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
index b9141ca..79d54eb 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFormatContext.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFormatContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFrame.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFrame.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
index fdf2080..e81dc09 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFrame.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrame.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFrameSideData.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFrameSideData.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
index 927a75c..6c5e619 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVFrameSideData.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVFrameSideData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWAccel.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWAccel.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
index f4971d7..dae7bd0 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWAccel.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWAccel.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWDeviceContext.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWDeviceContext.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
index 9b93b6b..1f94470 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWDeviceContext.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWDeviceContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWFramesConstraints.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWFramesConstraints.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
index a9768dd..6d22e25 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWFramesConstraints.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesConstraints.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWFramesContext.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWFramesContext.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
index 4679807..a4251f4 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVHWFramesContext.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVHWFramesContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIOContext.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIOContext.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
index d919e76..a69e8f3 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIOContext.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOContext.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIODirEntry.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIODirEntry.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
index 46ad664..e64a08e 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIODirEntry.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIODirEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIOInterruptCB.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIOInterruptCB.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
index 37e83ca..a521135 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIOInterruptCB.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIOInterruptCB.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIndexEntry.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIndexEntry.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
index aa3a2a3..fda9437 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVIndexEntry.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVIndexEntry.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVInputFormat.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVInputFormat.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
index 6e802f0..efe0b61 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVInputFormat.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVInputFormat.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOpenCallback.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOpenCallback.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
index 7ecb064..e20c405 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOpenCallback.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOpenCallback.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOption.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOption.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
index 7e61996..a1f3e43 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOption.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOption.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionArrayDef.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionArrayDef.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
index 5cb0c83..f12e951 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionArrayDef.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionArrayDef.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionRange.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionRange.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
index 129a82b..4133f7f 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionRange.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRange.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionRanges.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionRanges.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
index 02f0d0b..1bef27a 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOptionRanges.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOptionRanges.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOutputFormat.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOutputFormat.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
index e3da478..89c749d 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVOutputFormat.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVOutputFormat.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacket.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacket.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
index e17538f..e80349a 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacket.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacket.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacketList.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacketList.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
index 43fca17..2107496 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacketList.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketList.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacketSideData.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacketSideData.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
index eb50bb1..301a1e9 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPacketSideData.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPacketSideData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPanScan.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPanScan.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
index 9cdc9a5..38575f0 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPanScan.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPanScan.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPixFmtDescriptor.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPixFmtDescriptor.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
index e0c4b9c..16d6da8 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVPixFmtDescriptor.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVPixFmtDescriptor.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProbeData.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProbeData.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
index 99bc221..4fe0f55 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProbeData.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProbeData.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProducerReferenceTime.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProducerReferenceTime.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
index 26bd77e..eb9b61e 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProducerReferenceTime.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProducerReferenceTime.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProfile.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProfile.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
index e3e7494..ca4a47e 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProfile.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProfile.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProgram.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProgram.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
index 094126c..d8d3b76 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVProgram.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVProgram.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVRational.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVRational.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
index 2fb6334..a3aa8b3 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVRational.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRational.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVRegionOfInterest.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVRegionOfInterest.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
index 5d8eadf..f9ac4e0 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVRegionOfInterest.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVRegionOfInterest.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStream.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStream.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
index 0008ab1..72db74d 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStream.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStream.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStreamGroup.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStreamGroup.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
index 4f3da0c..47585eb 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStreamGroup.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroup.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStreamGroupTileGrid.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStreamGroupTileGrid.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
index 9ff8439..2ed49e2 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVStreamGroupTileGrid.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVStreamGroupTileGrid.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVSubtitle.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVSubtitle.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
index e69ba2c..de2c6f0 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVSubtitle.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitle.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVSubtitleRect.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVSubtitleRect.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
index 5435248..4d5fb00 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/AVSubtitleRect.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/AVSubtitleRect.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
index e2f6c88..9e9eed6 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg_1.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg_1.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
index a3bf42d..f1171a5 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg_1.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_1.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg_2.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg_2.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
index c190e68..8cf45b6 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/Libffmpeg_2.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/Libffmpeg_2.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/RcOverride.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/RcOverride.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
index 71e29d4..c20f227 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/RcOverride.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/RcOverride.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/SwsFilter.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
similarity index 99%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/SwsFilter.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
index 88b77c8..e34e594 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/SwsFilter.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsFilter.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/SwsVector.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/SwsVector.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
index 6d794a0..3d123ff 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/SwsVector.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/SwsVector.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_create$free.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_create$free.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
index 44b8644..77dff7c 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_create$free.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_create$free.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init$alloc.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init$alloc.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
index 9e1d3ee..b4544b4 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init$alloc.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init$alloc.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init2$alloc.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init2$alloc.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
index 78e1d0e..b2cd42e 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init2$alloc.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$alloc.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init2$pool_free.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init2$pool_free.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
index 76ac0ea..18ff37b 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_buffer_pool_init2$pool_free.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_buffer_pool_init2$pool_free.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_format_control_message.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_format_control_message.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
index 1c02169..69d8a09 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_format_control_message.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_format_control_message.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_intfloat32.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_intfloat32.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
index 418b664..e10b45b 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_intfloat32.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat32.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_intfloat64.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
similarity index 98%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_intfloat64.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
index a91b04b..5c9c235 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_intfloat64.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_intfloat64.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_log_set_callback$callback.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_log_set_callback$callback.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
index e6aea23..d0fe43f 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/av_log_set_callback$callback.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/av_log_set_callback$callback.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avcodec_default_execute$func.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avcodec_default_execute$func.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
index e0cebfc..ea9b1f5 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avcodec_default_execute$func.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute$func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avcodec_default_execute2$func.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avcodec_default_execute2$func.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
index 0e6105c..030cd52 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avcodec_default_execute2$func.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avcodec_default_execute2$func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avfilter_action_func.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avfilter_action_func.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
index d2cb29b..c71c86d 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avfilter_action_func.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_action_func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avfilter_execute_func.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avfilter_execute_func.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
index fb3aea2..37eaf39 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avfilter_execute_func.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avfilter_execute_func.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$read_packet.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$read_packet.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
index e892330..f6132d7 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$read_packet.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$read_packet.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$seek.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$seek.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
index 1dedc65..25aea59 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$seek.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$seek.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$write_packet.java b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
similarity index 97%
rename from ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$write_packet.java
rename to ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
index f4dddd8..6468b5a 100644
--- a/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/windows/avio_alloc_context$write_packet.java
+++ b/ffmpeg4java-windows/src/main/java/com/nextbreakpoint/ffmpeg4java/avio_alloc_context$write_packet.java
@@ -1,6 +1,6 @@
// Generated by jextract
-package com.nextbreakpoint.ffmpeg4java.windows;
+package com.nextbreakpoint.ffmpeg4java;
import java.lang.invoke.*;
import java.lang.foreign.*;
diff --git a/ffmpeg4java-windows/src/main/java/module-info.java b/ffmpeg4java-windows/src/main/java/module-info.java
index 8e82f83..baed010 100644
--- a/ffmpeg4java-windows/src/main/java/module-info.java
+++ b/ffmpeg4java-windows/src/main/java/module-info.java
@@ -1,3 +1,3 @@
-module com.nextbreakpoint.ffmpeg4java.windows {
- exports com.nextbreakpoint.ffmpeg4java.windows;
+module com.nextbreakpoint.ffmpeg4java {
+ exports com.nextbreakpoint.ffmpeg4java;
}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 239a8ca..20e4698 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.nextbreakpoint
com.nextbreakpoint.ffmpeg4java
- 7.0.1-1.1
+ 7.0.1-1.2
pom
FFmpeg4Java
FFmpeg4Java provides a Java wrapper of FFmpeg library
@@ -273,8 +273,8 @@
windows
- ffmpeg4java-windows-test
- ffmpeg4java-windows-examples
+ ffmpeg4java-tests
+ ffmpeg4java-examples
@@ -284,8 +284,8 @@
linux
- ffmpeg4java-linux-test
- ffmpeg4java-linux-examples
+ ffmpeg4java-tests
+ ffmpeg4java-examples
@@ -295,8 +295,8 @@
macos
- ffmpeg4java-macos-test
- ffmpeg4java-macos-examples
+ ffmpeg4java-tests
+ ffmpeg4java-examples
@@ -366,8 +366,6 @@
${project.basedir}
**/target/${project.artifactId}-${project.version}-x86_64.jar
- **/target/${project.artifactId}-${project.version}-x86_64.jar
- **/target/${project.artifactId}-${project.version}-x86_64.jar