ref: 8075157982bfd8923324d0070cae455ce01b6f85
parent: 8396a1f85c540937b4b828b1465d34b9be806ce9
author: Timothy B. Terriberry <tterribe@xiph.org>
date: Wed Aug 28 20:47:59 EDT 2013
Get rid of the op_float2short_filter() wrapper. The increasingly-inaccurately named op_shaped_dither16() can serve this role instead, without much additional complexity (perhaps less, once you consider the required shuffling around of the function parameters).
--- a/src/opusfile.c
+++ b/src/opusfile.c
@@ -3005,10 +3005,13 @@
0.9030F,0.0116F,-0.5853F,-0.2571F
};
-static void op_shaped_dither16(OggOpusFile *_of,opus_int16 *_dst,
+static int op_float2short_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
float *_src,int _nsamples,int _nchannels){
- int ci;
- int i;
+ opus_int16 *dst;
+ int ci;
+ int i;
+ dst=(opus_int16 *)_dst;
+ if(OP_UNLIKELY(_nsamples*_nchannels>_dst_sz))_nsamples=_dst_sz/_nchannels;
# if defined(OP_SOFT_CLIP)
if(_of->state_channel_count!=_nchannels){
for(ci=0;ci<_nchannels;ci++)_of->clip_state[ci]=0;
@@ -3017,7 +3020,7 @@
# endif
if(_of->dither_disabled){
for(i=0;i<_nchannels*_nsamples;i++){
- _dst[i]=op_float2int(OP_CLAMP(-32768,32768.0F*_src[i],32767));
+ dst[i]=op_float2int(OP_CLAMP(-32768,32768.0F*_src[i],32767));
}
}
else{
@@ -3060,7 +3063,7 @@
/*Clamp in float out of paranoia that the input will be > 96 dBFS and
wrap if the integer is clamped.*/
si=op_float2int(OP_CLAMP(-32768,s+r,32767));
- _dst[_nchannels*i+ci]=(opus_int16)si;
+ dst[_nchannels*i+ci]=(opus_int16)si;
/*Including clipping in the noise shaping is generally disastrous: the
futile effort to restore the clipped energy results in more clipping.
However, small amounts---at the level which could normally be created
@@ -3076,14 +3079,6 @@
_of->dither_seed=seed;
}
_of->state_channel_count=_nchannels;
-}
-
-static int op_float2short_filter(OggOpusFile *_of,void *_dst,int _dst_sz,
- op_sample *_src,int _nsamples,int _nchannels){
- opus_int16 *dst;
- dst=(opus_int16 *)_dst;
- if(OP_UNLIKELY(_nsamples*_nchannels>_dst_sz))_nsamples=_dst_sz/_nchannels;
- op_shaped_dither16(_of,dst,_src,_nsamples,_nchannels);
return _nsamples;
}
@@ -3130,18 +3125,18 @@
void *_dst,int _dst_sz,op_sample *_src,int _nsamples,int _nchannels){
opus_int16 *dst;
dst=(opus_int16 *)_dst;
- _nsamples=OP_MIN(_nsamples,_dst_sz>>1);
if(_nchannels==1){
int i;
- op_shaped_dither16(_of,dst,_src,_nsamples,1);
+ _nsamples=op_float2short_filter(_of,dst,_dst_sz>>1,_src,_nsamples,1);
for(i=_nsamples;i-->0;)dst[2*i+0]=dst[2*i+1]=dst[i];
}
else{
if(_nchannels>2){
+ _nsamples=OP_MIN(_nsamples,_dst_sz>>1);
_nsamples=op_stereo_filter(_of,_src,_nsamples*2,
_src,_nsamples,_nchannels);
}
- op_shaped_dither16(_of,dst,_src,_nsamples,2);
+ _nsamples=op_float2short_filter(_of,dst,_dst_sz,_src,_nsamples,2);
}
return _nsamples;
}