1e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk/* 2e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Copyright 2015 The Android Open Source Project 3e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * 4e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * you may not use this file except in compliance with the License. 6e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * You may obtain a copy of the License at 7e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * 8e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * http://www.apache.org/licenses/LICENSE-2.0 9e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * 10e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Unless required by applicable law or agreed to in writing, software 11e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * See the License for the specific language governing permissions and 14e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * limitations under the License. 15e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk */ 16e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 17e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk#ifndef AAUDIO_AUDIO_STREAM_BUILDER_H 18e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk#define AAUDIO_AUDIO_STREAM_BUILDER_H 19e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 20d8bdcabbac30d48ed17fa76c83cb9ee95c290a07Phil Burk#include <stdint.h> 21d8bdcabbac30d48ed17fa76c83cb9ee95c290a07Phil Burk 225ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include <aaudio/AAudio.h> 23d8bdcabbac30d48ed17fa76c83cb9ee95c290a07Phil Burk 24901f65deb49786f4dffd39ac965c0bb681392c0bjiabin#include "AAudioStreamParameters.h" 25e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include "AudioStream.h" 26e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 275ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burknamespace aaudio { 28e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 29e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk/** 30e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Factory class for an AudioStream. 31e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk */ 32901f65deb49786f4dffd39ac965c0bb681392c0bjiabinclass AudioStreamBuilder : public AAudioStreamParameters { 33e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkpublic: 34e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk AudioStreamBuilder(); 35e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 36e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk ~AudioStreamBuilder(); 37e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 3871f35bb687476694882a617ba4a810a0bb56fe23Phil Burk bool isSharingModeMatchRequired() const { 3971f35bb687476694882a617ba4a810a0bb56fe23Phil Burk return mSharingModeMatchRequired; 4071f35bb687476694882a617ba4a810a0bb56fe23Phil Burk } 4171f35bb687476694882a617ba4a810a0bb56fe23Phil Burk 4271f35bb687476694882a617ba4a810a0bb56fe23Phil Burk AudioStreamBuilder* setSharingModeMatchRequired(bool required) { 4371f35bb687476694882a617ba4a810a0bb56fe23Phil Burk mSharingModeMatchRequired = required; 4471f35bb687476694882a617ba4a810a0bb56fe23Phil Burk return this; 4571f35bb687476694882a617ba4a810a0bb56fe23Phil Burk } 4671f35bb687476694882a617ba4a810a0bb56fe23Phil Burk 47e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk int32_t getPerformanceMode() const { 48e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk return mPerformanceMode; 49e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk } 50e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk 51e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk AudioStreamBuilder* setPerformanceMode(aaudio_performance_mode_t performanceMode) { 52e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk mPerformanceMode = performanceMode; 53e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk return this; 54e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk } 55e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk 56e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AAudioStream_dataCallback getDataCallbackProc() const { 57e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return mDataCallbackProc; 58e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 59e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 60e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AudioStreamBuilder* setDataCallbackProc(AAudioStream_dataCallback proc) { 61e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk mDataCallbackProc = proc; 62e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return this; 63e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 64e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 65e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk void *getDataCallbackUserData() const { 66e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return mDataCallbackUserData; 67e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 68e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 69e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AudioStreamBuilder* setDataCallbackUserData(void *userData) { 70e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk mDataCallbackUserData = userData; 71e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return this; 72e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 73e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 74e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AAudioStream_errorCallback getErrorCallbackProc() const { 75e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return mErrorCallbackProc; 76e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 77e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 78e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AudioStreamBuilder* setErrorCallbackProc(AAudioStream_errorCallback proc) { 79e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk mErrorCallbackProc = proc; 80e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return this; 81e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 82e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 83e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AudioStreamBuilder* setErrorCallbackUserData(void *userData) { 84e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk mErrorCallbackUserData = userData; 85e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return this; 86e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 87e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 88e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk void *getErrorCallbackUserData() const { 89e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return mErrorCallbackUserData; 90e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 91e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 92e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk int32_t getFramesPerDataCallback() const { 93e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return mFramesPerDataCallback; 94e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 95e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 96e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AudioStreamBuilder* setFramesPerDataCallback(int32_t sizeInFrames) { 97e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk mFramesPerDataCallback = sizeInFrames; 98e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk return this; 99e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk } 100e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 1015ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t build(AudioStream **streamPtr); 102e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 103901f65deb49786f4dffd39ac965c0bb681392c0bjiabin virtual aaudio_result_t validate() const override; 1043401bcdd98c5a43a14701a0e7299a2318c6863c9Phil Burk 105e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkprivate: 106e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk bool mSharingModeMatchRequired = false; // must match sharing mode requested 107e2fbb59e729f6c3cade3b531f6f6411417ccbf40Phil Burk aaudio_performance_mode_t mPerformanceMode = AAUDIO_PERFORMANCE_MODE_NONE; 108e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 109e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AAudioStream_dataCallback mDataCallbackProc = nullptr; // external callback functions 110e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk void *mDataCallbackUserData = nullptr; 111e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk int32_t mFramesPerDataCallback = AAUDIO_UNSPECIFIED; // frames 112e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk 113e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk AAudioStream_errorCallback mErrorCallbackProc = nullptr; 114e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk void *mErrorCallbackUserData = nullptr; 115e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk}; 116e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 1175ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk} /* namespace aaudio */ 118e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk 119e4d7bb418df0fdc4c708c334ba3601f5ed8d89b3Phil Burk#endif //AAUDIO_AUDIO_STREAM_BUILDER_H 120