| Index: patched-ffmpeg-mt/libavcodec/dsputil.h
|
| ===================================================================
|
| --- patched-ffmpeg-mt/libavcodec/dsputil.h (revision 41250)
|
| +++ patched-ffmpeg-mt/libavcodec/dsputil.h (working copy)
|
| @@ -96,6 +96,24 @@
|
| void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride,
|
| const int16_t *h_weights, const int16_t *v_weights);
|
|
|
| +/* Bink functions */
|
| +void ff_bink_idct_c (DCTELEM *block);
|
| +void ff_bink_idct_add_c(uint8_t *dest, int linesize, DCTELEM *block);
|
| +void ff_bink_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
|
| +
|
| +/* CAVS functions */
|
| +void ff_put_cavs_qpel8_mc00_c(uint8_t *dst, uint8_t *src, int stride);
|
| +void ff_avg_cavs_qpel8_mc00_c(uint8_t *dst, uint8_t *src, int stride);
|
| +void ff_put_cavs_qpel16_mc00_c(uint8_t *dst, uint8_t *src, int stride);
|
| +void ff_avg_cavs_qpel16_mc00_c(uint8_t *dst, uint8_t *src, int stride);
|
| +
|
| +/* VC1 functions */
|
| +void ff_put_vc1_mspel_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int rnd);
|
| +void ff_avg_vc1_mspel_mc00_c(uint8_t *dst, const uint8_t *src, int stride, int rnd);
|
| +
|
| +/* EA functions */
|
| +void ff_ea_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
|
| +
|
| /* 1/2^n downscaling functions from imgconvert.c */
|
| void ff_img_copy_plane(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
|
| void ff_shrink22(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, int width, int height);
|
| @@ -136,6 +154,8 @@
|
| typedef void (*h264_weight_func)(uint8_t *block, int stride, int log2_denom, int weight, int offset);
|
| typedef void (*h264_biweight_func)(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset);
|
|
|
| +typedef void (*op_fill_func)(uint8_t *block/*align width (8 or 16)*/, uint8_t value, int line_size, int h);
|
| +
|
| #define DEF_OLD_QPEL(name)\
|
| void ff_put_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, int stride);\
|
| void ff_put_no_rnd_ ## name (uint8_t *dst/*align width (8 or 16)*/, uint8_t *src/*align 1*/, int stride);\
|
| @@ -197,6 +217,7 @@
|
| void (*diff_pixels)(DCTELEM *block/*align 16*/, const uint8_t *s1/*align 8*/, const uint8_t *s2/*align 8*/, int stride);
|
| void (*put_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
|
| void (*put_signed_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
|
| + void (*put_pixels_nonclamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
|
| void (*add_pixels_clamped)(const DCTELEM *block/*align 16*/, uint8_t *pixels/*align 8*/, int line_size);
|
| void (*add_pixels8)(uint8_t *pixels, DCTELEM *block, int line_size);
|
| void (*add_pixels4)(uint8_t *pixels, DCTELEM *block, int line_size);
|
| @@ -585,6 +606,10 @@
|
| qpel_mc_func avg_rv40_qpel_pixels_tab[4][16];
|
| h264_chroma_mc_func put_rv40_chroma_pixels_tab[3];
|
| h264_chroma_mc_func avg_rv40_chroma_pixels_tab[3];
|
| +
|
| + /* bink functions */
|
| + op_fill_func fill_block_tab[2];
|
| + void (*scale_block)(const uint8_t src[64]/*align 8*/, uint8_t *dst/*align 8*/, int linesize);
|
| } DSPContext;
|
|
|
| void dsputil_static_init(void);
|
| @@ -658,8 +683,13 @@
|
| void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx);
|
| void dsputil_init_vis(DSPContext* c, AVCodecContext *avctx);
|
|
|
| -#define DECLARE_ALIGNED_16(t, v, ...) DECLARE_ALIGNED(16, t, v)
|
| -#define DECLARE_ALIGNED_8(t, v, ...) DECLARE_ALIGNED(8, t, v)
|
| +void ff_cavsdsp_init(DSPContext* c, AVCodecContext *avctx);
|
| +void ff_rv30dsp_init(DSPContext* c, AVCodecContext *avctx);
|
| +void ff_rv40dsp_init(DSPContext* c, AVCodecContext *avctx);
|
| +void ff_vc1dsp_init(DSPContext* c, AVCodecContext *avctx);
|
| +void ff_intrax8dsp_init(DSPContext* c, AVCodecContext *avctx);
|
| +void ff_mlp_init(DSPContext* c, AVCodecContext *avctx);
|
| +void ff_mlp_init_x86(DSPContext* c, AVCodecContext *avctx);
|
|
|
| #if HAVE_MMX
|
|
|
| @@ -702,225 +732,27 @@
|
| # define STRIDE_ALIGN 8
|
| #endif
|
|
|
| -/* PSNR */
|
| -void get_psnr(uint8_t *orig_image[3], uint8_t *coded_image[3],
|
| - int orig_linesize[3], int coded_linesize,
|
| - AVCodecContext *avctx);
|
| +#define LOCAL_ALIGNED(a, t, v, s, ...) \
|
| + uint8_t la_##v[sizeof(t s __VA_ARGS__) + (a)]; \
|
| + t (*v) __VA_ARGS__ = (void *)FFALIGN((uintptr_t)la_##v, a)
|
|
|
| -/* FFT computation */
|
| +#if HAVE_LOCAL_ALIGNED_8
|
| +# define LOCAL_ALIGNED_8(t, v, s, ...) DECLARE_ALIGNED(8, t, v) s __VA_ARGS__
|
| +#else
|
| +# define LOCAL_ALIGNED_8(t, v, s, ...) LOCAL_ALIGNED(8, t, v, s, __VA_ARGS__)
|
| +#endif
|
|
|
| -/* NOTE: soon integer code will be added, so you must use the
|
| - FFTSample type */
|
| -typedef float FFTSample;
|
| -
|
| -typedef struct FFTComplex {
|
| - FFTSample re, im;
|
| -} FFTComplex;
|
| -
|
| -typedef struct FFTContext {
|
| - int nbits;
|
| - int inverse;
|
| - uint16_t *revtab;
|
| - FFTComplex *exptab;
|
| - FFTComplex *exptab1; /* only used by SSE code */
|
| - FFTComplex *tmp_buf;
|
| - int mdct_size; /* size of MDCT (i.e. number of input data * 2) */
|
| - int mdct_bits; /* n = 2^nbits */
|
| - /* pre/post rotation tables */
|
| - FFTSample *tcos;
|
| - FFTSample *tsin;
|
| - void (*fft_permute)(struct FFTContext *s, FFTComplex *z);
|
| - void (*fft_calc)(struct FFTContext *s, FFTComplex *z);
|
| - void (*imdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
|
| - void (*imdct_half)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
|
| - void (*mdct_calc)(struct FFTContext *s, FFTSample *output, const FFTSample *input);
|
| - int split_radix;
|
| - int permutation;
|
| -#define FF_MDCT_PERM_NONE 0
|
| -#define FF_MDCT_PERM_INTERLEAVE 1
|
| -} FFTContext;
|
| -
|
| -#if CONFIG_HARDCODED_TABLES
|
| -#define COSTABLE_CONST const
|
| -#define SINTABLE_CONST const
|
| -#define SINETABLE_CONST const
|
| +#if HAVE_LOCAL_ALIGNED_16
|
| +# define LOCAL_ALIGNED_16(t, v, s, ...) DECLARE_ALIGNED(16, t, v) s __VA_ARGS__
|
| #else
|
| -#define COSTABLE_CONST
|
| -#define SINTABLE_CONST
|
| -#define SINETABLE_CONST
|
| +# define LOCAL_ALIGNED_16(t, v, s, ...) LOCAL_ALIGNED(16, t, v, s, __VA_ARGS__)
|
| #endif
|
|
|
| -#define COSTABLE(size) \
|
| - COSTABLE_CONST DECLARE_ALIGNED_16(FFTSample, ff_cos_##size)[size/2]
|
| -#define SINTABLE(size) \
|
| - SINTABLE_CONST DECLARE_ALIGNED_16(FFTSample, ff_sin_##size)[size/2]
|
| -#define SINETABLE(size) \
|
| - SINETABLE_CONST DECLARE_ALIGNED_16(float, ff_sine_##size)[size]
|
| -extern COSTABLE(16);
|
| -extern COSTABLE(32);
|
| -extern COSTABLE(64);
|
| -extern COSTABLE(128);
|
| -extern COSTABLE(256);
|
| -extern COSTABLE(512);
|
| -extern COSTABLE(1024);
|
| -extern COSTABLE(2048);
|
| -extern COSTABLE(4096);
|
| -extern COSTABLE(8192);
|
| -extern COSTABLE(16384);
|
| -extern COSTABLE(32768);
|
| -extern COSTABLE(65536);
|
| -extern COSTABLE_CONST FFTSample* const ff_cos_tabs[17];
|
| +/* PSNR */
|
| +void get_psnr(uint8_t *orig_image[3], uint8_t *coded_image[3],
|
| + int orig_linesize[3], int coded_linesize,
|
| + AVCodecContext *avctx);
|
|
|
| -/**
|
| - * Initializes the cosine table in ff_cos_tabs[index]
|
| - * \param index index in ff_cos_tabs array of the table to initialize
|
| - */
|
| -void ff_init_ff_cos_tabs(int index);
|
| -
|
| -extern SINTABLE(16);
|
| -extern SINTABLE(32);
|
| -extern SINTABLE(64);
|
| -extern SINTABLE(128);
|
| -extern SINTABLE(256);
|
| -extern SINTABLE(512);
|
| -extern SINTABLE(1024);
|
| -extern SINTABLE(2048);
|
| -extern SINTABLE(4096);
|
| -extern SINTABLE(8192);
|
| -extern SINTABLE(16384);
|
| -extern SINTABLE(32768);
|
| -extern SINTABLE(65536);
|
| -
|
| -/**
|
| - * Sets up a complex FFT.
|
| - * @param nbits log2 of the length of the input array
|
| - * @param inverse if 0 perform the forward transform, if 1 perform the inverse
|
| - */
|
| -int ff_fft_init(FFTContext *s, int nbits, int inverse);
|
| -void ff_fft_permute_c(FFTContext *s, FFTComplex *z);
|
| -void ff_fft_calc_c(FFTContext *s, FFTComplex *z);
|
| -
|
| -void ff_fft_init_altivec(FFTContext *s);
|
| -void ff_fft_init_mmx(FFTContext *s);
|
| -void ff_fft_init_arm(FFTContext *s);
|
| -
|
| -/**
|
| - * Do the permutation needed BEFORE calling ff_fft_calc().
|
| - */
|
| -static inline void ff_fft_permute(FFTContext *s, FFTComplex *z)
|
| -{
|
| - s->fft_permute(s, z);
|
| -}
|
| -/**
|
| - * Do a complex FFT with the parameters defined in ff_fft_init(). The
|
| - * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
|
| - */
|
| -static inline void ff_fft_calc(FFTContext *s, FFTComplex *z)
|
| -{
|
| - s->fft_calc(s, z);
|
| -}
|
| -void ff_fft_end(FFTContext *s);
|
| -
|
| -/* MDCT computation */
|
| -
|
| -static inline void ff_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input)
|
| -{
|
| - s->imdct_calc(s, output, input);
|
| -}
|
| -static inline void ff_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input)
|
| -{
|
| - s->imdct_half(s, output, input);
|
| -}
|
| -
|
| -static inline void ff_mdct_calc(FFTContext *s, FFTSample *output,
|
| - const FFTSample *input)
|
| -{
|
| - s->mdct_calc(s, output, input);
|
| -}
|
| -
|
| -/**
|
| - * Generate a Kaiser-Bessel Derived Window.
|
| - * @param window pointer to half window
|
| - * @param alpha determines window shape
|
| - * @param n size of half window
|
| - */
|
| -void ff_kbd_window_init(float *window, float alpha, int n);
|
| -
|
| -/**
|
| - * Generate a sine window.
|
| - * @param window pointer to half window
|
| - * @param n size of half window
|
| - */
|
| -void ff_sine_window_init(float *window, int n);
|
| -/**
|
| - * initialize the specified entry of ff_sine_windows
|
| - */
|
| -void ff_init_ff_sine_windows(int index);
|
| -extern SINETABLE( 32);
|
| -extern SINETABLE( 64);
|
| -extern SINETABLE( 128);
|
| -extern SINETABLE( 256);
|
| -extern SINETABLE( 512);
|
| -extern SINETABLE(1024);
|
| -extern SINETABLE(2048);
|
| -extern SINETABLE(4096);
|
| -extern SINETABLE_CONST float * const ff_sine_windows[13];
|
| -
|
| -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);
|
| -
|
| -/* Real Discrete Fourier Transform */
|
| -
|
| -enum RDFTransformType {
|
| - RDFT,
|
| - IRDFT,
|
| - RIDFT,
|
| - IRIDFT,
|
| -};
|
| -
|
| -typedef struct {
|
| - int nbits;
|
| - int inverse;
|
| - int sign_convention;
|
| -
|
| - /* pre/post rotation tables */
|
| - const FFTSample *tcos;
|
| - SINTABLE_CONST FFTSample *tsin;
|
| - FFTContext fft;
|
| -} RDFTContext;
|
| -
|
| -/**
|
| - * Sets up a real FFT.
|
| - * @param nbits log2 of the length of the input array
|
| - * @param trans the type of transform
|
| - */
|
| -int ff_rdft_init(RDFTContext *s, int nbits, enum RDFTransformType trans);
|
| -void ff_rdft_calc(RDFTContext *s, FFTSample *data);
|
| -void ff_rdft_end(RDFTContext *s);
|
| -
|
| -/* Discrete Cosine Transform */
|
| -
|
| -typedef struct {
|
| - int nbits;
|
| - int inverse;
|
| - FFTSample *data;
|
| - RDFTContext rdft;
|
| - const float *costab;
|
| - FFTSample *csc2;
|
| -} DCTContext;
|
| -
|
| -/**
|
| - * Sets up (Inverse)DCT.
|
| - * @param nbits log2 of the length of the input array
|
| - * @param inverse >0 forward transform, <0 inverse transform
|
| - */
|
| -int ff_dct_init(DCTContext *s, int nbits, int inverse);
|
| -void ff_dct_calc(DCTContext *s, FFTSample *data);
|
| -void ff_dct_end (DCTContext *s);
|
| -
|
| #define WRAPPER8_16(name8, name16)\
|
| static int name16(void /*MpegEncContext*/ *s, uint8_t *dst, uint8_t *src, int stride, int h){\
|
| return name8(s, dst , src , stride, h)\
|
|
|