Nirbheek Chauhan [Tue, 24 Mar 2015 13:34:26 +0000 (19:04 +0530)]
videoaggregator: Check if there's a previous buffer to 'keep'
If we want to keep a previous buffer but there's no previous buffer, we actually
need more data instead.
Jan Schmidt [Sun, 15 Mar 2015 16:53:33 +0000 (03:53 +1100)]
compositor: Revert most of previous patch.
The calculation doesn't produce the same results.
Keep just the change to divide alpha by 255 instead of 256,
for slightly better accuracy
Jan Schmidt [Sun, 15 Mar 2015 13:22:14 +0000 (00:22 +1100)]
compositor: Fix blending functions
Correctly calculate alpha in a few places by dividing by 255,
not 256.
Fix the argb and bgra blending functions to avoid an off-by-one
error in the calculations, so painting with alpha = 0xff doesn't
ever bleed through from behind
Matthew Waters [Sat, 14 Mar 2015 16:25:29 +0000 (16:25 +0000)]
glsyncmeta: make context to wait and set sync explicit
otherwise we may wait on a sync object in same context by accident
Matthew Waters [Fri, 13 Mar 2015 10:25:35 +0000 (10:25 +0000)]
gl: get the context from basemixer/basefilter
Matthew Waters [Fri, 13 Mar 2015 09:38:54 +0000 (09:38 +0000)]
gl: retreive the gldisplay/app gl context as soon as possible
fixes the usage of gst_gl_display_filter_gl_api
Matthew Waters [Tue, 3 Mar 2015 06:26:47 +0000 (17:26 +1100)]
gl: store the list of contexts within gldisplay
Removes the reliance on the allocation query to propogate GL contexts.
Allows thread safely getting a context for the a specific thread.
Matthew Waters [Thu, 26 Feb 2015 02:45:56 +0000 (13:45 +1100)]
glvideomixer: implement with glmixerbin
The relevant properties are forwarded to/from the containing bin
and sink pads.
Matthew Waters [Wed, 25 Feb 2015 13:20:37 +0000 (00:20 +1100)]
glmixer: remove usage of upload/download objects
Matthew Waters [Wed, 25 Feb 2015 12:48:56 +0000 (23:48 +1100)]
gl: new glmixerbin element
Matthew Waters [Wed, 11 Feb 2015 03:48:45 +0000 (14:48 +1100)]
gl: add a new glbasemixer class below glmixer
It deals with propagating the gl display/contexts throughout the
application/pipeline
Nirbheek Chauhan [Tue, 20 Jan 2015 14:23:09 +0000 (19:53 +0530)]
videoaggregator: While aggregating, sync values for all pads before converting frames
Nicolas Dufresne [Sat, 7 Mar 2015 01:11:00 +0000 (20:11 -0500)]
glmixer: Don't share our downstream pool with upstream
Pool cannot have multiple owner. This can lead to spurious
pool was flushing error.
https://bugzilla.gnome.org/show_bug.cgi?id=74570
Sebastian Dröge [Fri, 6 Mar 2015 17:15:11 +0000 (18:15 +0100)]
gl: Remove format info in glcolorconvert's transform_caps function instead of on every caller
... and let glmixer actually transform the caps it is supposed to transform
instead of inventing new caps.
Sebastian Dröge [Fri, 6 Mar 2015 17:49:16 +0000 (18:49 +0100)]
Revert "videoaggregator: Create new caps from the video-info"
This reverts commit
78215be0dfbb4e8ed4f249e161a94c644328d28d.
because it broke glvideomixer with custom caps features.
Sebastian Dröge [Fri, 6 Mar 2015 13:36:26 +0000 (14:36 +0100)]
videoaggregator: Create new caps from the video-info
In case the original caps were missing some optional fields like
interlace-mode. We assume default values for those everywhere,
but they can still cause negotiation to fail if a downstream element
expects the field to be there and at a specific value.
Tim-Philipp Müller [Fri, 13 Feb 2015 16:03:53 +0000 (16:03 +0000)]
videoaggregator: use new gst_aggregator_pad_drop_buffer()
Tim-Philipp Müller [Thu, 12 Feb 2015 15:48:07 +0000 (15:48 +0000)]
tests: remove GST_DISABLE_PARSE guards from two tests that don't require it
Sebastian Dröge [Wed, 11 Feb 2015 13:16:21 +0000 (14:16 +0100)]
Improve and fix LATENCY query handling
This now follows the design docs everywhere, especially the maximum latency
handling.
https://bugzilla.gnome.org/show_bug.cgi?id=744106
Sebastian Dröge [Tue, 10 Feb 2015 09:56:37 +0000 (10:56 +0100)]
videoaggregator: When receiving timeout before caps, make sure to also advance our frame counter
Otherwise we will directly go EOS on the next non-timeout.
Matthew Waters [Sun, 8 Feb 2015 13:59:30 +0000 (00:59 +1100)]
videoaggregator: fix buffer selection when duration=-1
If the src framerate and videoaggreator's output framerate were
different, then we were taking every single buffer that had duration=-1
as it came in regardless of the buffer's start time. This caused the src
to possibly run at a different speed to the output frames.
https://bugzilla.gnome.org/show_bug.cgi?id=744096
Tim-Philipp Müller [Sun, 8 Feb 2015 14:32:22 +0000 (14:32 +0000)]
videoaggregator: don't set element factory details
This is an abstract base class, not an element.
Tim-Philipp Müller [Thu, 5 Feb 2015 15:48:41 +0000 (15:48 +0000)]
tests: compositor: add unit test for proper segment.base handling
As adjusted by gst_pad_set_offset(), or when doing segment seeks
or looping for example.
Matthew Waters [Tue, 3 Feb 2015 04:30:08 +0000 (15:30 +1100)]
gl: remove the egl caps from the src pads
we don't actually support producing EGLImage buffers anywhere.
Matthew Waters [Mon, 2 Feb 2015 13:11:06 +0000 (00:11 +1100)]
glupload/download/convert: provide transform_caps functions
Allows finer grain decisions about formats and features at each
stage of the pipeline.
Also provide propose_allocation for glupload besed on the supported
methods.
Alessandro Decina [Tue, 27 Jan 2015 13:13:46 +0000 (00:13 +1100)]
gl: initial support for texture targets other than GL_TEXTURE_2D
Make GstGLMemory hold the texture target (tex_target) the texture it represents
(tex_id) is bound to. Modify gst_gl_memory_wrapped_texture and
gst_gl_download_perform_with_data to take the texture target as an argument.
This change is needed to support wrapping textures created outside libgstgl,
which might be bound to a target other than GL_TEXTURE_2D. For example on OSX
textures coming from VideoToolbox have target GL_TEXTURE_RECTANGLE.
With this change we still keep (and sometimes imply) GL_TEXTURE_2D as the
target of textures created with libgstgl.
API: modify GstGLMemory
API: modify gst_gl_memory_wrapped_texture
API: gst_gl_download_perform_with_data
Thibault Saunier [Mon, 26 Jan 2015 10:32:47 +0000 (11:32 +0100)]
aggregator: More fixes around locking when accessing protected private fields
In some more places we were accessing GstAggregator->segment
and GstAggregator->seqnum without holding the GST_OBJECT_LOCK
https://bugzilla.gnome.org/show_bug.cgi?id=742684
Thibault Saunier [Mon, 26 Jan 2015 10:25:54 +0000 (11:25 +0100)]
aggregator: Hide GstAggregatorPad buffer and EOS fileds
And add a getter for the EOS.
The user should always use the various getters to access
those fields
https://bugzilla.gnome.org/show_bug.cgi?id=742684
Olivier Crête [Thu, 22 Jan 2015 00:43:12 +0000 (19:43 -0500)]
aggregator: Document locking for gst_aggregator_get_latency_unlocked()
Renamed it to _unlocked() to make it clear.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
Olivier Crête [Wed, 14 Jan 2015 19:45:06 +0000 (14:45 -0500)]
videoaggregator: Lock access to members of GstAggregatorPad
Take the pad's object lock before accessing members of the
GstAggregatorPad structure.
https://bugzilla.gnome.org/show_bug.cgi?id=742684
Nirbheek Chauhan [Wed, 28 Jan 2015 20:58:38 +0000 (02:28 +0530)]
videoaggregator: If getting a timeout before having caps, just advance our position
This can happen if this is a live pipeline and no source produced any buffer
and sent no caps until an output buffer should've been produced according to the
latency.
This fix is similar in spirit to commit
be7034d1 by Sebastian for audiomixer.
Tim-Philipp Müller [Mon, 26 Jan 2015 09:22:23 +0000 (09:22 +0000)]
videoaggregator: fix crash when receiving buffer without timestamps
Unset out buffer in clip function when we unref the buffer to be
clipped, otherwise aggregator will continue to use the already-
freed buffer. Fixes crash when buffers without timestamps are
being fed to aggregator. Partly because aggregator ignores the
error flow return.
https://bugzilla.gnome.org/show_bug.cgi?id=743334
Vincent Penquerc'h [Mon, 19 Jan 2015 12:37:23 +0000 (12:37 +0000)]
compositor: fix illegal memory access in blend function with negative ypos
https://bugzilla.gnome.org/show_bug.cgi?id=741115
Matthew Waters [Wed, 14 Jan 2015 22:47:45 +0000 (09:47 +1100)]
glvideomixer: don't upload if alpha <= 0
Implemented using a upload_buffer vfunc within GstGLMixer allowing
NULL uploaded buffers.
Nirbheek Chauhan [Wed, 14 Jan 2015 18:18:16 +0000 (23:48 +0530)]
compositor: Document the zorder pad property from gstvideoaggregator
Matthew Waters [Wed, 14 Jan 2015 11:08:43 +0000 (22:08 +1100)]
gl: split glcolorconvert usage from glupload
the separation allows the transfer operation to occur in a separate
thread/time which may increase performance in specific circumstances.
Sebastian Dröge [Tue, 13 Jan 2015 13:54:26 +0000 (14:54 +0100)]
compositor: Don't do any conversions if the pad is completely transparent anyway
Stefan Sauer [Mon, 12 Jan 2015 20:25:14 +0000 (21:25 +0100)]
gitignore: ignore more files
Tim-Philipp Müller [Tue, 30 Dec 2014 19:43:43 +0000 (19:43 +0000)]
glmixer, glvideomixer: update for GstAggregatorPadForeachFunc change
Tim-Philipp Müller [Tue, 30 Dec 2014 19:26:47 +0000 (19:26 +0000)]
glmixer: update for aggregator start/stop vfunc change
Tim-Philipp Müller [Tue, 30 Dec 2014 17:56:35 +0000 (17:56 +0000)]
videoaggregator: update for aggregator start/stop vfunc change
Tim-Philipp Müller [Sun, 28 Dec 2014 01:13:33 +0000 (01:13 +0000)]
aggregator: make padding larger
Esp. the class structures, can't have enough
spare space for virtual functions.
Nirbheek Chauhan [Sat, 27 Dec 2014 10:20:17 +0000 (15:50 +0530)]
glvideomixer: Point to compositor for the pad properties documentation
Nirbheek Chauhan [Sat, 27 Dec 2014 10:19:47 +0000 (15:49 +0530)]
compositor: Document the pad properties
Sebastian Dröge [Mon, 22 Dec 2014 21:11:30 +0000 (22:11 +0100)]
videoaggregator: Use the src query implementation of aggregator as the default case
Sebastian Dröge [Thu, 18 Dec 2014 21:04:38 +0000 (22:04 +0100)]
videoaggregator: Don't try to map NULL buffers
Sebastian Dröge [Thu, 18 Dec 2014 21:03:04 +0000 (22:03 +0100)]
videoaggregator: Make sure to always update the pad's videoinfo together with buffers
Otherwise the videoinfo and the buffer content can go out of sync.
Sebastian Dröge [Thu, 18 Dec 2014 10:48:37 +0000 (11:48 +0100)]
compositor: Fix memory leak when no buffer is available for a pad currently
CID 1258718
Sebastian Dröge [Wed, 17 Dec 2014 18:51:32 +0000 (19:51 +0100)]
aggregator: Add function to allow subclasses to set their own latency
For audiomixer this is one blocksize, for videoaggregator this should
be the duration of one output frame.
Sebastian Dröge [Wed, 17 Dec 2014 16:54:09 +0000 (17:54 +0100)]
aggregator: Add a timeout parameter to ::aggregate()
When this is TRUE, we really have to produce output. This happens
in live mixing mode when we have to output something for the current
time, no matter if we have enough input or not.
Matthew Waters [Fri, 5 Dec 2014 07:19:54 +0000 (18:19 +1100)]
aggregator: make the src pad task drive the pipeline for live pipelines
This removes the uses of GAsyncQueue and replaces it with explicit
GMutex, GCond and wakeup count which is used for the non-live case.
For live pipelines, the aggregator waits on the clock until either
data arrives on all sink pads or the expected output buffer time
arrives plus the timeout/latency at which time, the subclass
produces a buffer.
https://bugzilla.gnome.org/show_bug.cgi?id=741146
Matthew Waters [Mon, 8 Dec 2014 04:18:25 +0000 (15:18 +1100)]
videoaggregator: always try to use newer buffers
instead of dropping them for being too old. This ensures that
the newest buffer is always used for rendering
Thibault Saunier [Thu, 27 Nov 2014 19:48:24 +0000 (20:48 +0100)]
videoaggregator: Hide some more fields from the API
+ Add some documentation
Matthew Waters [Thu, 11 Dec 2014 07:15:02 +0000 (18:15 +1100)]
gl: fixup vao and vbo usage for legacy GL
Sebastian Dröge [Fri, 28 Nov 2014 09:23:55 +0000 (10:23 +0100)]
compositor: Failure to map a video frame is not just a warning
Also add some warning debug output if mapping a output buffer fails
Sebastian Dröge [Fri, 28 Nov 2014 09:22:44 +0000 (10:22 +0100)]
videoaggregator: Failure to map a video frame is not just a warning
Matthew Waters [Thu, 27 Nov 2014 10:05:45 +0000 (21:05 +1100)]
gldisplay: implement runtime GL api filtering
Needed so that the pipeline/application can limit the choice of GL api
to what it supports
Matthew Waters [Fri, 17 Oct 2014 13:22:24 +0000 (15:22 +0200)]
gl: add a sync meta for synchronizing across GL contexts
A context can create a GLsync object that can be waited on in order
to ensure that GL resources created in one context are able to be
used in another shared context without any chance of reading invalid
data.
This meta would be placed on buffers that are known to cross from
one context to another. The receiving element would then wait
on the sync object to ensure that the data to be used is complete.
Matthew Waters [Thu, 13 Nov 2014 13:20:10 +0000 (00:20 +1100)]
glvideomixer: add support for gl3
Sebastian Dröge [Thu, 27 Nov 2014 20:22:44 +0000 (21:22 +0100)]
videoaggregator: Minor cleanup
Sebastian Dröge [Wed, 26 Nov 2014 14:02:14 +0000 (15:02 +0100)]
compositor: Implement rescaling of the input via pad properties
compositor has now the same interface as glvideomixer.
Sebastian Dröge [Thu, 27 Nov 2014 19:34:25 +0000 (20:34 +0100)]
videoaggregator: Copy over more fields from the relevant video-info
gst_video_info_set_format() will reset the complete video-info, but
we want to keep values like the PAR, colorimetry and chroma site.
Otherwise we risk setting different values on the srcpad caps than
what is actually inside the buffers.
Sebastian Dröge [Thu, 27 Nov 2014 19:25:29 +0000 (20:25 +0100)]
videoaggregator: Directly use the converters video-info instead of recalculating it
Sebastian Dröge [Thu, 27 Nov 2014 18:52:20 +0000 (19:52 +0100)]
videoaggregator: Do source pad negotiation only from the aggregated function
Otherwise we might negotiate from the sinkpad streaming threads at
the same time as on the srcpad streaming thread, and then all kinds
of crazy bugs happen that don't make any sense at all.
Thibault Saunier [Thu, 27 Nov 2014 17:46:03 +0000 (18:46 +0100)]
videoconvert: Hide all conversion related fields
And do not delay the setting of the conversion_info
https://bugzilla.gnome.org/show_bug.cgi?id=740768
Thibault Saunier [Wed, 26 Nov 2014 17:24:05 +0000 (18:24 +0100)]
videoaggregator: Expose vmethods to set converters and prepare/clean frames
This gives more flexibility to the subclasses and permits to remove the
GstVideoAggregatorClass->disable_frame_conversion ugly API.
WARNING: This breaks the API as it removes the disable_frame_conversion
field
API:
+ GstVideoAggregatorClass->find_best_format
+ GstVideoAggregatorPadClass->set_format
+ GstVideoAggregatorPadClass->prepare_frame
+ GstVideoAggregatorPadClass->clean_frame
- GstVideoAggregatorClass->disable_frame_conversion
https://bugzilla.gnome.org/show_bug.cgi?id=740768
Thibault Saunier [Fri, 31 Oct 2014 10:01:47 +0000 (11:01 +0100)]
videoaggregator: Let a full renegotiation happen after removing the last pad
With the current code, we will end up setting the preferred downstream
format as the srcpad format, and it might not be accepted by the next
sinkpad to be added. We should instead let the next sinkpad reconfigure
everything.
Sebastian Dröge [Wed, 26 Nov 2014 12:06:21 +0000 (13:06 +0100)]
videoaggregator: Also sync pad properties to the controller if conversion is disabled
Sebastian Dröge [Wed, 26 Nov 2014 11:35:52 +0000 (12:35 +0100)]
compositor: Remove unused zorder pad property
It's handled in videoaggregator already.
Sebastian Dröge [Tue, 25 Nov 2014 17:53:55 +0000 (18:53 +0100)]
compositor: GstVideoMeta is supported just fine, tell upstream about that
Also provide a GstVideoBufferPool to upstream just in case.
Matthew Waters [Wed, 5 Nov 2014 09:18:06 +0000 (20:18 +1100)]
glupload: rearchitecture for non GLMemory inputs/outputs
Allows other memory types to be implemented/returned/used by the caller.
Sebastian Dröge [Wed, 19 Nov 2014 16:02:40 +0000 (17:02 +0100)]
videoaggregator: Don't output 0-duration buffers at the segment end
https://bugzilla.gnome.org/show_bug.cgi?id=740376
Matthew Waters [Mon, 17 Nov 2014 03:05:01 +0000 (14:05 +1100)]
videoaggregator: fix up QoS handling for live sources
Only attempt adaptive drop when we are not live
https://bugzilla.gnome.org/show_bug.cgi?id=739996
Matthew Waters [Mon, 17 Nov 2014 07:50:04 +0000 (18:50 +1100)]
glmixer: add read-only context property
Matthew Waters [Tue, 11 Nov 2014 03:23:55 +0000 (14:23 +1100)]
gl: remove the width/height fields from the caps to support frame resizing
It was previously only occuring with sysmem caps features
https://bugzilla.gnome.org/show_bug.cgi?id=739334
Sebastian Dröge [Mon, 3 Nov 2014 15:13:23 +0000 (16:13 +0100)]
videoaggregator: Swap source/destination parameters of gst_video_converter_frame()
Matthew Waters [Fri, 31 Oct 2014 01:52:07 +0000 (12:52 +1100)]
glmixer: advertise support for changing input caps mid-stream
https://bugzilla.gnome.org/show_bug.cgi?id=739334
Luis de Bethencourt [Thu, 30 Oct 2014 14:49:05 +0000 (14:49 +0000)]
videoaggregator: remove storage of never used values
These two values are stored just before the function returns and they go out of
scope.
Matthew Waters [Thu, 30 Oct 2014 12:08:00 +0000 (23:08 +1100)]
glmixer: don't get the current caps from GstVideoInfo for the srcpad
It's missing the caps features needed.
Wang Xin-yu (王昕宇) [Wed, 29 Oct 2014 00:27:57 +0000 (08:27 +0800)]
glmixer:fix incorrect parameter passed to handle_set_context
Matthew Waters [Thu, 23 Oct 2014 13:35:22 +0000 (00:35 +1100)]
glmixer: override the caps query in order to 'convert' capsfeatures
Otherwise, it is only possible for the sink pads and the src pads to
have the exact same caps features. We can convert from any feature
to another feature so support that.
Matthew Waters [Thu, 23 Oct 2014 12:55:48 +0000 (23:55 +1100)]
glmixer: override the accept caps query in order to 'convert' capsfeatures
Otherwise, it is only possible for the sink pads and the src pads to
have the exact same caps features. We can convert from any feature
to another feature so support that.
Matthew Waters [Thu, 14 Aug 2014 13:29:00 +0000 (23:29 +1000)]
gl: propogate other-context using GstContext
Matthew Waters [Mon, 20 Oct 2014 19:04:10 +0000 (06:04 +1100)]
glmixer: fixup eglimage include path
Matthew Waters [Mon, 20 Oct 2014 15:52:05 +0000 (02:52 +1100)]
videoaggregator: fixate the parts of the caps we don't know how to deal with
fixes glvideomixer with video/x-raw,width=foo i.e. no format field.
Matthew Waters [Sat, 18 Oct 2014 08:03:43 +0000 (10:03 +0200)]
glbufferpool: add the GstVideoGLTextureUploadMeta buffer pool option
Matthew Waters [Sun, 19 Oct 2014 23:34:27 +0000 (10:34 +1100)]
videoaggregator: operate on caps rather than video info
Otherwise the CapsFeatures will be lost along with the possibility
of multiple output types and formats.
https://bugzilla.gnome.org/show_bug.cgi?id=738129
Sebastian Dröge [Mon, 13 Oct 2014 11:27:55 +0000 (13:27 +0200)]
glmixer: Call the pad's parent class finalize method
Sebastian Dröge [Mon, 13 Oct 2014 11:27:11 +0000 (13:27 +0200)]
glmixer: Only finalize the other context in finalize()
Otherwise we change a value of a property when going to READY state,
which is unexpected behaviour.
Sebastian Dröge [Mon, 13 Oct 2014 09:53:47 +0000 (11:53 +0200)]
glmixer: Add other-context property
Matthew Waters [Mon, 6 Oct 2014 10:46:24 +0000 (21:46 +1100)]
aggregator: add latency query handling
Matthew Waters [Mon, 6 Oct 2014 07:33:52 +0000 (18:33 +1100)]
videoaggregator: support unresponsive pads
Render unresponsive pads with the last video frame received.
Matthew Waters [Mon, 6 Oct 2014 07:10:38 +0000 (18:10 +1100)]
videoaggregator: remove the use of the queued buffer on sink pads
That data is now held by the aggregator class
Thibault Saunier [Tue, 23 Sep 2014 13:59:10 +0000 (15:59 +0200)]
videoaggregator: Do not wrongly set the aggregator.segment
The aggregator.segment is not to be initialized by the subclasses but
by the aggregator itself. Moreover, initializing it on start would make
us loose the information coming from the initial seek.
Thibault Saunier [Wed, 30 Jul 2014 09:57:46 +0000 (11:57 +0200)]
videoaggregator: Make sure not to unref a NULL pointer
Sebastian Dröge [Mon, 6 Oct 2014 07:11:47 +0000 (10:11 +0300)]
videoaggregator: Unmap and free GstVideoFrames as needed after conversion and errors
Thibault Saunier [Thu, 18 Sep 2014 15:14:22 +0000 (17:14 +0200)]
videoaggregator: Do not to release VIDEO_AGGREGATOR_LOCK while setting format info
We should be able to always keep the VIDEO_AGGREGATOR_LOCK while
negotiating caps, this patch introduce that change.
That also implies that we do not need the SETCAPS_LOCK anymore because
now VIDEO_AGGREGATOR_LOCK guarantees that setcaps is not called from
several threads and the gst_aggregator_set_caps method is now
protected.
https://bugzilla.gnome.org/show_bug.cgi?id=735042
Sebastian Dröge [Wed, 1 Oct 2014 14:22:59 +0000 (17:22 +0300)]
videoaggregator: Also copy over the chroma siting and colorimetry when deciding on a conversion
Sebastian Dröge [Wed, 1 Oct 2014 14:18:05 +0000 (17:18 +0300)]
videoaggregator: Revert the last commit and handle resolutions differences properly
This is about converting the format, not about converting any widths and
heights. Subclasses are expected to handler different resolutions themselves,
like the videomixers already do properly.
Sebastian Dröge [Wed, 1 Oct 2014 14:11:16 +0000 (17:11 +0300)]
videoaggregator: GstVideoConverter currently can't rescale and will assert
Leads to ugly assertions instead of properly erroring out:
CRITICAL **: gst_video_converter_new: assertion 'in_info->width == out_info->width' failed