On Fri, May 29, 2015 at 03:46:21PM +0200, Nedeljko Babic wrote: > Added functions needed for implementation of fixed point aac dec. > > Signed-off-by: Nedeljko Babic <nedeljko.ba...@imgtec.com> > --- > libavutil/fixed_dsp.c | 60 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > libavutil/fixed_dsp.h | 53 +++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 113 insertions(+) > > diff --git a/libavutil/fixed_dsp.c b/libavutil/fixed_dsp.c > index e0ea981..8ddcdef 100644 > --- a/libavutil/fixed_dsp.c > +++ b/libavutil/fixed_dsp.c > @@ -47,6 +47,28 @@ > > #include "fixed_dsp.h" > > +static void vector_fmul_add_c(int *dst, const int *src0, const int *src1, > const int *src2, int len){ > + int i; > + int64_t accu; > + > + for (i=0; i<len; i++) { > + accu = (int64_t)src0[i] * src1[i]; > + dst[i] = src2[i] + (int)((accu + 0x40000000) >> 31); > + } > +} > + > +static void vector_fmul_reverse_c(int *dst, const int *src0, const int > *src1, int len) > +{ > + int i; > + int64_t accu; > + > + src1 += len-1; > + for (i=0; i<len; i++) { > + accu = (int64_t)src0[i] * src1[-i]; > + dst[i] = (int)((accu+0x40000000) >> 31); > + } > +} > + > static void vector_fmul_window_scaled_c(int16_t *dst, const int32_t *src0, > const int32_t *src1, const int32_t > *win, > int len, uint8_t bits) > @@ -88,6 +110,39 @@ static void vector_fmul_window_c(int32_t *dst, const > int32_t *src0, > } > } > > +static void vector_fmul_c(int *dst, const int *src0, const int *src1, int > len) > +{ > + int i; > + int64_t accu; > + > + for (i = 0; i < len; i++){ > + accu = (int64_t)src0[i] * src1[i]; > + dst[i] = (int)((accu+0x40000000) >> 31); > + } > +} > + > +static int ff_scalarproduct_fixed_c(const int *v1, const int *v2, int len) > +{
> + int64_t p = 0; > + int i; > + > + for (i = 0; i < len; i++) > + p += (int64_t)v1[i] * v2[i]; > + > + return (int)((p + 0x40000000) >> 31); p could be set to 0x4000000 instead of 0 to avoid the addition > +} > + > +static void butterflies_fixed_c(int *v1, int *v2, int len) > +{ > + int i; > + > + for (i = 0; i < len; i++){ > + int t = v1[i] - v2[i]; > + v1[i] += v2[i]; > + v2[i] = t; > + } > +} why does this have a different indention depth ? > + > AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact) > { > AVFixedDSPContext * fdsp = av_malloc(sizeof(AVFixedDSPContext)); > @@ -97,6 +152,11 @@ AVFixedDSPContext * avpriv_alloc_fixed_dsp(int bit_exact) > > fdsp->vector_fmul_window_scaled = vector_fmul_window_scaled_c; > fdsp->vector_fmul_window = vector_fmul_window_c; > + fdsp->vector_fmul = vector_fmul_c; > + fdsp->vector_fmul_add = vector_fmul_add_c; > + fdsp->vector_fmul_reverse = vector_fmul_reverse_c; > + fdsp->butterflies_fixed = butterflies_fixed_c; > + fdsp->scalarproduct_fixed = ff_scalarproduct_fixed_c; > > return fdsp; > } > diff --git a/libavutil/fixed_dsp.h b/libavutil/fixed_dsp.h > index ff6f365..73859c0 100644 > --- a/libavutil/fixed_dsp.h > +++ b/libavutil/fixed_dsp.h > @@ -54,6 +54,8 @@ > #include "libavcodec/mathops.h" > > typedef struct AVFixedDSPContext { > + /* assume len is a multiple of 16, and arrays are 32-byte aligned */ > + > /** > * Overlap/add with window function. > * Used primarily by MDCT-based audio codecs. > @@ -92,6 +94,57 @@ typedef struct AVFixedDSPContext { > */ > void (*vector_fmul_window)(int32_t *dst, const int32_t *src0, const > int32_t *src1, const int32_t *win, int len); > > + /** > + * Fixed-point multiplication that calculates the product of two vectors > of > + * integers and stores the result in a vector of integers. "the product of 2 vectors" is not a clearly defined operation there are many products, the dot product is the most commonly used possibly but thats not what this function does, what you mean is the element or component wise multiplication also the fixed point precission must be specified because the results are completely diffeernt depending on where the 1.0 point is and how much the result is shifted to compensate these issues applies also to other functions [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel