[FFmpeg-devel] [PATCH] examples: add resampling_audio.c file

Michael Niedermayer michaelni at gmx.at
Wed Dec 5 23:43:48 CET 2012


On Tue, Dec 04, 2012 at 10:55:24PM +0100, Stefano Sabatini wrote:
> On date Tuesday 2012-12-04 18:14:53 +0100, Michael Niedermayer encoded:
> > On Tue, Dec 04, 2012 at 10:58:48AM +0100, Stefano Sabatini wrote:
> [...]
> > > > > And I'm not sure why swr_get_delay() is useful/required.
> > > > 
> > > > If you ever feed "more" in than take out then these samples get
> > > > buffered. Such samples would be stuck in there until flushing
> > > > at the end without the swr_get_delay().
> > > 
> > > I realized that the swr_get_delay() in the example is useless, since it
> > > is called before the first conversion is performed (so it is always
> > > 0). On the other hand the destination size is computed so that it
> > > should contain *all* the converted samples, so I assume that if the
> > > output buffer is big enough then no buffering will occurr at all.  Is
> > > this correct?
> > 
> > resampling needs a delay and this delay may vary slightly due filter
> > parameters and timestamp drift.
> > this variation may occasionally cause a tiny bit more samples to be
> > available than the rounded up value.
> 
> Updated.
> -- 
> FFmpeg = Frenzy and Faithless Mastodontic Peaceless Enlightened Gigant

>  Makefile           |    1 
>  resampling_audio.c |  223 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 224 insertions(+)
> 62217adca41e0f174aec7a2e45556450d002afe2  0001-examples-add-resampling_audio.c-file.patch
> From 27783bea1d83b3358d70d8ad78bcc06f5174787c Mon Sep 17 00:00:00 2001
> From: Stefano Sabatini <stefasab at gmail.com>
> Date: Fri, 30 Nov 2012 13:51:40 +0100
> Subject: [PATCH] examples: add resampling_audio.c file
> 
> ---
>  doc/examples/Makefile           |    1 +
>  doc/examples/resampling_audio.c |  223 +++++++++++++++++++++++++++++++++++++++
>  2 files changed, 224 insertions(+)
>  create mode 100644 doc/examples/resampling_audio.c
> 
> diff --git a/doc/examples/Makefile b/doc/examples/Makefile
> index 36c949a..c849daa 100644
> --- a/doc/examples/Makefile
> +++ b/doc/examples/Makefile
> @@ -17,6 +17,7 @@ EXAMPLES=       decoding_encoding                  \
>                  filtering_audio                    \
>                  metadata                           \
>                  muxing                             \
> +                resampling_audio                   \
>                  scaling_video                      \
>  
>  OBJS=$(addsuffix .o,$(EXAMPLES))
> diff --git a/doc/examples/resampling_audio.c b/doc/examples/resampling_audio.c
> new file mode 100644
> index 0000000..a2f3be9
> --- /dev/null
> +++ b/doc/examples/resampling_audio.c
> @@ -0,0 +1,223 @@
> +/*
> + * Copyright (c) 2012 Stefano Sabatini
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a copy
> + * of this software and associated documentation files (the "Software"), to deal
> + * in the Software without restriction, including without limitation the rights
> + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> + * copies of the Software, and to permit persons to whom the Software is
> + * furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> + * THE SOFTWARE.
> + */
> +

> +/**
> + * @file
> + * libswresample API use example.
> + */

might make sense to point to
libswresample/swresample-test.c
as another example

[...]
> +/**
> + * Fill dst buffer with nb_samples, generated starting from t.
> + */
> +void fill_samples(double *dst, int nb_samples, int nb_channels, int sample_rate, double *t)
> +{
> +    int i, j;
> +    double tincr = (double)1 / sample_rate, *dstp = dst;

1.0


> +    const double c = 2 * M_PI * (double)440.0;

the double cast is unneeded

[..]
> +    if (src_data[0])
> +        av_freep(&src_data[0]);

the if() looks unneeded

no more comments from me

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Observe your enemies, for they first find out your faults. -- Antisthenes
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20121205/a88b037a/attachment.asc>


More information about the ffmpeg-devel mailing list