Commit graph

285 commits

Author SHA1 Message Date
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
Wim Taymans
a4c6d04b4c basesink: add non-flushing steps
Add support for non-flushing steps and with different rates.
Clear step info when flushing
2009-06-08 16:27:36 +02:00
Wim Taymans
fa7db7d247 basesink: fix clipped start/stop after step
Use the segment helpers to get a more accurate clipped start/stop position after
a stepping operation ended.
2009-06-04 17:27:03 +02:00
Wim Taymans
957e40343d basesink: use more correct segment methods
Use the more correct new segment methods for updating the segment before and
after a step.
2009-06-04 12:53:23 +02:00
Wim Taymans
a907f8d145 basesink; handle EOS correctly.
Handle EOS and buffers without a timestamp gracefully.
Remove a warning that is not so much a warning now anymore.
2009-06-03 15:39:13 +02:00
Wim Taymans
c811d51471 basesink: forget previous times when stepping
When we start a flushing step operation, forget about the previous stream time
so that the position reporting works correctly.
2009-06-03 10:39:53 +02:00
Wim Taymans
71a5ebe638 basesink: fix regression in unit tests
Store the timestamp of the buffer after prerolling. While we are prerolled we
want to report the position of the segment start value.
2009-06-02 15:37:22 +02:00
Wim Taymans
484d188440 basesink: post a warning on excessive framedrops
When we go into emergency rendering, post a warning informing the user about
this fact.
2009-06-01 19:37:14 +02:00
Wim Taymans
5479772bec basesink: more stepping in reverse
Fix stepping and position reporting in reverse playback.
2009-06-01 13:37:29 +02:00
Wim Taymans
8c54c70d9c basesink: use start_time as the step start
Use the start_time of the element as the point from where the step operation
starts. This fixes stepping in all paused states.
2009-06-01 13:37:29 +02:00
Wim Taymans
642bb32196 basesink: catch step cases in _wait_preroll()
When a subclass is blocking in _wait_preroll() in the _render method, make sure
we can unlock the subclass and detect this return value from the render method.
2009-06-01 13:37:29 +02:00
Wim Taymans
1caab05238 basesink: more stepping in reverse fixes 2009-06-01 13:37:28 +02:00
Wim Taymans
4be27fa555 basesink: small cleanups 2009-06-01 13:37:28 +02:00
Wim Taymans
0c205b96b4 framestep: implement backwards framestep
Update framestep document, we want to pass the flush flag in the step-done
message.

Add flush flag to the gstmessage.

Update examples to use the new step-done message api.

Implement framestep with playback rates < 0.0 too.
2009-06-01 13:37:28 +02:00
Wim Taymans
1839782379 basesink: add framestepping in time 2009-06-01 13:37:28 +02:00
Wim Taymans
7a7e9629ce basesink: keep track of stepped time
Pass running_time around so that the stepping code can calculate the elapsed
time correctly.
2009-06-01 13:37:27 +02:00
Wim Taymans
f07b86f18b basesink: move stuff around, more stepping
Make start and stop_stepping methods and move their invocation in the right
places.

Perform the atual stepping operation where we have full context about the
timestamps.
2009-06-01 13:37:27 +02:00
Wim Taymans
546c959f26 basesink: first stab at frame stepping in PAUSED
Unlock the prerolled frame and recheck if we need to step.
Keep a simple counter for the frames we're about to skip while stepping and
preroll/post step_done when stepping finished.
2009-06-01 13:37:26 +02:00
Edward Hervey
9e4fa43657 basesink: Remove dead assignments.
sstart/sstop/rstart/rstop are all either:
* assigned values later on before being used in 'do_times:' (EOS and buffers)
* not used (non-EOS events)
2009-04-04 14:39:51 +02:00