AudioEndpoint.h revision c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fb
1204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk/* 2204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Copyright (C) 2016 The Android Open Source Project 3204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 4204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 5204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * you may not use this file except in compliance with the License. 6204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * You may obtain a copy of the License at 7204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 8204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * http://www.apache.org/licenses/LICENSE-2.0 9204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 10204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Unless required by applicable law or agreed to in writing, software 11204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * distributed under the License is distributed on an "AS IS" BASIS, 12204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * See the License for the specific language governing permissions and 14204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * limitations under the License. 15204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 16204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 175ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#ifndef AAUDIO_AUDIO_ENDPOINT_H 185ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#define AAUDIO_AUDIO_ENDPOINT_H 19204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 205ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include <aaudio/AAudio.h> 21204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 22c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AAudioServiceMessage.h" 23c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#include "binding/AudioEndpointParcelable.h" 24204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include "fifo/FifoBuffer.h" 25204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 265ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burknamespace aaudio { 27204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 28c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk#define ENDPOINT_DATA_QUEUE_SIZE_MIN 48 29204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 30204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk/** 31204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * A sink for audio. 32204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Used by the client code. 33204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 34204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkclass AudioEndpoint { 35204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 36204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkpublic: 37204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk AudioEndpoint(); 38204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk virtual ~AudioEndpoint(); 39204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 40204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk /** 41204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Configure based on the EndPointDescriptor_t. 42204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 435ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t configure(const EndpointDescriptor *pEndpointDescriptor); 44204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 45204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk /** 46204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Read from a command passed up from the Server. 47204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * @return 1 if command received, 0 for no command, or negative error. 48204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 495ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t readUpCommand(AAudioServiceMessage *commandPtr); 50204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 51204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk /** 52204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Non-blocking write. 53204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * @return framesWritten or a negative error code. 54204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 555ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk aaudio_result_t writeDataNow(const void *buffer, int32_t numFrames); 56204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 57c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk void getEmptyRoomAvailable(android::WrappingBuffer *wrappingBuffer); 58c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 59c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk void advanceWriteIndex(int32_t deltaFrames); 60c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk 61204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk /** 62204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Set the read index in the downData queue. 63204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * This is needed if the reader is not updating the index itself. 64204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 65c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk void setDownDataReadCounter(android::fifo_counter_t framesRead); 66c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk android::fifo_counter_t getDownDataReadCounter(); 67204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 68c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk void setDownDataWriteCounter(android::fifo_counter_t framesWritten); 69c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk android::fifo_counter_t getDownDataWriteCounter(); 70204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 71204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk /** 72204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * The result is not valid until after configure() is called. 73204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * 74204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * @return true if the output buffer read position is not updated, eg. DMA 75204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */ 76204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk bool isOutputFreeRunning() const { return mOutputFreeRunning; } 77204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 783316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int32_t setBufferSizeInFrames(int32_t requestedFrames, 793316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int32_t *actualFrames); 803316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int32_t getBufferSizeInFrames() const; 81204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 823316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int32_t getBufferCapacityInFrames() const; 83204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 843316d5e6d375a4f09c681205e9094d30a0bfc4a2Phil Burk int32_t getFullFramesAvailable(); 85204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 86204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkprivate: 87c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk android::FifoBuffer *mUpCommandQueue; 88c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk android::FifoBuffer *mDownDataQueue; 89c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk bool mOutputFreeRunning; 90c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk android::fifo_counter_t mDataReadCounter; // only used if free-running 91c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk android::fifo_counter_t mDataWriteCounter; // only used if free-running 92204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk}; 93204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 945ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk} // namespace aaudio 95204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk 965ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#endif //AAUDIO_AUDIO_ENDPOINT_H 97