All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ALSA: hda - Apply codec delay to wallclock.
@ 2013-04-06  0:22 Dylan Reid
  2013-04-07  7:41 ` Takashi Iwai
  2013-04-08 16:31 ` Pierre-Louis Bossart
  0 siblings, 2 replies; 8+ messages in thread
From: Dylan Reid @ 2013-04-06  0:22 UTC (permalink / raw)
  To: alsa-devel; +Cc: tiwai, Dylan Reid, pierre-louis.bossart

For playback add the codec-side delay to the timestamp, for capture
subtract it.  This brings the timestamps in line with the time that
was recently added to the delay reporting.

Signed-off-by: Dylan Reid <dgreid@chromium.org>
---
 sound/pci/hda/hda_intel.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 735567e..ec8ac71 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -1889,6 +1889,27 @@ static void azx_timecounter_init(struct snd_pcm_substream *substream,
 		tc->cycle_last = last;
 }
 
+static u64 azx_add_codec_delay_nsec(struct snd_pcm_substream *substream,
+				u64 nsec)
+{
+	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
+	int stream = substream->stream;
+	struct hda_pcm_stream *hinfo = apcm->hinfo[stream];
+	struct hda_codec *codec = apcm->codec;
+	u64 codec_nsec;
+
+	if (hinfo->ops.get_delay) {
+		codec_nsec =
+			hinfo->ops.get_delay(hinfo, codec, substream) * 1000000;
+		if (stream == SNDRV_PCM_STREAM_CAPTURE)
+			nsec = (nsec > codec_nsec) ? nsec - codec_nsec : 0;
+		else if (stream == SNDRV_PCM_STREAM_PLAYBACK)
+			nsec += codec_nsec;
+	}
+
+	return nsec;
+}
+
 static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
 				struct timespec *ts)
 {
@@ -1897,6 +1918,7 @@ static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
 
 	nsec = timecounter_read(&azx_dev->azx_tc);
 	nsec = div_u64(nsec, 3); /* can be optimized */
+	nsec = azx_add_codec_delay_nsec(substream, nsec);
 
 	*ts = ns_to_timespec(nsec);
 
-- 
1.8.1.3.605.g02339dd

^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-04-09  0:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-06  0:22 [PATCH] ALSA: hda - Apply codec delay to wallclock Dylan Reid
2013-04-07  7:41 ` Takashi Iwai
2013-04-08 15:44   ` Dylan Reid
2013-04-08 16:31 ` Pierre-Louis Bossart
2013-04-08 16:34   ` Takashi Iwai
2013-04-08 16:56     ` Dylan Reid
2013-04-08 23:37       ` Pierre-Louis Bossart
2013-04-09  0:05         ` Dylan Reid

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.