LCOV - code coverage report
Current view: top level - media/libopus/silk - decode_frame.c (source / functions) Hit Total Coverage
Test: output.info Lines: 0 31 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 1 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /***********************************************************************
       2             : Copyright (c) 2006-2011, Skype Limited. All rights reserved.
       3             : Redistribution and use in source and binary forms, with or without
       4             : modification, are permitted provided that the following conditions
       5             : are met:
       6             : - Redistributions of source code must retain the above copyright notice,
       7             : this list of conditions and the following disclaimer.
       8             : - Redistributions in binary form must reproduce the above copyright
       9             : notice, this list of conditions and the following disclaimer in the
      10             : documentation and/or other materials provided with the distribution.
      11             : - Neither the name of Internet Society, IETF or IETF Trust, nor the
      12             : names of specific contributors, may be used to endorse or promote
      13             : products derived from this software without specific prior written
      14             : permission.
      15             : THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
      16             : AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
      17             : IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
      18             : ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
      19             : LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
      20             : CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
      21             : SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
      22             : INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
      23             : CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
      24             : ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
      25             : POSSIBILITY OF SUCH DAMAGE.
      26             : ***********************************************************************/
      27             : 
      28             : #ifdef HAVE_CONFIG_H
      29             : #include "config.h"
      30             : #endif
      31             : 
      32             : #include "main.h"
      33             : #include "stack_alloc.h"
      34             : #include "PLC.h"
      35             : 
      36             : /****************/
      37             : /* Decode frame */
      38             : /****************/
      39           0 : opus_int silk_decode_frame(
      40             :     silk_decoder_state          *psDec,                         /* I/O  Pointer to Silk decoder state               */
      41             :     ec_dec                      *psRangeDec,                    /* I/O  Compressor data structure                   */
      42             :     opus_int16                  pOut[],                         /* O    Pointer to output speech frame              */
      43             :     opus_int32                  *pN,                            /* O    Pointer to size of output frame             */
      44             :     opus_int                    lostFlag,                       /* I    0: no loss, 1 loss, 2 decode fec            */
      45             :     opus_int                    condCoding,                     /* I    The type of conditional coding to use       */
      46             :     int                         arch                            /* I    Run-time architecture                       */
      47             : )
      48             : {
      49             :     VARDECL( silk_decoder_control, psDecCtrl );
      50           0 :     opus_int         L, mv_len, ret = 0;
      51             :     SAVE_STACK;
      52             : 
      53           0 :     L = psDec->frame_length;
      54           0 :     ALLOC( psDecCtrl, 1, silk_decoder_control );
      55           0 :     psDecCtrl->LTP_scale_Q14 = 0;
      56             : 
      57             :     /* Safety checks */
      58           0 :     silk_assert( L > 0 && L <= MAX_FRAME_LENGTH );
      59             : 
      60           0 :     if(   lostFlag == FLAG_DECODE_NORMAL ||
      61           0 :         ( lostFlag == FLAG_DECODE_LBRR && psDec->LBRR_flags[ psDec->nFramesDecoded ] == 1 ) )
      62           0 :     {
      63             :         VARDECL( opus_int16, pulses );
      64           0 :         ALLOC( pulses, (L + SHELL_CODEC_FRAME_LENGTH - 1) &
      65             :                        ~(SHELL_CODEC_FRAME_LENGTH - 1), opus_int16 );
      66             :         /*********************************************/
      67             :         /* Decode quantization indices of side info  */
      68             :         /*********************************************/
      69           0 :         silk_decode_indices( psDec, psRangeDec, psDec->nFramesDecoded, lostFlag, condCoding );
      70             : 
      71             :         /*********************************************/
      72             :         /* Decode quantization indices of excitation */
      73             :         /*********************************************/
      74           0 :         silk_decode_pulses( psRangeDec, pulses, psDec->indices.signalType,
      75           0 :                 psDec->indices.quantOffsetType, psDec->frame_length );
      76             : 
      77             :         /********************************************/
      78             :         /* Decode parameters and pulse signal       */
      79             :         /********************************************/
      80           0 :         silk_decode_parameters( psDec, psDecCtrl, condCoding );
      81             : 
      82             :         /********************************************************/
      83             :         /* Run inverse NSQ                                      */
      84             :         /********************************************************/
      85           0 :         silk_decode_core( psDec, psDecCtrl, pOut, pulses, arch );
      86             : 
      87             :         /********************************************************/
      88             :         /* Update PLC state                                     */
      89             :         /********************************************************/
      90           0 :         silk_PLC( psDec, psDecCtrl, pOut, 0, arch );
      91             : 
      92           0 :         psDec->lossCnt = 0;
      93           0 :         psDec->prevSignalType = psDec->indices.signalType;
      94           0 :         silk_assert( psDec->prevSignalType >= 0 && psDec->prevSignalType <= 2 );
      95             : 
      96             :         /* A frame has been decoded without errors */
      97           0 :         psDec->first_frame_after_reset = 0;
      98             :     } else {
      99             :         /* Handle packet loss by extrapolation */
     100           0 :         psDec->indices.signalType = psDec->prevSignalType;
     101           0 :         silk_PLC( psDec, psDecCtrl, pOut, 1, arch );
     102             :     }
     103             : 
     104             :     /*************************/
     105             :     /* Update output buffer. */
     106             :     /*************************/
     107           0 :     silk_assert( psDec->ltp_mem_length >= psDec->frame_length );
     108           0 :     mv_len = psDec->ltp_mem_length - psDec->frame_length;
     109           0 :     silk_memmove( psDec->outBuf, &psDec->outBuf[ psDec->frame_length ], mv_len * sizeof(opus_int16) );
     110           0 :     silk_memcpy( &psDec->outBuf[ mv_len ], pOut, psDec->frame_length * sizeof( opus_int16 ) );
     111             : 
     112             :     /************************************************/
     113             :     /* Comfort noise generation / estimation        */
     114             :     /************************************************/
     115           0 :     silk_CNG( psDec, psDecCtrl, pOut, L );
     116             : 
     117             :     /****************************************************************/
     118             :     /* Ensure smooth connection of extrapolated and good frames     */
     119             :     /****************************************************************/
     120           0 :     silk_PLC_glue_frames( psDec, pOut, L );
     121             : 
     122             :     /* Update some decoder state variables */
     123           0 :     psDec->lagPrev = psDecCtrl->pitchL[ psDec->nb_subfr - 1 ];
     124             : 
     125             :     /* Set output frame length */
     126           0 :     *pN = L;
     127             : 
     128             :     RESTORE_STACK;
     129           0 :     return ret;
     130             : }

Generated by: LCOV version 1.13