Skip to content
Snippets Groups Projects
Commit 66820f35 authored by Jean-Marc Valin's avatar Jean-Marc Valin
Browse files

Tweaks the CELT fractional resampling delay to get perfect alignment

Also using the same int->float conversion functions for SILK as for CELT
and changed encoder implementation default to constrained VBR just to
be safe when VBR gets more aggressive.
parent 54518c87
No related branches found
No related tags found
No related merge requests found
......@@ -472,9 +472,10 @@ static void deemphasis(celt_sig *in[], opus_val16 *pcm, int N, int C, int downsa
x++;
/* Technically the store could be moved outside of the if because
the stores we don't want will just be overwritten */
if (count==0)
*y = SCALEOUT(SIG2WORD16(tmp));
if (++count==downsample)
{
*y = SCALEOUT(SIG2WORD16(tmp));
y+=C;
count=0;
}
......
......@@ -29,6 +29,9 @@
#ifndef FLOAT_CAST_H
#define FLOAT_CAST_H
#include "arch.h"
/*============================================================================
** On Intel Pentium processors (especially PIII and probably P4), converting
** from float to int is very slow. To meet the C specs, the code produced by
......
......@@ -29,6 +29,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#define SILK_SIGPROC_FLP_H
#include "SigProc_FIX.h"
#include "float_cast.h"
#include <math.h>
#ifdef __cplusplus
......@@ -163,12 +164,7 @@ static inline silk_float silk_sigmoid( silk_float x )
/* floating-point to integer conversion (rounding) */
static inline opus_int32 silk_float2int( double x )
{
#ifdef _WIN32
double t = x + 6755399441055744.0;
return *((opus_int32 *)( &t ));
#else
return (opus_int32)( ( x > 0 ) ? x + 0.5 : x - 0.5 );
#endif
return (opus_int32)float2int( x );
}
/* floating-point to integer conversion (rounding) */
......@@ -180,13 +176,8 @@ static inline void silk_float2short_array(
{
opus_int32 k;
for( k = length - 1; k >= 0; k-- ) {
#ifdef _WIN32
double t = in[k] + 6755399441055744.0;
out[k] = (opus_int16)silk_SAT16(*(( opus_int32 * )( &t )));
#else
double x = in[k];
out[k] = (opus_int16)silk_SAT16( ( x > 0 ) ? x + 0.5 : x - 0.5 );
#endif
out[k] = silk_SAT16( (opus_int32)float2int( x ) );
}
}
......
......@@ -194,6 +194,8 @@ int opus_encoder_init(OpusEncoder* st, opus_int32 Fs, int channels, int applicat
celt_encoder_ctl(celt_enc, OPUS_SET_COMPLEXITY(10));
st->use_vbr = 1;
/* Makes constrained VBR the default (safer for real-time use) */
st->vbr_constraint = 1;
st->user_bitrate_bps = OPUS_AUTO;
st->bitrate_bps = 3000+Fs*channels;
st->application = application;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment