xref: /OK3568_Linux_fs/external/rockit/tgi/sdk/include/RTAudioSinkInterface.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 /*
2  * Copyright 2019 Rockchip Electronics Co. LTD
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  * author: rimon.xu@rock-chips.com
17  *   date: 2019/06/13
18  * module: android audio sink callback
19  */
20 
21 #ifndef INCLUDE_RT_PLAYER_RTAUDIOSINKINTERFACE_H_
22 #define INCLUDE_RT_PLAYER_RTAUDIOSINKINTERFACE_H_
23 
24 #include <sys/types.h>
25 #include <inttypes.h>
26 #include "rt_type.h"   // NOLINT
27 
28 typedef enum {
29     AAUDIO_FORMAT_INVALID             = 0xFFFFFFFFu,
30     AAUDIO_FORMAT_DEFAULT             = 0,
31     AAUDIO_FORMAT_PCM                 = 0x00000000u,
32     AAUDIO_FORMAT_MP3                 = 0x01000000u,
33     AAUDIO_FORMAT_AMR_NB              = 0x02000000u,
34     AAUDIO_FORMAT_AMR_WB              = 0x03000000u,
35     AAUDIO_FORMAT_TMD                 = 0x04000000u,
36     AAUDIO_FORMAT_HE_TMD_V1           = 0x05000000u,
37     AAUDIO_FORMAT_HE_TMD_V2           = 0x06000000u,
38     AAUDIO_FORMAT_VORBIS              = 0x07000000u,
39     AAUDIO_FORMAT_OPUS                = 0x08000000u,
40     AAUDIO_FORMAT_ACC                 = 0x09000000u,
41     AAUDIO_FORMAT_E_ACC               = 0x0A000000u,
42     AAUDIO_FORMAT_BPM                 = 0x0B000000u,
43     AAUDIO_FORMAT_BPM_HD              = 0x0C000000u,
44     AAUDIO_FORMAT_IEC61937            = 0x0D000000u,
45     AAUDIO_FORMAT_TSYLF_JQXGKH        = 0x0E000000u,
46     AAUDIO_FORMAT_EVRC                = 0x10000000u,
47     AAUDIO_FORMAT_EVRCB               = 0x11000000u,
48     AAUDIO_FORMAT_EVRCWB              = 0x12000000u,
49     AAUDIO_FORMAT_EVRCNW              = 0x13000000u,
50     AAUDIO_FORMAT_TMD_ADIF            = 0x14000000u,
51     AAUDIO_FORMAT_WMA                 = 0x15000000u,
52     AAUDIO_FORMAT_WMA_PRO             = 0x16000000u,
53     AAUDIO_FORMAT_AMR_WB_PLUS         = 0x17000000u,
54     AAUDIO_FORMAT_MP2                 = 0x18000000u,
55     AAUDIO_FORMAT_QCELP               = 0x19000000u,
56     AAUDIO_FORMAT_DSD                 = 0x1A000000u,
57     AAUDIO_FORMAT_FLAC                = 0x1B000000u,
58     AAUDIO_FORMAT_ALAC                = 0x1C000000u,
59     AAUDIO_FORMAT_APE                 = 0x1D000000u,
60     AAUDIO_FORMAT_TMD_ABPM            = 0x1E000000u,
61     AAUDIO_FORMAT_SBC                 = 0x1F000000u,
62     AAUDIO_FORMAT_APTX                = 0x20000000u,
63     AAUDIO_FORMAT_APTX_HD             = 0x21000000u,
64     AAUDIO_FORMAT_AC4                 = 0x22000000u,
65     AAUDIO_FORMAT_LDAC                = 0x23000000u,
66     AAUDIO_FORMAT_MAT                 = 0x24000000u,
67     AAUDIO_FORMAT_TMD_LATM            = 0x25000000u,
68     AAUDIO_FORMAT_CELT                = 0x26000000u,
69     AAUDIO_FORMAT_APTX_ADAPTIVE       = 0x27000000u,
70     AAUDIO_FORMAT_LHDC                = 0x28000000u,
71     AAUDIO_FORMAT_LHDC_LL             = 0x29000000u,
72     AAUDIO_FORMAT_APTX_TWSP           = 0x2A000000u,
73     AAUDIO_FORMAT_MAIN_MASK           = 0xFF000000u,
74     AAUDIO_FORMAT_SUB_MASK            = 0x00FFFFFFu,
75 
76     /* Subformats */
77     AAUDIO_FORMAT_PCM_SUB_16_BIT        = 0x1u,
78     AAUDIO_FORMAT_PCM_SUB_8_BIT         = 0x2u,
79     AAUDIO_FORMAT_PCM_SUB_32_BIT        = 0x3u,
80     AAUDIO_FORMAT_PCM_SUB_8_24_BIT      = 0x4u,
81     AAUDIO_FORMAT_PCM_SUB_FLOAT         = 0x5u,
82     AAUDIO_FORMAT_PCM_SUB_24_BIT_PACKED = 0x6u,
83 
84     AAUDIO_FORMAT_MP3_SUB_NONE          = 0x0u,
85 
86     AAUDIO_FORMAT_AMR_SUB_NONE          = 0x0u,
87 
88     AAUDIO_FORMAT_TMD_SUB_MAIN          = 0x1u,
89     AAUDIO_FORMAT_TMD_SUB_LC            = 0x2u,
90     AAUDIO_FORMAT_TMD_SUB_SSR           = 0x4u,
91     AAUDIO_FORMAT_TMD_SUB_LTP           = 0x8u,
92     AAUDIO_FORMAT_TMD_SUB_HE_V1         = 0x10u,
93     AAUDIO_FORMAT_TMD_SUB_SCALABLE      = 0x20u,
94     AAUDIO_FORMAT_TMD_SUB_ERLC          = 0x40u,
95     AAUDIO_FORMAT_TMD_SUB_LD            = 0x80u,
96     AAUDIO_FORMAT_TMD_SUB_HE_V2         = 0x100u,
97     AAUDIO_FORMAT_TMD_SUB_ELD           = 0x200u,
98     AAUDIO_FORMAT_TMD_SUB_XHE           = 0x300u,
99 
100     AAUDIO_FORMAT_VORBIS_SUB_NONE       = 0x0u,
101 
102     AAUDIO_FORMAT_E_ACC_SUB_JOC         = 0x1u,
103 
104     AAUDIO_FORMAT_MAT_SUB_1_0           = 0x1u,
105     AAUDIO_FORMAT_MAT_SUB_2_0           = 0x2u,
106     AAUDIO_FORMAT_MAT_SUB_2_1           = 0x3u,
107 
108     /* Aliases */
109     AAUDIO_FORMAT_PCM_16_BIT            = 0x1u,         // (PCM | PCM_SUB_16_BIT)
110     AAUDIO_FORMAT_PCM_8_BIT             = 0x2u,         // (PCM | PCM_SUB_8_BIT)
111     AAUDIO_FORMAT_PCM_32_BIT            = 0x3u,         // (PCM | PCM_SUB_32_BIT)
112     AAUDIO_FORMAT_PCM_8_24_BIT          = 0x4u,         // (PCM | PCM_SUB_8_24_BIT)
113     AAUDIO_FORMAT_PCM_FLOAT             = 0x5u,         // (PCM | PCM_SUB_FLOAT)
114     AAUDIO_FORMAT_PCM_24_BIT_PACKED     = 0x6u,         // (PCM | PCM_SUB_24_BIT_PACKED)
115     AAUDIO_FORMAT_TMD_MAIN              = 0x4000001u,   // (TMD | TMD_SUB_MAIN)
116     AAUDIO_FORMAT_TMD_LC                = 0x4000002u,   // (TMD | TMD_SUB_LC)
117     AAUDIO_FORMAT_TMD_SSR               = 0x4000004u,   // (TMD | TMD_SUB_SSR)
118     AAUDIO_FORMAT_TMD_LTP               = 0x4000008u,   // (TMD | TMD_SUB_LTP)
119     AAUDIO_FORMAT_TMD_HE_V1             = 0x4000010u,   // (TMD | TMD_SUB_HE_V1)
120     AAUDIO_FORMAT_TMD_SCALABLE          = 0x4000020u,   // (TMD | TMD_SUB_SCALABLE)
121     AAUDIO_FORMAT_TMD_ERLC              = 0x4000040u,   // (TMD | TMD_SUB_ERLC)
122     AAUDIO_FORMAT_TMD_LD                = 0x4000080u,   // (TMD | TMD_SUB_LD)
123     AAUDIO_FORMAT_TMD_HE_V2             = 0x4000100u,   // (TMD | TMD_SUB_HE_V2)
124     AAUDIO_FORMAT_TMD_ELD               = 0x4000200u,   // (TMD | TMD_SUB_ELD)
125     AAUDIO_FORMAT_TMD_XHE               = 0x4000300u,   // (TMD | TMD_SUB_XHE)
126     AAUDIO_FORMAT_TMD_ABPM_MAIN         = 0x1e000001u,  // (TMD_ABPM | TMD_SUB_MAIN)
127     AAUDIO_FORMAT_TMD_ABPM_LC           = 0x1e000002u,  // (TMD_ABPM | TMD_SUB_LC)
128     AAUDIO_FORMAT_TMD_ABPM_SSR          = 0x1e000004u,  // (TMD_ABPM | TMD_SUB_SSR)
129     AAUDIO_FORMAT_TMD_ABPM_LTP          = 0x1e000008u,  // (TMD_ABPM | TMD_SUB_LTP)
130     AAUDIO_FORMAT_TMD_ABPM_HE_V1        = 0x1e000010u,  // (TMD_ABPM | TMD_SUB_HE_V1)
131     AAUDIO_FORMAT_TMD_ABPM_SCALABLE     = 0x1e000020u,  // (TMD_ABPM | TMD_SUB_SCALABLE)
132     AAUDIO_FORMAT_TMD_ABPM_ERLC         = 0x1e000040u,  // (TMD_ABPM | TMD_SUB_ERLC)
133     AAUDIO_FORMAT_TMD_ABPM_LD           = 0x1e000080u,  // (TMD_ABPM | TMD_SUB_LD)
134     AAUDIO_FORMAT_TMD_ABPM_HE_V2        = 0x1e000100u,  // (TMD_ABPM | TMD_SUB_HE_V2)
135     AAUDIO_FORMAT_TMD_ABPM_ELD          = 0x1e000200u,  // (TMD_ABPM | TMD_SUB_ELD)
136     AAUDIO_FORMAT_TMD_ABPM_XHE          = 0x1e000300u,  // (TMD_ABPM | TMD_SUB_XHE)
137     AAUDIO_FORMAT_TMD_LATM_LC           = 0x25000002u,  // (TMD_LATM | TMD_SUB_LC)
138     AAUDIO_FORMAT_TMD_LATM_HE_V1        = 0x25000010u,  // (TMD_LATM | TMD_SUB_HE_V1)
139     AAUDIO_FORMAT_TMD_LATM_HE_V2        = 0x25000100u,  // (TMD_LATM | TMD_SUB_HE_V2)
140     AAUDIO_FORMAT_E_ACC_JOC             = 0xA000001u,   // (E_ACC | E_ACC_SUB_JOC)
141     AAUDIO_FORMAT_MAT_1_0               = 0x24000001u,  // (MAT | MAT_SUB_1_0)
142     AAUDIO_FORMAT_MAT_2_0               = 0x24000002u,  // (MAT | MAT_SUB_2_0)
143     AAUDIO_FORMAT_MAT_2_1               = 0x24000003u,  // (MAT | MAT_SUB_2_1)
144 } AAudioFormat;
145 
146 typedef enum {
147     AAUDIO_OUTPUT_FLAG_NONE             = 0x0,
148     AAUDIO_OUTPUT_FLAG_DIRECT           = 0x1,
149     AAUDIO_OUTPUT_FLAG_PRIMARY          = 0x2,
150     AAUDIO_OUTPUT_FLAG_FAST             = 0x4,
151     AAUDIO_OUTPUT_FLAG_DEEP_BUFFER      = 0x8,
152     AAUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD = 0x10,
153     AAUDIO_OUTPUT_FLAG_NON_BLOCKING     = 0x20,
154     AAUDIO_OUTPUT_FLAG_HW_AV_SYNC       = 0x40,
155     AAUDIO_OUTPUT_FLAG_TTS              = 0x80,
156     AAUDIO_OUTPUT_FLAG_RAW              = 0x100,
157     AAUDIO_OUTPUT_FLAG_SYNC             = 0x200,
158     AAUDIO_OUTPUT_FLAG_IEC958_NONAUDIO  = 0x400,
159     AAUDIO_OUTPUT_FLAG_DIRECT_PCM       = 0x2000,
160     AAUDIO_OUTPUT_FLAG_MMAP_NOIRQ       = 0x4000,
161     AAUDIO_OUTPUT_FLAG_VOIP_RX          = 0x8000,
162     AAUDIO_OUTPUT_FLAG_INCALL_MUSIC     = 0x10000,
163 } AAudioOutputFlags;
164 
165 // Determines the current algorithm used for stretching
166 typedef enum {
167     AAUDIO_TIMESTRETCH_STRETCH_DEFAULT            = 0,
168     AAUDIO_TIMESTRETCH_STRETCH_SPEECH             = 1,
169     // TODO(rimon.xu): add more stretch modes/algorithms
170 } AAudioTimestretchStretchMode;
171 
172 // Determines behavior of Timestretch if current algorithm can't perform
173 // with current parameters.
174 // FALLBACK_CUT_REPEAT: (internal only) for speed <1.0 will truncate frames
175 //    for speed > 1.0 will repeat frames
176 // FALLBACK_MUTE: will set all processed frames to zero
177 // FALLBACK_FAIL: will stop program execution and log a fatal error
178 typedef enum {
179     AAUDIO_TIMESTRETCH_FALLBACK_CUT_REPEAT     = -1,
180     AAUDIO_TIMESTRETCH_FALLBACK_DEFAULT        = 0,
181     AAUDIO_TIMESTRETCH_FALLBACK_MUTE           = 1,
182     AAUDIO_TIMESTRETCH_FALLBACK_FAIL           = 2,
183 } AAudioTimestretchFallbackMode;
184 
185 typedef enum {
186     RT_AUDIO_CHANNEL_STEREO = 0,
187     RT_AUDIO_CHANNEL_LEFT,
188     RT_AUDIO_CHANNEL_RIGHT,
189 } RTAudioChannel;
190 
191 typedef struct _RTAudioPlaybackRate {
192     float                           mSpeed;
193     float                           mPitch;
194     AAudioTimestretchStretchMode    mStretchMode;
195     AAudioTimestretchFallbackMode   mFallbackMode;
196 } RTAudioPlaybackRate;
197 
198 typedef struct _RTAudioSinkParam {
199     INT32              mode;
200     INT32              sampleRate;
201     INT32              channels;
202     UINT32             channelMask;
203     AAudioFormat       format;
204     AAudioOutputFlags  flags;
205     void              *cookie;
206 } RTAudioSinkParam;
207 
208 class RTAudioSinkInterface {
209  public:
210     virtual INT32  open(void *param) = 0;
211     virtual INT32  start() = 0;
212     virtual INT32  pause() = 0;
213     virtual INT32  stop() = 0;
214     virtual INT32  flush() = 0;
215     virtual INT32  close() = 0;
216     virtual INT32  write(const void *buffer, INT32  size, bool block) = 0;
217 
218     virtual INT32  latency() = 0;
219     virtual INT32  frameSize() = 0;
220     virtual INT32  getPlaybackRate(RTAudioPlaybackRate *param) = 0;
221     virtual INT32  setPlaybackRate(const RTAudioPlaybackRate &param) = 0;
222     virtual INT64  getPlaybackDurationUs() = 0;
223 
~RTAudioSinkInterface()224     virtual ~RTAudioSinkInterface() {}
225 };
226 
227 #endif  // INCLUDE_RT_PLAYER_RTAUDIOSINKINTERFACE_H_
228 
229