annotate ffmpeg/libavutil/float_dsp.c @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents f445c3017523
children
rev   line source
yading@11 1 /*
yading@11 2 * Copyright 2005 Balatoni Denes
yading@11 3 * Copyright 2006 Loren Merritt
yading@11 4 *
yading@11 5 * This file is part of FFmpeg.
yading@11 6 *
yading@11 7 * FFmpeg is free software; you can redistribute it and/or
yading@11 8 * modify it under the terms of the GNU Lesser General Public
yading@11 9 * License as published by the Free Software Foundation; either
yading@11 10 * version 2.1 of the License, or (at your option) any later version.
yading@11 11 *
yading@11 12 * FFmpeg is distributed in the hope that it will be useful,
yading@11 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
yading@11 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
yading@11 15 * Lesser General Public License for more details.
yading@11 16 *
yading@11 17 * You should have received a copy of the GNU Lesser General Public
yading@11 18 * License along with FFmpeg; if not, write to the Free Software
yading@11 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
yading@11 20 */
yading@11 21
yading@11 22 #include "config.h"
yading@11 23
yading@11 24 #include "float_dsp.h"
yading@11 25
yading@11 26 static void vector_fmul_c(float *dst, const float *src0, const float *src1,
yading@11 27 int len)
yading@11 28 {
yading@11 29 int i;
yading@11 30 for (i = 0; i < len; i++)
yading@11 31 dst[i] = src0[i] * src1[i];
yading@11 32 }
yading@11 33
yading@11 34 static void vector_fmac_scalar_c(float *dst, const float *src, float mul,
yading@11 35 int len)
yading@11 36 {
yading@11 37 int i;
yading@11 38 for (i = 0; i < len; i++)
yading@11 39 dst[i] += src[i] * mul;
yading@11 40 }
yading@11 41
yading@11 42 static void vector_fmul_scalar_c(float *dst, const float *src, float mul,
yading@11 43 int len)
yading@11 44 {
yading@11 45 int i;
yading@11 46 for (i = 0; i < len; i++)
yading@11 47 dst[i] = src[i] * mul;
yading@11 48 }
yading@11 49
yading@11 50 static void vector_dmul_scalar_c(double *dst, const double *src, double mul,
yading@11 51 int len)
yading@11 52 {
yading@11 53 int i;
yading@11 54 for (i = 0; i < len; i++)
yading@11 55 dst[i] = src[i] * mul;
yading@11 56 }
yading@11 57
yading@11 58 static void vector_fmul_window_c(float *dst, const float *src0,
yading@11 59 const float *src1, const float *win, int len)
yading@11 60 {
yading@11 61 int i, j;
yading@11 62
yading@11 63 dst += len;
yading@11 64 win += len;
yading@11 65 src0 += len;
yading@11 66
yading@11 67 for (i = -len, j = len - 1; i < 0; i++, j--) {
yading@11 68 float s0 = src0[i];
yading@11 69 float s1 = src1[j];
yading@11 70 float wi = win[i];
yading@11 71 float wj = win[j];
yading@11 72 dst[i] = s0 * wj - s1 * wi;
yading@11 73 dst[j] = s0 * wi + s1 * wj;
yading@11 74 }
yading@11 75 }
yading@11 76
yading@11 77 static void vector_fmul_add_c(float *dst, const float *src0, const float *src1,
yading@11 78 const float *src2, int len){
yading@11 79 int i;
yading@11 80
yading@11 81 for (i = 0; i < len; i++)
yading@11 82 dst[i] = src0[i] * src1[i] + src2[i];
yading@11 83 }
yading@11 84
yading@11 85 static void vector_fmul_reverse_c(float *dst, const float *src0,
yading@11 86 const float *src1, int len)
yading@11 87 {
yading@11 88 int i;
yading@11 89
yading@11 90 src1 += len-1;
yading@11 91 for (i = 0; i < len; i++)
yading@11 92 dst[i] = src0[i] * src1[-i];
yading@11 93 }
yading@11 94
yading@11 95 static void butterflies_float_c(float *av_restrict v1, float *av_restrict v2,
yading@11 96 int len)
yading@11 97 {
yading@11 98 int i;
yading@11 99
yading@11 100 for (i = 0; i < len; i++) {
yading@11 101 float t = v1[i] - v2[i];
yading@11 102 v1[i] += v2[i];
yading@11 103 v2[i] = t;
yading@11 104 }
yading@11 105 }
yading@11 106
yading@11 107 float avpriv_scalarproduct_float_c(const float *v1, const float *v2, int len)
yading@11 108 {
yading@11 109 float p = 0.0;
yading@11 110 int i;
yading@11 111
yading@11 112 for (i = 0; i < len; i++)
yading@11 113 p += v1[i] * v2[i];
yading@11 114
yading@11 115 return p;
yading@11 116 }
yading@11 117
yading@11 118 void avpriv_float_dsp_init(AVFloatDSPContext *fdsp, int bit_exact)
yading@11 119 {
yading@11 120 fdsp->vector_fmul = vector_fmul_c;
yading@11 121 fdsp->vector_fmac_scalar = vector_fmac_scalar_c;
yading@11 122 fdsp->vector_fmul_scalar = vector_fmul_scalar_c;
yading@11 123 fdsp->vector_dmul_scalar = vector_dmul_scalar_c;
yading@11 124 fdsp->vector_fmul_window = vector_fmul_window_c;
yading@11 125 fdsp->vector_fmul_add = vector_fmul_add_c;
yading@11 126 fdsp->vector_fmul_reverse = vector_fmul_reverse_c;
yading@11 127 fdsp->butterflies_float = butterflies_float_c;
yading@11 128 fdsp->scalarproduct_float = avpriv_scalarproduct_float_c;
yading@11 129
yading@11 130 #if ARCH_ARM
yading@11 131 ff_float_dsp_init_arm(fdsp);
yading@11 132 #elif ARCH_PPC
yading@11 133 ff_float_dsp_init_ppc(fdsp, bit_exact);
yading@11 134 #elif ARCH_X86
yading@11 135 ff_float_dsp_init_x86(fdsp);
yading@11 136 #elif ARCH_MIPS
yading@11 137 ff_float_dsp_init_mips(fdsp);
yading@11 138 #endif
yading@11 139 }