aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMashiat Sarker Shakkhar <shahriman_ams@yahoo.com>2011-11-06 03:02:11 +0600
committerMashiat Sarker Shakkhar <shahriman_ams@yahoo.com>2011-11-20 14:51:39 +0600
commit0faae518e927b791e86f5a43b919a5c6e882d9b5 (patch)
tree48cdb0fbaa472d2143e477f08dfcdd79cef6b2e7
parent03684c8ff33c8afd7edc0ffbf2f3b01101bb0e1d (diff)
downloadffmpeg-0faae518e927b791e86f5a43b919a5c6e882d9b5.tar.gz
Implement lms_predict()
-rw-r--r--libavcodec/wmalosslessdec.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libavcodec/wmalosslessdec.c b/libavcodec/wmalosslessdec.c
index 5c6eed1744..eafe145aae 100644
--- a/libavcodec/wmalosslessdec.c
+++ b/libavcodec/wmalosslessdec.c
@@ -754,6 +754,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