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


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

for (  ) 

Definition at line 186 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_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.

Referenced by get(), set(), and swri_rematrix().

Definition at line 55 of file audioconvert.c.

Definition at line 207 of file audioconvert.c.


Generated on Fri Oct 26 02:50:04 2012 for FFmpeg by  doxygen 1.5.8