1 /* 2 * Copyright 2015 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 AAUDIO_AUDIO_STREAM_BUILDER_H 18 #define AAUDIO_AUDIO_STREAM_BUILDER_H 19 20 #include <set> 21 #include <stdint.h> 22 23 #include <aaudio/AAudio.h> 24 25 #include "AAudioStreamParameters.h" 26 #include "AudioStream.h" 27 28 namespace aaudio { 29 30 /** 31 * Factory class for an AudioStream. 32 */ 33 class AudioStreamBuilder : public AAudioStreamParameters { 34 public: 35 AudioStreamBuilder() = default; 36 37 ~AudioStreamBuilder() = default; 38 isSharingModeMatchRequired()39 bool isSharingModeMatchRequired() const { 40 return mSharingModeMatchRequired; 41 } 42 setSharingModeMatchRequired(bool required)43 AudioStreamBuilder* setSharingModeMatchRequired(bool required) { 44 mSharingModeMatchRequired = required; 45 return this; 46 } 47 getPerformanceMode()48 int32_t getPerformanceMode() const { 49 return mPerformanceMode; 50 } 51 setPerformanceMode(aaudio_performance_mode_t performanceMode)52 AudioStreamBuilder* setPerformanceMode(aaudio_performance_mode_t performanceMode) { 53 mPerformanceMode = performanceMode; 54 return this; 55 } 56 getDataCallbackProc()57 AAudioStream_dataCallback getDataCallbackProc() const { 58 return mDataCallbackProc; 59 } 60 setDataCallbackProc(AAudioStream_dataCallback proc)61 AudioStreamBuilder* setDataCallbackProc(AAudioStream_dataCallback proc) { 62 mDataCallbackProc = proc; 63 return this; 64 } 65 getDataCallbackUserData()66 void *getDataCallbackUserData() const { 67 return mDataCallbackUserData; 68 } 69 setDataCallbackUserData(void * userData)70 AudioStreamBuilder* setDataCallbackUserData(void *userData) { 71 mDataCallbackUserData = userData; 72 return this; 73 } 74 getErrorCallbackProc()75 AAudioStream_errorCallback getErrorCallbackProc() const { 76 return mErrorCallbackProc; 77 } 78 setErrorCallbackProc(AAudioStream_errorCallback proc)79 AudioStreamBuilder* setErrorCallbackProc(AAudioStream_errorCallback proc) { 80 mErrorCallbackProc = proc; 81 return this; 82 } 83 setErrorCallbackUserData(void * userData)84 AudioStreamBuilder* setErrorCallbackUserData(void *userData) { 85 mErrorCallbackUserData = userData; 86 return this; 87 } 88 getErrorCallbackUserData()89 void *getErrorCallbackUserData() const { 90 return mErrorCallbackUserData; 91 } 92 setPresentationEndCallbackProc(AAudioStream_presentationEndCallback proc)93 AudioStreamBuilder* setPresentationEndCallbackProc(AAudioStream_presentationEndCallback proc) { 94 mPresentationEndCallbackProc = proc; 95 return this; 96 } 97 getPresentationEndCallbackProc()98 AAudioStream_presentationEndCallback getPresentationEndCallbackProc() const { 99 return mPresentationEndCallbackProc; 100 } 101 setPresentationEndCallbackUserData(void * userData)102 AudioStreamBuilder* setPresentationEndCallbackUserData(void *userData) { 103 mPresentationEndCallbackUserData = userData; 104 return this; 105 } 106 getPresentationEndCallbackUserData()107 void *getPresentationEndCallbackUserData() const { 108 return mPresentationEndCallbackUserData; 109 } 110 getFramesPerDataCallback()111 int32_t getFramesPerDataCallback() const { 112 return mFramesPerDataCallback; 113 } 114 setFramesPerDataCallback(int32_t sizeInFrames)115 AudioStreamBuilder* setFramesPerDataCallback(int32_t sizeInFrames) { 116 mFramesPerDataCallback = sizeInFrames; 117 return this; 118 } 119 setPrivacySensitiveRequest(bool privacySensitive)120 AudioStreamBuilder* setPrivacySensitiveRequest(bool privacySensitive) { 121 mPrivacySensitiveReq = 122 privacySensitive ? PRIVACY_SENSITIVE_ENABLED : PRIVACY_SENSITIVE_DISABLED; 123 return this; 124 } 125 126 aaudio_result_t addTag(const char* tag); 127 128 void clearTags(); 129 130 aaudio_result_t build(AudioStream **streamPtr); 131 132 virtual aaudio_result_t validate() const override; 133 134 135 void logParameters() const; 136 137 // Mark the stream so it can be deleted. 138 static void stopUsingStream(AudioStream *stream); 139 140 private: 141 // Extract a raw pointer that we can pass to a 'C' app. 142 static AudioStream *startUsingStream(android::sp<AudioStream> &spAudioStream); 143 144 bool mSharingModeMatchRequired = false; // must match sharing mode requested 145 aaudio_performance_mode_t mPerformanceMode = AAUDIO_PERFORMANCE_MODE_NONE; 146 147 AAudioStream_dataCallback mDataCallbackProc = nullptr; // external callback functions 148 void *mDataCallbackUserData = nullptr; 149 int32_t mFramesPerDataCallback = AAUDIO_UNSPECIFIED; // frames 150 151 AAudioStream_errorCallback mErrorCallbackProc = nullptr; 152 void *mErrorCallbackUserData = nullptr; 153 154 AAudioStream_presentationEndCallback mPresentationEndCallbackProc = nullptr; 155 void *mPresentationEndCallbackUserData = nullptr; 156 157 enum { 158 PRIVACY_SENSITIVE_DEFAULT = -1, 159 PRIVACY_SENSITIVE_DISABLED = 0, 160 PRIVACY_SENSITIVE_ENABLED = 1, 161 }; 162 typedef int32_t privacy_sensitive_t; 163 privacy_sensitive_t mPrivacySensitiveReq = PRIVACY_SENSITIVE_DEFAULT; 164 }; 165 166 } /* namespace aaudio */ 167 168 #endif //AAUDIO_AUDIO_STREAM_BUILDER_H 169