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