xref: /aosp_15_r20/external/libopus/silk/API.h (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
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