xref: /aosp_15_r20/cts/apps/CtsVerifier/jni/megaaudio/common/StreamBase.h (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker /*
2*b7c941bbSAndroid Build Coastguard Worker  * Copyright 2020 The Android Open Source Project
3*b7c941bbSAndroid Build Coastguard Worker  *
4*b7c941bbSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*b7c941bbSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*b7c941bbSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*b7c941bbSAndroid Build Coastguard Worker  *
8*b7c941bbSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*b7c941bbSAndroid Build Coastguard Worker  *
10*b7c941bbSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*b7c941bbSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*b7c941bbSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b7c941bbSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*b7c941bbSAndroid Build Coastguard Worker  * limitations under the License.
15*b7c941bbSAndroid Build Coastguard Worker  */
16*b7c941bbSAndroid Build Coastguard Worker 
17*b7c941bbSAndroid Build Coastguard Worker #ifndef MEGA_COMMON_STREAMBASE_H
18*b7c941bbSAndroid Build Coastguard Worker #define MEGA_COMMON_STREAMBASE_H
19*b7c941bbSAndroid Build Coastguard Worker 
20*b7c941bbSAndroid Build Coastguard Worker #include <cstdint>
21*b7c941bbSAndroid Build Coastguard Worker 
22*b7c941bbSAndroid Build Coastguard Worker class AudioSink;
23*b7c941bbSAndroid Build Coastguard Worker 
24*b7c941bbSAndroid Build Coastguard Worker class StreamBase {
25*b7c941bbSAndroid Build Coastguard Worker public:
26*b7c941bbSAndroid Build Coastguard Worker     //
27*b7c941bbSAndroid Build Coastguard Worker     // Error Codes
28*b7c941bbSAndroid Build Coastguard Worker     // These values must be kept in sync with the equivalent symbols in
29*b7c941bbSAndroid Build Coastguard Worker     // org.hyphonate.megaaudio.common.Streambase.java
30*b7c941bbSAndroid Build Coastguard Worker     //
31*b7c941bbSAndroid Build Coastguard Worker     enum Result {
32*b7c941bbSAndroid Build Coastguard Worker         OK = 0,
33*b7c941bbSAndroid Build Coastguard Worker         ERROR_UNKNOWN = -1,
34*b7c941bbSAndroid Build Coastguard Worker         ERROR_UNSUPPORTED = -2,
35*b7c941bbSAndroid Build Coastguard Worker         ERROR_INVALID_STATE = -3
36*b7c941bbSAndroid Build Coastguard Worker     };
37*b7c941bbSAndroid Build Coastguard Worker 
StreamBase()38*b7c941bbSAndroid Build Coastguard Worker     StreamBase() :
39*b7c941bbSAndroid Build Coastguard Worker         mChannelCount(0),
40*b7c941bbSAndroid Build Coastguard Worker         mChannelMask(0),
41*b7c941bbSAndroid Build Coastguard Worker         mNumExchangeChannels(0),
42*b7c941bbSAndroid Build Coastguard Worker         mSampleRate(0),
43*b7c941bbSAndroid Build Coastguard Worker         mRouteDeviceId(ROUTING_DEVICE_NONE),
44*b7c941bbSAndroid Build Coastguard Worker         mBufferSizeInFrames(-1) {}
~StreamBase()45*b7c941bbSAndroid Build Coastguard Worker     virtual ~StreamBase() {}
46*b7c941bbSAndroid Build Coastguard Worker 
47*b7c941bbSAndroid Build Coastguard Worker     //
48*b7c941bbSAndroid Build Coastguard Worker     // Attributes
49*b7c941bbSAndroid Build Coastguard Worker     //
50*b7c941bbSAndroid Build Coastguard Worker     static const int32_t ROUTING_DEVICE_NONE    = -1;
51*b7c941bbSAndroid Build Coastguard Worker 
52*b7c941bbSAndroid Build Coastguard Worker     static const int32_t SHARING_MODE_INVALID   = -1;
53*b7c941bbSAndroid Build Coastguard Worker 
getNumBufferFrames()54*b7c941bbSAndroid Build Coastguard Worker     int32_t getNumBufferFrames() const { return mBufferSizeInFrames; }
55*b7c941bbSAndroid Build Coastguard Worker 
56*b7c941bbSAndroid Build Coastguard Worker     //
57*b7c941bbSAndroid Build Coastguard Worker     // State
58*b7c941bbSAndroid Build Coastguard Worker     //
59*b7c941bbSAndroid Build Coastguard Worker 
60*b7c941bbSAndroid Build Coastguard Worker     /**
61*b7c941bbSAndroid Build Coastguard Worker      * Deinitializes the stream.
62*b7c941bbSAndroid Build Coastguard Worker      * Concrete subclasses should stop the stream (is not already stopped) and deallocate any
63*b7c941bbSAndroid Build Coastguard Worker      * resources being used by the stream.
64*b7c941bbSAndroid Build Coastguard Worker      * The stream cannot be started again without another call to setupAudioStream().
65*b7c941bbSAndroid Build Coastguard Worker      *
66*b7c941bbSAndroid Build Coastguard Worker      * The expectation is that this method will be synchronous in concrete subclasses.
67*b7c941bbSAndroid Build Coastguard Worker      * @return ERROR_NONE if successful, otherwise an error code
68*b7c941bbSAndroid Build Coastguard Worker      */
69*b7c941bbSAndroid Build Coastguard Worker     virtual Result teardownStream() = 0;
70*b7c941bbSAndroid Build Coastguard Worker 
71*b7c941bbSAndroid Build Coastguard Worker     /**
72*b7c941bbSAndroid Build Coastguard Worker      * Begin the playback/recording process.
73*b7c941bbSAndroid Build Coastguard Worker      *
74*b7c941bbSAndroid Build Coastguard Worker      * In concrete subclasses, this may be either synchronous or asynchronous.
75*b7c941bbSAndroid Build Coastguard Worker      * @return ERROR_NONE if successful, otherwise an error code
76*b7c941bbSAndroid Build Coastguard Worker      */
77*b7c941bbSAndroid Build Coastguard Worker     virtual Result startStream() = 0;
78*b7c941bbSAndroid Build Coastguard Worker 
79*b7c941bbSAndroid Build Coastguard Worker     /**
80*b7c941bbSAndroid Build Coastguard Worker      * Stop the playback/recording process.
81*b7c941bbSAndroid Build Coastguard Worker      *
82*b7c941bbSAndroid Build Coastguard Worker      * In concrete subclasses, this may be either synchronous or asynchronous.
83*b7c941bbSAndroid Build Coastguard Worker      */
84*b7c941bbSAndroid Build Coastguard Worker     virtual Result stopStream() = 0;
85*b7c941bbSAndroid Build Coastguard Worker 
86*b7c941bbSAndroid Build Coastguard Worker protected:
87*b7c941bbSAndroid Build Coastguard Worker     // Audio attributes
88*b7c941bbSAndroid Build Coastguard Worker     int32_t mChannelCount;
89*b7c941bbSAndroid Build Coastguard Worker     int32_t mChannelMask;
90*b7c941bbSAndroid Build Coastguard Worker     int32_t mNumExchangeChannels;   // this may be mChannelCount or the number of channels
91*b7c941bbSAndroid Build Coastguard Worker                                     // associated with mChannelMask
92*b7c941bbSAndroid Build Coastguard Worker     int32_t mSampleRate;
93*b7c941bbSAndroid Build Coastguard Worker     int32_t mRouteDeviceId;
94*b7c941bbSAndroid Build Coastguard Worker     int32_t mBufferSizeInFrames;
95*b7c941bbSAndroid Build Coastguard Worker 
96*b7c941bbSAndroid Build Coastguard Worker     // from org.hyphonate.megaaudio.common.BuilderBase
97*b7c941bbSAndroid Build Coastguard Worker     static const int32_t SUB_TYPE_OBOE_AAUDIO       = 0x0001;
98*b7c941bbSAndroid Build Coastguard Worker     static const int32_t SUB_TYPE_OBOE_OPENSL_ES    = 0x0002;
99*b7c941bbSAndroid Build Coastguard Worker };
100*b7c941bbSAndroid Build Coastguard Worker 
101*b7c941bbSAndroid Build Coastguard Worker #endif // MEGA_COMMON_STREAMBASE_H
102*b7c941bbSAndroid Build Coastguard Worker 
103