Commit graph

403 commits

Author SHA1 Message Date
Sebastian Dröge
ce216c1406 Merge branch 'master' into 0.11 2011-05-20 13:06:57 +02:00
Sebastian Dröge
1d57e46dbd basesink: Only reinit the cached GstClockID if it is for the same clock
The clock might have changed since the clock ID was created and in
that case we have to request a new one.
2011-05-20 13:05:04 +02:00
Sebastian Dröge
a46c9c2a62 event: Make SEGMENT event parsing API more consistent with the others 2011-05-18 16:56:43 +02:00
Sebastian Dröge
5f2cd2b0a3 base: Update for caps/pad template related API changes 2011-05-17 13:14:12 +02:00
Sebastian Dröge
3d2127f865 Revert "query: allow _make_writable on query handlers"
This reverts commit cf4fbc005c.

This change did not improve the situation for bindings because
queries are usually created, then directly passed to a function
and not stored elsewhere, and the writability problem with
miniobjects usually happens with buffers or caps instead.
2011-05-17 11:21:41 +02:00
Wim Taymans
115c34badd basesink: handle more formats
Don't hardcode GST_FORMAT_TIME in places, we can work with many formats.
2011-05-16 17:09:06 +02:00
Sebastian Dröge
bdf9022861 base: Improve negotiation with new getcaps() filter 2011-05-16 15:33:10 +02:00
Wim Taymans
bdbc069348 Rework GstSegment handling
Improve GstSegment, rename some fields. The idea is to have the GstSegment
structure represent the timing structure of the buffers as they are generated by
the source or demuxer element.
gst_segment_set_seek() -> gst_segment_do_seek()
Rename the NEWSEGMENT event to SEGMENT.
Make parsing of the SEGMENT event into a GstSegment structure.
Pass a GstSegment structure when making a new SEGMENT event. This allows us to
pass the timing info directly to the next element. No accumulation is needed in
the receiving element, all the info is inside the element.
Remove gst_segment_set_newsegment(): This function as used to accumulate
segments received from upstream, which is now not needed anymore because the
segment event contains the complete timing information.
2011-05-16 11:37:52 +02:00
Wim Taymans
cf4fbc005c query: allow _make_writable on query handlers
Pass a GstQuery ** to the query handlers so that they can make the query
writable before using a setter on it.
Port code to new API.
2011-05-10 18:36:33 +02:00
Wim Taymans
7f24a48387 event: _qos_full -> _qos 2011-05-09 18:48:55 +02:00
Wim Taymans
c07b57fc05 segment: remove _full version
Rename the _full versions of the functions to the normal function names.
2011-05-09 17:51:07 +02:00
Wim Taymans
d63829fc9a segment: remove abs_rate from segment structure
Remove the abs_rate field from the segment structure, we can trivially compute
it when needed.
2011-05-09 16:39:13 +02:00
Wim Taymans
f127a416fa basesink: add some more debug 2011-05-09 15:08:51 +02:00
Wim Taymans
d34ca6140b basesink: use CAPS event instead of setcaps function 2011-05-08 13:07:13 +02:00
Wim Taymans
02e5feb2bf pad: avoid using the old GST_PAD_CAPS
Don't use GST_PAD_CAPS but instead use the new gst_pad_get_current_caps()
method.
Avoid setting caps on buffers.
2011-05-06 19:04:54 +02:00
Wim Taymans
fb3da828e5 element: rename gst_element_lost_state_full()
Rename gst_element_lost_state_full() to gst_element_lost_state() and
remove the old method name.
2011-05-06 12:19:16 +02:00
Wim Taymans
6ab7e6c15d Remove pad_alloc, this can now be done better
Remove pad_alloc and all references. This can now be done more efficiently and
more flexible with the ALLOCATION query and the bufferpool objects. There is no
reverse negotiation yet but that will be done with an event later.
2011-04-29 13:26:19 +02:00
Sebastian Dröge
1cff66d587 base{sink,src}: Don't try to fixate ANY caps 2011-04-19 11:45:36 +02:00
Sebastian Dröge
9b90d3d9c0 base: Update docs to say class_init instead of base_init
And remove a useless base_init in basesrc
2011-04-16 15:59:40 +02:00
Sebastian Dröge
f51a23a83c Merge branch 'master' into 0.11 2011-04-16 08:59:58 +02:00
Ole André Vadla Ravnås
e7bf5484c7 base: Fix pad callbacks so they handle when parent goes away
1) We need to lock and get a strong ref to the parent, if still there.
2) If it has gone away, we need to handle that gracefully.

