Fixes a bug in the handling of the first packet after DTX
authorJean-Marc Valin <jean-marc.valin@octasic.com>
Thu, 17 Mar 2011 20:55:42 +0000 (16:55 -0400)
committerJean-Marc Valin <jean-marc.valin@octasic.com>
Thu, 17 Mar 2011 20:55:42 +0000 (16:55 -0400)
We were using the last frame's DTX decision at the beginning
of the encoding

src_FLP/SKP_Silk_encode_frame_FLP.c

index 8a6d3b4..c80bcbe 100644 (file)
@@ -47,24 +47,6 @@ SKP_int SKP_Silk_encode_frame_FLP(
 \r
 TIC(ENCODE_FRAME)\r
 \r
-    if( psEnc->sCmn.nFramesAnalyzed == 0 && !psEnc->sCmn.prefillFlag && !( psEnc->sCmn.useDTX && psEnc->sCmn.inDTX ) ) {\r
-        /* Create space at start of payload for VAD and FEC flags */\r
-        SKP_uint8 iCDF[ 2 ] = { 0, 0 };\r
-        iCDF[ 0 ] = 256 - SKP_RSHIFT( 256, psEnc->sCmn.nFramesPerPacket + 1 );\r
-        ec_enc_icdf( psRangeEnc, 0, iCDF, 8 );\r
-\r
-        /* Encode any LBRR data from previous packet */\r
-        SKP_Silk_LBRR_embed( &psEnc->sCmn, psRangeEnc );\r
-\r
-        /* Reduce coding SNR depending on how many bits used by LBRR */\r
-        nBits = ec_tell( psRangeEnc );\r
-        psEnc->inBandFEC_SNR_comp = ( 6.0f * nBits ) / \r
-            ( psEnc->sCmn.nFramesPerPacket * psEnc->sCmn.frame_length );\r
-\r
-        /* Reset LBRR flags */\r
-        SKP_memset( psEnc->sCmn.LBRR_flags, 0, sizeof( psEnc->sCmn.LBRR_flags ) );\r
-    }\r
-\r
     psEnc->sCmn.indices.Seed = psEnc->sCmn.frameCounter++ & 3;\r
 \r
     /**************************************************************/\r
@@ -102,6 +84,25 @@ TOC(VAD)
         psEnc->sCmn.VAD_flags[ psEnc->sCmn.nFramesAnalyzed ] = 1;\r
     }\r
 \r
+    if( psEnc->sCmn.nFramesAnalyzed == 0 && !psEnc->sCmn.prefillFlag && !( psEnc->sCmn.useDTX && psEnc->sCmn.inDTX ) ) {\r
+        /* Create space at start of payload for VAD and FEC flags */\r
+        SKP_uint8 iCDF[ 2 ] = { 0, 0 };\r
+        iCDF[ 0 ] = 256 - SKP_RSHIFT( 256, psEnc->sCmn.nFramesPerPacket + 1 );\r
+        ec_enc_icdf( psRangeEnc, 0, iCDF, 8 );\r
+\r
+        /* Encode any LBRR data from previous packet */\r
+        SKP_Silk_LBRR_embed( &psEnc->sCmn, psRangeEnc );\r
+\r
+        /* Reduce coding SNR depending on how many bits used by LBRR */\r
+        nBits = ec_tell( psRangeEnc );\r
+        psEnc->inBandFEC_SNR_comp = ( 6.0f * nBits ) /\r
+                ( psEnc->sCmn.nFramesPerPacket * psEnc->sCmn.frame_length );\r
+\r
+        /* Reset LBRR flags */\r
+        SKP_memset( psEnc->sCmn.LBRR_flags, 0, sizeof( psEnc->sCmn.LBRR_flags ) );\r
+    }\r
+\r
+\r
     /*******************************************/\r
     /* High-pass filtering of the input signal */\r
     /*******************************************/\r