Quelle float_dsp.h
Sprache: C
/*
* This file is part of FFmpeg .
*
* FFmpeg is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2 . 1 of the License , or ( at your option ) any later version .
*
* FFmpeg is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
#ifndef AVUTIL_FLOAT_DSP_H
#define AVUTIL_FLOAT_DSP_H
#include <stddef.h>
typedef struct AVFloatDSPContext {
/**
* Calculate the entry wise product of two vectors of floats and store the result in
* a vector of floats .
*
* @ param dst output vector
* constraints : 32 - byte aligned
* @ param src0 first input vector
* constraints : 32 - byte aligned
* @ param src1 second input vector
* constraints : 32 - byte aligned
* @ param len number of elements in the input
* constraints : multiple of 16
*/
void (*vector_fmul)(float *dst, const float *src0, const float *src1,
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
* constraints : 32 - byte aligned
* @ param src input vector
* constraints : 32 - byte aligned
* @ param mul scalar value
* @ param len length of vector
* constraints : multiple of 16
*/
void (*vector_fmac_scalar)(float *dst, const float *src, float mul,
int len);
/**
* Multiply a vector of doubles by a scalar double and add to
* destination vector . Source and destination vectors must
* overlap exactly or not at all .
*
* @ param dst result vector
* constraints : 32 - byte aligned
* @ param src input vector
* constraints : 32 - byte aligned
* @ param mul scalar value
* @ param len length of vector
* constraints : multiple of 16
*/
void (*vector_dmac_scalar)(double *dst, const double *src, double mul,
int len);
/**
* Multiply a vector of floats by a scalar float . Source and
* destination vectors must overlap exactly or not at all .
*
* @ param dst result vector
* constraints : 16 - byte aligned
* @ param src input vector
* constraints : 16 - byte aligned
* @ param mul scalar value
* @ param len length of vector
* constraints : multiple of 4
*/
void (*vector_fmul_scalar)(float *dst, const float *src, float mul,
int len);
/**
* Multiply a vector of double by a scalar double . Source and
* destination vectors must overlap exactly or not at all .
*
* @ param dst result vector
* constraints : 32 - byte aligned
* @ param src input vector
* constraints : 32 - byte aligned
* @ param mul scalar value
* @ param len length of vector
* constraints : multiple of 8
*/
void (*vector_dmul_scalar)(double *dst, const double *src, double mul,
int len);
/**
* Overlap / add with window function .
* Used primarily by MDCT - based audio codecs .
* Source and destination vectors must overlap exactly or not at all .
*
* @ param dst result vector
* constraints : 16 - byte aligned
* @ param src0 first source vector
* constraints : 16 - byte aligned
* @ param src1 second source vector
* constraints : 16 - byte aligned
* @ param win half - window vector
* constraints : 16 - byte aligned
* @ param len length of vector
* constraints : multiple of 4
*/
void (*vector_fmul_window)(float *dst, const float *src0,
const float *src1, const float *win, int len);
/**
* Calculate the entry wise product of two vectors of floats , add a third vector of
* floats and store the result in a vector of floats .
*
* @ param dst output vector
* constraints : 32 - byte aligned
* @ param src0 first input vector
* constraints : 32 - byte aligned
* @ param src1 second input vector
* constraints : 32 - byte aligned
* @ param src2 third input vector
* constraints : 32 - byte aligned
* @ param len number of elements in the input
* constraints : multiple of 16
*/
void (*vector_fmul_add)(float *dst, const float *src0, const float *src1,
const float *src2, int len);
/**
* Calculate the entry wise product of two vectors of floats , and store the result
* in a vector of floats . The second vector of floats is iterated over
* in reverse order .
*
* @ param dst output vector
* constraints : 32 - byte aligned
* @ param src0 first input vector
* constraints : 32 - byte aligned
* @ param src1 second input vector
* constraints : 32 - byte aligned
* @ param len number of elements in the input
* constraints : multiple of 16
*/
void (*vector_fmul_reverse)(float *dst, const float *src0,
const float *src1, int len);
/**
* Calculate the sum and difference of two vectors of floats .
*
* @ param v1 first input vector , sum output , 16 - byte aligned
* @ param v2 second input vector , difference output , 16 - byte aligned
* @ param len length of vectors , multiple of 4
*/
void (*butterflies_float)(float *restrict v1, float *restrict v2, 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
* @ param len length of vectors , multiple of 4
*
* @ return sum of elementwise products
*/
float (*scalarproduct_float)(const float *v1, const float *v2, int len);
/**
* Calculate the entry wise product of two vectors of doubles and store the result in
* a vector of doubles .
*
* @ param dst output vector
* constraints : 32 - byte aligned
* @ param src0 first input vector
* constraints : 32 - byte aligned
* @ param src1 second input vector
* constraints : 32 - byte aligned
* @ param len number of elements in the input
* constraints : multiple of 16
*/
void (*vector_dmul)(double *dst, const double *src0, const double *src1,
int len);
/**
* Calculate the scalar product of two vectors of doubles .
*
* @ param v1 first vector
* constraints : 32 - byte aligned
* @ param v2 second vector
* constraints : 32 - byte aligned
* @ param len length of vectors
* constraints : multiple of 16
*
* @ return inner product of the vectors
*/
double (*scalarproduct_double)(const double *v1, const double *v2,
size_t len);
} AVFloatDSPContext;
/**
* Return the scalar product of two vectors of floats .
*
* @ param v1 first input vector
* @ param v2 first input vector
* @ param len number of elements
*
* @ return sum of elementwise products
*/
float ff_scalarproduct_float_c(const float *v1, const float *v2, int len);
/**
* Return the scalar product of two vectors of doubles .
*
* @ param v1 first input vector
* @ param v2 first input vector
* @ param len number of elements
*
* @ return inner product of the vectors
*/
double ff_scalarproduct_double_c(const double *v1, const double *v2,
size_t len);
void ff_float_dsp_init_aarch64(AVFloatDSPContext *fdsp);
void ff_float_dsp_init_arm(AVFloatDSPContext *fdsp);
void ff_float_dsp_init_ppc(AVFloatDSPContext *fdsp, int strict);
void ff_float_dsp_init_riscv(AVFloatDSPContext *fdsp);
void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp);
void ff_float_dsp_init_mips(AVFloatDSPContext *fdsp);
/**
* Allocate a float DSP context .
*
* @ param strict setting to non - zero avoids using functions which may not be IEEE - 754 compliant
*/
AVFloatDSPContext *avpriv_float_dsp_alloc(int strict);
#endif /* AVUTIL_FLOAT_DSP_H */
Messung V0.5 in Prozent C=86 H=97 G=91
¤ Dauer der Verarbeitung: 0.9 Sekunden
¤
*© Formatika GbR, Deutschland
2026-08-25
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=277311
#Domains=752002