This is necessary in order to safely modify a running pipeline. Has been
observed when a streaming thread is doing a buffer_alloc() while an
application thread sends an event on a pad further downstream, and from
within a pad probe (holding STREAM_LOCK) carries out the pipeline plumbing
while the streaming thread has its buffer_alloc() in progress.
2011-04-13 17:39:05 +02:00
Wim Taymans
468ec5bc40 bufferlist: simplify bufferlists
We now have multiple memory blocks as part of the buffers and we can therefore
reduce the bufferlist to a simple array of buffers.
2011-03-31 17:51:02 +02:00
Wim Taymans
a12ede3fb1 Merge branch 'master' into 0.11-fdo
Conflicts:
	gst/gst.c
	libs/gst/base/gstcollectpads.c
2011-03-28 20:11:20 +02:00
Wim Taymans
d82c8bd2af memory: port code to new buffer data API 2011-03-28 20:08:45 +02:00
Stefan Kost
71dcd52cc0 basesink: print flow return as a name in debug log 2011-03-24 18:32:20 +02:00
Wim Taymans
f505f778cc pad: more preroll lock to basesink
Move the preroll lock to basesink where it belongs.
2011-03-04 17:25:02 +01:00
Wim Taymans
6c18c9508d miniobject: more boxed type fixing
More miniobject fixing, leaks horribly somewhere..
2011-02-23 10:35:09 +01:00
Wim Taymans
1218511185 libs: cleanups for 0.11
Remove deprecated stuff, fix padding, rearrange methods.
2011-02-22 19:09:48 +01:00
Wim Taymans
f8828eace6 basesink: improve duration calculation
Keep track of the average distance between incomming timestamps and
use that to estimate the frame duration when buffers have no duration set on
them.
2011-02-14 15:17:45 +01:00
Wim Taymans
79665e8247 basesink: improve rate calculation
When there is no duration on input buffers, assume the rate is 1.0
instead of (the undefined) 0.0.
2011-02-14 15:17:44 +01:00
Wim Taymans
9661a713ba basesink: improve average duration calculation
Improve the calculation of the duration. When we have no input duration set on
the input buffers stop is set to start and then we end up using a 0 duration in
the average calculation.
2011-02-14 15:17:44 +01:00
Wim Taymans
dc0120fe28 basesink: rename variable
Rename an internal variable to better reflact what its value means.
2011-02-14 15:17:44 +01:00
Wim Taymans
c8d1abdd00 basesink: fix some comments 2011-02-10 15:21:46 +01:00
Wim Taymans
d19f40c716 basesink: keep track of earliest QoS timestamp
Keep track of the earliest allowed timestamp according to the latest
QoS report and drop buffers before that time. Activate this filter
when throttling is enabled. We could later also activate this in the
other QoS cases.

See #638891
2011-02-10 15:21:46 +01:00
Wim Taymans
dad43fa004 basesink: use new QoS type
Use the new QoS type and send throttling QoS messages.
2011-02-10 15:21:46 +01:00
Wim Taymans
4ee5c61a2d basesink: add property to configure a throttle-time
Add a property to configure the throttle time on a sink. The
property is not yet used.

See #638891
2011-02-10 15:21:45 +01:00
Tim-Philipp Müller
655451db54 basesrc, basesink: add some FIXMEs for the type of the blocksize property 2011-01-02 16:59:18 +00:00
Wim Taymans
ef44d4b539 basesink: also preroll async=false sinks
Also preroll async=false sinks after a flush.
2010-12-28 16:23:32 +01:00
Wim Taymans
041d33e5f5 basesink: fix typo 2010-12-21 10:35:40 +01:00
Wim Taymans
6da39bf508 basesink: improve last_stop calculation
Only update the last_stop value when we had a valid stop position for the
clipping or else the clipping code assumes the stop position extends to the end
of the segment, which makes the position reporting return weird values.
2010-12-14 19:00:14 +01:00
Wim Taymans
4fd63f0ce2 basesink: fix object type handling in queued preroll
Factor out the method to get the object type.
When preroll-queue-len > 0, use the right object type instead of ignoring
buffer-lists.
2010-12-14 15:54:41 +01:00
Stefan Kost
1de8b60034 docs: fix wrong use of Since: keyword 2010-12-08 12:17:35 +02:00
Tim-Philipp Müller
686b16756d docs: libgstbase: more gobject introspection annotations
Many of these are superfluous and were added for clarity.
2010-12-07 18:37:04 +00:00
Edward Hervey
27c0bc93b7 basesink: Don't forget to unref the cached ClockId 2010-12-05 15:58:48 +01:00
Wim Taymans
a813aad0ac basesink: rework position reporting code
Unify the different position reporting code paths to make it more
understandable.
Use start_time to get more accurate position reporting in paused.
Fix unit tests for more accurate reporting.
2010-12-02 19:10:46 +01:00
Wim Taymans
79570f49dc basesink: perform wait_preroll in a while loop
We need to continue calling wait_preroll() as long as the need_preroll variable
is true.
2010-12-02 19:10:45 +01:00
Wim Taymans
9076d5688f basesink: also preroll after a flush with async=false
Make sure to preroll after a flush even when we are async=false.
Add unit test.

Fixes #634965
2010-12-02 19:10:45 +01:00
Edward Hervey
ece40dacbc basesink: Re-using GstClockID instead of constantly recreating one
Makes _sink_wait_clock at least 2 times faster.

https://bugzilla.gnome.org/show_bug.cgi?id=632778
2010-12-02 19:04:56 +01:00
Edward Hervey
7115b77aab basesink: Pass along miniobject type through various functions
Avoids doing useless GST_IS_*

https://bugzilla.gnome.org/show_bug.cgi?id=632778
2010-12-02 19:04:56 +01:00
Edward Hervey
606e59468d basesink: Switch enable_last_buffer to an atomic int
Avoids having to take a lock to read/write it.

https://bugzilla.gnome.org/show_bug.cgi?id=632778
2010-12-02 19:04:56 +01:00
Mark Nauwelaerts
21c5064783 basesink: recompute correct running time for buffer ending flushing step
Prevents delaying/hanging when resuming PLAYING.

Fixes #632433.
2010-10-20 18:46:39 +02:00
Stefan Kost
a11b047d00 basesink: don't take preroll-lock in get_property
Use atomic ops to read and write more properties. Taking the preroll lock in get_property
can lock up applications reading the property during preroll.
2010-10-05 12:30:34 +03:00
Wim Taymans
c9c9894552 basesink: format negative values better
Format negative values properly in the debug log.
2010-10-04 15:56:59 +02:00
Wim Taymans
29e23e9142 basesink: improve adjust_time()
Add some more comments.
Make sure we don't end up with negative timestamps.
2010-09-24 12:22:33 +02:00
Havard Graff
54a5871434 basesink: renderdelay needs to be subtracted in adjust_time()
latency is already sink-latency + render-delay, and here we only
want to deal with the sink-latency.

Fixes #630436
2010-09-24 12:16:48 +02:00
Sebastian Dröge
2dfb0d2772 base: Stop using GST_FLOW_IS_FATAL()
And document the special handling of WRONG_STATE.
2010-08-27 16:59:09 +02:00
Stefan Kost
2237af4b6b debug: logging improvements
Use the event serialisation. Log formats name instead of number.
2010-08-05 10:31:50 +03:00
Sebastian Dröge
249c4c18d0 basesink: Implement GstElement::get_query_types() 2010-07-16 17:26:50 +02:00
Sebastian Dröge
b2e7c4bd45 basesink: Only answer the SEGMENT query in pull mode
Otherwise the element handling the seeks should answer this query.

Fixes bug #623622.
2010-07-16 17:26:31 +02:00
Alessandro Decina
3a553f4eda basesink: add accessors for the enable-last-buffer property.
API: gst_base_sink_set_last_buffer_enabled
API: gst_base_sink_is_last_buffer_enabled
2010-07-06 16:39:18 +02:00
Alessandro Decina
f079ff3f20 basesink: add new enable-last-buffer property.
Add a new enable-last-buffer property. When false, it disables storing the last
received buffer in basesink::last-buffer. This can be useful in cases where
buffers need to be released asap.

