mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
segment: add gst_segment_set_running_time
Added new method for closing the segment to a specific running time. API: GstSegment::gst_segment_set_running_time()
This commit is contained in:
parent
fef7c3f2ff
commit
0e74bfe248
5 changed files with 63 additions and 1 deletions
|
@ -1985,6 +1985,7 @@ gst_segment_set_seek
|
||||||
gst_segment_to_running_time
|
gst_segment_to_running_time
|
||||||
gst_segment_to_stream_time
|
gst_segment_to_stream_time
|
||||||
gst_segment_to_position
|
gst_segment_to_position
|
||||||
|
gst_segment_set_running_time
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
GST_TYPE_SEGMENT
|
GST_TYPE_SEGMENT
|
||||||
gst_segment_get_type
|
gst_segment_get_type
|
||||||
|
|
|
@ -771,7 +771,8 @@ gst_segment_clip (GstSegment * segment, GstFormat format, gint64 start,
|
||||||
* Convert @running_time into a position in the segment so that
|
* Convert @running_time into a position in the segment so that
|
||||||
* gst_segment_to_running_time() with that position returns @running_time.
|
* gst_segment_to_running_time() with that position returns @running_time.
|
||||||
*
|
*
|
||||||
* Returns: the position in the segment for @running_time.
|
* Returns: the position in the segment for @running_time. This function returns
|
||||||
|
* -1 when @running_time is -1 or when it is not inside @segment.
|
||||||
*
|
*
|
||||||
* Since: 0.10.24
|
* Since: 0.10.24
|
||||||
*/
|
*/
|
||||||
|
@ -831,3 +832,58 @@ gst_segment_to_position (GstSegment * segment, GstFormat format,
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_segment_set_running_time:
|
||||||
|
* @segment: a #GstSegment structure.
|
||||||
|
* @format: the format of the segment.
|
||||||
|
* @running_time: the running_time in the segment
|
||||||
|
*
|
||||||
|
* Adjust the start/stop and accum values of @segment such that the next valid
|
||||||
|
* buffer will be one with @running_time.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if the segment could be updated successfully. If %FALSE is
|
||||||
|
* returned, @running_time is -1 or not in @segment.
|
||||||
|
*
|
||||||
|
* Since: 0.10.24
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gst_segment_set_running_time (GstSegment * segment, GstFormat format,
|
||||||
|
gint64 running_time)
|
||||||
|
{
|
||||||
|
gint64 position;
|
||||||
|
gint64 start, stop, last_stop;
|
||||||
|
|
||||||
|
/* start by bringing the running_time into the segment position */
|
||||||
|
position = gst_segment_to_position (segment, format, running_time);
|
||||||
|
|
||||||
|
/* we must have a valid position now */
|
||||||
|
if (G_UNLIKELY (position == -1))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
start = segment->start;
|
||||||
|
stop = segment->stop;
|
||||||
|
last_stop = segment->last_stop;
|
||||||
|
|
||||||
|
if (G_LIKELY (segment->rate > 0.0)) {
|
||||||
|
/* update the start/last_stop and time values */
|
||||||
|
start = position;
|
||||||
|
if (last_stop < start)
|
||||||
|
last_stop = start;
|
||||||
|
} else {
|
||||||
|
/* reverse, update stop */
|
||||||
|
stop = position;
|
||||||
|
/* if we were past the position, go back */
|
||||||
|
if (last_stop > stop)
|
||||||
|
last_stop = stop;
|
||||||
|
}
|
||||||
|
/* and accumulated time is exactly the running time */
|
||||||
|
segment->time = gst_segment_to_stream_time (segment, format, start);
|
||||||
|
segment->start = start;
|
||||||
|
segment->stop = stop;
|
||||||
|
segment->last_stop = last_stop;
|
||||||
|
segment->accum = running_time;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -101,6 +101,9 @@ gint64 gst_segment_to_position (GstSegment *segment, GstFormat for
|
||||||
gboolean gst_segment_clip (GstSegment *segment, GstFormat format, gint64 start,
|
gboolean gst_segment_clip (GstSegment *segment, GstFormat format, gint64 start,
|
||||||
gint64 stop, gint64 *clip_start, gint64 *clip_stop);
|
gint64 stop, gint64 *clip_start, gint64 *clip_stop);
|
||||||
|
|
||||||
|
gboolean gst_segment_set_running_time (GstSegment *segment, GstFormat format, gint64 running_time);
|
||||||
|
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GST_SEGMENT_H__ */
|
#endif /* __GST_SEGMENT_H__ */
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/* GStreamer
|
/* GStreamer
|
||||||
* Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com>
|
* Copyright (C) 2005 Jan Schmidt <thaytan@mad.scientist.com>
|
||||||
|
* 2009 Wim Taymans <wim.taymans@gmail.com>
|
||||||
*
|
*
|
||||||
* gstsegment.c: Unit test for segments
|
* gstsegment.c: Unit test for segments
|
||||||
*
|
*
|
||||||
|
|
|
@ -835,6 +835,7 @@ EXPORTS
|
||||||
gst_segment_set_last_stop
|
gst_segment_set_last_stop
|
||||||
gst_segment_set_newsegment
|
gst_segment_set_newsegment
|
||||||
gst_segment_set_newsegment_full
|
gst_segment_set_newsegment_full
|
||||||
|
gst_segment_set_running_time
|
||||||
gst_segment_set_seek
|
gst_segment_set_seek
|
||||||
gst_segment_to_position
|
gst_segment_to_position
|
||||||
gst_segment_to_running_time
|
gst_segment_to_running_time
|
||||||
|
|
Loading…
Reference in a new issue