On Sun, Dec 17, 2017 at 10:47:16PM +0100, Aurelien Jacobs wrote:
> This was originally based on libsbc, and was fully integrated into ffmpeg.
> ---
[...]
> +static inline void sbc_analyze_4b_4s_simd(SBCDSPContext *s,
> + int16_t *x, int32_t *out, int
> out_stride)
> +{
> + /* Analyze blocks */
> + s->sbc_analyze_4(x + 12, out, ff_sbcdsp_analysis_consts_fixed4_simd_odd);
> + out += out_stride;
> + s->sbc_analyze_4(x + 8, out, ff_sbcdsp_analysis_consts_fixed4_simd_even);
> + out += out_stride;
> + s->sbc_analyze_4(x + 4, out, ff_sbcdsp_analysis_consts_fixed4_simd_odd);
> + out += out_stride;
> + s->sbc_analyze_4(x + 0, out, ff_sbcdsp_analysis_consts_fixed4_simd_even);
> +
> + emms_c();
> +}
> +
> +static inline void sbc_analyze_4b_8s_simd(SBCDSPContext *s,
> + int16_t *x, int32_t *out, int
> out_stride)
> +{
> + /* Analyze blocks */
> + s->sbc_analyze_8(x + 24, out, ff_sbcdsp_analysis_consts_fixed8_simd_odd);
> + out += out_stride;
> + s->sbc_analyze_8(x + 16, out,
> ff_sbcdsp_analysis_consts_fixed8_simd_even);
> + out += out_stride;
> + s->sbc_analyze_8(x + 8, out, ff_sbcdsp_analysis_consts_fixed8_simd_odd);
> + out += out_stride;
> + s->sbc_analyze_8(x + 0, out, ff_sbcdsp_analysis_consts_fixed8_simd_even);
> +
> + emms_c();
> +}
> +
> +static inline void sbc_analyze_1b_8s_simd_even(SBCDSPContext *s,
> + int16_t *x, int32_t *out,
> + int out_stride);
> +
> +static inline void sbc_analyze_1b_8s_simd_odd(SBCDSPContext *s,
> + int16_t *x, int32_t *out,
> + int out_stride)
> +{
> + s->sbc_analyze_8(x, out, ff_sbcdsp_analysis_consts_fixed8_simd_odd);
> + s->sbc_analyze_8s = sbc_analyze_1b_8s_simd_even;
> +
> + emms_c();
> +}
> +
> +static inline void sbc_analyze_1b_8s_simd_even(SBCDSPContext *s,
> + int16_t *x, int32_t *out,
> + int out_stride)
> +{
> + s->sbc_analyze_8(x, out, ff_sbcdsp_analysis_consts_fixed8_simd_even);
> + s->sbc_analyze_8s = sbc_analyze_1b_8s_simd_odd;
> +
> + emms_c();
> +}at least some of the functions are always called in a loop, the emms_c() could be called after the loop [...] > diff --git a/libavcodec/sbcdsp_data.c b/libavcodec/sbcdsp_data.c > new file mode 100644 > index 0000000000..1e19b9d9d1 > --- /dev/null > +++ b/libavcodec/sbcdsp_data.c > @@ -0,0 +1,329 @@ > +/* > + * Bluetooth low-complexity, subband codec (SBC) > + * > + * Copyright (C) 2017 Aurelien Jacobs <[email protected]> > + * Copyright (C) 2008-2010 Nokia Corporation > + * Copyright (C) 2004-2010 Marcel Holtmann <[email protected]> > + * Copyright (C) 2004-2005 Henryk Ploetz <[email protected]> > + * Copyright (C) 2005-2006 Brad Midgley <[email protected]> > + * > + * 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 > + */ > + > +/** > + * @file > + * miscellaneous SBC tables > + */ > + > +#include "sbcdsp_data.h" > + > +#define F_PROTO(x) (int32_t) ((x * 2) * ((int32_t) 1 << 15) + 0.5) > +#define F_COS(x) (int32_t) ((x ) * ((int32_t) 1 << 15) + 0.5) this needs more () to protect the argument x and the whole expression for example F_PROTO(1+1) would produce unexpected results thanks [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB What does censorship reveal? It reveals fear. -- Julian Assange
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