API: GstBaseSink::enable-last-buffer
2010-07-06 12:38:21 +02:00
Sebastian Dröge
a15344515a basesink: Initialize jitter to prevent printing an uninitialized variable if waiting for the clock failed 2010-06-17 13:20:13 +02:00
Sebastian Dröge
83929a5849 basesink: Make sure we have a valid object to render in _render_object() 2010-06-13 18:05:41 +02:00
Philippe Normand
6b8baaed50 basesink: Make gst_base_sink_query return TRUE if the segment query succeeded.
Fixes bug #620490.
2010-06-03 17:40:45 +02:00
Wim Taymans
3d72274b19 basesink: add jitter to debug output 2010-05-18 18:38:14 +02:00
Stefan Kost
c96dec2a06 basesink: implement percentage position and duration queries
If upstream does not handle them, then implement those ourself.
2010-04-30 10:03:38 +03:00
Stefan Kost
c29e34113f basesink: use gst_pad_peer_query instead of reinventing. 2010-04-30 10:03:38 +03:00
Stefan Kost
2d49414eef queries: add more logging
Log human readable formats and log query result.
2010-04-30 10:03:38 +03:00
Robert Swain
d576c1105e basesink: Implement QoS message posting in basesink
Post QoS messages when frames are dropped.
This goes a little further towards resolving bug #322947
2010-03-18 13:04:34 +01:00
Mark Nauwelaerts
8cdf5a586f basesink: fix emergency rendering timestamp tracking
Specifically, if all (including initial) buffers turn up late,
emergency rendering should also kick in appropriately.

Fixes #611087.
2010-02-26 15:48:41 +01:00
Tim-Philipp Müller
087aa6ced4 gst_private.h: make sure gst_private.h is included before glib.h
For the reason outlined at the beginning of gst_private.h (inline
functions in glib may need the g_log_domain variable). Also include
gst_private.h before using any G_OS_* defines, esp. in plugin loader.
2010-01-20 01:48:56 +00:00
Wim Taymans
a3fdb45aa6 basesink: add some more debugging 2009-12-11 16:19:18 +01:00
Sebastian Dröge
25fc43487b basesink: Allow update NEWSEGMENT events after EOS
This allows demuxers to update the segment stop of an already
finished stream. This might be needed if some stream goes to
EOS before the duration of the longest stream is known to properly
set the segment stop of all streams to the same value in the end.
2009-12-08 15:24:43 +01:00
Edward Hervey
efa5aee509 basesrc/basesink: Register debug funcptr only once.
Makes basesrc/basesink initialization 3-4 times faster and avoids
contention on the global funcptr lock
2009-12-01 19:27:47 +01:00
Wim Taymans
8d34217dcc basesink: clip stepping boundaries
Rounding errors with the floating point rate could make it so that we
don't end up exactly at the required stepping duration.
Use the segment clipping boundaries, which are not subject to rate
adjustements, instead to detect when we reached the stepping duration.

Add some debug info related to going to the PAUSED state.
2009-11-28 22:34:19 +01:00
Stefan Kost
a9a6c0f0cd docs: fix broken xrefs 2009-11-27 18:31:39 +02:00
Stefan Kost
2ba8b37d15 docs: fix broken xrefs 2009-11-27 16:39:37 +02:00
Jan Schmidt
81d3fda6e8 basesink: Clamp the base time correctly in position reporting
When clamping the base time, correctly use 'now', instead of
'-now' - the intent is to prevent 'now-base' ever being
negative, which would cause a position report outside the segment.

Fixes: #602419
2009-11-19 19:02:22 +01:00
Sebastian Dröge
cb28889b11 basesink: Handle the new sink-message event 2009-11-18 13:12:28 +01:00
Wim Taymans
9da89ef4e1 basesink: fix position reporting
Only update the current stream time after we checked if we got a new step
event. This improves the position reporting by the sink.

See #595958
2009-11-16 14:59:14 +01:00
Jan Schmidt
f83ea8233b basesink: Fix treating base_time as unsigned in position calculation
Element base_time is a signed quantity, which leads to basesink returning
a position of 0 when dealing with a negative base time - which are quite
legal when clocks (such as the audio clock) are close to 0.

