diff options
author | rfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-13 19:38:52 +0000 |
---|---|---|
committer | rfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2003-01-13 19:38:52 +0000 |
commit | f83a9addba0085d1481bf8cd2326751af2d9f234 (patch) | |
tree | 81f8cadfd5a41c21035ffd83283cb3343cf787d7 /libmpcodecs | |
parent | bdd615bb79a3c558de01f47df2df1feb502ef915 (diff) | |
download | mpv-f83a9addba0085d1481bf8cd2326751af2d9f234.tar.bz2 mpv-f83a9addba0085d1481bf8cd2326751af2d9f234.tar.xz |
don't waste time on rg_scale nonsense if not necessary.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@8948 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r-- | libmpcodecs/ad_libvorbis.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/libmpcodecs/ad_libvorbis.c b/libmpcodecs/ad_libvorbis.c index 7b128a34ba..565a1f3a82 100644 --- a/libmpcodecs/ad_libvorbis.c +++ b/libmpcodecs/ad_libvorbis.c @@ -187,6 +187,7 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen) int len = 0; int samples; float **pcm; + float scale; ogg_packet op; struct ov_struct_st *ov = sh->context; op.b_o_s = op.e_o_s = 0; @@ -206,6 +207,33 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen) /* convert floats to 16 bit signed ints (host order) and interleave */ +#ifdef TREMOR + if (ov->rg_scale_int == 64) { + for(i=0;i<ov->vi.channels;i++){ + ogg_int16_t *convbuffer=(ogg_int16_t *)(&buf[len]); + ogg_int16_t *ptr=convbuffer+i; + ogg_int32_t *mono=pcm[i]; + for(j=0;j<bout;j++){ + int val=mono[j]>>9; + /* might as well guard against clipping */ + if(val>32767){ + val=32767; + clipflag=1; + } + if(val<-32768){ + val=-32768; + clipflag=1; + } + *ptr=val; + ptr+=ov->vi.channels; + } + } + } else +#endif /* TREMOR */ + { +#ifndef TREMOR + scale = 32767.f * ov->rg_scale; +#endif for(i=0;i<ov->vi.channels;i++){ ogg_int16_t *convbuffer=(ogg_int16_t *)(&buf[len]); ogg_int16_t *ptr=convbuffer+i; @@ -216,8 +244,7 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen) #else float *mono=pcm[i]; for(j=0;j<bout;j++){ - int val=mono[j]*32767.f*ov->rg_scale; -#endif /* TREMOR */ + int val=mono[j]*scale; /* might as well guard against clipping */ if(val>32767){ val=32767; @@ -227,10 +254,12 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen) val=-32768; clipflag=1; } +#endif /* TREMOR */ *ptr=val; ptr+=ov->vi.channels; } } + } if(clipflag) mp_msg(MSGT_DECAUDIO,MSGL_DBG2,"Clipping in frame %ld\n",(long)(ov->vd.sequence)); |