From fde82ca7e4e72226da99d86a9fa9689136461d14 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sat, 17 Oct 2009 21:00:39 +0000 Subject: [PATCH] Move autocorrelation function from flacenc.c to lpc.c. Also rename the corresponding dsputil functions and remove their dependency on the FLAC encoder. Fixes Issue1486. Originally committed as revision 20266 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/Makefile | 2 +- libavcodec/dsputil.c | 8 ++-- libavcodec/dsputil.h | 2 +- libavcodec/flacenc.c | 63 ---------------------------- libavcodec/lpc.c | 64 ++++++++++++++++++++++++++++- libavcodec/x86/dsputilenc_mmx.c | 6 +-- libavcodec/x86/{flacdsp_mmx.c => lpc_mmx.c} | 4 +- 7 files changed, 72 insertions(+), 77 deletions(-) rename libavcodec/x86/{flacdsp_mmx.c => lpc_mmx.c} (98%) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 789ece0..85acb5f 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -456,7 +456,6 @@ YASM-OBJS-$(CONFIG_GPL) += x86/h264_deblock_sse2.o \ MMX-OBJS-$(CONFIG_CAVS_DECODER) += x86/cavsdsp_mmx.o MMX-OBJS-$(CONFIG_ENCODERS) += x86/dsputilenc_mmx.o -MMX-OBJS-$(CONFIG_FLAC_ENCODER) += x86/flacdsp_mmx.o MMX-OBJS-$(CONFIG_GPL) += x86/idct_mmx.o MMX-OBJS-$(CONFIG_SNOW_DECODER) += x86/snowdsp_mmx.o MMX-OBJS-$(CONFIG_VC1_DECODER) += x86/vc1dsp_mmx.o @@ -474,6 +473,7 @@ OBJS-$(HAVE_MMX) += x86/cpuid.o \ x86/fft.o \ x86/idct_mmx_xvid.o \ x86/idct_sse2_xvid.o \ + x86/lpc_mmx.o \ x86/motion_est_mmx.o \ x86/mpegvideo_mmx.o \ x86/simple_idct_mmx.o \ diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c index be35ec3..aae86bc 100644 --- a/libavcodec/dsputil.c +++ b/libavcodec/dsputil.c @@ -45,8 +45,8 @@ void vorbis_inverse_coupling(float *mag, float *ang, int blocksize); /* ac3dec.c */ void ff_ac3_downmix_c(float (*samples)[256], float (*matrix)[2], int out_ch, int in_ch, int len); -/* flacenc.c */ -void ff_flac_compute_autocorr(const int32_t *data, int len, int lag, double *autoc); +/* lpc.c */ +void ff_lpc_compute_autocorr(const int32_t *data, int len, int lag, double *autoc); /* pngdec.c */ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp); @@ -4837,9 +4837,7 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx) #if CONFIG_AC3_DECODER c->ac3_downmix = ff_ac3_downmix_c; #endif -#if CONFIG_FLAC_ENCODER - c->flac_compute_autocorr = ff_flac_compute_autocorr; -#endif + c->lpc_compute_autocorr = ff_lpc_compute_autocorr; c->vector_fmul = vector_fmul_c; c->vector_fmul_reverse = vector_fmul_reverse_c; c->vector_fmul_add = vector_fmul_add_c; diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h index 6cb5af2..58524b2 100644 --- a/libavcodec/dsputil.h +++ b/libavcodec/dsputil.h @@ -386,7 +386,7 @@ typedef struct DSPContext { void (*vorbis_inverse_coupling)(float *mag, float *ang, int blocksize); void (*ac3_downmix)(float (*samples)[256], float (*matrix)[2], int out_ch, int in_ch, int len); /* no alignment needed */ - void (*flac_compute_autocorr)(const int32_t *data, int len, int lag, double *autoc); + void (*lpc_compute_autocorr)(const int32_t *data, int len, int lag, double *autoc); /* assume len is a multiple of 8, and arrays are 16-byte aligned */ void (*vector_fmul)(float *dst, const float *src, int len); void (*vector_fmul_reverse)(float *dst, const float *src0, const float *src1, int len); diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c index 81a35a0..c1f862a 100644 --- a/libavcodec/flacenc.c +++ b/libavcodec/flacenc.c @@ -552,69 +552,6 @@ static uint32_t calc_rice_params_lpc(RiceContext *rc, int pmin, int pmax, return bits; } -/** - * Apply Welch window function to audio block - */ -static void apply_welch_window(const int32_t *data, int len, double *w_data) -{ - int i, n2; - double w; - double c; - - assert(!(len&1)); //the optimization in r11881 does not support odd len - //if someone wants odd len extend the change in r11881 - - n2 = (len >> 1); - c = 2.0 / (len - 1.0); - - w_data+=n2; - data+=n2; - for(i=0; i 0); diff --git a/libavcodec/lpc.c b/libavcodec/lpc.c index 896db51..49e41d8 100644 --- a/libavcodec/lpc.c +++ b/libavcodec/lpc.c @@ -27,6 +27,68 @@ /** + * Apply Welch window function to audio block + */ +static void apply_welch_window(const int32_t *data, int len, double *w_data) +{ + int i, n2; + double w; + double c; + + assert(!(len&1)); //the optimization in r11881 does not support odd len + //if someone wants odd len extend the change in r11881 + + n2 = (len >> 1); + c = 2.0 / (len - 1.0); + + w_data+=n2; + data+=n2; + for(i=0; i= MIN_LPC_ORDER && max_order <= MAX_LPC_ORDER && use_lpc > 0); if(use_lpc == 1){ - s->flac_compute_autocorr(samples, blocksize, max_order, autoc); + s->lpc_compute_autocorr(samples, blocksize, max_order, autoc); compute_lpc_coefs(autoc, max_order, &lpc[0][0], MAX_LPC_ORDER, 0, 1); diff --git a/libavcodec/x86/dsputilenc_mmx.c b/libavcodec/x86/dsputilenc_mmx.c index 6059436..2bf0fe1 100644 --- a/libavcodec/x86/dsputilenc_mmx.c +++ b/libavcodec/x86/dsputilenc_mmx.c @@ -1348,8 +1348,7 @@ static int ssd_int8_vs_int16_mmx(const int8_t *pix1, const int16_t *pix2, int si #endif //HAVE_SSSE3 -/* FLAC specific */ -void ff_flac_compute_autocorr_sse2(const int32_t *data, int len, int lag, +void ff_lpc_compute_autocorr_sse2(const int32_t *data, int len, int lag, double *autoc); @@ -1414,8 +1413,7 @@ void dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx) c->sum_abs_dctelem= sum_abs_dctelem_sse2; c->hadamard8_diff[0]= hadamard8_diff16_sse2; c->hadamard8_diff[1]= hadamard8_diff_sse2; - if (CONFIG_FLAC_ENCODER) - c->flac_compute_autocorr = ff_flac_compute_autocorr_sse2; + c->lpc_compute_autocorr = ff_lpc_compute_autocorr_sse2; } #if HAVE_SSSE3 diff --git a/libavcodec/x86/flacdsp_mmx.c b/libavcodec/x86/lpc_mmx.c similarity index 98% rename from libavcodec/x86/flacdsp_mmx.c rename to libavcodec/x86/lpc_mmx.c index 01c0d7a..40fc678 100644 --- a/libavcodec/x86/flacdsp_mmx.c +++ b/libavcodec/x86/lpc_mmx.c @@ -1,5 +1,5 @@ /* - * MMX optimized FLAC DSP utils + * MMX optimized LPC DSP utils * Copyright (c) 2007 Loren Merritt * * This file is part of FFmpeg. @@ -65,7 +65,7 @@ static void apply_welch_window_sse2(const int32_t *data, int len, double *w_data #undef WELCH } -void ff_flac_compute_autocorr_sse2(const int32_t *data, int len, int lag, +void ff_lpc_compute_autocorr_sse2(const int32_t *data, int len, int lag, double *autoc) { double tmp[len + lag + 2]; -- 2.7.4