This doesn't manifest in normal pipelines, of course - but can happen
(at least) when manually setting the base time on a pipeline.
2009-11-11 17:12:19 +00:00
Tim-Philipp Müller
daecaf0e8a Remove GST_DEBUG_FUNCPTR where they're pointless
There's not much point in using GST_DEBUG_FUNCPTR with GObject
virtual functions such as get_property, set_propery, finalize and
dispose, since they'll never be used by anyone anyway. Saves a
few bytes and possibly a tenth of a polar bear.
2009-10-28 00:44:24 +00:00
Stefan Kost
7fcd73875f basesink: lets keep -1 for segmenst as they are guint64 and not GstClockTime 2009-10-09 17:44:28 +03:00
Stefan Kost
4efc01a61d basesink: use GST_CLOCK_TIME_NONE and GST_CLOCK_TIME_IS_VALID more 2009-10-09 17:15:52 +03:00
Edward Hervey
a8e03abd17 gst/base/basesink: Remove dead assignment.
The code was previously:
* checking if ret was != OK
* .. but if it was FLOW_STEP, swith it to OK
* .. and then not using ret

Instead we just make it more compact by checking if it's OK or STEP.
2009-10-08 08:53:54 +02:00
Wim Taymans
989d9861e3 basesink: whitespace fixes 2009-08-24 17:56:32 +02:00
Edward Hervey
8eb9d55627 basesink: Remove dead assignments 2009-08-08 14:47:57 +02:00
Wim Taymans
575e1de88b basesink: cleanups in position queries
Use existing boolean flag to pass position queries upstream. Also add upstream
queries for the last position queries.
2009-08-06 10:45:30 +02:00
Stian Selnes
6033efb920 basesink: Query upstream for the position if conversion in PAUSED failed
Fixes bug #590045.
2009-08-06 06:41:57 +02:00
Stefan Kost
4bfb312e13 logging: use perf category for dropped buffers 2009-07-06 19:52:44 +01:00
Wim Taymans
92b0f32d74 bufferlist: use faster gst_buffer_list_get()
Use the faster gst_buffer_list_get() to get the first buffer of a list.
2009-06-29 11:56:10 +02:00
Ognyan Tonchev
27fe127e76 basesink: take timestamp later
Make sure we don't accidentally cast a bufferlist of a buffer and try to take
the timestamp of it.

Refixes #585960
2009-06-29 11:46:00 +02:00
Tim-Philipp Müller
31ff42de21 basesink: don't do things with side effects within a g_assert()
Make the bufferlist stuff work properly when things are compiled
with -DG_DISABLE_ASSERT.
2009-06-25 11:25:46 +01:00
Branko Subasic
de5bcfc4cd basesink: add support for buffer list
Fixes #585960
2009-06-16 13:32:37 +02:00
Wim Taymans
25067558dc stepping: more stepping improvements
Update design doc with step-start docs.
Add eos field to step done message
when stepping in reverse, update the segment time field.
Flush out the current step when we are flushing.
2009-06-12 13:20:36 +02:00
Wim Taymans
23b772664b basesink: post step-start
when we clip, also stop the stepping.
Don't do QoS when stepping
Post step-start when queueing and activating the step.
2009-06-12 13:16:29 +02:00
Wim Taymans
6e633cbe33 basesink: update segment start/stop for clipping
When we start stepping, store the start/stop values of the segment before we
install new start/stop values for clipping in non-flushing steps.

for non-flushing steps, update the element start time. For flushing steps, it
does not change because running_time does not advance

Make sure we always perform the stop_stepping operations even when we drop
frames.
2009-06-09 12:06:35 +02:00
Wim Taymans
72e8d9909c basesink: do proper clipping in stepping
Update the stop position of the segment so that we clip correctly.
After clipping in non-flushing mode, rerender the remainder of the buffer.
2009-06-09 10:25:34 +02:00
Wim Taymans
89c42f8506 stepping: do flushing steps correctly
Note in the docs that a flushing step in PLAYING brings the pipeline to the lost
state and skips the data before prerolling again.

Implement the flushing step correctly by invalidating the current step
operation, which would activate the new step operation.
2009-06-08 17:41:56 +02:00
Jan Schmidt
f0f9ed875f basesink: Change awkward wording in a translateable message. 2009-06-08 16:16:27 +01:00