aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* GraphUI Scene/Shape: Add KeyListener for activeShapeSven Gothel2023-12-242-6/+98
|
* Bug 805: GraphUI: Add Widget 'marker' (a Group), derived by {MediaUI01 -> ↵Sven Gothel2023-12-195-124/+487
| | | | | | | | | | | | | MediaPlayer} and new RangeSlider - A widget specifies specific UI semantics including individual controls. - Being a {@link Group}, implementations provide shape(s) and its instance can be added to the user's scene. - Due to the specific nature of widgets, individual controls/listener may be provided with semantic values. +++ MediaPlayer exposes a RangeSlider for current position (view and control).
* GraphUI Shape Rectangle: Draw simple filled rect if lineWidth==0, drop ↵Sven Gothel2023-12-191-7/+8
| | | | AA_RENDERING_MASK from renderModes (not necessary for a rect)
* GraphUI Group: Allow override of clearImpl0() and destroyImpl0()Sven Gothel2023-12-191-5/+5
|
* GraphUI Shape: Unify 'resetState()' for clear and destroy, refine API docSven Gothel2023-12-191-16/+22
|
* GraphUI Shape: setParent() pp -> protected, allow to override setName()Sven Gothel2023-12-191-6/+6
|
* GraphUI Shape.move*(): Don't notify MotionListener on programmatic move.Sven Gothel2023-12-191-11/+16
|
* UIMediaGrid0{01}: Minor cleanup: Drop unused local FontSven Gothel2023-12-182-12/+4
|
* OMXGLMediaPlayer: Add 'printNativeInfo(..)' - completes commit ↵Sven Gothel2023-12-181-0/+6
| | | | d99c2d8b28470d335ab5b30124ef8b0607b3b90f
* GLMediaPlayer: TEXTURE_COUNT_DEFAULT 4 -> 3 as tested via UIMediaGrid01, ↵Sven Gothel2023-12-181-1/+1
| | | | usable w/ fix for Bug 1472 (Enhance A/V Sync)
* Bug 805: GraphUI: Add MediaUI01 widtget (MediaButton w/ full feature ↵Sven Gothel2023-12-185-129/+673
| | | | controls), used in demos UIMediaGrid0[01]
* Bug 805: GraphUI: Add Group.replaceShape(..) and Shape.getParent()Sven Gothel2023-12-183-2/+42
| | | | | | | | 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.
* GLMediaPlayer: Add printNativeInfo(..) exposing used native library ↵Sven Gothel2023-12-186-38/+90
| | | | information (if any), FFMPEG* utilizes NativeLibrary.get[Native]LibraryPath()
* Bug 805: GraphUI Scene/Shape Pick-Active/Interaction: Pick shall complete ↵Sven Gothel2023-12-182-142/+156
| | | | | | | | | | | | | | | | 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.
* Bug 805: GraphUI Group: Add 'widget-mode' used to utilize a group as one ↵Sven Gothel2023-12-182-2/+66
| | | | | | | | | 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
* GraphUI Shape: Fix Z{Ascending,Descending}Comparator using and exposing ↵Sven Gothel2023-12-181-16/+31
| | | | | | | getAdjustedZ() getAdjustedZ() simply returns `position.z() * getScale().z() + zOffset`, i.e. with added zOffset reflecting activation status (renders shape/group on top).
* Graph Shader: Fix 'curverenderer01-single.vp' aligning w/ ↵Sven Gothel2023-12-181-2/+3
| | | | 'curverenderer01-pass1.vp' (commit 297c48f4fefd1ab59800524ea5f0dd56684d6786)
* GraphUI Container: Cleanup or Group/Scene add*/remove* methodsSven Gothel2023-12-182-17/+55
|
* GraphUI Shape: Rename is{Container -> Group}(), denoting a group onlySven Gothel2023-12-182-3/+3
|
* Graph Region: Edit API doc for AA_RENDERING_MASKSven Gothel2023-12-181-1/+1
|
* GraphUI Padding, Margin, Gap: Use zero value constant None instead of ↵Sven Gothel2023-12-187-22/+22
| | | | default ctor
* GraphUI Alignment: Use Alignment.None instead of default ctor.Sven Gothel2023-12-182-7/+7
|
* GraphUI UISceneDemo20: Only use ALAudioSink if its context is already ↵Sven Gothel2023-12-181-5/+9
| | | | created (ready)
* GraphUI MediaButton: Disable AA_RENDERING_MASK for GLMediaPlayer color ↵Sven Gothel2023-12-181-1/+2
| | | | | | | | | 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.
* MovieSBSStereo: GLMediaPlayer.setTextureMinMagFilter() must be called before ↵Sven Gothel2023-12-181-1/+1
| | | | initialization
* GraphUI Shape: Rename [set|is]{Enabled -> Visible}(..) for claritySven Gothel2023-12-188-26/+32
| | | | | Note that invisible shapes are still considered for picking/activation. To completely mute the shape, issue {@link #setInteractive(boolean)} as well.
* GraphUI Shape/Group: Group.isActive() also returns true if any child is ↵Sven Gothel2023-12-122-1/+12
| | | | active; Add isContainer() to avoid rfeflection
* GraphUI Shape: Use Shape.MoveListener for Shape.onMove(..) providing more ↵Sven Gothel2023-12-123-28/+34
| | | | details of the translation
* GraphUI Shape: Add IO_ACTIVABLE stateSven Gothel2023-12-121-17/+38
|
* GraphUI Shape: Simplify setIO(..) usage (private)Sven Gothel2023-12-121-7/+7
|
* GraphUI Scene: Allow attaching GLAutoDrawable manually and adding ↵Sven Gothel2023-12-041-2/+26
| | | | GLEventListener (API)
* FFMpeg: Just be nice and flush GL stream, no finish sync requiredSven Gothel2023-12-041-2/+8
|
* FFMpeg: Fix and clarify 'resend package' and 'continue draining frames' statesSven Gothel2023-12-041-21/+30
|
* Bug 1479 - NativeLibrary: Add getNativeLibraryPath() returning actual native ↵Sven Gothel2023-11-265-5/+20
| | | | library path, support throughout DynamicLibraryBundle[Info]
* GLMediaPlayer.getPerfString(): Don't show audio pts values is no_audio, ↵Sven Gothel2023-10-161-17/+19
| | | | misleading and wrong info (e.g. on mute)
* GLMediaPlayer: Don't resetAVPTS() on resume(), allowing less AV sync ↵Sven Gothel2023-10-161-13/+10
| | | | disruption after pause(flush:=false)
* GLMediaPlayer: Recognize !use_audio when repeating (caching) a video-frame, ↵Sven Gothel2023-10-161-26/+27
| | | | i.e. ignore audio_queued_ms in such case (Fixes video sync on SCR w/o audio)
* GLMediaPlayerImpl: Use a PTS av_scr_cpy from av_scr for getPTS() avoiding ↵Sven Gothel2023-10-161-7/+12
| | | | direct user-exposure and potential data-race
* GLMediaPlayerImpl: Don't reset SCR on video_scr_reset or irq'ed rendering ↵Sven Gothel2023-10-161-2/+2
| | | | w/o video-frame (fixes 'massive' seek'ing)
* FFMPEGMediaPlayer: Remove unconditional DEBUG outputSven Gothel2023-10-161-1/+1
| | | | Left behind hacking for AV sync ..
* Bug 1472: GLMediaPlayer.getNextTexture(): Fix playSpeed > 1; Handle ↵Sven Gothel2023-10-161-88/+86
| | | | | | !hasVideoFrame upfront, simplifying sync-block Fix playSpeed > 1: dt_v (keep playSpeed factor), allow drop frame on no-frames w/ playSpeed > 2
* Bug 1472: GLMediaPlayer: Handle setPlaySpeed() like setAudioVolume() if ↵Sven Gothel2023-10-162-15/+29
| | | | stream is not yet initialized or playing, cached clipped value and set at initGL(..)
* Bug 1472: GLMediaPlayer: Expose SCR PTS and encourage its usage, removes ↵Sven Gothel2023-10-165-19/+43
| | | | user from selecting video or audio PTS.
* GLJPanel: Fix DEBUG output USE_GLSL_TEXTURE_RASTERIZER -> ↵Sven Gothel2023-10-161-1/+1
| | | | USE_GLSL_VERTICAL_FLIP, changed names in commit d6cf89f22a5926b437c4430eb166972d90fd92be
* GLJPanel: Allow disabling GLSL vertical flip programmatically via ↵Sven Gothel2023-10-161-14/+26
| | | | | | | | | | | | | | 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()}.
* Bug 1472: Enhance GLMediaPlayer AV Sync: Fine tune AV heuristics to ↵Sven Gothel2023-10-151-20/+28
| | | | | | | | | | | | | | | | | | | | | | | | (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.
* Bug 1472: Enhance GLMediaPlayer AV Sync: Fix FFMPEGMediaPlayer's audio ↵Sven Gothel2023-10-152-5/+10
| | | | | | | | | 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.
* Bug 1472: Enhance GLMediaPlayer AV Sync: Utilize SCR aware audio PTS used as ↵Sven Gothel2023-10-158-242/+473
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
* Bug 1472: GLMediaPlayerImpl: Track repeatedFrame countSven Gothel2023-10-041-5/+5
|
* Bug 1472: GLMediaPlayer AVSync: Refine AVSync debug output (WIP)Sven Gothel2023-10-041-12/+47
| | | | Using `-Djogl.debug.GLMediaPlayer.AVSync -Djogamp.debug.AudioSink` to trace AVSync issues for now.