1/* 2 * Copyright (C) 2016 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 ANDROID_AAUDIO_IAAUDIO_SERVICE_H 18#define ANDROID_AAUDIO_IAAUDIO_SERVICE_H 19 20#include <stdint.h> 21#include <utils/RefBase.h> 22#include <binder/TextOutput.h> 23#include <binder/IInterface.h> 24 25#include <aaudio/AAudio.h> 26 27#include "binding/AAudioServiceDefinitions.h" 28#include "binding/AudioEndpointParcelable.h" 29#include "binding/AAudioStreamRequest.h" 30#include "binding/AAudioStreamConfiguration.h" 31#include "utility/HandleTracker.h" 32 33namespace android { 34 35#define AAUDIO_SERVICE_NAME "media.aaudio" 36 37// Interface (our AIDL) - Shared by server and client 38class IAAudioService : public IInterface { 39public: 40 41 DECLARE_META_INTERFACE(AAudioService); 42 43 /** 44 * @param request info needed to create the stream 45 * @param configuration contains information about the created stream 46 * @return handle to the stream or a negative error 47 */ 48 virtual aaudio_handle_t openStream(const aaudio::AAudioStreamRequest &request, 49 aaudio::AAudioStreamConfiguration &configurationOutput) = 0; 50 51 virtual aaudio_result_t closeStream(aaudio::aaudio_handle_t streamHandle) = 0; 52 53 /* Get an immutable description of the in-memory queues 54 * used to communicate with the underlying HAL or Service. 55 */ 56 virtual aaudio_result_t getStreamDescription(aaudio::aaudio_handle_t streamHandle, 57 aaudio::AudioEndpointParcelable &parcelable) = 0; 58 59 /** 60 * Start the flow of data. 61 * This is asynchronous. When complete, the service will send a STARTED event. 62 */ 63 virtual aaudio_result_t startStream(aaudio::aaudio_handle_t streamHandle) = 0; 64 65 /** 66 * Stop the flow of data such that start() can resume without loss of data. 67 * This is asynchronous. When complete, the service will send a PAUSED event. 68 */ 69 virtual aaudio_result_t pauseStream(aaudio::aaudio_handle_t streamHandle) = 0; 70 71 /** 72 * Stop the flow of data such that the data currently in the buffer is played. 73 * This is asynchronous. When complete, the service will send a STOPPED event. 74 */ 75 virtual aaudio_result_t stopStream(aaudio::aaudio_handle_t streamHandle) = 0; 76 77 /** 78 * Discard any data held by the underlying HAL or Service. 79 * This is asynchronous. When complete, the service will send a FLUSHED event. 80 */ 81 virtual aaudio_result_t flushStream(aaudio::aaudio_handle_t streamHandle) = 0; 82 83 /** 84 * Manage the specified thread as a low latency audio thread. 85 * TODO Consider passing this information as part of the startStream() call. 86 */ 87 virtual aaudio_result_t registerAudioThread(aaudio_handle_t streamHandle, 88 pid_t clientProcessId, 89 pid_t clientThreadId, 90 int64_t periodNanoseconds) = 0; 91 92 virtual aaudio_result_t unregisterAudioThread(aaudio_handle_t streamHandle, 93 pid_t clientProcessId, 94 pid_t clientThreadId) = 0; 95}; 96 97class BnAAudioService : public BnInterface<IAAudioService> { 98public: 99 virtual status_t onTransact(uint32_t code, const Parcel& data, 100 Parcel* reply, uint32_t flags = 0); 101 102}; 103 104} /* namespace android */ 105 106#endif //ANDROID_AAUDIO_IAAUDIO_SERVICE_H 107