aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/native/libav
Commit message (Collapse)AuthorAgeFilesLines
* GLMediaPlayer: Use URI instead of URL / Misc refinementsSven Gothel2013-08-171-16/+4
| | | | | | | | | | - GLMediaPlayer: Use URI instead of URL, allowing passing a non resolved location - Java's URL doesn't allow 'other' protocols, i.e. RTSP - GLMediaPlayer: Add Table of test streams and their location .. - FFMPEGMediaPlayer - Handle av_read_play/pause response on java side, ignore error - simply dump in DEBUG_NATIVE mode
* GLMediaPlayer Multithreaded Decoding: GLMediaPlayer* (Part-4) - WIPSven Gothel2013-08-162-31/+90
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Use Platform.currentTimeMillis() for accurate timing! - GLMediaPlayer / GLMediaPlayerImpl - Add DEBUG_NATIVE property jogl.debug.GLMediaPlayer.Native for verbose impl. messages, i.e. ffmpeg/libav - Add 'synchronization' section in GLMediaPlayer API doc (WIP) - Use passive non-blocking video synchronization, i.e. repeat frames instead of 'sleep'. Thx to Xerxes's suggestion. - Add flushing of cached decoded frames, allowing to remove complicated 'videoSCR_reset_latch' - FramePusher (threaded decoding): - Always create a shared context! - Release context while pausing - Pre/post 'getNextTextureImpl()' actions only at makeCurrent/release. - newFrameAvailable(..) signal after decoded frame is enqueued - FFMPEGDynamicLibraryBundleInfo - Bind add. functions of libavcodec: + "av_init_packet", + "av_new_packet", + "av_destruct_packet", - Bind add. functions of libavformat: + "avformat_seek_file", + "av_read_play", + "av_read_pause", - DEBUG property := FFMPEGMediaPlayer.DEBUG || DynamicLibraryBundleInfo.DEBUG; - FFMPEGMediaPlayer - Use libavformat's 'av_read_play()' and 'av_read_pause()', which may get utilized for network streams, e.g. RTSP - getNextTextureImpl(..): - Fix retry loop - Use postNextTextureImpl/preNextTextureImpl if desired (PSM) - Native: - Use fixed my_av_q2i32(..) macro (again) - Use INVALID_PTS marker (synced w/ Java code) - DEBUG: Dump more detailed frame information - TODO: Consider passing frame_delay, especially for repeated frames! - Tests (MovieSimple, MovieCube): - Refine KeyEvents control for seek and speed. - TODO: - Proper audio clock calculation - difficult w/ OpenAL ! - Video / Audio sync: - seek ! - streams w/ very async A/V frames - Test Streams: - Five-minute-sync-test.mp4 - Audio-Video-Sync-Test-Calibration-23.98fps-24fps.mp4 - sound_in_sync_test.mp4 - big_buck_bunny_1080p_surround.avi
* GLMediaPlayer Multithreaded Decoding: GLMediaPlayer* (Part-3) - WIPSven Gothel2013-08-142-79/+163
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - GLMediaPlayer - Remove State.Stopped and method stop() - redundant, use pause() / destroy() - Add notion of stream IDs - Add API doc: State / Stream-ID incl. html-anchor - Expose video/audio PTS, .. - Expose optional AudioSink - Min multithreaded textureCount is 4 (EGL* and FFMPEG*) - GLMediaPlayerImpl - Move AudioSink rel. impl. to this class, allowing a tight video implementation reusing logic. - Remove 'synchronized' methods, synchronize on State where applicable - implement new methods (see above) - playSpeed is handled partially in AudioSink. If it exeeds AudioSink's capabilities, drop audio and rely solely on video sync. - video sync (WIP) - video pts delay based on geometric weight - reset video SCR if 'out of range', resync w/ PTS - - FramePusher - allow interruption when pausing/stopping, while waiting for next avail free frame to decode. - FFMPEGMediaPlayer - Add proper AudioDataFormat negotiation AudioSink <-> libav - Parse libav's SampleFormat - Remove AudioSink interaction (moved to GLMediaPlayerImpl) - Tests (MovieSimple, MovieCube): - Add aid/vid selection - Add KeyListener for actions: seek(..), play()/pause(), setPlaySpeed(..) - Dump perf-string each 2s - TODO: - Add audio sync in AudioSink, similar to GLMediaPlayer's weighted video delay, here: drop audio frames.
* GLMediaPlayer: Add multithreaded decoding w/ textureCount > 2 where ↵Sven Gothel2013-08-102-14/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | available EGL/FFMPeg. WIP! Off-thread decoding: If validated (impl) textureCount > 2, decoding happens on extra thread. If decoding requires GL context, a shared context is created for decoding thread. API Changes: - initGLStream(..): Adds 'textureCount' as argument. - TextureSequence.TexSeqEventListener.newFrameAvailable(..) exposes the new frame available - TextureSequence.TextureFrame exposes the PTS (video) Implementation: - 'int validateTextureCount(int)': implementation decides whether textureCount can be > 2, i.e. off-thread decoding allowed, default is NO w/ textureCount==2! - 'boolean requiresOffthreadGLCtx()': implementation decides whether shared context is required for off-thread decoding - 'syncFrame2Audio(TextureFrame frame)': implementation shall handle a/v sync, due to audio stream details (pts, buffered frames) - FFMPEGMediaPlayer extends GLMediaPlayerImpl, no more EGLMediaPlayerImpl (redundant) +++ - SyncedRingbuffer: Expose T[] array +++ TODO: - syncAV! - test Android
* FFMPEGPlayer Audio Sink Refactoring ..Sven Gothel2013-07-192-57/+34
| | | | | | | | | | | | | | | | - AudioSink w/ AudioFrame and formats public - ALAudioSink uses a circular buffer now, hence relaxes the one-threaded player mode - FFMPEGMediaPlayer uses multiple audio frames (equal to the ALAudioSink number) and wraps data to NIO buffer w/o copy. - FFMPEGMediaPlayer audio threading currently disabled: distorted sound Seems that the ALAudioSink's circular buffer usage is good enough for now. - Verbosity only w/ DEBUG flag - New SyncedRingbuffer for effcient synced buffering
* FFMPEGMediaPlayer: fix audio pts for varying audio frame format.Xerxes Rånby2013-05-121-1/+1
| | | | Signed-off-by: Xerxes Rånby <[email protected]>
* FFMPEGMediaPlayer: Poor mans audio/video sync.Xerxes Rånby2013-05-121-6/+32
| | | | Signed-off-by: Xerxes Rånby <[email protected]>
* FFMPEGMediaPlayer: blocking Java Sound outputXerxes Rånby2013-05-101-4/+6
|
* FFMPEGMediaPlayer: Add updateSound callback for passing decoded jni audio ↵Xerxes Rånby2013-05-101-1/+13
| | | | | | frames to java. Signed-off-by: Xerxes Rånby <[email protected]>
* FFMPEGMediaPlayer: Decode all frames inside video packet.Xerxes Rånby2013-05-101-5/+29
| | | | Signed-off-by: Xerxes Rånby <[email protected]>
* FFMPEGMediaPlayer: Lookup decoded audio data_size using ↵Xerxes Rånby2013-05-101-6/+18
| | | | | | av_samples_get_buffer_size Signed-off-by: Xerxes Rånby <[email protected]>
* FFMPEGMediaPlayer: Use the Audio codec to decode audio. Also prevent double ↵Xerxes Rånby2013-05-101-3/+5
| | | | | | free of packet memory. Signed-off-by: Xerxes Rånby <[email protected]>
* FFMPEGMediaPlayer: Decode audio frames.Xerxes Rånby2013-05-101-7/+19
| | | | | | | | | | | | | Re-enable code to decode audio frame. Throw a runtime exception for unimplemented sp_avcodec_decode_audio3 fallback. Fix pts calculation to prevent division by zero caused by type truncation. Fix aPTS calculation to use valid data. Hide pts & aPTS info while running non-verbose. Signed-off-by: Xerxes Rånby <[email protected]>
* FFMPEGMediaPlayer: Fix mpeg seek using time_base.num 1 , time_base.den 90000Xerxes Rånby2013-04-151-3/+5
| | | | | | | Prevent division and multiplication by zero errors in native code after mpeg video seek caused by type truncation. Signed-off-by: Xerxes Rånby <[email protected]>
* C code: remove warningsSven Gothel2012-07-061-3/+3
|
* FFMPEGMediaPlayer: Fix NPE; Add remarks about binary incompatibility in ↵Sven Gothel2012-04-211-155/+198
| | | | | | | | | | | upcoming version (master branch) We need native structure access methods to deal with API changes in the libav headers, which break binary compatibility! Currently we are binary compatible w/ [0.6 ?, ] 0.7 and 0.8 but not w/ trunk. Tested: Linux, Windows and OSX (self compiled binary)
* Adding initial Libav/FFMpeg GLMediaPlayer implementationSven Gothel2012-04-162-0/+780
The Java classes already slipped through in commit 10935e1ec0d8ed677bc3fddfaa8cd73898a3bcbf - oops. Since we cannot provide a Libav binary (even though Google does in Android and Chrome) due to legal uncertainities .. we dynamically link to an existing Libav / FFmpeg library in a 'relaxed' manner. Ie. we allow certain recent functions to be absent to be able to run on a wider range of Libav versions. Currently tested on Debian Linux and Windows7 64bit/32bit Binaries for Win/OSX: - Windows http://ffmpeg.zeranoe.com/builds/ - OSX http://www.ffmpegx.com/ Features: - Dynamic relaxed linking to Libav (see above) - YUV420P texture lookup function shader stub (conversion to RGB) - 1-copy only (decoder buffer to texture) - simple - uses libavformat's network streaming - fixes some odd PTS values TODO: - Audio output (Should use OpenAL, duh) - Seek works poorly - Offthread multi-texture fetching for smoother animation - Maybe more pixelformat conversions