1f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten/* 2f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * Copyright (C) 2014 The Android Open Source Project 3f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * 4f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License"); 5f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * you may not use this file except in compliance with the License. 6f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * You may obtain a copy of the License at 7f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * 8f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * http://www.apache.org/licenses/LICENSE-2.0 9f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * 10f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * Unless required by applicable law or agreed to in writing, software 11f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS, 12f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * See the License for the specific language governing permissions and 14f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten * limitations under the License. 15f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten */ 16f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 17f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#ifndef ANDROID_AUDIO_FAST_CAPTURE_H 18f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#define ANDROID_AUDIO_FAST_CAPTURE_H 19f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 20f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#include "FastThread.h" 21f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#include "StateQueue.h" 22f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#include "FastCaptureState.h" 2304333cdc8d6a3c8e4a11835371e8ad13adf3f7f0Glenn Kasten#include "FastCaptureDumpState.h" 24f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 25f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kastennamespace android { 26f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 27f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kastentypedef StateQueue<FastCaptureState> FastCaptureStateQueue; 28f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 29f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kastenclass FastCapture : public FastThread { 30f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 31f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kastenpublic: 32f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten FastCapture(); 33f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual ~FastCapture(); 34f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 35f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten FastCaptureStateQueue* sq(); 36f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 37f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kastenprivate: 38f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten FastCaptureStateQueue mSQ; 39f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 40f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten // callouts 41f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual const FastThreadState *poll(); 42f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual void setLog(NBLog::Writer *logWriter); 43f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual void onIdle(); 44f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual void onExit(); 45f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual bool isSubClassCommand(FastThreadState::Command command); 46f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual void onStateChange(); 47f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten virtual void onWork(); 48f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 49e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten static const FastCaptureState sInitial; 50e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten 51e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten FastCaptureState mPreIdle; // copy of state before we went into idle 52f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten // FIXME by renaming, could pull up many of these to FastThread 53e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten NBAIO_Source* mInputSource; 54e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten int mInputSourceGen; 55e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten NBAIO_Sink* mPipeSink; 56e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten int mPipeSinkGen; 575115777127bb4d2d50833537e09054dcdffdfc76Glenn Kasten void* mReadBuffer; 58e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten ssize_t mReadBufferState; // number of initialized frames in readBuffer, 59e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten // or -1 to clear 60e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten NBAIO_Format mFormat; 61e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten unsigned mSampleRate; 62e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten FastCaptureDumpState mDummyFastCaptureDumpState; 63e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten uint32_t mTotalNativeFramesRead; // copied to dumpState->mFramesRead 64f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 65f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten}; // class FastCapture 66f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 67f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten} // namespace android 68f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 69f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#endif // ANDROID_AUDIO_FAST_CAPTURE_H 70