AAudioEndpointManager.h revision 87c9f646a94259d7c321c3b3d5947fa1778f5ac2
1c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk/* 2c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Copyright (C) 2017 The Android Open Source Project 3c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 4c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * you may not use this file except in compliance with the License. 6c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * You may obtain a copy of the License at 7c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 8c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * http://www.apache.org/licenses/LICENSE-2.0 9c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 10c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Unless required by applicable law or agreed to in writing, software 11c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * See the License for the specific language governing permissions and 14c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * limitations under the License. 15c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 16c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 17c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#ifndef AAUDIO_AAUDIO_ENDPOINT_MANAGER_H 18c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#define AAUDIO_AAUDIO_ENDPOINT_MANAGER_H 19c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 20c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <map> 21c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <mutex> 22c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include <utils/Singleton.h> 23c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 24c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AAudioServiceMessage.h" 25c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "AAudioServiceEndpoint.h" 2687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include "AAudioServiceEndpointCapture.h" 2787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include "AAudioServiceEndpointPlay.h" 28c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 29c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burknamespace aaudio { 30c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 31c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkclass AAudioEndpointManager : public android::Singleton<AAudioEndpointManager>{ 32c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkpublic: 33c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk AAudioEndpointManager(); 34c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk ~AAudioEndpointManager() = default; 35c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 36c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk /** 37c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Find a service endpoint for the given deviceId and direction. 38c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * If an endpoint does not already exist then it will try to create one. 39c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 40c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * @param deviceId 41c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * @param direction 42c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * @return endpoint or nullptr 43c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 4471f35bb687476694882a617ba4a810a0bb56fe23Phil Burk AAudioServiceEndpoint *openEndpoint(android::AAudioService &audioService, 45c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk int32_t deviceId, 46c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk aaudio_direction_t direction); 47c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 4871f35bb687476694882a617ba4a810a0bb56fe23Phil Burk void closeEndpoint(AAudioServiceEndpoint *serviceEndpoint); 49c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 50c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkprivate: 51c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 52c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk std::mutex mLock; 53c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 5487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk std::map<int32_t, AAudioServiceEndpointCapture *> mInputs; 5587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk std::map<int32_t, AAudioServiceEndpointPlay *> mOutputs; 56c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 57c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk}; 58c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 59c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk} /* namespace aaudio */ 60c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 61c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#endif //AAUDIO_AAUDIO_ENDPOINT_MANAGER_H 62