/* * Copyright 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef AAUDIO_AUDIO_STREAM_BUILDER_H #define AAUDIO_AUDIO_STREAM_BUILDER_H #include #include #include "AAudioStreamParameters.h" #include "AudioStream.h" namespace aaudio { /** * Factory class for an AudioStream. */ class AudioStreamBuilder : public AAudioStreamParameters { public: AudioStreamBuilder(); ~AudioStreamBuilder(); bool isSharingModeMatchRequired() const { return mSharingModeMatchRequired; } AudioStreamBuilder* setSharingModeMatchRequired(bool required) { mSharingModeMatchRequired = required; return this; } int32_t getPerformanceMode() const { return mPerformanceMode; } AudioStreamBuilder* setPerformanceMode(aaudio_performance_mode_t performanceMode) { mPerformanceMode = performanceMode; return this; } AAudioStream_dataCallback getDataCallbackProc() const { return mDataCallbackProc; } AudioStreamBuilder* setDataCallbackProc(AAudioStream_dataCallback proc) { mDataCallbackProc = proc; return this; } void *getDataCallbackUserData() const { return mDataCallbackUserData; } AudioStreamBuilder* setDataCallbackUserData(void *userData) { mDataCallbackUserData = userData; return this; } AAudioStream_errorCallback getErrorCallbackProc() const { return mErrorCallbackProc; } AudioStreamBuilder* setErrorCallbackProc(AAudioStream_errorCallback proc) { mErrorCallbackProc = proc; return this; } AudioStreamBuilder* setErrorCallbackUserData(void *userData) { mErrorCallbackUserData = userData; return this; } void *getErrorCallbackUserData() const { return mErrorCallbackUserData; } int32_t getFramesPerDataCallback() const { return mFramesPerDataCallback; } AudioStreamBuilder* setFramesPerDataCallback(int32_t sizeInFrames) { mFramesPerDataCallback = sizeInFrames; return this; } aaudio_result_t build(AudioStream **streamPtr); virtual aaudio_result_t validate() const override; private: bool mSharingModeMatchRequired = false; // must match sharing mode requested aaudio_performance_mode_t mPerformanceMode = AAUDIO_PERFORMANCE_MODE_NONE; AAudioStream_dataCallback mDataCallbackProc = nullptr; // external callback functions void *mDataCallbackUserData = nullptr; int32_t mFramesPerDataCallback = AAUDIO_UNSPECIFIED; // frames AAudioStream_errorCallback mErrorCallbackProc = nullptr; void *mErrorCallbackUserData = nullptr; }; } /* namespace aaudio */ #endif //AAUDIO_AUDIO_STREAM_BUILDER_H