| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
(PGS ..) via FFMPEGFMediaPlayer/FFmpeg
FFMPEGFMediaPlayer related changes:
- Add libswscale (6th FFmpeg lib used) for sws_getCachedContext(), sws_scale() and sws_freeContext(),
used natively to convert the palette'ed bitmap into RGBA colorspace -> GL texture
- Handling AVSubtitleRect.type SUBTITLE_BITMAP
-- only handled if libswscale is available
-- config/adjust texture object
-- sws_scale palette'ed bitmap to texture
-- intermediate memory is cached, may be resized and free'ed at destroy
-- texture objects are managed and passed from GLMediaPlayerImpl,
as they are also forwarded to player client via SubBitmapEvent
- Passing the AVCodecID to GLMediaPlayerImpl, converted to our CodecID enum.
- Unifying creation and opening of AVCodecContext with 'createOpenedAVCodecContext(..)'
+++
SubtitleEvent*
- SubTextEvent now also handles ASS.Dialogue (FFmpeg 4)
besides ASS.Event (FFmpeg 5, 6, ..).
+++
GLMediaPlayerImpl
- Added ringbuffer subTexFree, managing Texture for bitmap'ed subtitles
-- Uses 1 bitmap-subtitle Texture per used textureCount in cache,
as one bitmap-subtile can be displayed per frame.
Could be potentially reduced to just 2 .. but resources used are
relatively low here.
- Validating subTexFree + videoFramesFree usage,
use blocking get/put ringbuffer due to utilization from different threads.
- Receives subtitle content from native getNextPacket0() via callback,
creates SubtitleEvent instance and passes it to a SubtitleEventListener - if exists.
(See MediaButton example)
-- SubBitmapEvent also gets its special SubBitmapEvent.TextureOwner to handle client releasing
the event and allowing us to put back the Texture resource to 'subTexFree'.
This passing through of the Texture object is probably a weakness of this lifecycle
and requires the client to ensure SubtitleEvent.release() gets called.
See MediaButton example!
- Exposing CodecID, allowing clients like MediaButton to handle SubtitleEvent content according to codec
|
|
|
|
|
|
|
|
|
| |
Region.COLORTEXTURE_LETTERBOX_RENDERING_BIT to TextureSequence and add enabling/disabling of aratio adjustment + letter-box back-color
TextureSequence color-texture params fetched from Graph VBORegion* and fed into shader.
This allows more flexibility in aspect-ratio adjustment as well as setting a clipping background color for
the added letter-box space.
|
| |
|
|
|
|
| |
and hence also promoting VideoPixelFormat
|
| |
|
|
|
|
| |
alpha 0 instead of the debug color white vec4(1), which leads to the white seam if out of gcu_ColorTexBBox
|
|
|
|
| |
need to issue Shape.updateMat()
|
|
|
|
| |
pending setup/update of texture and image dimensions
|
|
|
|
| |
available; JOGL ImageSequence: Add addFrame(GL, TextureFrame), remove*Frame() and isSequenceAnimating()
|
|
|
|
| |
lock free
|
|
|
|
|
|
|
|
| |
applyMatToMv() and getMat(*)
It is sufficient to mark the internal iMat dirty when mutating the source values (pos, ..) and calling updateMat() only once when used in applyMatToMv() and getMat(*).
iMatIdent can also be set to true within updateMat() IF neither mutations occured, i.e. no translocation, scale or rotation.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
GLMediaEventListener, easing listener callbacks; Prepare SubtitleEventListener generalization (Bug 1494)
Moves pushSound(), pushSubtitle*() from FFMPEGMediaPlayer to GLMediaPlayerImpl,
as it is handled in a generic way - even though currently only called by native FFMPEGMediaPlayer implementation.
Note: This patch is incomplete, i.e. not even compile clean.
But choses as-is to semantically split the work to ease review.
|
|
|
|
| |
provided by owner to take back borrowed resources (texture of bitmap subtitle)
|
|
|
|
| |
color/blending and subLineDY; MediaPlayer: Add full infoLine toggle with click on infoBox
|
| |
|
|
|
|
|
|
|
| |
func-ptr in native; readNextPacket0() passes video+subtitle texTarget and texID
For bitmap subtitles we need to push the bitmap into its own texture.
Hence readNextPacket0() must switch to used texture using glEnable() on !core and glBindTexture().
|
|
|
|
| |
to pts [ms] (fixed); Use ASSEventLine packets within proper pts only.
|
|
|
|
| |
implementations: Either Uninit, Init, Pause or Play (exclusive)
|
|
|
|
| |
GLMediaPlayer
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
zoomSize == 1, full-screen)
|
|
|
|
| |
ass/saa) support via GLMediaPlayer/FFMPEGMediaPlayer
|
|
|
|
|
|
|
|
| |
support via FFMpeg
TODO:
- We may want to refine subtitle PTS handling
- We may want to support bitmapped subtitles
|
|
|
|
| |
GraphShape.drawImpl0(..) override;
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
show their language as a button - press to switch to next
|
|
|
|
|
|
|
|
| |
streams and languages and add convenient switchStream(..) entry.
audio/video/subtitle streams and language metadata is maintained by arrays holding the stream-IDs and language string identifier.
Implementation added in FFMPEGPlayer for these data-sets.
|
|
|
|
| |
SliderAdapter.clicked() as dragged is always called
|
| |
|
| |
|
| |
|
|
|
|
| |
button; Fix tooltip help; Make slower-speed reduce by half if <= 1
|
|
|
|
| |
response when active
|
|
|
|
| |
activeRGBAModulateOn.
|
|
|
|
| |
API doc to ease usage
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
shared GLContext, removing resource restrictions
In a use case with hundreds of GLMediaPlayer instances,
this causes the application to bail out due to running out of resources.
+++
GLMediaPlayer exposes resource restrictions and locking related
with the created off-thread shared GLContext
due to its newly created NativeWindow *GraphicsDevice instance (on X11).
On the X11 platform, the *GraphicsDevice actually uses a native resource (X11 Display handle) and hence creating such device is costly and limited.
To operate an off-thread GLContext w/o actual X11 input handling,
it is *NOT* required to use a new instance.
+++
Further more, the device is using locking.
To operate an off-thread GLContext, it is *NOT* required to use locking on it
as it does not perform actual X11 input handling etc.
All operations are performed on the shared GL context.
+++
Solution is to create a shared non-locking device clone
compatible with the source.
A share counter shall determine that the last one actually gets destructed.
The usual ..
|
|
|
|
|
|
|
|
|
| |
[initStreamImpl - destruction]
initStreamImpl() calls ffmpeg natives.setStream0(..), which in turn callsback to the GLMediaPlayerImpl
and FFMPEGPlayer and hence requires a valid moviePtr. In total, it covers a longer time period.
This patch uses a moviePtrLock object avoiding destruction while within initStreamImpl.
|
|
|
|
| |
DefaultGraphicsDevice.swap{Device->}HandleAndOwnership()
|
|
|
|
|
|
|
|
|
|
| |
DefaultGraphicsDevice: Move ownership (Object) code into base class ensuring same code
NativeWindowFactory.createDevice(..) w/ unitID
- Allows cloning a device instance with same parameter.
DefaultGraphicsDevice: Move ownership (Object) code final into base class ensuring same code
- Rename DefaultGraphicsDevice.swapDeviceHandleAndOwnership() -> swapHandleAndOwnership()
|
|
|
|
|
|
|
|
|
|
| |
bit-shift expressions and simplify it
commit 1dcfdf71c09c6d774ac47012c05e09da4a085d7b
- still used the 'hash code' bit shift pattern, not necessary -> simplified
- the value as not ensured to be long, hence conversion occured
This caused Graph's MSAA not being picked up properly using the shaderKey.
|
| |
|
| |
|