On Mon, 22 Jul 2019 11:24:33 +0200, Charles Keepax wrote: > > A previous fix to the stop handling on compressed capture streams causes > some knock on issues. The previous fix updated snd_compr_drain_notify to > set the state back to PREPARED for capture streams. This causes some > issues however as the handling for snd_compr_poll differs between the > two states and some user-space applications were relying on the poll > failing after the stream had been stopped. > > To correct this regression whilst still fixing the original problem the > patch was addressing, update the capture handling to skip the PREPARED > state rather than skipping the SETUP state as it has done until now. > > Fixes: 4f2ab5e1d13d ("ALSA: compress: Fix stop handling on compressed capture streams") > Signed-off-by: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx> Applied, thanks. Takashi > --- > > No changes since v1. > > Thanks, > Charles > > include/sound/compress_driver.h | 5 +---- > sound/core/compress_offload.c | 16 +++++++++++----- > 2 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h > index c5188ff724d12..bc88d6f964da9 100644 > --- a/include/sound/compress_driver.h > +++ b/include/sound/compress_driver.h > @@ -173,10 +173,7 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream) > if (snd_BUG_ON(!stream)) > return; > > - if (stream->direction == SND_COMPRESS_PLAYBACK) > - stream->runtime->state = SNDRV_PCM_STATE_SETUP; > - else > - stream->runtime->state = SNDRV_PCM_STATE_PREPARED; > + stream->runtime->state = SNDRV_PCM_STATE_SETUP; > > wake_up(&stream->runtime->sleep); > } > diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c > index 99b8821587053..d79aee6b9edd2 100644 > --- a/sound/core/compress_offload.c > +++ b/sound/core/compress_offload.c > @@ -574,10 +574,7 @@ snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg) > stream->metadata_set = false; > stream->next_track = false; > > - if (stream->direction == SND_COMPRESS_PLAYBACK) > - stream->runtime->state = SNDRV_PCM_STATE_SETUP; > - else > - stream->runtime->state = SNDRV_PCM_STATE_PREPARED; > + stream->runtime->state = SNDRV_PCM_STATE_SETUP; > } else { > return -EPERM; > } > @@ -693,8 +690,17 @@ static int snd_compr_start(struct snd_compr_stream *stream) > { > int retval; > > - if (stream->runtime->state != SNDRV_PCM_STATE_PREPARED) > + switch (stream->runtime->state) { > + case SNDRV_PCM_STATE_SETUP: > + if (stream->direction != SND_COMPRESS_CAPTURE) > + return -EPERM; > + break; > + case SNDRV_PCM_STATE_PREPARED: > + break; > + default: > return -EPERM; > + } > + > retval = stream->ops->trigger(stream, SNDRV_PCM_TRIGGER_START); > if (!retval) > stream->runtime->state = SNDRV_PCM_STATE_RUNNING; > -- > 2.11.0 > > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx https://mailman.alsa-project.org/mailman/listinfo/alsa-devel