[FFmpeg-cvslog] avcodec/lpc: Fix lpc_apply_welch_window_c() for odd len

Michael Niedermayer git at videolan.org
Mon Jul 6 19:26:28 CEST 2015


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Mon Jul  6 19:11:42 2015 +0200| [a3a61d4663ab7f2a26dd6d246d3884a166c8c626] | committer: Michael Niedermayer

avcodec/lpc: Fix lpc_apply_welch_window_c() for odd len

Also removes assert
this fixes an assertion failure on non-x86

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavcodec/lpc.c |   14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/libavcodec/lpc.c b/libavcodec/lpc.c
index deb02e7..07fc292 100644
--- a/libavcodec/lpc.c
+++ b/libavcodec/lpc.c
@@ -37,13 +37,19 @@ static void lpc_apply_welch_window_c(const int32_t *data, int len,
     double w;
     double c;
 
-    /* The optimization in commit fa4ed8c does not support odd len.
-     * If someone wants odd len extend that change. */
-    av_assert2(!(len & 1));
-
     n2 = (len >> 1);
     c = 2.0 / (len - 1.0);
 
+    if (len & 1) {
+        for(i=0; i<n2; i++) {
+            w = c - i - 1.0;
+            w = 1.0 - (w * w);
+            w_data[i] = data[i] * w;
+            w_data[len-1-i] = data[len-1-i] * w;
+        }
+        return;
+    }
+
     w_data+=n2;
       data+=n2;
     for(i=0; i<n2; i++) {



More information about the ffmpeg-cvslog mailing list