AAudioServiceInterface.h revision c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fb
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_BINDING_AAUDIO_SERVICE_INTERFACE_H 18c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#define AAUDIO_BINDING_AAUDIO_SERVICE_INTERFACE_H 19c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 20c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AAudioServiceDefinitions.h" 21c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AAudioStreamRequest.h" 22c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AAudioStreamConfiguration.h" 23c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AudioEndpointParcelable.h" 24c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 25c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk/** 26c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * This has the same methods as IAAudioService but without the Binder features. 27c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * 28c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * It allows us to abstract the Binder interface and use an AudioStreamInternal 29c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * both in the client and in the service. 30c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 31c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burknamespace aaudio { 32c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 33c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkclass AAudioServiceInterface { 34c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkpublic: 35c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 36c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk AAudioServiceInterface() {}; 37c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual ~AAudioServiceInterface() = default; 38c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 39c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk /** 40c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * @param request info needed to create the stream 41c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * @param configuration contains information about the created stream 42c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * @return handle to the stream or a negative error 43c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 44c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_handle_t openStream(const AAudioStreamRequest &request, 45c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk AAudioStreamConfiguration &configuration) = 0; 46c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 47c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t closeStream(aaudio_handle_t streamHandle) = 0; 48c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 49c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk /* Get an immutable description of the in-memory queues 50c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * used to communicate with the underlying HAL or Service. 51c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 52c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t getStreamDescription(aaudio_handle_t streamHandle, 53c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk AudioEndpointParcelable &parcelable) = 0; 54c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 55c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk /** 56c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Start the flow of data. 57c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 58c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t startStream(aaudio_handle_t streamHandle) = 0; 59c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 60c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk /** 61c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Stop the flow of data such that start() can resume without loss of data. 62c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 63c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t pauseStream(aaudio_handle_t streamHandle) = 0; 64c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 65c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk /** 66c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Discard any data held by the underlying HAL or Service. 67c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 68c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t flushStream(aaudio_handle_t streamHandle) = 0; 69c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 70c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk /** 71c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk * Manage the specified thread as a low latency audio thread. 72c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk */ 73c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t registerAudioThread(aaudio_handle_t streamHandle, 74c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientProcessId, 75c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientThreadId, 76c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk int64_t periodNanoseconds) = 0; 77c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 78c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk virtual aaudio_result_t unregisterAudioThread(aaudio_handle_t streamHandle, 79c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientProcessId, 80c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk pid_t clientThreadId) = 0; 81c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk}; 82c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 83c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk} /* namespace aaudio */ 84c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 85c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#endif //AAUDIO_BINDING_AAUDIO_SERVICE_INTERFACE_H 86