Implement lms_predict()
authorMashiat Sarker Shakkhar <shahriman_ams@yahoo.com>
Sat, 5 Nov 2011 21:02:11 +0000 (03:02 +0600)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 11 Nov 2011 02:26:42 +0000 (03:26 +0100)
(cherry picked from commit 83e31db195b9d0a07b0526eab5780817d8ce9444)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/wmalosslessdec.c

index a60f477..8f7f290 100644 (file)
@@ -757,6 +757,23 @@ static void reset_codec(WmallDecodeCtx *s)
 
 
 
 
 
 
+static int lms_predict(WmallDecodeCtx *s, int ich, int ilms)
+{
+    int32_t pred, icoef;
+    int recent = s->cdlms[ich][ilms].recent;
+
+    for (icoef = 0; icoef < s->cdlms[ich][ilms].order; icoef++)
+        pred += s->cdlms[ich][ilms].coefs[icoef] *
+                    s->cdlms[ich][ilms].lms_prevvalues[icoef + recent];
+
+    pred += (1 << (s->cdlms[ich][ilms].scaling - 1));
+    /* XXX: Table 29 has:
+            iPred >= cdlms[iCh][ilms].scaling;
+       seems to me like a missing > */
+    pred >>= s->cdlms[ich][ilms].scaling;
+    return pred;
+}
+
 /**
  *@brief Decode a single subframe (block).
  *@param s codec context
 /**
  *@brief Decode a single subframe (block).
  *@param s codec context