• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (C) 2022 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef AUDIO_AMRFMT_H_INCLUDED
18 #define AUDIO_AMRFMT_H_INCLUDED
19 
20 #include <ImsMediaDefine.h>
21 #include <stdint.h>
22 
23 #define IMSAMR_FRAME_BYTES              34
24 
25 #define EVS_COMPACT_PRIMARY_PAYLOAD_NUM 13
26 #define EVS_COMPACT_AMRWBIO_PAYLOAD_NUM 10
27 #define EVS_COMPACT_PAYLOAD_MAX_NUM     32
28 
29 #define AUDIO_STOP_TIMEOUT              1000
30 
31 enum kImsAudioFrameEntype
32 {
33     kImsAudioFrameGsmSid = 0,        /* GSM HR, FR or EFR : silence descriptor   */
34     kImsAudioFrameGsmSpeechGood,     /* GSM HR, FR or EFR : good speech frame    */
35     kImsAudioFrameGsmBfi,            /* GSM HR, FR or EFR : bad frame indicator  */
36     kImsAudioFrameGsmInvalidSid,     /* GSM HR            : invalid SID frame    */
37     kImsAudioFrameAmrSpeechGood,     /* AMR : good speech frame              */
38     kImsAudioFrameAmrSpeechDegraded, /* AMR : degraded speech frame          */
39     kImsAudioFrameAmrOnSet,          /* AMR : onset                          */
40     kImsAudioFrameAmrSpeechBad,      /* AMR : bad speech frame               */
41     kImsAudioFrameAmrSidFirst,       /* AMR : first silence descriptor       */
42     kImsAudioFrameAmrSidUpdate,      /* AMR : successive silence descriptor  */
43     kImsAudioFrameAmrSidBad,         /* AMR : bad silence descriptor frame   */
44     kImsAudioFrameAmrNoData,         /* AMR : Nothing to Transmit     */
45     kImsAudioFrameAmrSpeechLost,     /* downlink speech lost           */
46     kImsAudioFrameMax
47 };
48 
49 enum kImsAudioAmrMode
50 {
51     kImsAudioAmrMode475 = 0,  /* 4.75 kbit/s                             */
52     kImsAudioAmrMode515 = 1,  /* 5.15 kbit/s                             */
53     kImsAudioAmrMode590 = 2,  /* 5.90 kbit/s                             */
54     kImsAudioAmrMode670 = 3,  /* 6.70 kbit/s                             */
55     kImsAudioAmrMode740 = 4,  /* 7.40 kbit/s                             */
56     kImsAudioAmrMode795 = 5,  /* 7.95 kbit/s                             */
57     kImsAudioAmrMode1020 = 6, /* 10.20 kbit/s                            */
58     kImsAudioAmrMode1220 = 7, /* 12.20 kbit/s, also used for GSM EFR     */
59     kImsAudioAmrModeSID = 8,  /* AMR SID */
60     /* 9~13: for future use */
61     kImsAudioAmrModeSPL = 14,    /* Speech Lost frame  */
62     kImsAudioAmrModeNoData = 15, /* No Data */
63     kImsAudioAmrModeEVRC0 = 0,   /* Indicates vocoder data was blanked. */
64     kImsAudioAmrModeEVRC8,       /* Indicates rate 1/8 vocoder data. */
65     kImsAudioAmrModeEVRC4,       /* Indicates rate 1/4 vocoder data. */
66     kImsAudioAmrModeEVRC2,       /* Indicates rate 1/2 vocoder data. */
67     kImsAudioAmrModeEVRC1,       /* Indicates rate 1 vocoder data. */
68     kImsAudioAmrModeEVRCERASURE, /* Indicates frame erasure */
69     kImsAudioAmrModeEVRCERR,     /* Indicates invalid vocoder data. */
70     kImsAudioAmrModeMax
71 };
72 
73 enum kImsAudioAmrWbMode
74 {
75     kImsAudioAmrWbMode660 = 0,  /* 6.60 kbit/s */
76     kImsAudioAmrWbMode885 = 1,  /* 8.85 kbit/s */
77     kImsAudioAmrWbMode1265 = 2, /* 12.65 kbit/s */
78     kImsAudioAmrWbMode1425 = 3, /* 14.25 kbit/s */
79     kImsAudioAmrWbMode1585 = 4, /* 15.85 kbit/s */
80     kImsAudioAmrWbMode1825 = 5, /* 18.25 kbit/s */
81     kImsAudioAmrWbMode1985 = 6, /* 19.85 kbit/s */
82     kImsAudioAmrWbMode2305 = 7, /* 23.05 kbit/s */
83     kImsAudioAmrWbMode2385 = 8, /* 23.85 kbit/s */
84     kImsAudioAmrWbModeSID = 9,  /* AMRWB SID */
85     /* 10~13: for future use */
86     kImsAudioAmrWbModeSPL = 14,    /* AMRWB Speech Lost frame */
87     kImsAudioAmrWbModeNoData = 15, /* AMRWB No Data */
88     kImsAudioAmrWbModeMax
89 };
90 
91 enum kImsAudioEvsMode
92 {
93     kImsAudioEvsAmrWbIoMode660 = 0,         /* 6.60 kbps AMR-IO*/
94     kImsAudioEvsAmrWbIoMode885 = 1,         /* 8.85 kbps AMR-IO*/
95     kImsAudioEvsAmrWbIoMode1265 = 2,        /* 12.65 kbps AMR-IO */
96     kImsAudioEvsAmrWbIoMode1425 = 3,        /* 14.25 kbps AMR-IO */
97     kImsAudioEvsAmrWbIoMode1585 = 4,        /* 15.85 kbps AMR-IO */
98     kImsAudioEvsAmrWbIoMode1825 = 5,        /* 18.25 kbps AMR-IO */
99     kImsAudioEvsAmrWbIoMode1985 = 6,        /* 19.85 kbps AMR-IO */
100     kImsAudioEvsAmrWbIoMode2305 = 7,        /* 23.05 kbps AMR-IO */
101     kImsAudioEvsAmrWbIoMode2385 = 8,        /* 23.85 kbps AMR-IO */
102     kImsAudioEvsPrimaryMode5900 = 9,        /* 5.9 kbps, EVS Primary */
103     kImsAudioEvsPrimaryMode7200 = 10,       /* 7.2 kbps, EVS Primary */
104     kImsAudioEvsPrimaryMode8000 = 11,       /* 8.0 kbps, EVS Primary */
105     kImsAudioEvsPrimaryMode9600 = 12,       /* 9.6 kbps, EVS Primary */
106     kImsAudioEvsPrimaryMode13200 = 13,      /* 13.2 kbps, EVS Primary */
107     kImsAudioEvsPrimaryMode16400 = 14,      /* 16.4 kbps, EVS Primary */
108     kImsAudioEvsPrimaryMode24400 = 15,      /* 24.4 kbps, EVS Primary */
109     kImsAudioEvsPrimaryMode32000 = 16,      /* 32.0 kbps, EVS Primary */
110     kImsAudioEvsPrimaryMode48000 = 17,      /* 48.0 kbps, EVS Primary */
111     kImsAudioEvsPrimaryMode64000 = 18,      /* 64.0 kbps, EVS Primary */
112     kImsAudioEvsPrimaryMode96000 = 19,      /* 96.0 kbps, EVS Primary */
113     kImsAudioEvsPrimaryMode128000 = 20,     /* 128.0 kbps, EVS Primary */
114     kImsAudioEvsPrimaryModeSID = 21,        /* 2.4 kbps, EVS Primary SID */
115     kImsAudioEvsPrimaryModeSpeechLost = 22, /* SPEECH LOST */
116     kImsAudioEvsPrimaryModeNoData = 23,     /* NO DATA */
117     kImsAudioEvsModeMax
118 };
119 
120 // TODO: need to remove this with respective changes
121 enum kImsAudioEvsAmrWbIoMode
122 {
123     kImsAudioEvsAmrWbIoMode0660 = 0,  /* 6.60 kbit/s */
124     kImsAudioEvsAmrWbIoMode0885 = 1,  /* 8.85 kbit/s */
125     kImsAudioEvsAmrWbIoMode01265 = 2, /* 12.65 kbit/s */
126     kImsAudioEvsAmrWbIoMode01425 = 3, /* 14.25 kbit/s */
127     kImsAudioEvsAmrWbIoMode01585 = 4, /* 15.85 kbit/s */
128     kImsAudioEvsAmrWbIoMode01825 = 5, /* 18.25 kbit/s */
129     kImsAudioEvsAmrWbIoMode01985 = 6, /* 19.85 kbit/s */
130     kImsAudioEvsAmrWbIoMode02305 = 7, /* 23.05 kbit/s */
131     kImsAudioEvsAmrWbIoMode02385 = 8, /* 23.85 kbit/s */
132     kImsAudioEvsAmrWbIoModeSID = 9,   /* AMRWB SID */
133     /* 10~13: for future use */
134     kImsAudioEvsAmrWbIoModeSPL = 14,    /* AMRWB Speech Lost frame */
135     kImsAudioEvsAmrWbIoModeNoData = 15, /* AMRWB No Data */
136     kImsAudioEvsAmrWbIoModeMax
137 };
138 
139 class ImsMediaAudioUtil
140 {
141 public:
142     static int32_t ConvertCodecType(int32_t type);
143     static int32_t ConvertEvsCodecMode(int32_t evsMode);
144     static uint32_t ConvertAmrModeToLen(uint32_t mode);
145     static uint32_t ConvertAmrModeToBitLen(uint32_t mode);
146     static uint32_t ConvertLenToAmrMode(uint32_t nLen);
147     static void ConvertEvsBandwidthToStr(kEvsBandwidth bandwidth, char* nBandwidth, uint32_t nLen);
148     static uint32_t ConvertAmrWbModeToLen(uint32_t mode);
149     static uint32_t ConvertAmrWbModeToBitLen(uint32_t mode);
150     static uint32_t ConvertLenToAmrWbMode(uint32_t nLen);
151     static uint32_t ConvertLenToEVSAudioMode(uint32_t nLen);
152     static uint32_t ConvertLenToEVSAMRIOAudioMode(uint32_t nLen);
153     static uint32_t ConvertEVSAudioModeToBitLen(uint32_t mode);
154     static uint32_t ConvertEVSAMRIOAudioModeToBitLen(uint32_t mode);
155     static uint32_t ConvertAmrModeToBitrate(uint32_t mode);
156     static uint32_t ConvertAmrWbModeToBitrate(uint32_t mode);
157     static uint32_t GetMaximumAmrMode(int32_t bitmask);
158     static uint32_t GetMaximumEvsMode(int32_t bitmask);
159     static uint32_t GetBitrateEVS(int mode);
160     static kRtpPyaloadHeaderMode ConvertEVSPayloadMode(
161             uint32_t nDataSize, kEvsCodecMode* pEVSCodecMode, uint32_t* pEVSCompactId);
162     static kEvsCodecMode CheckEVSCodecMode(const uint32_t nAudioFrameLength);
163     static int32_t ConvertEVSModeToBitRate(const int32_t mode);
164     static kEvsBandwidth FindMaxEvsBandwidthFromRange(const int32_t EvsBandwidthRange);
165     static bool CheckEVSPrimaryHeaderFullModeFromSize(uint32_t size);
166 };
167 
168 #endif  // AUDIO_AMRFMT_H_INCLUDED
169