Thiago Santos
af78e2501c
adaptivedemux: prepare for supporting seeks in live streams
...
Add function to allow subclasses to specify seeking range for
live streams
https://bugzilla.gnome.org/show_bug.cgi?id=725435
2015-01-05 17:58:54 -03:00
Tim-Philipp Müller
fbd4cf9810
aggregator: don't use iterator when setting flush pending on pads
2015-01-04 17:25:45 +00:00
Tim-Philipp Müller
4da01dadcc
aggregator: check if pads are ready more efficiently
...
No need to use an iterator for this which creates a temporary
structure every time and also involves taking and releasing the
object lock many times in the course of iterating. Not to mention
all that GList handling in gst_aggregator_iterate_sinkpads().
2015-01-04 17:07:43 +00:00
Tim-Philipp Müller
3e38003218
aggregator: name vfunc arguments consistently
2015-01-04 12:59:19 +00:00
Tim-Philipp Müller
10d5e878d8
aggregator: add g-i transfer and scope annotations
2015-01-01 15:48:08 +00:00
Tim-Philipp Müller
82f74cd9e0
aggregator: register names of iterate_sinkpads functions with debug system
2015-01-01 14:10:05 +00:00
Tim-Philipp Müller
22d4c7a5c5
aggregator: reduce debug messages for taking/releasing logs to TRACE level
...
Don't spam debug log with this stuff.
2015-01-01 14:04:24 +00:00
Tim-Philipp Müller
6e30a98fd5
aggregator: move property member into private structure
...
Our locking (or lack thereof) while accessing this also
looks generally quite dodgy.
2014-12-31 18:18:03 +00:00
Tim-Philipp Müller
b00ea0cc08
aggregator: remove empty dispose function
2014-12-31 14:50:58 +00:00
Tim-Philipp Müller
ad40a65a01
aggregator: give private functions namespace prefix
...
Especially the GST_DEBUG_FUNCPTR ones.
2014-12-31 12:36:08 +00:00
Tim-Philipp Müller
d0068899bf
aggregator: fix up some docs comments in header
2014-12-31 12:35:06 +00:00
Tim-Philipp Müller
7b282513f3
aggregator: remove now-unused system clock member
2014-12-30 23:44:46 +00:00
Tim-Philipp Müller
c1f6ef5f53
aggregator: make GstAggregatorPadForeachFunc take an GstAggregatorPad
2014-12-30 19:22:01 +00:00
Tim-Philipp Müller
6fc474c30a
videoaggregator: update for aggregator start/stop vfunc change
2014-12-30 17:56:35 +00:00
Tim-Philipp Müller
b4d2deb6d6
aggregator: bring start/stop vfunc semantics in line with other baseclasses
...
Sub-class should not have to chain up to GstAggregator's start/stop
vfuncs, same as in GstBaseSrc, GstBaseSink, GstBaseTransform etc.
2014-12-30 17:55:05 +00:00
Tim-Philipp Müller
45ae4d7f9c
aggregator: remove pointless GST_DEBUG_FUNCPTR
...
Not useful for GObject vfuncs.
2014-12-28 18:26:49 +00:00
Tim-Philipp Müller
773e426616
aggregator: remove duplicate pad parent_class variable
...
G_DEFINE_TYPE already provides one, just need to use it.
2014-12-28 18:25:00 +00:00
Tim-Philipp Müller
813ada29ad
aggregator: add _CAST() variants for cast macros
2014-12-28 18:22:57 +00:00
Tim-Philipp Müller
83de85a2f3
aggregator: make padding larger
...
Esp. the class structures, can't have enough
spare space for virtual functions.
2014-12-28 01:13:33 +00:00
Nirbheek Chauhan
2a6446e519
aggregator: Log to the pad instead of the element
...
More correct way of doing the same thing as before
2014-12-27 11:06:09 +00:00
Sebastian Dröge
ba1b53113a
aggregator: Make sure that the minimum latencies are never GST_CLOCK_TIME_NONE
2014-12-27 09:49:43 +01:00
Sebastian Dröge
6449e3d897
aggregator: Wait for the minimum latency, not the maximum
...
The minimum latency is the latency we have to wait at least
to guarantee that all upstreams have produced data. The maximum
latency has no meaning like that and shouldn't be used for waiting.
2014-12-27 09:45:08 +01:00
Nirbheek Chauhan
46f857b314
aggregator: Clamp the min latency at the max if it's greater
2014-12-27 09:45:08 +01:00
Nirbheek Chauhan
3193094cbc
aggregator: Print the sinkpad name while logging latency queries
...
Very useful while debugging.
2014-12-27 09:45:08 +01:00
Nirbheek Chauhan
f3efb9e7d6
aggregator: Take the stream lock when iterating sink pads
...
When iterating sink pads to collect some data, we should take the stream lock so
we don't get stale data and possibly deadlock because of that. This fixes
a definitive deadlock in _wait_and_check() that manifests with high max
latencies in a live pipeline, and fixes other possible race conditions.
2014-12-27 09:45:08 +01:00
Thiago Santos
c65aeedb6f
adaptivedemux: check if element exists before setting it to null
...
Under certain error conditions it might happen that the element
has been freed already and trying to set it to NULL causes an
assertion
2014-12-23 10:08:57 -03:00
Thiago Santos
3dfab51b92
adaptivedemux: make sure task has stopped before freeing it
...
Otherwise the thread will be running and its memory will get freed.
This leads to memory corruption
2014-12-23 10:08:56 -03:00
Thiago Santos
0bef1974e2
adaptivedemux: fix segment start when exposing new streams
...
Segment start needs only to be updated when starting the streams
or after a seek, doing it during bitrate changes will cause the
running time to go discontinuous (jump back to a previous ts)
and QOS will drop buffers
2014-12-23 10:08:56 -03:00
Thiago Santos
73fb0850c9
adaptivedemux: allow subclass to use new pads group when switching bitrate
...
Fix pad groups switching when bitrate changes to allow HLS to use this feature
2014-12-23 10:08:51 -03:00
Sebastian Dröge
6771db209d
aggregator: Don't leak flush-start events
2014-12-23 11:45:05 +01:00
Sebastian Dröge
e7867a3586
aggregator: Also change the default latency to 0, not just the minimum
2014-12-23 10:24:27 +01:00
Sebastian Dröge
c04bb6983e
aggregator: Fix docs and default value of the latency property
2014-12-23 09:52:20 +01:00
Sebastian Dröge
800f0ac49b
aggregator: Also include the subclass latency in the result of the latency query
2014-12-22 22:19:52 +01:00
Sebastian Dröge
ad9fe1fe7b
videoaggregator: Use the src query implementation of aggregator as the default case
2014-12-22 22:12:02 +01:00
Sebastian Dröge
5dd1dfdadc
aggregator: Post a latency message if the value of the latency property changes
2014-12-22 15:27:25 +01:00
Sebastian Dröge
a27ff89d42
aggregator: Wake up the src thread after handling a latency query
...
Due to changed latencies or changed live-ness we might have to
adjust if we wait on a deadline at all and how long.
2014-12-22 15:03:59 +01:00
Sebastian Dröge
341e5291c3
aggregator: Don't count the number of times we need to wake up but instead check all conditions for waiting again
...
This simplifies the code and also makes sure that we don't forget to check all
conditions for waiting.
Also fix a potential deadlock caused by not checking if we're actually still
running before starting to wait.
2014-12-22 15:00:36 +01:00
Nicolas Dufresne
207308446b
glbufferpool: Always recalculate buffer size
...
Actually we should always recalculate buffer size since our buffer size
even when not-padded is smaller for many sub-sampled formats. This is
because we don't add padding between the planes.
https://bugzilla.gnome.org/show_bug.cgi?id=740900
2014-12-19 12:25:41 -05:00
Nicolas Dufresne
170a49f901
glmemory: No need for padding
...
A memory object cannot be put on stack, so no need for padding.
2014-12-19 12:12:08 -05:00
Nicolas Dufresne
9954de1ccd
gl: Add support for GstVideoAlignment
...
This allow saving a copy with libav video decoders or decoders with
similar padding requirement.
https://bugzilla.gnome.org/show_bug.cgi?id=740900
2014-12-19 12:11:08 -05:00
Nicolas Dufresne
da3ae06cd1
glmemory: Handle upload/download flags from map
...
Problem was that if buffer was mapped READWRITE (state of buffers from
libav right now), mapping it READ/GL will not upload. This is because the
flag is only set when the buffer is unmapped. We can fix this by setting
the flags in map. This result in already mapped buffer that get mapped
to be read in GL will be uploaded. The problem is that if the write
mapper makes modification afterward, the modification will never get
uploaded.
https://bugzilla.gnome.org/show_bug.cgi?id=740900
2014-12-19 11:45:35 -05:00
Nicolas Dufresne
4f3c33af3a
glmemory: Handle custom stride with OPENGL3
...
https://bugzilla.gnome.org/show_bug.cgi?id=740900
2014-12-19 11:45:35 -05:00
Sebastian Dröge
30ce523d59
videoaggregator: Don't try to map NULL buffers
2014-12-18 22:04:38 +01:00
Sebastian Dröge
af46a58cae
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.
2014-12-18 22:03:04 +01:00
Sebastian Dröge
06a4e80be9
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.
2014-12-17 19:51:32 +01:00
Sebastian Dröge
d4c4af699e
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.
2014-12-17 18:41:41 +01:00
Sebastian Dröge
852b08340e
aggregator: Some minor cleanup
2014-12-16 17:33:01 +01:00
Matthew Waters
8bf53a1226
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
2014-12-16 16:58:57 +01:00
Matthew Waters
a7e86751bf
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
2014-12-16 16:49:49 +01:00
Thibault Saunier
aa25d0ab4c
videoaggregator: Hide some more fields from the API
...
+ Add some documentation
2014-12-12 11:49:42 +01:00
Thiago Santos
75b0bac7f8
adaptivedemux: fix seek event handling
...
Properly do seeking and avoid only seeking when the segment was updated.
It would cause seeks after the stream was EOS to fail, for example.
https://bugzilla.gnome.org/show_bug.cgi?id=738920
2014-12-11 21:09:26 -03:00
Wang Xin-yu (王昕宇)
15eab1ed01
glfilter: fix position/texcoord attrib index usage
...
https://bugzilla.gnome.org/show_bug.cgi?id=741231
2014-12-11 19:41:23 +11:00
Matthew Waters
f021549294
gl: fixup vao and vbo usage for legacy GL
2014-12-11 19:41:23 +11:00
Thiago Santos
c8fa688d26
adaptivedemux: check the return from update_manifest correctly
...
It is a GstFlowReturn and not a boolean
2014-12-10 18:23:02 -03:00
Thiago Santos
d30ec9f9f7
adaptivedemux: do not try to unlock not locked mutex
...
A misplaced unlock was causing an assertion for playback with a
set stop time
2014-12-08 08:53:00 -03:00
Thiago Santos
aba9d86d08
gst-libs: build order: uridownloader before adaptivedemux
...
Otherwise make install fails
2014-12-08 08:24:17 -03:00
Thiago Santos
66f40b798d
adaptivedemux: release threads waiting for manifest update on shutdown
...
For live streams, also unblock threads that might be waiting for a manifest
update when stopping the pipeline.
Also add some more debug messages
2014-12-04 01:48:07 -03:00
Thiago Santos
a7712c2983
adaptivedemux: use gst_task_stop instead of gst_task_pause
...
To avoid race conditions with gst_task_stop(); gst_task_join() with
another thread doing gst_task_pause(), the joining thread would be
waiting for the task to stop but it would never happen. So just
use gst_task_stop() everywhere to prevent more mutexes
2014-12-04 01:48:07 -03:00
Thiago Santos
87df15a214
adaptivedemux: fix deadlock when stopping streams
...
Remember to unlock the manifest's lock when leaving the download task.
2014-12-04 01:48:07 -03:00
Philippe Normand
c4ba73e39b
glsyncmeta: add G_END_DECLS
2014-12-04 01:36:38 +11:00
Thiago Santos
92fd73ab5f
adaptivedemux: remove unused error variable
...
CID #1256556
2014-12-03 10:06:09 -03:00
Thiago Santos
d9944506c8
adaptivedemux: remove more get_duration checks
...
Subclasses must implement get_duration function. If they do not know
the duration they can return GST_CLOCK_TIME_NONE
2014-12-03 09:45:58 -03:00
Thiago Santos
9afed503ed
adaptivedemux: all subclasses must implement get_duration
...
CID #1256557
2014-12-03 09:42:39 -03:00
Thiago Santos
e11c311c31
adaptivedemux: make sure to always stop the stream on EOS
...
For On-Demand streams, always stop the tasks for streams that reached
EOS
2014-12-03 09:42:39 -03:00
Julien Isorce
230022fe62
glcontext: try cgl before glx
...
It was already done by commit
f506e80686
but it has been broken by commit
45ec777cea
2014-12-03 08:02:58 +00:00
Edward Hervey
87694c2232
gst-libs: Fix dependency build
...
adaptivedemux depends on uridownloader and video depends on base
2014-12-01 10:32:30 +01:00
Thiago Santos
df66909129
adaptivedemux: reworking live manifest update wait
...
Check if the stream is live before checking if it is EOS as a live
stream might be considered EOS when it just needs to wait for a manifest
update to proceed with the next fragments
2014-11-30 21:56:25 -03:00
Thiago Santos
66202d4c1b
adaptivedemux: fix manifest update locking
...
To avoid unlocking a not locked mutex
2014-11-30 21:56:25 -03:00
Thiago Santos
5f3cce2e58
adaptivedemux: Fix segment for manifests that won't start at 0
...
For live streams, the manifest might start at an advanced position. Avoid
using segment start=0 to have playback start immediately
2014-11-30 21:56:25 -03:00
Thiago Santos
023b284c2d
adaptivedemux: also clear flushing state on pads before restarting
...
During flushing seeks the flushing flow return will propagate up to the
source element and all pads are going to have the flushing flag set.
So before restarting also remove that flag together with the EOS one.
We don't do that when pushing the flush stop event because our event
handler for the proxypad will drop all events.
2014-11-30 21:56:03 -03:00
Thiago Santos
9ec9f3f119
adaptivedemux: add adaptivedemux base class
...
https://bugzilla.gnome.org/show_bug.cgi?id=735848
2014-11-30 21:56:01 -03:00
Matthew Waters
90a2477b9e
glcontext: require GL_ARB_ES2_compatibility for opengl3
...
until we generate gl3 compliant shaders
https://bugzilla.gnome.org/show_bug.cgi?id=740012
2014-11-30 00:44:46 +11:00
Sebastian Dröge
8a8444ebe7
videoaggregator: Failure to map a video frame is not just a warning
2014-11-28 10:22:44 +01:00
Matthew Waters
e653ae9fc2
gl: fixup compat definition for GLuint64 for OS X
2014-11-28 13:04:21 +11:00
Matthew Waters
b0faa2dd77
gl: add compat definition for GLuint64 for android
...
../../../../gst-libs/gst/gl/glprototypes/sync.h:41:23: error: unknown type name 'GLuint64'
GLuint64 timeout))
2014-11-28 11:57:25 +11:00
Danny Song
d6489ee96c
basecamerasrc: fix typo in docs
...
https://bugzilla.gnome.org/show_bug.cgi?id=740815
2014-11-28 00:13:22 +00:00
Matthew Waters
3e92a8ef53
glsync: fix build with desktop gl
2014-11-28 11:11:43 +11:00
Matthew Waters
57898fec2a
gl: fix various build errors without desktop gl
2014-11-28 10:59:46 +11:00
Matthew Waters
f67190d3ca
gldisplay: fix build error
...
gstgldisplay.c:234:541: error: 'return' with no value, in function returning non-void [-Werror]
g_return_if_fail (GST_IS_GL_DISPLAY (display));
2014-11-28 10:03:18 +11:00
Matthew Waters
3c1e77eb31
gldisplay: implement runtime GL api filtering
...
Needed so that the pipeline/application can limit the choice of GL api
to what it supports
2014-11-28 09:14:26 +11:00
Matthew Waters
6bd1150ca8
gl: remove the use of glu
2014-11-28 09:14:26 +11:00
Matthew Waters
f2af65ee2d
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.
2014-11-28 09:14:25 +11:00
Matthew Waters
480d3f97eb
glprototypes: add sync function definitions
2014-11-28 09:14:25 +11:00
Matthew Waters
6d39e04992
glfilter: add a gl3 code path using vao's and vbo's
2014-11-28 09:14:25 +11:00
Matthew Waters
5ff5f8c1ee
glframebuffer: add support for gl3
2014-11-28 09:14:25 +11:00
Matthew Waters
a32f29f2ce
glcolorconvert: add support for gl3
2014-11-28 09:14:25 +11:00
Matthew Waters
fca0bc97a4
glshader add support for gl3
2014-11-28 09:14:25 +11:00
Matthew Waters
2c24b97cf0
glx: ask for a GL3 core context
2014-11-28 09:14:25 +11:00
Sebastian Dröge
1200f2f94b
videoaggregator: Minor cleanup
2014-11-27 21:23:36 +01:00
Sebastian Dröge
fbf7595ca8
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.
2014-11-27 20:34:25 +01:00
Sebastian Dröge
b301cb1fc9
videoaggregator: Directly use the converters video-info instead of recalculating it
2014-11-27 20:25:29 +01:00
Sebastian Dröge
11740d78b1
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.
2014-11-27 19:54:10 +01:00
Thibault Saunier
a61d2e4e07
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
2014-11-27 19:10:58 +01:00
Thibault Saunier
9d8055186d
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
2014-11-27 19:10:58 +01:00
Thibault Saunier
c7b7f98df2
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.
2014-11-27 19:10:58 +01:00
Sebastian Dröge
082c12b8e2
glcolorconvert: Unref buffer with the correct function
2014-11-27 18:09:58 +01:00
Sebastian Dröge
b6ba579fa0
glmemory: Handle failure of memory allocation gracefully
2014-11-27 18:09:14 +01:00
Sebastian Dröge
f2dc9b2b8f
glmemory: Use g_try_malloc() in the appropriate places
...
g_malloc() aborts if allocation fails, it's pointless to check against NULL
afterwards. That's why g_try_malloc() exists.
2014-11-27 18:06:26 +01:00
Wang Xin-yu (王昕宇)
15c0d5c21b
glcolorconvert: support RGB16/BGR16 video format download
...
https://bugzilla.gnome.org/show_bug.cgi?id=740801
2014-11-27 10:08:11 +01:00
Matthew Waters
2d97e03c54
gl/wayland: implement resizing the window using the right mouse button
2014-11-27 13:03:21 +11:00