Migrate Linux player from GStreamer Java/JNA to native C via JNI#185
Merged
Conversation
Replace the entire Linux video player backend with a native C library using GStreamer C API directly, matching the macOS/Windows JNI architecture. - Add native C GStreamer player (playbin + appsink + scaletempo + level) - Add JNI bridge with 27 native methods - Add CMake build system and build.sh for Linux - Add Kotlin SharedVideoPlayer JNI binding - Rewrite LinuxVideoPlayerState with coroutine-driven polling (like Mac) - Add output scaling support via appsink caps - Add queue element for thread decoupling between decoder and frame extraction - Add dedicated bus polling thread (no GLib main loop needed) - Remove GStreamer Java (gst1-java-core) dependency - Remove JNA dependency entirely, replace with CurrentPlatform utility - Update all tests to use CurrentPlatform instead of JNA Platform
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
NativeVideoPlayer.c) using GStreamer C API directly (playbin + appsink + scaletempo + level), matching the macOS/Windows JNI architectureSystem.getProperty("os.name")viaCurrentPlatformutilitygst1-java-coredependency — GStreamer is now used exclusively through the native C layerLinuxVideoPlayerStatewith coroutine-driven polling,AtomicLongnative pointer, double-buffered Skia bitmaps, and output scaling — identical pattern toMacVideoPlayerStategst_bus_timed_pop(no GLib main loop needed)queueelement between decoder and appsink for thread decouplingbuild.sh, producinglibNativeVideoPlayer.soembedded in JAR resourcesTest plan