]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: Implement timestamp type handling in all plugins
authorTakashi Iwai <tiwai@suse.de>
Thu, 10 Jul 2014 12:37:49 +0000 (14:37 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 14 Jul 2014 16:12:34 +0000 (18:12 +0200)
Now all PCM plugins do support the proper timestamp type or pass it
over slaves.  The internal monotonic flag is dropped and replaced with
tstamp_type in all places.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
28 files changed:
src/pcm/pcm_adpcm.c
src/pcm/pcm_alaw.c
src/pcm/pcm_copy.c
src/pcm/pcm_direct.c
src/pcm/pcm_direct.h
src/pcm/pcm_dmix.c
src/pcm/pcm_dshare.c
src/pcm/pcm_dsnoop.c
src/pcm/pcm_file.c
src/pcm/pcm_generic.c
src/pcm/pcm_hooks.c
src/pcm/pcm_hw.c
src/pcm/pcm_iec958.c
src/pcm/pcm_ioplug.c
src/pcm/pcm_ladspa.c
src/pcm/pcm_lfloat.c
src/pcm/pcm_linear.c
src/pcm/pcm_local.h
src/pcm/pcm_meter.c
src/pcm/pcm_mmap_emul.c
src/pcm/pcm_mulaw.c
src/pcm/pcm_multi.c
src/pcm/pcm_null.c
src/pcm/pcm_plug.c
src/pcm/pcm_rate.c
src/pcm/pcm_route.c
src/pcm/pcm_share.c
src/pcm/pcm_softvol.c

index 6f0e7c4cc6311671e9095c9beb9ae7d9b7e2fe01..1a83c5a0e21ca9fcf99e18d20ecbe761b914a51e 100644 (file)
@@ -579,7 +579,7 @@ int snd_pcm_adpcm_open(snd_pcm_t **pcmp, const char *name, snd_pcm_format_t sfor
        pcm->private_data = adpcm;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &adpcm->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &adpcm->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index 1b1bab83c9446edff7ca5d15d9dbb7702dd65eaf..db759e3effa489bf232482b33701bbded6160088 100644 (file)
@@ -453,7 +453,7 @@ int snd_pcm_alaw_open(snd_pcm_t **pcmp, const char *name, snd_pcm_format_t sform
        pcm->private_data = alaw;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &alaw->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &alaw->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index 56a1f6bcc912be296d4f3e92a9cfbc5146c1cde2..66d3a4719856d8d687ca77f5f3a3a9c1cf08bc02 100644 (file)
@@ -209,7 +209,7 @@ int snd_pcm_copy_open(snd_pcm_t **pcmp, const char *name, snd_pcm_t *slave, int
        pcm->private_data = copy;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &copy->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &copy->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index 5416cf71674c7aadb9321ad8b7e1d264f677052e..8e37bcba5e199886841ccf16674ce6275b62aa43 100644 (file)
@@ -840,6 +840,7 @@ static void save_slave_setting(snd_pcm_direct_t *dmix, snd_pcm_t *spcm)
        COPY_SLAVE(period_time);
        COPY_SLAVE(periods);
        COPY_SLAVE(tstamp_mode);
+       COPY_SLAVE(tstamp_type);
        COPY_SLAVE(period_step);
        COPY_SLAVE(avail_min);
        COPY_SLAVE(start_threshold);
@@ -857,7 +858,6 @@ static void save_slave_setting(snd_pcm_direct_t *dmix, snd_pcm_t *spcm)
        COPY_SLAVE(buffer_time);
        COPY_SLAVE(sample_bits);
        COPY_SLAVE(frame_bits);
-       COPY_SLAVE(monotonic);
 }
 
 #undef COPY_SLAVE
@@ -1204,6 +1204,7 @@ static void copy_slave_setting(snd_pcm_direct_t *dmix, snd_pcm_t *spcm)
        COPY_SLAVE(period_time);
        COPY_SLAVE(periods);
        COPY_SLAVE(tstamp_mode);
+       COPY_SLAVE(tstamp_type);
        COPY_SLAVE(period_step);
        COPY_SLAVE(avail_min);
        COPY_SLAVE(start_threshold);
@@ -1221,7 +1222,6 @@ static void copy_slave_setting(snd_pcm_direct_t *dmix, snd_pcm_t *spcm)
        COPY_SLAVE(buffer_time);
        COPY_SLAVE(sample_bits);
        COPY_SLAVE(frame_bits);
-       COPY_SLAVE(monotonic);
 
        spcm->info &= ~SND_PCM_INFO_PAUSE;
        spcm->boundary = recalc_boundary_size(dmix->shmptr->s.boundary, spcm->buffer_size);
index 5ae39c0e42375e76714d1d20789b3d75a206e5dc..9b1ddbcf424aee3755fd7a7ff0a8d543ee1fa17c 100644 (file)
@@ -85,8 +85,8 @@ typedef struct {
                unsigned int period_size;
                unsigned int period_time;
                snd_interval_t periods;
-               unsigned int monotonic;
                snd_pcm_tstamp_t tstamp_mode;
+               snd_pcm_tstamp_type_t tstamp_type;
                unsigned int period_step;
                unsigned int sleep_min; /* not used */
                unsigned int avail_min;
index 4aa6d4eab4a20e98787efa8cc6c17d9a53705a78..7c535093ea0f6ca5fb2accc0be3e4db3cdfd4a71 100644 (file)
@@ -428,7 +428,7 @@ static int snd_pcm_dmix_sync_ptr(snd_pcm_t *pcm)
                dmix->avail_max = avail;
        if (avail >= pcm->stop_threshold) {
                snd_timer_stop(dmix->timer);
-               gettimestamp(&dmix->trigger_tstamp, pcm->monotonic);
+               gettimestamp(&dmix->trigger_tstamp, pcm->tstamp_type);
                if (dmix->state == SND_PCM_STATE_RUNNING) {
                        dmix->state = SND_PCM_STATE_XRUN;
                        return -EPIPE;
@@ -477,7 +477,7 @@ static int snd_pcm_dmix_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
        memset(status, 0, sizeof(*status));
        status->state = snd_pcm_dmix_state(pcm);
        status->trigger_tstamp = dmix->trigger_tstamp;
-       gettimestamp(&status->tstamp, pcm->monotonic);
+       gettimestamp(&status->tstamp, pcm->tstamp_type);
        status->avail = snd_pcm_mmap_playback_avail(pcm);
        status->avail_max = status->avail > dmix->avail_max ? status->avail : dmix->avail_max;
        dmix->avail_max = 0;
@@ -596,7 +596,7 @@ static int snd_pcm_dmix_start(snd_pcm_t *pcm)
                        return err;
                snd_pcm_dmix_sync_area(pcm);
        }
-       gettimestamp(&dmix->trigger_tstamp, pcm->monotonic);
+       gettimestamp(&dmix->trigger_tstamp, pcm->tstamp_type);
        return 0;
 }
 
@@ -1104,7 +1104,7 @@ int snd_pcm_dmix_open(snd_pcm_t **pcmp, const char *name,
                
        pcm->poll_fd = dmix->poll_fd;
        pcm->poll_events = POLLIN;      /* it's different than other plugins */
-       pcm->monotonic = spcm->monotonic;
+       pcm->tstamp_type = spcm->tstamp_type;
        pcm->mmap_rw = 1;
        snd_pcm_set_hw_ptr(pcm, &dmix->hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &dmix->appl_ptr, -1, 0);
index f2d1103a6bfbc7141f3fe57e37ee73af24f8d6c9..b985172825e73474672591dc1e6b354cca5dae90 100644 (file)
@@ -195,7 +195,7 @@ static int snd_pcm_dshare_sync_ptr(snd_pcm_t *pcm)
                dshare->avail_max = avail;
        if (avail >= pcm->stop_threshold) {
                snd_timer_stop(dshare->timer);
-               gettimestamp(&dshare->trigger_tstamp, pcm->monotonic);
+               gettimestamp(&dshare->trigger_tstamp, pcm->tstamp_type);
                if (dshare->state == SND_PCM_STATE_RUNNING) {
                        dshare->state = SND_PCM_STATE_XRUN;
                        return -EPIPE;
@@ -226,7 +226,7 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
        memset(status, 0, sizeof(*status));
        status->state = snd_pcm_state(dshare->spcm);
        status->trigger_tstamp = dshare->trigger_tstamp;
-       gettimestamp(&status->tstamp, pcm->monotonic);
+       gettimestamp(&status->tstamp, pcm->tstamp_type);
        status->avail = snd_pcm_mmap_playback_avail(pcm);
        status->avail_max = status->avail > dshare->avail_max ? status->avail : dshare->avail_max;
        dshare->avail_max = 0;
@@ -346,7 +346,7 @@ static int snd_pcm_dshare_start(snd_pcm_t *pcm)
                        return err;
                snd_pcm_dshare_sync_area(pcm);
        }
-       gettimestamp(&dshare->trigger_tstamp, pcm->monotonic);
+       gettimestamp(&dshare->trigger_tstamp, pcm->tstamp_type);
        return 0;
 }
 
@@ -792,7 +792,7 @@ int snd_pcm_dshare_open(snd_pcm_t **pcmp, const char *name,
 
        pcm->poll_fd = dshare->poll_fd;
        pcm->poll_events = POLLIN;      /* it's different than other plugins */
-       pcm->monotonic = spcm->monotonic;
+       pcm->tstamp_type = spcm->tstamp_type;
        pcm->mmap_rw = 1;
        snd_pcm_set_hw_ptr(pcm, &dshare->hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &dshare->appl_ptr, -1, 0);
index 76379140c133726cb67e90b2d2ea3db74f9de8ae..0f9c9df481bc356e07c56aa248e51021b25c1659 100644 (file)
@@ -159,7 +159,7 @@ static int snd_pcm_dsnoop_sync_ptr(snd_pcm_t *pcm)
        if (pcm->stop_threshold >= pcm->boundary)       /* don't care */
                return 0;
        if ((avail = snd_pcm_mmap_capture_hw_avail(pcm)) >= pcm->stop_threshold) {
-               gettimestamp(&dsnoop->trigger_tstamp, pcm->monotonic);
+               gettimestamp(&dsnoop->trigger_tstamp, pcm->tstamp_type);
                dsnoop->state = SND_PCM_STATE_XRUN;
                dsnoop->avail_max = avail;
                return -EPIPE;
@@ -690,7 +690,7 @@ int snd_pcm_dsnoop_open(snd_pcm_t **pcmp, const char *name,
 
        pcm->poll_fd = dsnoop->poll_fd;
        pcm->poll_events = POLLIN;      /* it's different than other plugins */
-       pcm->monotonic = spcm->monotonic;
+       pcm->tstamp_type = spcm->tstamp_type;
        pcm->mmap_rw = 1;
        snd_pcm_set_hw_ptr(pcm, &dsnoop->hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &dsnoop->appl_ptr, -1, 0);
index b139f7f24dc319be8344d495ef61bf06175869c3..a0b8bf41bf5b78eed0dd207b5e154a485a0a3ae3 100644 (file)
@@ -781,10 +781,10 @@ int snd_pcm_file_open(snd_pcm_t **pcmp, const char *name,
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
        pcm->mmap_shadow = 1;
+       pcm->tstamp_type = SND_PCM_TSTAMP_TYPE_GETTIMEOFDAY;
 #if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_MONOTONIC)
-       pcm->monotonic = clock_gettime(CLOCK_MONOTONIC, &timespec) == 0;
-#else
-       pcm->monotonic = 0;
+       if (clock_gettime(CLOCK_MONOTONIC, &timespec) == 0)
+               pcm->tstamp_type = SND_PCM_TSTAMP_TYPE_MONOTONIC;
 #endif
        pcm->stream = stream;
        snd_pcm_link_hw_ptr(pcm, slave);
index f068ee2585bc10bf18d1e7864d3051373ab77440..9b605911f868762cb57ae1ac00885841963040d3 100644 (file)
@@ -294,7 +294,7 @@ int snd_pcm_generic_real_htimestamp(snd_pcm_t *pcm, snd_pcm_uframes_t *avail,
                if (ok && (snd_pcm_uframes_t)avail1 == *avail)
                        break;
                *avail = avail1;
-               gettimestamp(tstamp, pcm->monotonic);
+               gettimestamp(tstamp, pcm->tstamp_type);
                ok = 1;
        }
        return 0;
index f83728245ecd224842688994bf5806be5852cd48..0b93c641daaa01fd39119a02fc5cd561aad26d44 100644 (file)
@@ -240,7 +240,7 @@ int snd_pcm_hooks_open(snd_pcm_t **pcmp, const char *name, snd_pcm_t *slave, int
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
        pcm->mmap_shadow = 1;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_link_hw_ptr(pcm, slave);
        snd_pcm_link_appl_ptr(pcm, slave);
        *pcmp = pcm;
index bafa8debeb0b3c320166b196e8929e90e8924016..74cff672a0c11fe5702af3c575a36480eefd94f6 100644 (file)
@@ -1498,7 +1498,6 @@ int snd_pcm_hw_open_fd(snd_pcm_t **pcmp, const char *name,
        pcm->poll_fd = fd;
        pcm->poll_events = info.stream == SND_PCM_STREAM_PLAYBACK ? POLLOUT : POLLIN;
        pcm->tstamp_type = tstamp_type;
-       pcm->monotonic = tstamp_type != SND_PCM_TSTAMP_TYPE_GETTIMEOFDAY;
 
        ret = snd_pcm_hw_mmap_status(pcm);
        if (ret < 0) {
index 0c61fc17995b6578cdf52c1280f42c2b219a370e..38c4ce7e2421cdc55d61cbfbf2a4dab51726854b 100644 (file)
@@ -534,7 +534,7 @@ int snd_pcm_iec958_open(snd_pcm_t **pcmp, const char *name, snd_pcm_format_t sfo
        pcm->private_data = iec;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &iec->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &iec->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index c1c3a9835d47d7a1d50ba225a3d9d9d1eef79205..85a88911eafc7ef7b64d0ccf8cdb8cf5a793d615 100644 (file)
@@ -448,7 +448,7 @@ static int snd_pcm_ioplug_start(snd_pcm_t *pcm)
        if (err < 0)
                return err;
 
-       gettimestamp(&io->trigger_tstamp, pcm->monotonic);
+       gettimestamp(&io->trigger_tstamp, pcm->tstamp_type);
        io->data->state = SND_PCM_STATE_RUNNING;
 
        return 0;
@@ -463,7 +463,7 @@ static int snd_pcm_ioplug_drop(snd_pcm_t *pcm)
 
        io->data->callback->stop(io->data);
 
-       gettimestamp(&io->trigger_tstamp, pcm->monotonic);
+       gettimestamp(&io->trigger_tstamp, pcm->tstamp_type);
        io->data->state = SND_PCM_STATE_SETUP;
 
        return 0;
@@ -1069,7 +1069,10 @@ int snd_pcm_ioplug_reinit_status(snd_pcm_ioplug_t *ioplug)
 {
        ioplug->pcm->poll_fd = ioplug->poll_fd;
        ioplug->pcm->poll_events = ioplug->poll_events;
-       ioplug->pcm->monotonic = (ioplug->flags & SND_PCM_IOPLUG_FLAG_MONOTONIC) != 0;
+       if (ioplug->flags & SND_PCM_IOPLUG_FLAG_MONOTONIC)
+               ioplug->pcm->tstamp_type = SND_PCM_TSTAMP_TYPE_MONOTONIC;
+       else
+               ioplug->pcm->tstamp_type = SND_PCM_TSTAMP_TYPE_GETTIMEOFDAY;
        ioplug->pcm->mmap_rw = ioplug->mmap_rw;
        return 0;
 }
index 7d1e3df878b05d6096d1c5a2fd8d4dfacb16d123..631ee0f35b7341b8a743afaff6dc8d62a5f291ed 100644 (file)
@@ -1641,7 +1641,7 @@ int snd_pcm_ladspa_open(snd_pcm_t **pcmp, const char *name,
        pcm->private_data = ladspa;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &ladspa->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &ladspa->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index bbf72c2742222c1cc0480fe2c411dc23a67ad0fb..324282f0b7fce8afe1c68022ded0df60a139f748 100644 (file)
@@ -412,7 +412,7 @@ int snd_pcm_lfloat_open(snd_pcm_t **pcmp, const char *name, snd_pcm_format_t sfo
        pcm->private_data = lfloat;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &lfloat->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &lfloat->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index 7aa894185444046b5d8d5959e18205d7613b43c1..3d5bbb8a36885ea4258731f22809eaf3a881ca26 100644 (file)
@@ -484,7 +484,7 @@ int snd_pcm_linear_open(snd_pcm_t **pcmp, const char *name, snd_pcm_format_t sfo
        pcm->private_data = linear;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &linear->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &linear->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index 3ed7e1a88792723d5a5e323ca19c5e9228c16e8c..2206afe2c4a93c5f89bc1b3f2620f98aaa7466eb 100644 (file)
@@ -191,7 +191,6 @@ struct _snd_pcm {
        int poll_fd;
        unsigned short poll_events;
        int setup: 1,
-           monotonic: 1,
            compat: 1;
        snd_pcm_access_t access;        /* access mode */
        snd_pcm_format_t format;        /* SND_PCM_FORMAT_* */
@@ -960,26 +959,40 @@ typedef union snd_tmp_double {
 } snd_tmp_double_t;
 
 /* get the current timestamp */
-static inline void gettimestamp(snd_htimestamp_t *tstamp, int monotonic)
+#ifdef HAVE_CLOCK_GETTIME
+static inline void gettimestamp(snd_htimestamp_t *tstamp,
+                               snd_pcm_tstamp_type_t tstamp_type)
 {
-#if defined(HAVE_CLOCK_GETTIME)
-#if defined(CLOCK_MONOTONIC)
-       if (monotonic) {
-               clock_gettime(CLOCK_MONOTONIC, tstamp);
-       } else {
-#endif
-               clock_gettime(CLOCK_REALTIME, tstamp);
-#else
-               struct timeval tv;
+       clockid_t id;
 
-               gettimeofday(&tv, 0);
-               tstamp->tv_sec = tv.tv_sec;
-               tstamp->tv_nsec = tv.tv_usec * 1000L;
+       switch (tstamp_type) {
+#ifdef CLOCK_MONOTONIC_RAW
+       case SND_PCM_TSTAMP_TYPE_MONOTONIC_RAW:
+               id = CLOCK_MONOTONIC_RAW;
+               break;
 #endif
-#if defined(HAVE_CLOCK_GETTIME)
-       }
+#ifdef CLOCK_MONOTONIC
+       case SND_PCM_TSTAMP_TYPE_MONOTONIC:
+               id = CLOCK_MONOTONIC;
+               break;
 #endif
+       default:
+               id = CLOCK_REALTIME;
+               break;
+       }
+       clock_gettime(id, tstamp);
+}
+#else /* HAVE_CLOCK_GETTIME */
+static inline void gettimestamp(snd_htimestamp_t *tstamp,
+                               snd_pcm_tstamp_type_t tstamp_type)
+{
+       struct timeval tv;
+
+       gettimeofday(&tv, 0);
+       tstamp->tv_sec = tv.tv_sec;
+       tstamp->tv_nsec = tv.tv_usec * 1000L;
 }
+#endif /* HAVE_CLOCK_GETTIME */
 
 snd_pcm_chmap_query_t **
 _snd_pcm_make_single_query_chmaps(const snd_pcm_chmap_t *src);
index 676fbef89c30f195961d9f4606a0bf428d6bb182..034f582564a8ab81991e2537a6c96e1706d060f2 100644 (file)
@@ -591,7 +591,7 @@ int snd_pcm_meter_open(snd_pcm_t **pcmp, const char *name, unsigned int frequenc
        pcm->private_data = meter;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_link_hw_ptr(pcm, slave);
        snd_pcm_link_appl_ptr(pcm, slave);
        *pcmp = pcm;
index 63789bc07c1be7de4b184ea8a5fa1cb0d900cb68..b2b15efd07d943a8c26f005abd7b04d23168edfb 100644 (file)
@@ -428,7 +428,7 @@ int __snd_pcm_mmap_emul_open(snd_pcm_t **pcmp, const char *name,
        pcm->private_data = map;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &map->hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &map->appl_ptr, -1, 0);
        *pcmp = pcm;
index 7adce38e9f480ac2537c85c4ae6fb467a829b725..011b2a516be0a9e3e2d99f459a2bea62d88acb9d 100644 (file)
@@ -467,7 +467,7 @@ int snd_pcm_mulaw_open(snd_pcm_t **pcmp, const char *name, snd_pcm_format_t sfor
        pcm->private_data = mulaw;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &mulaw->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &mulaw->plug.appl_ptr, -1, 0);
        *pcmp = pcm;
index a84e0ce48c59c26458a06afa584acbf3135696e7..4b8299ed6bcd08da933ecec1f7d8536dee2da35e 100644 (file)
@@ -1077,7 +1077,7 @@ int snd_pcm_multi_open(snd_pcm_t **pcmp, const char *name,
        pcm->private_data = multi;
        pcm->poll_fd = multi->slaves[master_slave].pcm->poll_fd;
        pcm->poll_events = multi->slaves[master_slave].pcm->poll_events;
-       pcm->monotonic = multi->slaves[master_slave].pcm->monotonic;
+       pcm->tstamp_type = multi->slaves[master_slave].pcm->tstamp_type;
        snd_pcm_link_hw_ptr(pcm, multi->slaves[master_slave].pcm);
        snd_pcm_link_appl_ptr(pcm, multi->slaves[master_slave].pcm);
        *pcmp = pcm;
index 655261f74e1f641fdfcf2d56c4e50addf483c09e..f11a1020f7e309201cee7cf50c4ec818919fe596 100644 (file)
@@ -100,7 +100,7 @@ static int snd_pcm_null_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
        memset(status, 0, sizeof(*status));
        status->state = null->state;
        status->trigger_tstamp = null->trigger_tstamp;
-       gettimestamp(&status->tstamp, pcm->monotonic);
+       gettimestamp(&status->tstamp, pcm->tstamp_type);
        status->avail = snd_pcm_null_avail_update(pcm);
        status->avail_max = pcm->buffer_size;
        return 0;
index 7a6c2b99c639c8eda049e16aec889df461fd7d7b..5639b9ea8044392dc4644b4e035fe2b4fecd0aa6 100644 (file)
@@ -1127,7 +1127,7 @@ int snd_pcm_plug_open(snd_pcm_t **pcmp,
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
        pcm->mmap_shadow = 1;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_link_hw_ptr(pcm, slave);
        snd_pcm_link_appl_ptr(pcm, slave);
        *pcmp = pcm;
index 2563d824ddb86268c867a2d06e28041089f8608b..5e811bb7192ab93d9baaf3048932c06f7a9f113d 100644 (file)
@@ -1069,7 +1069,7 @@ static int snd_pcm_rate_start(snd_pcm_t *pcm)
        if (snd_pcm_state(rate->gen.slave) != SND_PCM_STATE_PREPARED)
                return -EBADFD;
 
-       gettimestamp(&rate->trigger_tstamp, pcm->monotonic);
+       gettimestamp(&rate->trigger_tstamp, pcm->tstamp_type);
 
        avail = snd_pcm_mmap_playback_hw_avail(rate->gen.slave);
        if (avail == 0) {
@@ -1372,7 +1372,7 @@ int snd_pcm_rate_open(snd_pcm_t **pcmp, const char *name,
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
        pcm->mmap_rw = 1;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &rate->hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &rate->appl_ptr, -1, 0);
        *pcmp = pcm;
index 751e36f28fdfdc625d80b7026bd53596028f82c5..2f0be38b1906c90601f6f3796dd0b4f27c67dd9c 100644 (file)
@@ -1122,7 +1122,7 @@ int snd_pcm_route_open(snd_pcm_t **pcmp, const char *name,
        pcm->private_data = route;
        pcm->poll_fd = slave->poll_fd;
        pcm->poll_events = slave->poll_events;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &route->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &route->plug.appl_ptr, -1, 0);
        err = route_load_ttable(&route->params, pcm->stream, tt_ssize, ttable, tt_cused, tt_sused);
index 118ab26177809574bd8996d34f7062d1b02ba80b..97705447dd6d4fed44ea736e1b907d377dc52299 100644 (file)
@@ -971,7 +971,7 @@ static int snd_pcm_share_start(snd_pcm_t *pcm)
        }
        slave->running_count++;
        _snd_pcm_share_update(pcm);
-       gettimestamp(&share->trigger_tstamp, pcm->monotonic);
+       gettimestamp(&share->trigger_tstamp, pcm->tstamp_type);
  _end:
        Pthread_mutex_unlock(&slave->mutex);
        return err;
@@ -1126,7 +1126,7 @@ static void _snd_pcm_share_stop(snd_pcm_t *pcm, snd_pcm_state_t state)
                return;
        }
 #endif
-       gettimestamp(&share->trigger_tstamp, pcm->monotonic);
+       gettimestamp(&share->trigger_tstamp, pcm->tstamp_type);
        if (pcm->stream == SND_PCM_STREAM_CAPTURE) {
                snd_pcm_areas_copy(pcm->stopped_areas, 0,
                                   pcm->running_areas, 0,
@@ -1526,7 +1526,7 @@ int snd_pcm_share_open(snd_pcm_t **pcmp, const char *name, const char *sname,
        pcm->private_data = share;
        pcm->poll_fd = share->client_socket;
        pcm->poll_events = stream == SND_PCM_STREAM_PLAYBACK ? POLLOUT : POLLIN;
-       pcm->monotonic = slave->pcm->monotonic;
+       pcm->tstamp_type = slave->pcm->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &share->hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &share->appl_ptr, -1, 0);
 
index 5da92049cc881823bafcd18226015de100ae3ed8..c6cfd8896b26ddf132eccc72d0739ca1b46ac25b 100644 (file)
@@ -903,7 +903,7 @@ int snd_pcm_softvol_open(snd_pcm_t **pcmp, const char *name,
         * an extra buffer.
         */
        pcm->mmap_shadow = 1;
-       pcm->monotonic = slave->monotonic;
+       pcm->tstamp_type = slave->tstamp_type;
        snd_pcm_set_hw_ptr(pcm, &svol->plug.hw_ptr, -1, 0);
        snd_pcm_set_appl_ptr(pcm, &svol->plug.appl_ptr, -1, 0);
        *pcmp = pcm;