[alsa-devel] [RFC 4/5] compress: add the core file

Vinod Koul vinod.koul at linux.intel.com
Wed Sep 7 20:05:43 CEST 2011


On Wed, 2011-09-07 at 16:20 +0100, Dimitris Papastamos wrote:
> On Fri, Sep 02, 2011 at 11:36:24AM +0530, Vinod Koul wrote:
> > This patch ads core.c, the file which implements the ioctls and
> > registers the devices
> > 
> > Signed-off-by: Vinod Koul <vinod.koul at linux.intel.com>
> > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> > ---
> >  sound/compress_offload/core.c |  632 +++++++++++++++++++++++++++++++++++++++++
> >  1 files changed, 632 insertions(+), 0 deletions(-)
> >  create mode 100644 sound/compress_offload/core.c
> > 
> > diff --git a/sound/compress_offload/core.c b/sound/compress_offload/core.c
> > new file mode 100644
> > index 0000000..1797dba
> > --- /dev/null
> > +++ b/sound/compress_offload/core.c
> > @@ -0,0 +1,632 @@
> 
> > +static int snd_compr_start(struct snd_compr_stream *stream)
> > +{
> > +	int retval;
> > +
> > +	if (stream->runtime->state != SNDRV_PCM_STATE_PREPARED)
> > +		return -EPERM;
> > +	retval = stream->ops->trigger(stream, SNDRV_PCM_TRIGGER_START);
> > +	if (!retval)
> > +		stream->runtime->state = SNDRV_PCM_STATE_RUNNING;
> > +	return retval;
> > +}
> > +
> > +static int snd_compr_stop(struct snd_compr_stream *stream)
> > +{
> > +	int retval;
> > +
> > +	if (stream->runtime->state != SNDRV_PCM_STATE_PREPARED)
> > +		return -EPERM;
> > +	retval = stream->ops->trigger(stream, SNDRV_PCM_TRIGGER_STOP);
> > +	if (!retval) {
> > +		stream->runtime->state = SNDRV_PCM_STATE_SETUP;
> > +		wake_up(&stream->runtime->sleep);
> > +	}
> > +	return retval;
> > +}
> > +
> > +static int snd_compr_drain(struct snd_compr_stream *stream)
> > +{
> > +	int retval;
> > +
> > +	if (stream->runtime->state != SNDRV_PCM_STATE_PREPARED ||
> > +			stream->runtime->state != SNDRV_PCM_STATE_PAUSED)
> > +		return -EPERM;
> > +	retval = stream->ops->trigger(stream, SND_COMPR_TRIGGER_DRAIN);
> > +	if (!retval) {
> > +		stream->runtime->state = SNDRV_PCM_STATE_SETUP;
> > +		wake_up(&stream->runtime->sleep);
> > +	}
> > +	return retval;
> > +}
> 
> How is it expected to have stream->runtime->state ==
> SNDRV_PCM_STATE_PREPARED?  This is not set anywhere in the core code.
> Do we need to just add another ioctl for _PREPARE?
Nope. My thoughts on this were that _TRIGGER_START should be called only
when first data has been written, i.e when we are in _SETUP state.
So write in _SETUP state should move this to _PREPARED, and obviously I
have missed that part, Thanks will fix this

-- 
~Vinod



More information about the Alsa-devel mailing list