mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-25 23:46:45 +00:00
gst-libs/gst/audio/audioclock.c (gst_audio_clock_set_active)
Original commit message from CVS: 2004-11-27 Martin Soto <martinsoto@users.sourceforge.net> * gst-libs/gst/audio/audioclock.c (gst_audio_clock_set_active) (gst_audio_clock_get_internal_time): Fix active <-> inactive transitions: ensure time value always grows and avoid abrupt value changes.
This commit is contained in:
parent
ae0628f6af
commit
8ed05be101
2 changed files with 26 additions and 9 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2004-11-27 Martin Soto <martinsoto@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gst-libs/gst/audio/audioclock.c (gst_audio_clock_set_active)
|
||||||
|
(gst_audio_clock_get_internal_time):
|
||||||
|
Fix active <-> inactive transitions: ensure time value always
|
||||||
|
grows and avoid abrupt value changes.
|
||||||
|
|
||||||
2004-11-27 Arwed v. Merkatz <v.merkatz@gmx.net>
|
2004-11-27 Arwed v. Merkatz <v.merkatz@gmx.net>
|
||||||
* configure.ac:
|
* configure.ac:
|
||||||
* gst/tta/Makefile.am:
|
* gst/tta/Makefile.am:
|
||||||
|
|
|
@ -109,22 +109,32 @@ gst_audio_clock_new (gchar * name, GstAudioClockGetTimeFunc func,
|
||||||
void
|
void
|
||||||
gst_audio_clock_set_active (GstAudioClock * aclock, gboolean active)
|
gst_audio_clock_set_active (GstAudioClock * aclock, gboolean active)
|
||||||
{
|
{
|
||||||
GstClockTime time;
|
GstClockTime audio_time, system_time;
|
||||||
GstClock *clock;
|
GstClock *clock;
|
||||||
|
GTimeVal timeval;
|
||||||
|
|
||||||
g_return_if_fail (GST_IS_AUDIO_CLOCK (aclock));
|
g_return_if_fail (GST_IS_AUDIO_CLOCK (aclock));
|
||||||
clock = GST_CLOCK (aclock);
|
clock = GST_CLOCK (aclock);
|
||||||
|
|
||||||
time = gst_clock_get_event_time (clock);
|
if (active == aclock->active) {
|
||||||
|
/* Nothing to do. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio_time = aclock->func (clock, aclock->user_data);
|
||||||
|
|
||||||
|
g_get_current_time (&timeval);
|
||||||
|
system_time = GST_TIMEVAL_TO_TIME (timeval);
|
||||||
|
|
||||||
|
/* Set the new adjust value in such a way that there's no abrupt
|
||||||
|
discontinuity, i.e. if gst_audio_clock_get_internal_time is
|
||||||
|
invoked right before and right after (de)activating the clock,
|
||||||
|
the values returned will be close to each other, and the second
|
||||||
|
value will be greater than or equal than the first. */
|
||||||
if (active) {
|
if (active) {
|
||||||
aclock->adjust = time - aclock->func (clock, aclock->user_data);
|
aclock->adjust = aclock->adjust + system_time - audio_time;
|
||||||
} else {
|
} else {
|
||||||
GTimeVal timeval;
|
aclock->adjust = aclock->adjust + audio_time - system_time;
|
||||||
|
|
||||||
g_get_current_time (&timeval);
|
|
||||||
|
|
||||||
aclock->adjust = GST_TIMEVAL_TO_TIME (timeval) - time;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
aclock->active = active;
|
aclock->active = active;
|
||||||
|
@ -141,7 +151,7 @@ gst_audio_clock_get_internal_time (GstClock * clock)
|
||||||
GTimeVal timeval;
|
GTimeVal timeval;
|
||||||
|
|
||||||
g_get_current_time (&timeval);
|
g_get_current_time (&timeval);
|
||||||
return GST_TIMEVAL_TO_TIME (timeval);
|
return GST_TIMEVAL_TO_TIME (timeval) + aclock->adjust;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue