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?
next prev parent 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).