| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
d99c2d8b28470d335ab5b30124ef8b0607b3b90f
|
|
|
|
| |
usable w/ fix for Bug 1472 (Enhance A/V Sync)
|
|
|
|
| |
controls), used in demos UIMediaGrid0[01]
|
|
|
|
|
|
|
|
| |
Group.replaceShape(..) allows replacing a shape w/o disturbing a layout, e.g. to zoom one element
by taking it out of a grid-group and placing it on-top of the Scene while using a placeholder in the grid
until returned.
Shape.getParent() - depending on use-case (w/o DAG) - allows access and control of a shape's Group.
|
|
|
|
| |
information (if any), FFMPEG* utilizes NativeLibrary.get[Native]LibraryPath()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
traversion for most inner interactive shape; ...
Pick shall complete traversion for most inner interactive shape
- Shape::dispatchMouseEvent() is only invoked for interactive shapes, impl. simplified.
- Remove 'Scene::dispatchMouseEvent(..)', use 'Scene::dispatchMouseEventPickShape(..)' for given use cases
- Scene::dispatchMouseEventForShape(..) used for mouseDragged() only,
i.e. using activeShape.
+++
This allows a 'group widget' being used, allowing to click on inner shapes like a button.
|
|
|
|
|
|
|
|
|
| |
visible UI widget element (activation, visibility)
Enabled widget behavior for a group causes
- the whole group to be shown on top on (mouse over) activation of one of its elements via getAdjustedZ()
- this group's onActivation(Listener) to handle all it's elements activation events
- isActive() of this group and its sub-groups to return true if one of its elements is active
|
|
|
|
|
|
|
| |
getAdjustedZ()
getAdjustedZ() simply returns `position.z() * getScale().z() + zOffset`,
i.e. with added zOffset reflecting activation status (renders shape/group on top).
|
|
|
|
| |
'curverenderer01-pass1.vp' (commit 297c48f4fefd1ab59800524ea5f0dd56684d6786)
|
| |
|
| |
|
| |
|
|
|
|
| |
default ctor
|
| |
|
|
|
|
| |
created (ready)
|
|
|
|
|
|
|
|
|
| |
texture (effiency, less artifacts)
2-pass Graph-AA is not desired for video textures to enhance efficiency and reduce artifacts.
Consider using 'mPlayer.setTextureMinMagFilter( new int[] { GL.GL_LINEAR, GL.GL_LINEAR } )'
of passed GLMediaPlayer instance to use bilinear filtering for different sizes.
|
|
|
|
| |
initialization
|
|
|
|
|
| |
Note that invisible shapes are still considered for picking/activation.
To completely mute the shape, issue {@link #setInteractive(boolean)} as well.
|
|
|
|
| |
active; Add isContainer() to avoid rfeflection
|
|
|
|
| |
details of the translation
|
| |
|
| |
|
|
|
|
| |
GLEventListener (API)
|
| |
|
| |
|
|
|
|
| |
library path, support throughout DynamicLibraryBundle[Info]
|
|
|
|
| |
misleading and wrong info (e.g. on mute)
|
|
|
|
| |
disruption after pause(flush:=false)
|
|
|
|
| |
i.e. ignore audio_queued_ms in such case (Fixes video sync on SCR w/o audio)
|
|
|
|
| |
direct user-exposure and potential data-race
|
|
|
|
| |
w/o video-frame (fixes 'massive' seek'ing)
|
|
|
|
| |
Left behind hacking for AV sync ..
|
|
|
|
|
|
| |
!hasVideoFrame upfront, simplifying sync-block
Fix playSpeed > 1: dt_v (keep playSpeed factor), allow drop frame on no-frames w/ playSpeed > 2
|
|
|
|
| |
stream is not yet initialized or playing, cached clipped value and set at initGL(..)
|
|
|
|
| |
user from selecting video or audio PTS.
|
|
|
|
| |
USE_GLSL_VERTICAL_FLIP, changed names in commit d6cf89f22a5926b437c4430eb166972d90fd92be
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
setUseGLSLVerticalFlip(false) in addition to property 'jogl.gljpanel.noglsl'
Suche setting would enable the slow path of flipping a potentially 'big' framebuffer via the CPU.
The best performance path is using the GLSL shader to vertically flip the FBO,
or - w/o using the shader - to render the GL scene vertically-flipped and set the flag 'flipVertical' to false.
- property "jogl.gljpanel.noverticalflip"
- setter setSkipGLOrientationVerticalFlip(boolean)
If set to <code>true</code>, user needs to flip the OpenGL rendered scene
<i>if {@link #isGLOriented()} == true</i>, e.g. via the projection matrix.<br/>
See constraints of {@link #isGLOriented()}.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(multiple of) audio_dequeued_ms
The case of lagging audio to the audio master-clock (by experience) is a rare and probably synthethic case
of the AV async videos, was
dt_a > MAX_VIDEO_ASYNC && d_apts > 0
now with increased threshold max_adelay = Math.max( 4*audio_dequeued_ms, 4*MAX_VIDEO_ASYNC )
dt_a > max_adelay && d_apts > 0
In conjunction the video-repeat case (video pts > SCR) shall use a higher threshold _when_
detecting, i.e. min1_audio_queued_ms = Math.max( 2*audio_dequeued_ms, 2*MAX_VIDEO_ASYNC )
to ensure enough buffered audio exists (2 audio-frames) before the next getNextTexture()
hits within vsync.
This early detection and min1_audio_queued_ms threshold
is double of the late threshold for video-repeat min0_audio_queued_ms = Math.max( audio_dequeued_ms, MAX_VIDEO_ASYNC ),
when the to-be repeated frame shall be displayed within getNextThreshold().
Failing this requirement (1 audio-frame) will discard it and gather the next video-frame,
allowing to fill the audio-buffer. A subsequent AV sync shall correct the difference.
Strategy is less intervention on less buffered-audio.
This shorter tolerance also reduces some video lag or stuttering on 24fps -> 60fps films.
|
|
|
|
|
|
|
|
|
| |
resample: Use swr_get_out_samples(..) to calculate the required output sample count
Notable when playing audio with e.g. 24k sample rate on a 48k OpenAL ALAudioSink,
the sample duration was cut in half due to erroneous resampling missing half the required samples.
Using swr_get_out_samples(..) resolves this issue pre swr_convert(..), the resampling.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
master-clock, enabling proper AV sync w/ untouched audio
We can finally utilize the added pass through audio PTS, see commits
- GlueGen 52725b4c6525487f93407f529dc0a758b387a4fc
- JOAL 12029f1ec1d8afa576e1ac61655f318cc37c1d16
This enables us to use the audio PTS as the master-clock and adjust video to the untouched audio.
In case no audio is selected/playing or audio is muted,
we sync merely on the system-clock (SCR) w/o audio.
AV granularity is 22ms, however, since the ALAudioSink PTS may be a little late,
it renders even a slightly better sync in case of too early audio (d_apts < 0).
Since video frames are sync'ed to audio, the resync procedure may result
in a hysteresis swinging into sync. This might be notable at start
and when resumed audio or after seek.
We leave the audio frames untouched to reduce processing burden
and allow non-disrupted listening.
Passed AV sync tests
- Five-minute-sync-test.mp4
- Audio-Video-Sync-Test-Calibration-23.98fps-24fps.mp4
- Audio-Video-Sync-Test-2.mkv
|
| |
|
|
|
|
| |
Using `-Djogl.debug.GLMediaPlayer.AVSync -Djogamp.debug.AudioSink` to trace AVSync issues for now.
|
|
|
|
|
| |
FFMPEGMediaPlayer: This also effectively reduces the audio buffer size from 3000ms -> 768ms,
the new default for audio streams with video.
|
|
|
|
|
|
|
|
|
|
|
| |
custom name against GLSL internal 'texture2D', add missing VideoPixelFormat conversions
Always use own textureLookupShader, avoiding confusion or even race conditions.
Validate textureLookupShader custom name against GLSL internal 'texture2D' (illegal override)
Add missing VideoPixelFormat conversions:
- RGB24, ARGB, RGBA, ABGR, BGRA
|
|
|
|
| |
instead hard coded branch
|
| |
|
|
|
|
| |
methods accordingly
|
|
|
|
|
|
|
|
| |
allowing to properly take-down user resources at dispose(GLAutoDrawable)
Used for UISceneDemo20 to stop and release SimpleSineSynth and its ALAudioSink.
The latter causes a bad exit (crash at OpenAL32.dll) on OpenJDK's Window Binary if not stopped!
|
|
|
|
| |
Callbacks as recommended
|