diff options
author | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-06-03 15:49:11 -0400 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@jmvalin.ca> | 2016-06-04 02:48:19 -0400 |
commit | e0d66856cd0ad3f44d1fec4ca94e6057fea08b48 (patch) | |
tree | 7d42311b4dd4915fad90fa4abe8b53e0fcce3c9f | |
parent | 291fd14eaeb4bdfd6eda8681d5175be82cf040e9 (diff) | |
download | opus-e0d66856cd0ad3f44d1fec4ca94e6057fea08b48.tar.gz |
Set pulses to zero if we can't meet rate target
-rw-r--r-- | silk/fixed/encode_frame_FIX.c | 13 | ||||
-rw-r--r-- | silk/float/encode_frame_FLP.c | 13 |
2 files changed, 26 insertions, 0 deletions
diff --git a/silk/fixed/encode_frame_FIX.c b/silk/fixed/encode_frame_FIX.c index af5ad865..5bc94c34 100644 --- a/silk/fixed/encode_frame_FIX.c +++ b/silk/fixed/encode_frame_FIX.c @@ -206,6 +206,9 @@ opus_int silk_encode_frame_FIX( /****************************************/ silk_encode_indices( &psEnc->sCmn, psRangeEnc, psEnc->sCmn.nFramesEncoded, 0, condCoding ); + if ( iter == maxIter && !found_lower ) { + silk_memcpy( &sRangeEnc_copy2, psRangeEnc, sizeof( ec_enc ) ); + } /****************************************/ /* Encode Excitation Signal */ /****************************************/ @@ -214,6 +217,16 @@ opus_int silk_encode_frame_FIX( nBits = ec_tell( psRangeEnc ); + if ( iter == maxIter && !found_lower && nBits > maxBits ) { + silk_memcpy( psRangeEnc, &sRangeEnc_copy2, sizeof( ec_enc ) ); + for ( i = 0; i < psEnc->sCmn.frame_length; i++ ) { + psEnc->sCmn.pulses[ i ] = 0; + } + silk_encode_pulses( psRangeEnc, psEnc->sCmn.indices.signalType, psEnc->sCmn.indices.quantOffsetType, + psEnc->sCmn.pulses, psEnc->sCmn.frame_length ); + nBits = ec_tell( psRangeEnc ); + } + if( useCBR == 0 && iter == 0 && nBits <= maxBits ) { break; } diff --git a/silk/float/encode_frame_FLP.c b/silk/float/encode_frame_FLP.c index b654ddc6..59efcb44 100644 --- a/silk/float/encode_frame_FLP.c +++ b/silk/float/encode_frame_FLP.c @@ -192,6 +192,9 @@ opus_int silk_encode_frame_FLP( /****************************************/ silk_encode_indices( &psEnc->sCmn, psRangeEnc, psEnc->sCmn.nFramesEncoded, 0, condCoding ); + if ( iter == maxIter && !found_lower ) { + silk_memcpy( &sRangeEnc_copy2, psRangeEnc, sizeof( ec_enc ) ); + } /****************************************/ /* Encode Excitation Signal */ /****************************************/ @@ -200,6 +203,16 @@ opus_int silk_encode_frame_FLP( nBits = ec_tell( psRangeEnc ); + if ( iter == maxIter && !found_lower && nBits > maxBits ) { + silk_memcpy( psRangeEnc, &sRangeEnc_copy2, sizeof( ec_enc ) ); + for ( i = 0; i < psEnc->sCmn.frame_length; i++ ) { + psEnc->sCmn.pulses[ i ] = 0; + } + silk_encode_pulses( psRangeEnc, psEnc->sCmn.indices.signalType, psEnc->sCmn.indices.quantOffsetType, + psEnc->sCmn.pulses, psEnc->sCmn.frame_length ); + nBits = ec_tell( psRangeEnc ); + } + if( useCBR == 0 && iter == 0 && nBits <= maxBits ) { break; } |