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