AAudioServiceStreamBase.h revision 5ed503c7a66c90f93759c90237a9b432dbd93f9f
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 AAUDIO_AAUDIO_SERVICE_STREAM_BASE_H 18#define AAUDIO_AAUDIO_SERVICE_STREAM_BASE_H 19 20#include <utils/Mutex.h> 21 22#include "IAAudioService.h" 23#include "AAudioServiceDefinitions.h" 24#include "fifo/FifoBuffer.h" 25#include "SharedRingBuffer.h" 26#include "AudioEndpointParcelable.h" 27#include "AAudioThread.h" 28 29namespace aaudio { 30 31// We expect the queue to only have a few commands. 32// This should be way more than we need. 33#define QUEUE_UP_CAPACITY_COMMANDS (128) 34 35class AAudioServiceStreamBase { 36 37public: 38 AAudioServiceStreamBase(); 39 virtual ~AAudioServiceStreamBase(); 40 41 enum { 42 ILLEGAL_THREAD_ID = 0 43 }; 44 45 /** 46 * Fill in a parcelable description of stream. 47 */ 48 virtual aaudio_result_t getDescription(aaudio::AudioEndpointParcelable &parcelable) = 0; 49 50 /** 51 * Open the device. 52 */ 53 virtual aaudio_result_t open(aaudio::AAudioStreamRequest &request, 54 aaudio::AAudioStreamConfiguration &configuration) = 0; 55 56 /** 57 * Start the flow of data. 58 */ 59 virtual aaudio_result_t start() = 0; 60 61 /** 62 * Stop the flow of data such that start() can resume with loss of data. 63 */ 64 virtual aaudio_result_t pause() = 0; 65 66 /** 67 * Discard any data held by the underlying HAL or Service. 68 */ 69 virtual aaudio_result_t flush() = 0; 70 71 virtual aaudio_result_t close() = 0; 72 73 virtual void sendCurrentTimestamp() = 0; 74 75 aaudio_size_frames_t getFramesPerBurst() { 76 return mFramesPerBurst; 77 } 78 79 virtual void sendServiceEvent(aaudio_service_event_t event, 80 int32_t data1 = 0, 81 int64_t data2 = 0); 82 83 virtual void setRegisteredThread(pid_t pid) { 84 mRegisteredClientThread = pid; 85 } 86 87 virtual pid_t getRegisteredThread() { 88 return mRegisteredClientThread; 89 } 90 91protected: 92 93 pid_t mRegisteredClientThread = ILLEGAL_THREAD_ID; 94 95 SharedRingBuffer * mUpMessageQueue; 96 97 aaudio_sample_rate_t mSampleRate = 0; 98 aaudio_size_bytes_t mBytesPerFrame = 0; 99 aaudio_size_frames_t mFramesPerBurst = 0; 100 aaudio_size_frames_t mCapacityInFrames = 0; 101 aaudio_size_bytes_t mCapacityInBytes = 0; 102 103 android::Mutex mLockUpMessageQueue; 104}; 105 106} /* namespace aaudio */ 107 108#endif //AAUDIO_AAUDIO_SERVICE_STREAM_BASE_H 109