From: Stefan Sauer Date: Mon, 28 Nov 2011 08:12:37 +0000 (+0100) Subject: alsasrc: handle the case where the drivers don't supply timestamps X-Git-Tag: 1.19.3~511^2~6555^2~297 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8154b69112cdc4830cd6002ec6c1f2917d30437b;p=platform%2Fupstream%2Fgstreamer.git 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. --- diff --git a/ext/alsa/gstalsasrc.c b/ext/alsa/gstalsasrc.c index 3e7ce5f..6a50860 100644 --- a/ext/alsa/gstalsasrc.c +++ b/ext/alsa/gstalsasrc.c @@ -251,7 +251,8 @@ static GstClockTime gst_alsasrc_get_timestamp (GstAlsaSrc * src) { snd_pcm_status_t *status; - snd_htimestamp_t tstamp; + snd_htimestamp_t htstamp; + snd_timestamp_t tstamp; GstClockTime timestamp; snd_pcm_uframes_t availmax; gint64 offset; @@ -275,8 +276,19 @@ gst_alsasrc_get_timestamp (GstAlsaSrc * src) } /* get high resolution time stamp from driver */ - snd_pcm_status_get_htstamp (status, &tstamp); - timestamp = GST_TIMESPEC_TO_TIME (tstamp); + snd_pcm_status_get_htstamp (status, &htstamp); + 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_TIME_ARGS (timestamp)); if (timestamp == 0) {