[FFmpeg-cvslog] Add a shift parameter to celp_lp_synthesis_filter()

Mohamed Naufal Basheer git at videolan.org
Sun Jul 22 22:22:50 CEST 2012


ffmpeg | branch: master | Mohamed Naufal Basheer <naufal11 at gmail.com> | Tue Jul 10 19:58:39 2012 +0200| [8aac5585fa7e50d899103efaa3aa4b2a774b16b4] | committer: Kostya Shishkov

Add a shift parameter to celp_lp_synthesis_filter()

This is intended for reuse by the G.723.1 decoder

Signed-off-by: Kostya Shishkov <kostya.shishkov at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8aac5585fa7e50d899103efaa3aa4b2a774b16b4
---

 libavcodec/celp_filters.c |    4 ++--
 libavcodec/celp_filters.h |    3 ++-
 libavcodec/ra144.c        |    2 +-
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/libavcodec/celp_filters.c b/libavcodec/celp_filters.c
index 849cda4..4e5bcda 100644
--- a/libavcodec/celp_filters.c
+++ b/libavcodec/celp_filters.c
@@ -58,7 +58,7 @@ void ff_celp_circ_addf(float *out, const float *in,
 int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs,
                                 const int16_t *in, int buffer_length,
                                 int filter_length, int stop_on_overflow,
-                                int rounder)
+                                int shift, int rounder)
 {
     int i,n;
 
@@ -67,7 +67,7 @@ int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs,
         for (i = 1; i <= filter_length; i++)
             sum -= filter_coeffs[i-1] * out[n-i];
 
-        sum = (sum >> 12) + in[n];
+        sum = ((sum >> 12) + in[n]) >> shift;
 
         if (sum + 0x8000 > 0xFFFFU) {
             if (stop_on_overflow)
diff --git a/libavcodec/celp_filters.h b/libavcodec/celp_filters.h
index cfd08fd..c328258 100644
--- a/libavcodec/celp_filters.h
+++ b/libavcodec/celp_filters.h
@@ -63,6 +63,7 @@ void ff_celp_circ_addf(float *out, const float *in,
  * @param filter_length filter length (10 for 10th order LP filter)
  * @param stop_on_overflow   1 - return immediately if overflow occurs
  *                           0 - ignore overflows
+ * @param shift the result is shifted right by this value
  * @param rounder the amount to add for rounding (usually 0x800 or 0xfff)
  *
  * @return 1 if overflow occurred, 0 - otherwise
@@ -75,7 +76,7 @@ void ff_celp_circ_addf(float *out, const float *in,
 int ff_celp_lp_synthesis_filter(int16_t *out, const int16_t *filter_coeffs,
                                 const int16_t *in, int buffer_length,
                                 int filter_length, int stop_on_overflow,
-                                int rounder);
+                                int shift, int rounder);
 
 /**
  * LP synthesis filter.
diff --git a/libavcodec/ra144.c b/libavcodec/ra144.c
index e6442d6..8b5ea3a 100644
--- a/libavcodec/ra144.c
+++ b/libavcodec/ra144.c
@@ -1715,6 +1715,6 @@ void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs,
            LPC_ORDER*sizeof(*ractx->curr_sblock));
 
     if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + LPC_ORDER, lpc_coefs,
-                                    block, BLOCKSIZE, LPC_ORDER, 1, 0xfff))
+                                    block, BLOCKSIZE, LPC_ORDER, 1, 0, 0xfff))
         memset(ractx->curr_sblock, 0, (LPC_ORDER+BLOCKSIZE)*sizeof(*ractx->curr_sblock));
 }



More information about the ffmpeg-cvslog mailing list