alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
To: Vinod Koul <vinod.koul@intel.com>
Cc: tiwai@suse.de, Jeeja KP <jeeja.kp@intel.com>,
	alsa-devel@alsa-project.org, broonie@opensource.wolfsonmicro.com,
	liam.r.girdwood@intel.com
Subject: Re: [RFC] compress: add support for gapless playback
Date: Tue, 05 Feb 2013 20:44:42 -0600	[thread overview]
Message-ID: <5111C39A.6020805@linux.intel.com> (raw)
In-Reply-To: <1360074085-562-1-git-send-email-vinod.koul@intel.com>


> +Gapless Playback
> +================
> +When playing thru an album, the decoders have the ability to skip the encoder
> +delay and padding and directly move from one track content to another. The end
> +user can perceive this as gapless playback as we dont have silence while
> +switching from one track to another

You want to clarify that there might be low-intensity noises due to 
encoding. Perfect gapless is difficult to reach with all types of 
compressed data, but works fine with most music content.
Also you want to mention that this metadata is extracted from ID3/MP4 
headers and are not present by default in the bitstream, hence the need 
for a new interface to pass this information to the DSP.

> +- set_metadata
> +This routine sets the encoder delay and encoder padding. This can be used by
> +decoder to strip the silence

You did not specify that this needs to be set before the first write of 
the next track.

> +
> +- partial drain
> +This is called when end of file is reached. The userspace can inform DSP that
> +EOF is reached and now DSP can start skipping padding delay. Also next write
> +data would belong to next track

DSP skips padding delay after decoding all samples in the track, not as 
soon as EOF is reached.
A sequence as seen from userspace might be useful here to avoid random 
interpretations of the API semantics.

>   /**
> + * struct snd_compr_metadata: compressed stream metadata
> + * @encoder_delay: no of samples inserted by the encoder at the beginning
> + * of the track
> + * @encoder_padding: no of samples appended by the encoder at the end
> + * of the track
> + */
> +struct snd_compr_metadata {
> +	 __u32 encoder_delay;
> +	 __u32 encoder_padding;
> +};

You need to pad this structure with reserved bytes for future 
evolutions. Things like ReplayGain, etc, might be of interest for some 
implementations. Let's not be cheap here


> +static int
> +snd_compr_set_metadata(struct snd_compr_stream *stream, unsigned long arg)
> +{
> +	struct snd_compr_metadata *metadata;
> +	int retval;
> +
> +	if (!stream->ops->set_metadata)
> +		return -ENXIO;

Is this really a fatal error? Or do we want to mandate that gapless be 
supported by all implementations?

  reply	other threads:[~2013-02-06  2:44 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-05 14:21 [RFC] compress: add support for gapless playback Vinod Koul
2013-02-06  2:44 ` Pierre-Louis Bossart [this message]
2013-02-06  7:54   ` Vinod Koul
2013-02-06 13:32     ` Mark Brown
2013-02-06 13:56       ` Vinod Koul
2013-02-06 13:59       ` Pierre-Louis Bossart
2013-02-06 14:00         ` Vinod Koul
2013-02-06 14:14   ` Takashi Iwai
2013-02-06 14:02     ` Vinod Koul
2013-02-06 14:33       ` Takashi Iwai
2013-02-06 14:11 ` Takashi Iwai
2013-02-06 14:09   ` Vinod Koul
2013-02-06 14:48     ` Takashi Iwai
2013-02-06 14:31       ` Vinod Koul
     [not found] ` <37A133201056E44A80888420ECA881BF1093DC5F68@EXCMB2.wolfsonmicro.main>
     [not found]   ` <20130207011518.GA30348@opensource.wolfsonmicro.com>
2013-02-07  2:18     ` Vinod Koul
2013-02-07  8:49       ` Takashi Iwai
2013-02-07 16:34         ` Vinod Koul
     [not found]         ` <20130207113738.GA15824@opensource.wolfsonmicro.com>
2013-02-07 11:49           ` Takashi Iwai
2013-02-07 16:51           ` Vinod Koul

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5111C39A.6020805@linux.intel.com \
    --to=pierre-louis.bossart@linux.intel.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=jeeja.kp@intel.com \
    --cc=liam.r.girdwood@intel.com \
    --cc=tiwai@suse.de \
    --cc=vinod.koul@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).