alsasrc: handle the case where the drivers don't supply timestamps

If highres-timestamp is 0, try lowres and if that fails fallback to system clock
timestamps.
This commit is contained in:
Stefan Sauer 2011-11-28 09:12:37 +01:00
parent c6b9145630
commit 8154b69112

View File

@ -251,7 +251,8 @@ static GstClockTime
gst_alsasrc_get_timestamp (GstAlsaSrc * src) gst_alsasrc_get_timestamp (GstAlsaSrc * src)
{ {
snd_pcm_status_t *status; snd_pcm_status_t *status;
snd_htimestamp_t tstamp; snd_htimestamp_t htstamp;
snd_timestamp_t tstamp;
GstClockTime timestamp; GstClockTime timestamp;
snd_pcm_uframes_t availmax; snd_pcm_uframes_t availmax;
gint64 offset; gint64 offset;
@ -275,8 +276,19 @@ gst_alsasrc_get_timestamp (GstAlsaSrc * src)
} }
/* get high resolution time stamp from driver */ /* get high resolution time stamp from driver */
snd_pcm_status_get_htstamp (status, &tstamp); snd_pcm_status_get_htstamp (status, &htstamp);
timestamp = GST_TIMESPEC_TO_TIME (tstamp); timestamp = GST_TIMESPEC_TO_TIME (htstamp);
if (!timestamp) {
GST_INFO_OBJECT (src,
"This alsa source does support high resolution timestamps");
snd_pcm_status_get_tstamp (status, &tstamp);
timestamp = GST_TIMEVAL_TO_TIME (tstamp);
if (!timestamp) {
GST_INFO_OBJECT (src,
"This alsa source does support low resolution timestamps");
timestamp = gst_util_get_timestamp ();
}
}
GST_DEBUG_OBJECT (src, "Base ts: %" GST_TIME_FORMAT, GST_DEBUG_OBJECT (src, "Base ts: %" GST_TIME_FORMAT,
GST_TIME_ARGS (timestamp)); GST_TIME_ARGS (timestamp));
if (timestamp == 0) { if (timestamp == 0) {