aboutsummaryrefslogtreecommitdiffstats
path: root/src/jogl/classes
Commit message (Collapse)AuthorAgeFilesLines
* GLMediaPlayer Multithreaded Decoding: GLMediaPlayer* (Part-3) - WIPSven Gothel2013-08-149-414/+821
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - 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 Multithreaded Decoding: AudioSink (Part-2) - WIPSven Gothel2013-08-145-196/+601
| | | | | | | | | | | | | | | | | | | | | | | | | | | - AudioSink.AudioDataFormat - add fixedP (fixed-point or floating-point) - AudioSink - rename 'buffer count' to 'frame count' - add setPlaySpeed(..) - add isPlaying() - add play() - add pause() - add flush() - add: getFrameCount(), getQueuedFrameCount(), getFreeFrameCount(), getEnqueuedFrameCount(), - rename: writeData() -> enqueueData(..) - ALAudioSink - multithreaded usage - make ALCcontext current per thread, now required for multithreaded use Use RecursiveLock encapsulating the ALCcontext's makeCurrent/release/destroy, since the native operations seem to be buggy. NOTE: Think about adding these general methods to ALCcontext - implement new methods -
* SyncedRingbuffer: peek() don't throw an exceptionSven Gothel2013-08-141-2/+4
|
* GLMediaPlayer: Add multithreaded decoding w/ textureCount > 2 where ↵Sven Gothel2013-08-1011-483/+709
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* GLFBODrawableImpl.initialize(): Unrealize when already unrealized shall not ↵Sven Gothel2013-08-101-1/+8
| | | | throw an exception - only dump DEBUG info!
* GLDrawableFactory: Expose createDummyDrawable(..) / GLDrawableFactoryImpl: ↵Sven Gothel2013-08-102-11/+44
| | | | | | Make impl. methods final. createDummyDrawable(..) is useful for efficient shared context w/o actually rendering to this dummy drawable's framebuffer
* GLContext: Refine API doc (CONTEXT_NOT_CURRENT.. values) / Exception messageSven Gothel2013-08-102-5/+5
|
* FFMPEGMediaPlayer: Cleanup AudioPusher 'usage', i.e. disabled for now ↵Sven Gothel2013-07-201-64/+71
| | | | (subject to be removed).
* FFMPEGMediaPlayer: Fix yuv stored in alpha shader decode on ES2 and GL2Xerxes Rånby2013-07-201-8/+11
| | | | | Regression introduced by: dba2faf8520a43a809eb756869c6c97a0a2ef2cd
* FFMPEGPlayer Audio Sink Refactoring ..Sven Gothel2013-07-1912-287/+1183
| | | | | | | | | | | | | | | | - 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
* Merge remote-tracking branch 'petr-s/pr744'Sven Gothel2013-07-171-21/+58
|\
| * Fix Bug 744: Added support of RLE encoded .tgaPetr Skramovsky2013-07-171-21/+58
| |
* | Merge remote-tracking branch 'xranby/FFMPEGMediaPlayer'Sven Gothel2013-07-176-14/+427
|\ \ | |/ |/|
| * ALAudioSink: Reduce exessive CPU usage caused by polling alGetSourcei.Xerxes Rånby2013-07-161-0/+8
| | | | | | | | Signed-off-by: Xerxes Rånby <[email protected]>
| * FFMPEGMediaPlayer: Only instance ALAudioSink if JOAL is found on the classpath.Xerxes Rånby2013-07-161-7/+15
| | | | | | | | Signed-off-by: Xerxes Rånby <[email protected]>
| * AudioSink: interface add isAudioSinkAvailableXerxes Rånby2013-06-245-6/+16
| | | | | | | | Signed-off-by: Xerxes Rånby <[email protected]>
| * ALAudioSink: Fill buffers before sourcing them.Xerxes Rånby2013-06-241-1/+0
| | | | | | | | | | | | Fixes OpenAL invalid argument error when trying to fill buffers. Signed-off-by: Xerxes Rånby <[email protected]>
| * Merge remote-tracking branch 'xranby-github/FFMPEGMediaPlayer'Xerxes Rånby2013-06-246-14/+402
| |\ | | | | | | | | | | | | | | | | | | | | | Conflicts: src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGDynamicLibraryBundleInfo.java src/jogl/classes/jogamp/opengl/util/av/impl/FFMPEGMediaPlayer.java Signed-off-by: Xerxes Rånby <[email protected]>
| | * ALAudioSink: Buffer and playback audio data.Xerxes Rånby2013-06-201-22/+80
| | | | | | | | | | | | | | | | | | | | | There is still something wrong with the buffering part; OpenAL will complain at runtime. Signed-off-by: Xerxes Rånby <[email protected]>
| | * FFMPEGMediaPlayer: Add AudioSink interface.Xerxes Rånby2013-06-195-55/+235
| | | | | | | | | | | | | | | | | | | | | | | | | | | Use ALAudioSink when available and fallback to JavaSoundAudioSink when JOAL are not found on classpath. Java Sound playback moved from FFMPEGMediaPlayer into JavaSoundAudioSink. Signed-off-by: Xerxes Rånby <[email protected]>
| | * Merge remote-tracking branch 'xranby/github/FFMPEGMediaPlayer-audio' into ↵Xerxes Rånby2013-06-192-13/+163
| | |\ | | | | | | | | | | | | FFMPEGMediaPlayer
| | | * FFMPEGMediaPlayer: Limit video sync delay to 47ms in order to fix audio ↵Xerxes Rånby2013-05-121-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | buffer underrun. Signed-off-by: Xerxes Rånby <[email protected]>
| | | * FFMPEGMediaPlayer: Poor mans audio/video sync.Xerxes Rånby2013-05-121-12/+98
| | | | | | | | | | | | | | | | Signed-off-by: Xerxes Rånby <[email protected]>
| | | * FFMPEGMediaPlayer: blocking Java Sound outputXerxes Rånby2013-05-101-16/+17
| | | |
| | | * partial implementation of Java Sound outputXerxes Rånby2013-05-101-0/+51
| | | |
| | | * FFMPEGMediaPlayer: Add updateSound callback for passing decoded jni audio ↵Xerxes Rånby2013-05-101-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | frames to java. Signed-off-by: Xerxes Rånby <[email protected]>
| | | * FFMPEGMediaPlayer: Workaround forward seek delay caused by video sync.Xerxes Rånby2013-05-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Prevent the video sync code to delay a frame more than 1 second. Signed-off-by: Xerxes Rånby <[email protected]>
| | | * FFMPEGMediaPlayer: Workaround dropped video frames while decoding audio.Xerxes Rånby2013-05-101-1/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | | | A temporal solution before we implement video decode and frame cache in a separate thread. Signed-off-by: Xerxes Rånby <[email protected]>
| | | * FFMPEGMediaPlayer: Lookup decoded audio data_size using ↵Xerxes Rånby2013-05-101-3/+4
| | | | | | | | | | | | | | | | | | | | | | | | av_samples_get_buffer_size Signed-off-by: Xerxes Rånby <[email protected]>
* | | | Remedy for Bug 782: Issue Debug.initSingleton() or Debug.debug(..) before ↵Sven Gothel2013-07-1715-26/+98
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | calling 'PropertyAccess.isPropertyDefined(propName, default)' through Debug class. Calling 'Debug.isPropertyDefined(propName, default)' may be 'optimized' to 'PropertyAccess.isPropertyDefined(propName, default)', which would skip the modules Debug's class initialization. Iff that happens, an AccessControlException may happen, due to requesting an insecure property, since modules own Debug class has not been added it's trusted prefixes from within it's init block yet. This seems to be a bug of the JVM .. to me, however .. the above description is the only able to explain the issue at hand. +++ Fix calls Debug class own static methods, either Debug.initSingleton() or Debug.debug(), before calling 'isPropertyDefined(propName, default)'. +++ Also mark Debug class static methods final! +++
* | | | More shader fixes for core (GLSL 150): texture2D -> texture, texture3D is ↵Sven Gothel2013-07-172-0/+2
| | | | | | | | | | | | | | | | deprecated in 130 and removed in 150.
* | | | X11GLXContext: Remove redundant manual aliasing of ext. names in ↵Sven Gothel2013-07-171-10/+0
| | | | | | | | | | | | | | | | isExtensionAvailable() - impl. uses a mapping.
* | | | Fix OSX GL-core lack of pbuffer: GLDrawableFactory.canCreateGLPbuffer(..) ↵Sven Gothel2013-07-179-28/+28
| | | | | | | | | | | | | | | | | | | | | | | | add GLProfile argument, similar to canCreateFBO(..) In case a compatible non-core profile is requests, canCreateGLPbuffer(..) returns false on OSX.
* | | | Texture: Fix 'premultiply alpha' semantics in API doc description. Texture ↵Sven Gothel2013-07-171-9/+14
| | | | | | | | | | | | | | | | class does _nor_ premultiply RGBA image data by default!
* | | | Fix GLContext.isGLES3CompatAvailable(..) API doc and reorder query (from ↵Sven Gothel2013-07-161-4/+4
| | | | | | | | | | | | | | | | commit 1a20ef3aa1dc9acedd7da0475ee19d4c40b18498)
* | | | Redefine: isGLES3Compatible() and isGL4ES3(), i.e. allow GL4ES3 usage in ↵Sven Gothel2013-07-164-48/+101
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | case proper ES3_compat is given. isGLES3Compatible() and isGL4ES3() of GLBase _and_ GLContext includes [ GL >= 4.3, GL >= 3.1 w/ GL_ARB_ES3_compatibility and GLES3 ]. Tested GL 'aliasing' w/ TestGLProfile01NEWT, i.e. isGL*() and getGL*().
* | | | Fix FFMPEGMediaPlayer: Only use RED for GL3ES3 profiles, otherwise stick w/ ↵Sven Gothel2013-07-161-1/+7
| | | | | | | | | | | | | | | | | | | | | | | | ALPHA (regression of e92e561df9673ce77783d6fa3815a942a39a53c0) GLES2 does not and GL2 may not support RED!
* | | | FFMPEGMediaPlayer: Use GL_RED instead of deprecated GL_ALPHA, otherwise ↵Sven Gothel2013-07-161-6/+6
| | | | | | | | | | | | | | | | won't work w/ core >= GL3 profiles
* | | | Texture: Skip glEnable/glDisable TEXTURE target if using a core context!Sven Gothel2013-07-161-12/+14
| | | |
* | | | GLProfile: Abstract profile to impl. mapping, i.e. GL2ES2 -> GL3, favors ↵Sven Gothel2013-07-161-26/+20
| | | | | | | | | | | | | | | | core profile now - no more OSX exception!
* | | | GL*: Expose isGL*Core(); GLContext: isGL*() API doc cleanup - align queries.Sven Gothel2013-07-163-10/+64
| | | |
* | | | Only use base pipelines for Trace/Debug, mock others (ES2, GL2, ..); ↵Sven Gothel2013-07-1612-36/+320
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | BuildComposablePipeline: Unify GL identify methods - Only use base pipelines for Trace/Debug, mock others (ES2, GL2, ..) The Trace/Debug generated pipelines consume quite some space and only the actual GL*Impl pipeline is actually required. To make this work, we have to identify the GL type via it's downstream instance to implement isGL*() and getGL*() methods, see below! Adding dummy Trace/Debug type wrapper for GL2, GL3, GL3bc, GL4 and GLES2. BuildComposablePipeline: Unify GL identify methods As described above, Trace/Debug shall utilize downstream identification for isGL*() and getGL*() methods. Custom types, like FixedFuncImpl may choose to be identified by their class inheritance, by passing command-line argument 'gl_identity_by_assignable_class'.
* | | | Fix value range of CTX_* options bits, regression of commit ↵Sven Gothel2013-07-151-7/+10
| | | | | | | | | | | | | | | | 3a0d7703da32e9a5ddf08a334f18588a78038d88
* | | | Fix BuildComposablePipeline's isGL*/getGL* ; GLBase: ↵Sven Gothel2013-07-154-58/+216
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | getDownstreamGL()/getRootGL(); GLContext.isGL* added proper API doc., isGL3core()/hasNoDefaultVAO() and getDefaultVAO(). - Fix BuildComposablePipeline's isGL*/getGL* (regression of commit 3a0d7703da32e9a5ddf08a334f18588a78038d880) - GLBase: getDownstreamGL()/getRootGL() Allows user traversing through pipelined GL instances. Also added getRootGL() to GLContext. - GLContext.isGL* added proper API doc.: We test the actual context, not the profile. - GLContext isGL3core()/hasNoDefaultVAO() and getDefaultVAO() - Move isGL3code() def. back to pre 3a0d7703da32e9a5ddf08a334f18588a78038d880, i.e. Includes [ GL4, GL3 ] w/o GLES3. - Added hasNoDefaultVAO() and getDefaultVAO() .. incl. [ GL4, GL3, GLES3 ]
* | | | StringBuffer -> StringBuilderSven Gothel2013-07-155-10/+10
| | | |
* | | | Add Support for GL 4.3 (Bug 716) and ES 3.0 (Bug 717)Sven Gothel2013-07-1520-363/+851
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ES3 / GL4.3: - Update all EGL, GLX, WGL and GL (desktop and mobile) khronos headers to latest version. - GL3/gl3* -> GL/glcorearb* - Explicitly preserve ES2_compatibility and ES3_compatibility in header, most extension grouping was removed in new headers. - Always load all GLHeader to ensure proper extension association across all profiles. - Unified method signatures - Added GL_EXT_map_buffer_range to core - Using common 'glMapBufferImpl(..)' for all glMapBuffer(..) and glMapBufferRange(..) impl. - Init necessary fields of GL instances via 'finalizeInit()' called by reflection, if exist. This allows removing initialization checks, i.e. for all buffer validations. - BuildStaticGLInfo: Can handle new GL header structure, i.e. one CPP extenstion block incl. define + funcs. - GLJavaMethodBindingEmitter: Simply print the - No GL duplication due to new intermediate interfaces, see below - OO lineare inheritance (Added GL2ES3, GL3ES3 and GL4ES3 intemediates): GLBase - GL - GL2ES2 - GLES2 GLBase - GL - GL2ES2 - GL2GL3 - [ GL2, GL3 ] GLBase - GL - GL2ES2 - GL2ES3 - GL3ES3 - [ GL3 ] GLBase - GL - GL2ES2 - GL2ES3 - GL3ES3 - GL4ES3 - [ GLES3, GL4, .. ] - Expose 'usable' intermediate interfaces GL3ES3 and GL4ES3 in GLBase/GLProfile/GLContext via is*() and get*(). - GLContext*: - isGL3core() is true if [ GL4, GL3, GLES3 ] (added GLES3) - Added ctxProfile argument to allow handling ES versions: - getMaxMajor(..), getMaxMinor(..), isValidGLVersion(..) and decrementGLVersion(..) - mapGLVersions(..) prepared for ES ARB/KHR validation - EGLContext checks ES3 (via old ctx's GL_VERSION) - ExtensionAvailabilityCache adds GL_ES_Version_X_Y for ES. - Prelim tests w/ Mesa 9.1.3 GL Version 3.0 (ES profile, ES2 compat, ES3 compat, FBO, hardware) - OpenGL ES 3.0 Mesa 9.1.3 [GL 3.0.0, vendor 9.1.3 (Mesa 9.1.3)] - TODO: - Use KHR_create_context in EGLContext.createContextARBImpl(..) - More tests (Mobile, ..) +++ Misc: - GLContext*: - Complete glAllocateMemoryNV w/ glFreeMemoryNV.
* | | | PNGJ: Bump to git sha1 a0b1101ba2d37de39428ed55c8189502e24a3125 of ↵Sven Gothel2013-07-093-1336/+1438
| | | | | | | | | | | | | | | | | | | | | | | | https://code.google.com/p/pngj Part 2/2 - Started w/ 51427b92a2d9cd3fc619854e26536c9c6adad947 Missed rejected patches ..
* | | | Workaround NVidia driver 325.8 returning 4.3-compat for any compat request, ↵Sven Gothel2013-07-051-3/+10
| | | | | | | | | | | | | | | | | | | | | | | | i.e. allowing 4.3 and 4.4 for GL version validation. 4.4 b/c it may come up soon.
* | | | NEWT: Using WeakReferences for global cache of Display, Screen and Window ↵Sven Gothel2013-07-041-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | instances; Removing ref. at API destroy() is wrong ; Allow GC to clear .. - Removing ref. at API destroy() is wrong - Since all instances can be recreated, removing ref at destroy() is simply wrong. - Keep weak references until GC collects, i.e. user does not claim them anymore. - Safe for Display, since it holds it's EDT thread. - Window/Screen .. if user abandons reference .. nothing we can do here. - Allow GC to clear .. No need to hold ref loonger than user.
* | | | Refine 9c7ab101cf5261db3ef6160c0aa1906ffcce188b: Don't print extensions .. ↵Sven Gothel2013-07-041-8/+16
| | | | | | | | | | | | | | | | too much