aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMans Rullgard <mans@mansr.com>2011-09-28 14:33:21 +0100
committerMans Rullgard <mans@mansr.com>2011-09-28 15:56:08 +0100
commitfcca826a63c79168f82a48c2620312630a83080a (patch)
tree97e7acfeebd6769a4e75d7c2cf3d0239f4a1acd6
parent32dfd8ca65e67b18bd22f83cf967f8216818e1fe (diff)
downloadffmpeg-fcca826a63c79168f82a48c2620312630a83080a.tar.gz
dsputil: add vector_fmac_scalar()
Signed-off-by: Mans Rullgard <mans@mansr.com>
-rw-r--r--libavcodec/dsputil.c9
-rw-r--r--libavcodec/dsputil.h11
2 files changed, 20 insertions, 0 deletions
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 039cf0b213..967406eedf 100644
--- a/libavcodec/dsputil.c
+++ b/libavcodec/dsputil.c
@@ -2455,6 +2455,14 @@ static void vector_fmul_scalar_c(float *dst, const float *src, float mul,
dst[i] = src[i] * mul;
}
+static void vector_fmac_scalar_c(float *dst, const float *src, float mul,
+ int len)
+{
+ int i;
+ for (i = 0; i < len; i++)
+ dst[i] += src[i] * mul;
+}
+
static void butterflies_float_c(float *restrict v1, float *restrict v2,
int len)
{
@@ -2994,6 +3002,7 @@ av_cold void dsputil_init(DSPContext* c, AVCodecContext *avctx)
c->scalarproduct_float = scalarproduct_float_c;
c->butterflies_float = butterflies_float_c;
c->vector_fmul_scalar = vector_fmul_scalar_c;
+ c->vector_fmac_scalar = vector_fmac_scalar_c;
c->shrink[0]= av_image_copy_plane;
c->shrink[1]= ff_shrink22;
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index 4d783cf266..73830f8190 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -424,6 +424,17 @@ typedef struct DSPContext {
void (*vector_fmul_scalar)(float *dst, const float *src, float mul,
int len);
/**
+ * Multiply a vector of floats by a scalar float and add to
+ * destination vector. Source and destination vectors must
+ * overlap exactly or not at all.
+ * @param dst result vector, 16-byte aligned
+ * @param src input vector, 16-byte aligned
+ * @param mul scalar value
+ * @param len length of vector, multiple of 4
+ */
+ void (*vector_fmac_scalar)(float *dst, const float *src, float mul,
+ int len);
+ /**
* Calculate the scalar product of two vectors of floats.
* @param v1 first vector, 16-byte aligned
* @param v2 second vector, 16-byte aligned