[alsa-devel] [PATCH] compress: add support for gapless playback
Vinod Koul
vinod.koul at intel.com
Wed Feb 13 18:03:22 CET 2013
On Wed, Feb 13, 2013 at 05:40:11PM +0100, Takashi Iwai wrote:
> At Wed, 13 Feb 2013 08:00:34 -0800,
> Vinod Koul wrote:
> >
> > +static int
> > +snd_compr_get_metadata(struct snd_compr_stream *stream, unsigned long arg)
> > +{
> > + struct snd_compr_metadata *metadata;
> > + int retval;
> > +
> > + if (!stream->ops->get_metadata)
> > + return -ENXIO;
> > +
> > + metadata = kmalloc(sizeof(*metadata), GFP_KERNEL);
>
> There is no merit to use kmalloc just for two integers at all.
> Simply put on stack:
> struct snd_compr_metadata metdata;
> if (copy_from_user(&metadata, (void __user *)arg, sizeof(metadata)))
> ...
while doing this I had thought on this, but my laziness got better of me :(
>
> Ditto for snd_compr_set_metadata().
>
> > +static int snd_compr_partial_drain(struct snd_compr_stream *stream)
> > +{
> > + int retval;
> > + if (stream->runtime->state == SNDRV_PCM_STATE_PREPARED ||
> > + stream->runtime->state == SNDRV_PCM_STATE_SETUP)
> > + return -EPERM;
> > + /* stream can be drained only when next track has been signalled */
> > + if (stream->next_track == false)
> > + return -EPERM;
> > +
> > + retval = stream->ops->trigger(stream, SND_COMPR_TRIGGER_PARTIAL_DRAIN);
> > + if (retval)
> > + pr_err("Partial drain returned failure\n");
>
> I don't think it's good to spew errors.
ok
>
> Also, the initialization of new stream fields is missing in other
> places like prepare callback? Otherwise the values will retain.
The stream is created at open. Since it used kzalloc, these variables would be
init to false.
--
~Vinod
More information about the Alsa-devel
mailing list