summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorrfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-13 19:38:52 +0000
committerrfelker <rfelker@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-01-13 19:38:52 +0000
commitf83a9addba0085d1481bf8cd2326751af2d9f234 (patch)
tree81f8cadfd5a41c21035ffd83283cb3343cf787d7 /libmpcodecs
parentbdd615bb79a3c558de01f47df2df1feb502ef915 (diff)
downloadmpv-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.c33
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));