00001 /* 00002 * Copyright (c) 2004 Gildas Bazin 00003 * Copyright (c) 2010 Mans Rullgard <mans@mansr.com> 00004 * 00005 * This file is part of FFmpeg. 00006 * 00007 * FFmpeg is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * FFmpeg is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with FFmpeg; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00022 #include "config.h" 00023 #include "dcadsp.h" 00024 00025 static void dca_lfe_fir_c(float *out, const float *in, const float *coefs, 00026 int decifactor, float scale) 00027 { 00028 float *out2 = out + decifactor; 00029 const float *cf0 = coefs; 00030 const float *cf1 = coefs + 256; 00031 int j, k; 00032 00033 /* One decimated sample generates 2*decifactor interpolated ones */ 00034 for (k = 0; k < decifactor; k++) { 00035 float v0 = 0.0; 00036 float v1 = 0.0; 00037 for (j = 0; j < 256 / decifactor; j++) { 00038 float s = in[-j]; 00039 v0 += s * *cf0++; 00040 v1 += s * *--cf1; 00041 } 00042 *out++ = v0 * scale; 00043 *out2++ = v1 * scale; 00044 } 00045 } 00046 00047 void ff_dcadsp_init(DCADSPContext *s) 00048 { 00049 s->lfe_fir = dca_lfe_fir_c; 00050 if (ARCH_ARM) ff_dcadsp_init_arm(s); 00051 }