Merge remote-tracking branch 'newdev/master'

* newdev/master:
  mpegts: propagate avio EOF in read_packet()
  configure: Initial support for --target-os=symbian
  Fixed-point FFT and MDCT
  Include dependencies for test programs
  ac3enc: simplify sym_quant()
  flvdec: read index stored in the 'keyframes' tag.
  mov: Add support for zero-sized stsc runs.

Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2011-04-01 02:55:29 +02:00
commit 7ac167493e
16 changed files with 334 additions and 58 deletions

View file

@ -22,11 +22,37 @@
#ifndef AVCODEC_FFT_H
#define AVCODEC_FFT_H
#ifndef CONFIG_FFT_FLOAT
#define CONFIG_FFT_FLOAT 1
#endif
#include <stdint.h>
#include "config.h"
#include "libavutil/mem.h"
#if CONFIG_FFT_FLOAT
#include "avfft.h"
#define FFT_NAME(x) x
typedef float FFTDouble;
#else
#define FFT_NAME(x) x ## _fixed
typedef int16_t FFTSample;
typedef int FFTDouble;
typedef struct FFTComplex {
int16_t re, im;
} FFTComplex;
typedef struct FFTContext FFTContext;
#endif /* CONFIG_FFT_FLOAT */
/* FFT computation */
struct FFTContext {
@ -66,7 +92,7 @@ struct FFTContext {
#endif
#define COSTABLE(size) \
COSTABLE_CONST DECLARE_ALIGNED(16, FFTSample, ff_cos_##size)[size/2]
COSTABLE_CONST DECLARE_ALIGNED(16, FFTSample, FFT_NAME(ff_cos_##size))[size/2]
extern COSTABLE(16);
extern COSTABLE(32);
@ -81,7 +107,9 @@ extern COSTABLE(8192);
extern COSTABLE(16384);
extern COSTABLE(32768);
extern COSTABLE(65536);
extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17];
extern COSTABLE_CONST FFTSample* const FFT_NAME(ff_cos_tabs)[17];
#define ff_init_ff_cos_tabs FFT_NAME(ff_init_ff_cos_tabs)
/**
* Initialize the cosine table in ff_cos_tabs[index]
@ -89,6 +117,9 @@ extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17];
*/
void ff_init_ff_cos_tabs(int index);
#define ff_fft_init FFT_NAME(ff_fft_init)
#define ff_fft_end FFT_NAME(ff_fft_end)
/**
* Set up a complex FFT.
* @param nbits log2 of the length of the input array
@ -102,10 +133,10 @@ void ff_fft_init_arm(FFTContext *s);
void ff_fft_end(FFTContext *s);
#define ff_mdct_init FFT_NAME(ff_mdct_init)
#define ff_mdct_end FFT_NAME(ff_mdct_end)
int ff_mdct_init(FFTContext *s, int nbits, int inverse, double scale);
void ff_imdct_calc_c(FFTContext *s, FFTSample *output, const FFTSample *input);
void ff_imdct_half_c(FFTContext *s, FFTSample *output, const FFTSample *input);
void ff_mdct_calc_c(FFTContext *s, FFTSample *output, const FFTSample *input);
void ff_mdct_end(FFTContext *s);
#endif /* AVCODEC_FFT_H */