libswresample/audioconvert.c File Reference

audio conversion More...

#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< 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 [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);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/16 *16;av_assert1(off >=0);av_assert1(off<=len);if(off >0){if(out->planar==in->planar){intplanes=out->planar?out->ch_count:1;for(ch=0;ch< planes;ch++){ctx->simd_f(out->ch+ch, in-> ch
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 
planar [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);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/16 *16;av_assert1(off >=0);av_assert1(off<=len);if(off >0){if(out->planar==in->planar){intplanes=out->planar?out->ch_count:1;for(ch=0;ch< planes;ch++){ctx->simd_f(out->ch+ch, in-> ch off *out
 return


Detailed Description

audio conversion

Author:
Michael Niedermayer <michaelni@gmx.at>

Definition in file audioconvert.c.


Define Documentation

#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)


Function Documentation

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 195 of file audioconvert.c.


Variable Documentation

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[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);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/16*16;av_assert1(off>=0);av_assert1(off<=len);if(off>0){if(out->planar==in->planar){intplanes=out->planar?out->ch_count:1;for(ch=0;ch<planes;ch++){ctx->simd_f(out->ch+ch,in-> ch

Definition at line 55 of file audioconvert.c.

Referenced by aac_encode_frame(), ac3_decode_frame(), adjust_frame_information(), adpcm_decode_frame(), adx_decode_frame(), adx_encode_frame(), aea_read_probe(), alac_decode_close(), alac_decode_frame(), alloc_buffers(), allocate_buffers(), allocate_sample_buffers(), append_extra_bits(), apply_channel_coupling(), apply_mdct(), atrac1_decode_frame(), audiogen(), av_audio_convert(), av_dump_format(), av_get_audio_frame_duration(), av_get_channel_layout_string(), av_samples_fill_arrays(), avcodec_decode_audio3(), avcodec_fill_audio_frame(), average_quantized_coeffs(), avio_put_str16le(), avpriv_aac_parse_header(), bit_alloc(), bit_alloc_init(), bit_alloc_masking(), buf_set(), build_sb_samples_from_noise(), calc_transform_coeffs_cpl(), cbr_bit_allocation(), compute_bit_allocation(), compute_chapters_end(), compute_exp_strategy(), config_input(), copy(), copy_samples(), count_exponent_bits(), count_frame_bits(), count_mantissa_bits(), decode_audio_block(), decode_audio_s16(), decode_block(), decode_lpc(), decode_str(), decode_transform_coeffs(), deinterleave_input_samples(), do_imdct(), dpcm_decode_frame(), encode_block(), encode_exponents(), encode_frame(), end_frame(), extract_exponents(), ff_ac3_compute_coupling_strategy(), ff_ac3_encode_close(), ff_ac3_group_exponents(), ff_ac3_quantize_mantissas(), ff_audio_resample(), ff_eac3_apply_spectral_extension(), ff_eac3_get_frame_exp_strategy(), ff_eac3_output_frame_header(), ff_eac3_parse_header(), ff_eac3_set_cpl_states(), ff_mpc_dequantize_and_synth(), ff_psy_find_group(), ff_psy_preprocess(), ff_sbr_apply(), fill_coding_method_array(), fill_tone_level_array(), fix_coding_method_array(), get(), get_nb_samples(), http_get_line(), idct_mb(), init_frame(), init_sample_buffers(), init_tone_level_dequantization(), inverse_channel_transform(), mkv_write_tags(), mov_read_chapters(), mp3lame_encode_init(), mp_decode_frame(), mp_decode_layer1(), mp_decode_layer2(), mp_decode_layer3(), mpc7_decode_frame(), mpc8_decode_frame(), mpc_synth(), nut_write_header(), output_audio_block(), process_subpacket_9(), psy_3gpp_analyze(), put_image(), put_primary_audio_header(), put_subframe(), qdm2_decode(), qdm2_fft_tone_synthesizer(), qdm2_synthesis_filter(), read_block_data(), read_decoding_params(), read_header(), read_key(), read_matrix_params(), read_restart_header(), remove_dithering(), request_frame(), reset_block_bap(), revert_channel_correlation(), sbr_dequant(), scale_coefficients(), set(), set_bandwidth(), shift(), swr_convert_internal(), synthfilt_build_sb_samples(), video_audio_display(), vorbis_parse_audio_packet(), wma_decode_block(), wma_decode_frame(), write_chapter(), write_subframes(), and write_trailer().

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 planar[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);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/16*16;av_assert1(off>=0);av_assert1(off<=len);if(off>0){if(out->planar==in->planar){intplanes=out->planar?out->ch_count:1;for(ch=0;ch<planes;ch++){ctx->simd_f(out->ch+ch,in-> ch off* out

Definition at line 205 of file audioconvert.c.


Generated on Fri Oct 26 02:47:55 2012 for FFmpeg by  doxygen 1.5.8