#include "libavutil/avstring.h"
#include "libavutil/avassert.h"
#include "libavutil/libm.h"
#include "libavutil/samplefmt.h"
#include "audioconvert.h"
Go to the source code of this file.
Defines | |
#define | CONV_FUNC_NAME(dst_fmt, src_fmt) conv_ ## src_fmt ## _to_ ## dst_fmt |
#define | CONV_FUNC(ofmt, otype, ifmt, expr) |
#define | FMT_PAIR_FUNC(out, in) [out + AV_SAMPLE_FMT_NB*in] = CONV_FUNC_NAME(out, in) |
Functions | |
CONV_FUNC (AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_U8,*(const uint8_t *) pi) CONV_FUNC(AV_SAMPLE_FMT_S16 | |
for (ch=0;ch< planes;ch++) | |
for (ch=0;ch< ctx->channels;ch++) | |
Variables | |
int16_t | |
AV_SAMPLE_FMT_U8 | |
uint8_t pi<< 8) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)<< 24) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_S16,*(constint16_t *) pi) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_S16,*(constint16_t *) pi<< 16) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_S32,*(constint32_t *) pi >>16) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_S32,*(constint32_t *) pi) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_FLT,*(constfloat *) pi) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_FLT,*(constfloat *) pi) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_DBL,*(constdouble *) pi) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_DBL,*(constdouble *) pi)#defineFMT_PAIR_FUNC(out, in) staticconv_func_type *constfmt_pair_to_conv_functions | ch_count [AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL),};staticvoidcpy1(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, len);}staticvoidcpy2(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 2 *len);}staticvoidcpy4(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 4 *len);}staticvoidcpy8(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 8 *len);}AudioConvert *swri_audio_convert_alloc(enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, constint *ch_map, intflags){AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) returnNULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) returnNULL;if(channels==1){in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);}ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map){switch(av_get_bytes_per_sample(in_fmt)){case1:ctx->simd_f=cpy1;break;case2:ctx->simd_f=cpy2;break;case4:ctx->simd_f=cpy4;break;case8:ctx->simd_f=cpy8;break;}}if(HAVE_YASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);returnctx;}voidswri_audio_convert_free(AudioConvert **ctx){av_freep(ctx);}intswri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, intlen){intch;intoff=0;constintos=(out->planar?1:out->ch_count)*out->bps;av_assert0(ctx->channels==out->ch_count);if(ctx->simd_f &&!ctx->ch_map){off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){if(out->planar==in->planar){intplanes=out-> planar out |
return |
Definition in file audioconvert.c.
#define CONV_FUNC | ( | ofmt, | |||
otype, | |||||
ifmt, | |||||
expr | ) |
Value:
static void CONV_FUNC_NAME(ofmt, ifmt)(uint8_t *po, const uint8_t *pi, int is, int os, uint8_t *end)\ {\ uint8_t *end2 = end - 3*os;\ while(po < end2){\ *(otype*)po = expr; pi += is; po += os;\ *(otype*)po = expr; pi += is; po += os;\ *(otype*)po = expr; pi += is; po += os;\ *(otype*)po = expr; pi += is; po += os;\ }\ while(po < end){\ *(otype*)po = expr; pi += is; po += os;\ }\ }
Definition at line 38 of file audioconvert.c.
#define CONV_FUNC_NAME | ( | dst_fmt, | |||
src_fmt | ) | conv_ ## src_fmt ## _to_ ## dst_fmt |
Definition at line 35 of file audioconvert.c.
#define FMT_PAIR_FUNC | ( | out, | |||
in | ) | [out + AV_SAMPLE_FMT_NB*in] = CONV_FUNC_NAME(out, in) |
CONV_FUNC | ( | AV_SAMPLE_FMT_U8 | , | |
uint8_t | , | |||
AV_SAMPLE_FMT_U8 | , | |||
*(const uint8_t *) | pi | |||
) |
for | ( | ch | = 0; ch<ctx->channels; ch++ |
) |
Definition at line 197 of file audioconvert.c.
for | ( | ) |
Definition at line 186 of file audioconvert.c.
Definition at line 55 of file audioconvert.c.
uint8_t pi<<8)CONV_FUNC(AV_SAMPLE_FMT_S32,int32_t,AV_SAMPLE_FMT_U8,(*(constuint8_t*)pi-0x80)<<24)CONV_FUNC(AV_SAMPLE_FMT_FLT,float,AV_SAMPLE_FMT_U8,(*(constuint8_t*)pi-0x80)*(1.0f/(1<<7)))CONV_FUNC(AV_SAMPLE_FMT_DBL,double,AV_SAMPLE_FMT_U8,(*(constuint8_t*)pi-0x80)*(1.0/(1<<7)))CONV_FUNC(AV_SAMPLE_FMT_U8,uint8_t,AV_SAMPLE_FMT_S16,(*(constint16_t*)pi>>8)+0x80)CONV_FUNC(AV_SAMPLE_FMT_S16,int16_t,AV_SAMPLE_FMT_S16,*(constint16_t*)pi)CONV_FUNC(AV_SAMPLE_FMT_S32,int32_t,AV_SAMPLE_FMT_S16,*(constint16_t*)pi<<16)CONV_FUNC(AV_SAMPLE_FMT_FLT,float,AV_SAMPLE_FMT_S16,*(constint16_t*)pi*(1.0f/(1<<15)))CONV_FUNC(AV_SAMPLE_FMT_DBL,double,AV_SAMPLE_FMT_S16,*(constint16_t*)pi*(1.0/(1<<15)))CONV_FUNC(AV_SAMPLE_FMT_U8,uint8_t,AV_SAMPLE_FMT_S32,(*(constint32_t*)pi>>24)+0x80)CONV_FUNC(AV_SAMPLE_FMT_S16,int16_t,AV_SAMPLE_FMT_S32,*(constint32_t*)pi>>16)CONV_FUNC(AV_SAMPLE_FMT_S32,int32_t,AV_SAMPLE_FMT_S32,*(constint32_t*)pi)CONV_FUNC(AV_SAMPLE_FMT_FLT,float,AV_SAMPLE_FMT_S32,*(constint32_t*)pi*(1.0f/(1U<<31)))CONV_FUNC(AV_SAMPLE_FMT_DBL,double,AV_SAMPLE_FMT_S32,*(constint32_t*)pi*(1.0/(1U<<31)))CONV_FUNC(AV_SAMPLE_FMT_U8,uint8_t,AV_SAMPLE_FMT_FLT,av_clip_uint8(lrintf(*(constfloat*)pi*(1<<7))+0x80))CONV_FUNC(AV_SAMPLE_FMT_S16,int16_t,AV_SAMPLE_FMT_FLT,av_clip_int16(lrintf(*(constfloat*)pi*(1<<15))))CONV_FUNC(AV_SAMPLE_FMT_S32,int32_t,AV_SAMPLE_FMT_FLT,av_clipl_int32(llrintf(*(constfloat*)pi*(1U<<31))))CONV_FUNC(AV_SAMPLE_FMT_FLT,float,AV_SAMPLE_FMT_FLT,*(constfloat*)pi)CONV_FUNC(AV_SAMPLE_FMT_DBL,double,AV_SAMPLE_FMT_FLT,*(constfloat*)pi)CONV_FUNC(AV_SAMPLE_FMT_U8,uint8_t,AV_SAMPLE_FMT_DBL,av_clip_uint8(lrint(*(constdouble*)pi*(1<<7))+0x80))CONV_FUNC(AV_SAMPLE_FMT_S16,int16_t,AV_SAMPLE_FMT_DBL,av_clip_int16(lrint(*(constdouble*)pi*(1<<15))))CONV_FUNC(AV_SAMPLE_FMT_S32,int32_t,AV_SAMPLE_FMT_DBL,av_clipl_int32(llrint(*(constdouble*)pi*(1U<<31))))CONV_FUNC(AV_SAMPLE_FMT_FLT,float,AV_SAMPLE_FMT_DBL,*(constdouble*)pi)CONV_FUNC(AV_SAMPLE_FMT_DBL,double,AV_SAMPLE_FMT_DBL,*(constdouble*)pi)#defineFMT_PAIR_FUNC(out,in)staticconv_func_type*constfmt_pair_to_conv_functions ch_count[AV_SAMPLE_FMT_NB*AV_SAMPLE_FMT_NB]={FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8,AV_SAMPLE_FMT_U8),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_U8),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32,AV_SAMPLE_FMT_U8),FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_U8),FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL,AV_SAMPLE_FMT_U8),FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8,AV_SAMPLE_FMT_S16),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_S16),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32,AV_SAMPLE_FMT_S16),FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_S16),FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL,AV_SAMPLE_FMT_S16),FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8,AV_SAMPLE_FMT_S32),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_S32),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32,AV_SAMPLE_FMT_S32),FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_S32),FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL,AV_SAMPLE_FMT_S32),FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8,AV_SAMPLE_FMT_FLT),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_FLT),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32,AV_SAMPLE_FMT_FLT),FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_FLT),FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL,AV_SAMPLE_FMT_FLT),FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8,AV_SAMPLE_FMT_DBL),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16,AV_SAMPLE_FMT_DBL),FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32,AV_SAMPLE_FMT_DBL),FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT,AV_SAMPLE_FMT_DBL),FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL,AV_SAMPLE_FMT_DBL),};staticvoidcpy1(uint8_t**dst,constuint8_t**src,intlen){memcpy(*dst,*src,len);}staticvoidcpy2(uint8_t**dst,constuint8_t**src,intlen){memcpy(*dst,*src,2*len);}staticvoidcpy4(uint8_t**dst,constuint8_t**src,intlen){memcpy(*dst,*src,4*len);}staticvoidcpy8(uint8_t**dst,constuint8_t**src,intlen){memcpy(*dst,*src,8*len);}AudioConvert*swri_audio_convert_alloc(enumAVSampleFormatout_fmt,enumAVSampleFormatin_fmt,intchannels,constint*ch_map,intflags){AudioConvert*ctx;conv_func_type*f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB*av_get_packed_sample_fmt(in_fmt)];if(!f)returnNULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx)returnNULL;if(channels==1){in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);}ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P)memset(ctx->silence,0x80,sizeof(ctx->silence));if(out_fmt==in_fmt&&!ch_map){switch(av_get_bytes_per_sample(in_fmt)){case1:ctx->simd_f=cpy1;break;case2:ctx->simd_f=cpy2;break;case4:ctx->simd_f=cpy4;break;case8:ctx->simd_f=cpy8;break;}}if(HAVE_YASM&&1)swri_audio_convert_init_x86(ctx,out_fmt,in_fmt,channels);if(ARCH_ARM)swri_audio_convert_init_arm(ctx,out_fmt,in_fmt,channels);returnctx;}voidswri_audio_convert_free(AudioConvert**ctx){av_freep(ctx);}intswri_audio_convert(AudioConvert*ctx,AudioData*out,AudioData*in,intlen){intch;intoff=0;constintos=(out->planar?1:out->ch_count)*out->bps;av_assert0(ctx->channels==out->ch_count);if(ctx->simd_f&&!ctx->ch_map){off=len&~15;av_assert1(off>=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off>0){if(out->planar==in->planar){intplanes=out-> planar out |
Definition at line 55 of file audioconvert.c.
Definition at line 207 of file audioconvert.c.