mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-13 21:28:01 +02:00
Move ff_kbd_window_init() to a separate file
This function is not tightly coupled to mdct, and it's in the way of making a fixed-point mdct implementation. Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
26f548bb59
commit
a45fbda994
@ -49,14 +49,14 @@ OBJS-$(CONFIG_VDPAU) += vdpau.o
|
|||||||
OBJS-$(CONFIG_A64MULTI_ENCODER) += a64multienc.o elbg.o
|
OBJS-$(CONFIG_A64MULTI_ENCODER) += a64multienc.o elbg.o
|
||||||
OBJS-$(CONFIG_A64MULTI5_ENCODER) += a64multienc.o elbg.o
|
OBJS-$(CONFIG_A64MULTI5_ENCODER) += a64multienc.o elbg.o
|
||||||
OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aactab.o aacsbr.o aacps.o \
|
OBJS-$(CONFIG_AAC_DECODER) += aacdec.o aactab.o aacsbr.o aacps.o \
|
||||||
aacadtsdec.o mpeg4audio.o
|
aacadtsdec.o mpeg4audio.o kbdwin.o
|
||||||
OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o \
|
OBJS-$(CONFIG_AAC_ENCODER) += aacenc.o aaccoder.o \
|
||||||
aacpsy.o aactab.o \
|
aacpsy.o aactab.o \
|
||||||
psymodel.o iirfilter.o \
|
psymodel.o iirfilter.o \
|
||||||
mpeg4audio.o
|
mpeg4audio.o kbdwin.o
|
||||||
OBJS-$(CONFIG_AASC_DECODER) += aasc.o msrledec.o
|
OBJS-$(CONFIG_AASC_DECODER) += aasc.o msrledec.o
|
||||||
OBJS-$(CONFIG_AC3_DECODER) += ac3dec.o ac3dec_data.o ac3.o
|
OBJS-$(CONFIG_AC3_DECODER) += ac3dec.o ac3dec_data.o ac3.o
|
||||||
OBJS-$(CONFIG_AC3_ENCODER) += ac3enc_float.o ac3tab.o ac3.o
|
OBJS-$(CONFIG_AC3_ENCODER) += ac3enc_float.o ac3tab.o ac3.o kbdwin.o
|
||||||
OBJS-$(CONFIG_AC3_FIXED_ENCODER) += ac3enc_fixed.o ac3tab.o ac3.o
|
OBJS-$(CONFIG_AC3_FIXED_ENCODER) += ac3enc_fixed.o ac3tab.o ac3.o
|
||||||
OBJS-$(CONFIG_ALAC_DECODER) += alac.o
|
OBJS-$(CONFIG_ALAC_DECODER) += alac.o
|
||||||
OBJS-$(CONFIG_ALAC_ENCODER) += alacenc.o
|
OBJS-$(CONFIG_ALAC_ENCODER) += alacenc.o
|
||||||
|
@ -87,6 +87,7 @@
|
|||||||
#include "fft.h"
|
#include "fft.h"
|
||||||
#include "fmtconvert.h"
|
#include "fmtconvert.h"
|
||||||
#include "lpc.h"
|
#include "lpc.h"
|
||||||
|
#include "kbdwin.h"
|
||||||
|
|
||||||
#include "aac.h"
|
#include "aac.h"
|
||||||
#include "aactab.h"
|
#include "aactab.h"
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "put_bits.h"
|
#include "put_bits.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
#include "mpeg4audio.h"
|
#include "mpeg4audio.h"
|
||||||
|
#include "kbdwin.h"
|
||||||
|
|
||||||
#include "aac.h"
|
#include "aac.h"
|
||||||
#include "aactab.h"
|
#include "aactab.h"
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
#include "ac3_parser.h"
|
#include "ac3_parser.h"
|
||||||
#include "ac3dec.h"
|
#include "ac3dec.h"
|
||||||
#include "ac3dec_data.h"
|
#include "ac3dec_data.h"
|
||||||
|
#include "kbdwin.h"
|
||||||
|
|
||||||
/** Large enough for maximum possible frame size when the specification limit is ignored */
|
/** Large enough for maximum possible frame size when the specification limit is ignored */
|
||||||
#define AC3_FRAME_BUFFER_SIZE 32768
|
#define AC3_FRAME_BUFFER_SIZE 32768
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#define CONFIG_AC3ENC_FLOAT 1
|
#define CONFIG_AC3ENC_FLOAT 1
|
||||||
#include "ac3enc.c"
|
#include "ac3enc.c"
|
||||||
|
#include "kbdwin.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -124,19 +124,6 @@ void ff_dct_init_mmx(DCTContext *s);
|
|||||||
|
|
||||||
void ff_fft_end(FFTContext *s);
|
void ff_fft_end(FFTContext *s);
|
||||||
|
|
||||||
/**
|
|
||||||
* Maximum window size for ff_kbd_window_init.
|
|
||||||
*/
|
|
||||||
#define FF_KBD_WINDOW_MAX 1024
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate a Kaiser-Bessel Derived Window.
|
|
||||||
* @param window pointer to half window
|
|
||||||
* @param alpha determines window shape
|
|
||||||
* @param n size of half window, max FF_KBD_WINDOW_MAX
|
|
||||||
*/
|
|
||||||
void ff_kbd_window_init(float *window, float alpha, int n);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate a sine window.
|
* Generate a sine window.
|
||||||
* @param window pointer to half window
|
* @param window pointer to half window
|
||||||
|
48
libavcodec/kbdwin.c
Normal file
48
libavcodec/kbdwin.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Libav.
|
||||||
|
*
|
||||||
|
* Libav 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.
|
||||||
|
*
|
||||||
|
* Libav 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 Libav; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <libavutil/mathematics.h>
|
||||||
|
#include "libavutil/attributes.h"
|
||||||
|
#include "kbdwin.h"
|
||||||
|
|
||||||
|
#define BESSEL_I0_ITER 50 // default: 50 iterations of Bessel I0 approximation
|
||||||
|
|
||||||
|
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
double sum = 0.0, bessel, tmp;
|
||||||
|
double local_window[FF_KBD_WINDOW_MAX];
|
||||||
|
double alpha2 = (alpha * M_PI / n) * (alpha * M_PI / n);
|
||||||
|
|
||||||
|
assert(n <= FF_KBD_WINDOW_MAX);
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
tmp = i * (n - i) * alpha2;
|
||||||
|
bessel = 1.0;
|
||||||
|
for (j = BESSEL_I0_ITER; j > 0; j--)
|
||||||
|
bessel = bessel * tmp / (j * j) + 1;
|
||||||
|
sum += bessel;
|
||||||
|
local_window[i] = sum;
|
||||||
|
}
|
||||||
|
|
||||||
|
sum++;
|
||||||
|
for (i = 0; i < n; i++)
|
||||||
|
window[i] = sqrt(local_window[i] / sum);
|
||||||
|
}
|
||||||
|
|
35
libavcodec/kbdwin.h
Normal file
35
libavcodec/kbdwin.h
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Libav.
|
||||||
|
*
|
||||||
|
* Libav 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.
|
||||||
|
*
|
||||||
|
* Libav 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 Libav; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AVCODEC_KBDWIN_H
|
||||||
|
#define AVCODEC_KBDWIN_H
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum window size for ff_kbd_window_init.
|
||||||
|
*/
|
||||||
|
#define FF_KBD_WINDOW_MAX 1024
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a Kaiser-Bessel Derived Window.
|
||||||
|
* @param window pointer to half window
|
||||||
|
* @param alpha determines window shape
|
||||||
|
* @param n size of half window, max FF_KBD_WINDOW_MAX
|
||||||
|
*/
|
||||||
|
void ff_kbd_window_init(float *window, float alpha, int n);
|
||||||
|
|
||||||
|
#endif
|
@ -30,31 +30,6 @@
|
|||||||
* MDCT/IMDCT transforms.
|
* MDCT/IMDCT transforms.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Generate a Kaiser-Bessel Derived Window.
|
|
||||||
#define BESSEL_I0_ITER 50 // default: 50 iterations of Bessel I0 approximation
|
|
||||||
av_cold void ff_kbd_window_init(float *window, float alpha, int n)
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
double sum = 0.0, bessel, tmp;
|
|
||||||
double local_window[FF_KBD_WINDOW_MAX];
|
|
||||||
double alpha2 = (alpha * M_PI / n) * (alpha * M_PI / n);
|
|
||||||
|
|
||||||
assert(n <= FF_KBD_WINDOW_MAX);
|
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
|
||||||
tmp = i * (n - i) * alpha2;
|
|
||||||
bessel = 1.0;
|
|
||||||
for (j = BESSEL_I0_ITER; j > 0; j--)
|
|
||||||
bessel = bessel * tmp / (j * j) + 1;
|
|
||||||
sum += bessel;
|
|
||||||
local_window[i] = sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
sum++;
|
|
||||||
for (i = 0; i < n; i++)
|
|
||||||
window[i] = sqrt(local_window[i] / sum);
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "mdct_tablegen.h"
|
#include "mdct_tablegen.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user