187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk/* 287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * Copyright (C) 2017 The Android Open Source Project 387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * 487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * Licensed under the Apache License, Version 2.0 (the "License"); 587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * you may not use this file except in compliance with the License. 687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * You may obtain a copy of the License at 787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * 887c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * http://www.apache.org/licenses/LICENSE-2.0 987c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * 1087c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * Unless required by applicable law or agreed to in writing, software 1187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * distributed under the License is distributed on an "AS IS" BASIS, 1287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * See the License for the specific language governing permissions and 1487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * limitations under the License. 1587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk */ 1687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#ifndef ANDROID_AAUDIO_AUDIO_STREAM_INTERNAL_CAPTURE_H 1787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#define ANDROID_AAUDIO_AUDIO_STREAM_INTERNAL_CAPTURE_H 1887c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 1987c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include <stdint.h> 2087c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include <aaudio/AAudio.h> 2187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 2287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include "binding/AAudioServiceInterface.h" 2387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#include "client/AudioStreamInternal.h" 2487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 2587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burkusing android::sp; 2687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burkusing android::IAAudioService; 2787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 2887c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burknamespace aaudio { 2987c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 3087c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burkclass AudioStreamInternalCapture : public AudioStreamInternal { 3187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burkpublic: 3287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk AudioStreamInternalCapture(AAudioServiceInterface &serviceInterface, bool inService = false); 3387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk virtual ~AudioStreamInternalCapture(); 3487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 3587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk aaudio_result_t read(void *buffer, 3687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int32_t numFrames, 3787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int64_t timeoutNanoseconds) override; 3887c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 3987c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int64_t getFramesRead() override; 4087c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int64_t getFramesWritten() override; 4187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 4287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk void *callbackLoop() override; 4387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 4487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk aaudio_direction_t getDirection() const override { 4587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk return AAUDIO_DIRECTION_INPUT; 4687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk } 4787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burkprotected: 4887c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 4987c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk/** 5087c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * Low level data processing that will not block. It will just read or write as much as it can. 5187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * 5287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * It passes back a recommended time to wake up if wakeTimePtr is not NULL. 5387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * 5487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * @return the number of frames processed or a negative error code. 5587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk */ 5687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk aaudio_result_t processDataNow(void *buffer, 5787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int32_t numFrames, 5887c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int64_t currentTimeNanos, 5987c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int64_t *wakeTimePtr) override; 6087c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 6187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burkprivate: 6287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk /* 6387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * Asynchronous read with data conversion. 6487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * @param buffer 6587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * @param numFrames 6687c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk * @return frames written or negative error 6787c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk */ 6887c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk aaudio_result_t readNowWithConversion(void *buffer, int32_t numFrames); 6987c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 7087c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk int64_t mLastFramesWritten = 0; // used to prevent retrograde motion 7187c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk}; 7287c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 7387c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk} /* namespace aaudio */ 7487c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk 7587c9f646a94259d7c321c3b3d5947fa1778f5ac2Phil Burk#endif //ANDROID_AAUDIO_AUDIO_STREAM_INTERNAL_CAPTURE_H 76