diff options
author | Simon Wilson <simonwilson@google.com> | 2014-05-08 07:51:30 -0700 |
---|---|---|
committer | Simon Wilson <simonwilson@google.com> | 2014-05-08 07:51:30 -0700 |
commit | ac6b1b9d9d020809ebdf8d10f11dd6e46ea57e6d (patch) | |
tree | 45b7e95965b879a8747af6a338fa3273d03db0af | |
parent | 25e5e789c50105c1eca5bcfd37aa00327817fe45 (diff) | |
parent | 810124041268e4f0b20d271ddc566d11ecb8575f (diff) |
Merge pull request #33 from gkasten/CL_avsync
pcm_get_htimestamp can now use CLOCK_MONOTONIC
-rw-r--r-- | include/tinyalsa/asoundlib.h | 3 | ||||
-rw-r--r-- | pcm.c | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/include/tinyalsa/asoundlib.h b/include/tinyalsa/asoundlib.h index 01a6303..ea8e23d 100644 --- a/include/tinyalsa/asoundlib.h +++ b/include/tinyalsa/asoundlib.h @@ -55,6 +55,7 @@ struct pcm; * second call to pcm_write will attempt to * restart the stream. */ +#define PCM_MONOTONIC 0x00000008 /* see pcm_get_htimestamp */ /* PCM runtime states */ #define PCM_STATE_RUNNING 3 @@ -155,6 +156,8 @@ unsigned int pcm_frames_to_bytes(struct pcm *pcm, unsigned int frames); unsigned int pcm_bytes_to_frames(struct pcm *pcm, unsigned int bytes); /* Returns available frames in pcm buffer and corresponding time stamp. + * The clock is CLOCK_MONOTONIC if flag PCM_MONOTONIC was specified in pcm_open, + * otherwise the clock is CLOCK_REALTIME. * For an input stream, frames available are frames ready for the * application to read. * For an output stream, frames available are the number of empty frames available @@ -724,6 +724,17 @@ struct pcm *pcm_open(unsigned int card, unsigned int device, goto fail; } +#ifdef SNDRV_PCM_IOCTL_TTSTAMP + if (pcm->flags & PCM_MONOTONIC) { + int arg = SNDRV_PCM_TSTAMP_TYPE_MONOTONIC; + rc = ioctl(pcm->fd, SNDRV_PCM_IOCTL_TTSTAMP, &arg); + if (rc < 0) { + oops(pcm, rc, "cannot set timestamp type"); + goto fail; + } + } +#endif + pcm->underruns = 0; return pcm; |