[FFmpeg-devel] [PATCH] libavcodec: Implementation of AC3 fixed point decoder

Michael Niedermayer michaelni at gmx.at
Sat Dec 28 02:44:15 CET 2013


On Fri, Dec 13, 2013 at 03:27:29PM +0100, Nedeljko Babic wrote:
> From: Nedeljko Babic <nbabic at mips.com>
> 
> Signed-off-by: Nedeljko Babic <nbabic at mips.com>
> ---
>  libavcodec/Makefile       |   3 +-
>  libavcodec/ac3.h          |  44 +++++++++++
>  libavcodec/ac3dec.c       | 192 ++++++++++++++++++++++++----------------------
>  libavcodec/ac3dec.h       |  33 ++++----
>  libavcodec/ac3dec_fixed.c | 176 ++++++++++++++++++++++++++++++++++++++++++
>  libavcodec/ac3dec_float.c |  89 +++++++++++++++++++++
>  libavcodec/ac3dsp.c       |  26 +++++++
>  libavcodec/ac3dsp.h       |   3 +
>  libavcodec/allcodecs.c    |   1 +
>  libavcodec/kbdwin.c       |  11 +++
>  libavcodec/kbdwin.h       |   3 +
>  libavutil/Makefile        |   1 +
>  libavutil/fixed_dsp.c     |  95 +++++++++++++++++++++++
>  libavutil/fixed_dsp.h     | 123 +++++++++++++++++++++++++++++
>  14 files changed, 695 insertions(+), 105 deletions(-)
>  create mode 100644 libavcodec/ac3dec_fixed.c
>  create mode 100644 libavcodec/ac3dec_float.c
>  create mode 100644 libavutil/fixed_dsp.c
>  create mode 100644 libavutil/fixed_dsp.h

note, ive fixed some issues and split this patch up, please see
the seperate thread about that


[...]
> +static const AVOption options[] = {
> +    { NULL},
> +};
[...]
> +static const AVOption options[] = {
> +    { "drc_scale", "percentage of dynamic range compression to apply", OFFSET(drc_scale), AV_OPT_TYPE_FLOAT, {.dbl = 1.0}, 0.0, 1.0, PAR },
> +
> +{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 2, 0, "dmix_mode"},
> +{"ltrt_cmixlev",   "Lt/Rt Center Mix Level",   OFFSET(ltrt_center_mix_level),    AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
> +{"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level),  AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
> +{"loro_cmixlev",   "Lo/Ro Center Mix Level",   OFFSET(loro_center_mix_level),    AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},
> +{"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level),  AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0},

it appears these options are missing from the fixed point decoder
is that intended ?



[...]
[...]
> diff --git a/libavutil/fixed_dsp.h b/libavutil/fixed_dsp.h
> new file mode 100644
> index 0000000..85f5252
> --- /dev/null
> +++ b/libavutil/fixed_dsp.h
> @@ -0,0 +1,123 @@
> +/*
> + * Copyright (c) 2012
> + *      MIPS Technologies, Inc., California.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + * 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
> + *    contributors may be used to endorse or promote products derived from
> + *    this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * Author:  Nedeljko Babic (nbabic at mips.com)
> + *
> + * This file is part of FFmpeg.
> + *
> + * FFmpeg is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2.1 of the License, or (at your option) any later version.
> + *
> + * FFmpeg is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with FFmpeg; if not, write to the Free Software
> + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> + */
> +
> +#ifndef AVUTIL_FIXED_DSP_H
> +#define AVUTIL_FIXED_DSP_H
> +
> +#include <stdint.h>
> +#include "attributes.h"
> +#include "common.h"
> +
> +typedef struct AVFixedDSPContext {
> +    /**
> +     * Overlap/add with window function.
> +     * Used primarily by MDCT-based audio codecs.
> +     * Source and destination vectors must overlap exactly or not at all.
> +     *
> +     * @param dst  result vector
> +     *             constraints: 16-byte aligned
> +     * @param src0 first source vector
> +     *             constraints: 16-byte aligned
> +     * @param src1 second source vector
> +     *             constraints: 16-byte aligned
> +     * @param win  half-window vector
> +     *             constraints: 16-byte aligned
> +     * @param len  length of vector
> +     *             constraints: multiple of 4
> +     * @param bits scaling parameter
> +     *
> +     */
> +    void (*vector_fmul_window_fixed_scaled)(int16_t *dst, const int32_t *src0, const int32_t *src1, const int32_t *win, int len, uint8_t bits);
> +
> +    /**
> +     * Overlap/add with window function.
> +     * Used primarily by MDCT-based audio codecs.
> +     * Source and destination vectors must overlap exactly or not at all.
> +     *
> +     * @param dst  result vector
> +     *             constraints: 32-byte aligned
> +     * @param src0 first source vector
> +     *             constraints: 16-byte aligned
> +     * @param src1 second source vector
> +     *             constraints: 16-byte aligned
> +     * @param win  half-window vector
> +     *             constraints: 16-byte aligned
> +     * @param len  length of vector
> +     *             constraints: multiple of 4
> +     */
> +    void (*vector_fmul_window_fixed)(int32_t *dst, const int32_t *src0, const int32_t *src1, const int32_t *win, int len);
> +
> +} AVFixedDSPContext;
> +
> +/**
> + * Initialize a fixed DSP context.
> + *
> + * @param fdsp    fixed DSP context
> + * @param strict  setting to non-zero avoids using functions which may not be IEEE-754 compliant
> + */
> +void avpriv_fixed_dsp_init(AVFixedDSPContext *fdsp, int strict);

This API/ABI is not extendible, any field added to the struct requires
a major version and soname bump, adding such API/ABI is not ok
yes i know you copied that design from existing code, its not ok there
either


[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- 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/20131228/bdcb981a/attachment.asc>


More information about the ffmpeg-devel mailing list