1*a58d3d2aSXin Li /*********************************************************************** 2*a58d3d2aSXin Li Copyright (c) 2006-2011, Skype Limited. All rights reserved. 3*a58d3d2aSXin Li Redistribution and use in source and binary forms, with or without 4*a58d3d2aSXin Li modification, are permitted provided that the following conditions 5*a58d3d2aSXin Li are met: 6*a58d3d2aSXin Li - Redistributions of source code must retain the above copyright notice, 7*a58d3d2aSXin Li this list of conditions and the following disclaimer. 8*a58d3d2aSXin Li - Redistributions in binary form must reproduce the above copyright 9*a58d3d2aSXin Li notice, this list of conditions and the following disclaimer in the 10*a58d3d2aSXin Li documentation and/or other materials provided with the distribution. 11*a58d3d2aSXin Li - Neither the name of Internet Society, IETF or IETF Trust, nor the 12*a58d3d2aSXin Li names of specific contributors, may be used to endorse or promote 13*a58d3d2aSXin Li products derived from this software without specific prior written 14*a58d3d2aSXin Li permission. 15*a58d3d2aSXin Li THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 16*a58d3d2aSXin Li AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*a58d3d2aSXin Li IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*a58d3d2aSXin Li ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 19*a58d3d2aSXin Li LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20*a58d3d2aSXin Li CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21*a58d3d2aSXin Li SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22*a58d3d2aSXin Li INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23*a58d3d2aSXin Li CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 24*a58d3d2aSXin Li ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 25*a58d3d2aSXin Li POSSIBILITY OF SUCH DAMAGE. 26*a58d3d2aSXin Li ***********************************************************************/ 27*a58d3d2aSXin Li 28*a58d3d2aSXin Li #ifndef SILK_API_H 29*a58d3d2aSXin Li #define SILK_API_H 30*a58d3d2aSXin Li 31*a58d3d2aSXin Li #include "control.h" 32*a58d3d2aSXin Li #include "typedef.h" 33*a58d3d2aSXin Li #include "errors.h" 34*a58d3d2aSXin Li #include "entenc.h" 35*a58d3d2aSXin Li #include "entdec.h" 36*a58d3d2aSXin Li 37*a58d3d2aSXin Li #ifdef ENABLE_DEEP_PLC 38*a58d3d2aSXin Li #include "lpcnet_private.h" 39*a58d3d2aSXin Li #endif 40*a58d3d2aSXin Li 41*a58d3d2aSXin Li #ifdef __cplusplus 42*a58d3d2aSXin Li extern "C" 43*a58d3d2aSXin Li { 44*a58d3d2aSXin Li #endif 45*a58d3d2aSXin Li 46*a58d3d2aSXin Li #define SILK_MAX_FRAMES_PER_PACKET 3 47*a58d3d2aSXin Li 48*a58d3d2aSXin Li /* Struct for TOC (Table of Contents) */ 49*a58d3d2aSXin Li typedef struct { 50*a58d3d2aSXin Li opus_int VADFlag; /* Voice activity for packet */ 51*a58d3d2aSXin Li opus_int VADFlags[ SILK_MAX_FRAMES_PER_PACKET ]; /* Voice activity for each frame in packet */ 52*a58d3d2aSXin Li opus_int inbandFECFlag; /* Flag indicating if packet contains in-band FEC */ 53*a58d3d2aSXin Li } silk_TOC_struct; 54*a58d3d2aSXin Li 55*a58d3d2aSXin Li /****************************************/ 56*a58d3d2aSXin Li /* Encoder functions */ 57*a58d3d2aSXin Li /****************************************/ 58*a58d3d2aSXin Li 59*a58d3d2aSXin Li /***********************************************/ 60*a58d3d2aSXin Li /* Get size in bytes of the Silk encoder state */ 61*a58d3d2aSXin Li /***********************************************/ 62*a58d3d2aSXin Li opus_int silk_Get_Encoder_Size( /* O Returns error code */ 63*a58d3d2aSXin Li opus_int *encSizeBytes /* O Number of bytes in SILK encoder state */ 64*a58d3d2aSXin Li ); 65*a58d3d2aSXin Li 66*a58d3d2aSXin Li /*************************/ 67*a58d3d2aSXin Li /* Init or reset encoder */ 68*a58d3d2aSXin Li /*************************/ 69*a58d3d2aSXin Li opus_int silk_InitEncoder( /* O Returns error code */ 70*a58d3d2aSXin Li void *encState, /* I/O State */ 71*a58d3d2aSXin Li int arch, /* I Run-time architecture */ 72*a58d3d2aSXin Li silk_EncControlStruct *encStatus /* O Encoder Status */ 73*a58d3d2aSXin Li ); 74*a58d3d2aSXin Li 75*a58d3d2aSXin Li /**************************/ 76*a58d3d2aSXin Li /* Encode frame with Silk */ 77*a58d3d2aSXin Li /**************************/ 78*a58d3d2aSXin Li /* Note: if prefillFlag is set, the input must contain 10 ms of audio, irrespective of what */ 79*a58d3d2aSXin Li /* encControl->payloadSize_ms is set to */ 80*a58d3d2aSXin Li opus_int silk_Encode( /* O Returns error code */ 81*a58d3d2aSXin Li void *encState, /* I/O State */ 82*a58d3d2aSXin Li silk_EncControlStruct *encControl, /* I Control status */ 83*a58d3d2aSXin Li const opus_int16 *samplesIn, /* I Speech sample input vector */ 84*a58d3d2aSXin Li opus_int nSamplesIn, /* I Number of samples in input vector */ 85*a58d3d2aSXin Li ec_enc *psRangeEnc, /* I/O Compressor data structure */ 86*a58d3d2aSXin Li opus_int32 *nBytesOut, /* I/O Number of bytes in payload (input: Max bytes) */ 87*a58d3d2aSXin Li const opus_int prefillFlag, /* I Flag to indicate prefilling buffers no coding */ 88*a58d3d2aSXin Li int activity /* I Decision of Opus voice activity detector */ 89*a58d3d2aSXin Li ); 90*a58d3d2aSXin Li 91*a58d3d2aSXin Li /****************************************/ 92*a58d3d2aSXin Li /* Decoder functions */ 93*a58d3d2aSXin Li /****************************************/ 94*a58d3d2aSXin Li 95*a58d3d2aSXin Li 96*a58d3d2aSXin Li /***********************************************/ 97*a58d3d2aSXin Li /* Load OSCE models from external data pointer */ 98*a58d3d2aSXin Li /***********************************************/ 99*a58d3d2aSXin Li opus_int silk_LoadOSCEModels( 100*a58d3d2aSXin Li void *decState, /* O I/O State */ 101*a58d3d2aSXin Li const unsigned char *data, /* I pointer to binary blob */ 102*a58d3d2aSXin Li int len /* I length of binary blob data */ 103*a58d3d2aSXin Li ); 104*a58d3d2aSXin Li 105*a58d3d2aSXin Li /***********************************************/ 106*a58d3d2aSXin Li /* Get size in bytes of the Silk decoder state */ 107*a58d3d2aSXin Li /***********************************************/ 108*a58d3d2aSXin Li opus_int silk_Get_Decoder_Size( /* O Returns error code */ 109*a58d3d2aSXin Li opus_int *decSizeBytes /* O Number of bytes in SILK decoder state */ 110*a58d3d2aSXin Li ); 111*a58d3d2aSXin Li 112*a58d3d2aSXin Li /*************************/ 113*a58d3d2aSXin Li /* Init and Reset decoder */ 114*a58d3d2aSXin Li /*************************/ 115*a58d3d2aSXin Li opus_int silk_ResetDecoder( /* O Returns error code */ 116*a58d3d2aSXin Li void *decState /* I/O State */ 117*a58d3d2aSXin Li ); 118*a58d3d2aSXin Li 119*a58d3d2aSXin Li opus_int silk_InitDecoder( /* O Returns error code */ 120*a58d3d2aSXin Li void *decState /* I/O State */ 121*a58d3d2aSXin Li ); 122*a58d3d2aSXin Li 123*a58d3d2aSXin Li /******************/ 124*a58d3d2aSXin Li /* Decode a frame */ 125*a58d3d2aSXin Li /******************/ 126*a58d3d2aSXin Li opus_int silk_Decode( /* O Returns error code */ 127*a58d3d2aSXin Li void* decState, /* I/O State */ 128*a58d3d2aSXin Li silk_DecControlStruct* decControl, /* I/O Control Structure */ 129*a58d3d2aSXin Li opus_int lostFlag, /* I 0: no loss, 1 loss, 2 decode fec */ 130*a58d3d2aSXin Li opus_int newPacketFlag, /* I Indicates first decoder call for this packet */ 131*a58d3d2aSXin Li ec_dec *psRangeDec, /* I/O Compressor data structure */ 132*a58d3d2aSXin Li opus_int16 *samplesOut, /* O Decoded output speech vector */ 133*a58d3d2aSXin Li opus_int32 *nSamplesOut, /* O Number of samples decoded */ 134*a58d3d2aSXin Li #ifdef ENABLE_DEEP_PLC 135*a58d3d2aSXin Li LPCNetPLCState *lpcnet, 136*a58d3d2aSXin Li #endif 137*a58d3d2aSXin Li int arch /* I Run-time architecture */ 138*a58d3d2aSXin Li ); 139*a58d3d2aSXin Li 140*a58d3d2aSXin Li #if 0 141*a58d3d2aSXin Li /**************************************/ 142*a58d3d2aSXin Li /* Get table of contents for a packet */ 143*a58d3d2aSXin Li /**************************************/ 144*a58d3d2aSXin Li opus_int silk_get_TOC( 145*a58d3d2aSXin Li const opus_uint8 *payload, /* I Payload data */ 146*a58d3d2aSXin Li const opus_int nBytesIn, /* I Number of input bytes */ 147*a58d3d2aSXin Li const opus_int nFramesPerPayload, /* I Number of SILK frames per payload */ 148*a58d3d2aSXin Li silk_TOC_struct *Silk_TOC /* O Type of content */ 149*a58d3d2aSXin Li ); 150*a58d3d2aSXin Li #endif 151*a58d3d2aSXin Li 152*a58d3d2aSXin Li #ifdef __cplusplus 153*a58d3d2aSXin Li } 154*a58d3d2aSXin Li #endif 155*a58d3d2aSXin Li 156*a58d3d2aSXin Li #endif 157