Message ID | 1521194574-20196-2-git-send-email-twischer@de.adit-jv.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, 16 Mar 2018 11:02:54 +0100, <twischer@de.adit-jv.com> wrote: > > From: Timo Wischer <twischer@de.adit-jv.com> > > PREPARED should only be set when it is done and it was successfully. > > DRAINING should be signalled when starting to drain. There is no need to > check if draining was successfully because it will change to drop (SETUP) > in any case. > > Signed-off-by: Timo Wischer <twischer@de.adit-jv.com> > > diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c > index af223a1..e60b688 100644 > --- a/src/pcm/pcm_ioplug.c > +++ b/src/pcm/pcm_ioplug.c > @@ -146,13 +146,18 @@ static int snd_pcm_ioplug_prepare(snd_pcm_t *pcm) > ioplug_priv_t *io = pcm->private_data; > int err = 0; > > - io->data->state = SND_PCM_STATE_PREPARED; > snd_pcm_ioplug_reset(pcm); > if (io->data->callback->prepare) { > snd_pcm_unlock(pcm); /* to avoid deadlock */ > err = io->data->callback->prepare(io->data); > snd_pcm_lock(pcm); > } > + if (err < 0) > + return err; > + > + gettimestamp(&io->trigger_tstamp, pcm->tstamp_type); The trigger_tstamp is updated only when triggered (START, STOP, PAUSE, etc). And this change wasn't even documented in the changelog. > + io->data->state = SND_PCM_STATE_PREPARED; > + > return err; > } > > @@ -493,6 +498,10 @@ static int snd_pcm_ioplug_drain(snd_pcm_t *pcm) > > if (io->data->state == SND_PCM_STATE_OPEN) > return -EBADFD; > + > + gettimestamp(&io->trigger_tstamp, pcm->tstamp_type); Ditto. thanks, Takashi > + io->data->state = SND_PCM_STATE_DRAINING; > + > if (io->data->callback->drain) > io->data->callback->drain(io->data); > snd_pcm_lock(pcm); > -- > 2.7.4 >
diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c index af223a1..e60b688 100644 --- a/src/pcm/pcm_ioplug.c +++ b/src/pcm/pcm_ioplug.c @@ -146,13 +146,18 @@ static int snd_pcm_ioplug_prepare(snd_pcm_t *pcm) ioplug_priv_t *io = pcm->private_data; int err = 0; - io->data->state = SND_PCM_STATE_PREPARED; snd_pcm_ioplug_reset(pcm); if (io->data->callback->prepare) { snd_pcm_unlock(pcm); /* to avoid deadlock */ err = io->data->callback->prepare(io->data); snd_pcm_lock(pcm); } + if (err < 0) + return err; + + gettimestamp(&io->trigger_tstamp, pcm->tstamp_type); + io->data->state = SND_PCM_STATE_PREPARED; + return err; } @@ -493,6 +498,10 @@ static int snd_pcm_ioplug_drain(snd_pcm_t *pcm) if (io->data->state == SND_PCM_STATE_OPEN) return -EBADFD; + + gettimestamp(&io->trigger_tstamp, pcm->tstamp_type); + io->data->state = SND_PCM_STATE_DRAINING; + if (io->data->callback->drain) io->data->callback->drain(io->data); snd_pcm_lock(pcm);