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_STATE_H 18f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#define ANDROID_AUDIO_FAST_CAPTURE_STATE_H 19f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 20f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#include <media/nbaio/NBAIO.h> 21f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#include "FastThreadState.h" 22f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#include <private/media/AudioTrackShared.h> 23f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 24f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kastennamespace android { 25f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 26f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten// Represent a single state of the fast capture 27f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kastenstruct FastCaptureState : FastThreadState { 28f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten FastCaptureState(); 29f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten /*virtual*/ ~FastCaptureState(); 30f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 31f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten // all pointer fields use raw pointers; objects are owned and ref-counted by RecordThread 32e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten NBAIO_Source* mInputSource; // HAL input device, must already be negotiated 33f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten // FIXME by renaming, could pull up these fields to FastThreadState 34f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten int mInputSourceGen; // increment when mInputSource is assigned 35e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten NBAIO_Sink* mPipeSink; // after reading from input source, write to this pipe sink 36f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten int mPipeSinkGen; // increment when mPipeSink is assigned 37f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten size_t mFrameCount; // number of frames per fast capture buffer 38e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten audio_track_cblk_t* mCblk; // control block for the single fast client, or NULL 39f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 40f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten // Extends FastThreadState::Command 41f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten static const Command 42f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten // The following commands also process configuration changes, and can be "or"ed: 43e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten READ = 0x8, // read from input source 44e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten WRITE = 0x10, // write to pipe sink 45e4a7ce250cb94a00aa2f76e5edca1c4479dc5401Glenn Kasten READ_WRITE = 0x18; // read from input source and write to pipe sink 46f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 47d702a568cb62e5aebe048147350bb3c76f9386baGlenn Kasten // never returns NULL; asserts if command is invalid 48d702a568cb62e5aebe048147350bb3c76f9386baGlenn Kasten static const char *commandToString(Command command); 49f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten}; // struct FastCaptureState 50f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 51f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten} // namespace android 52f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten 53f91df1b368a140abd37c80b204bd48d78778cc43Glenn Kasten#endif // ANDROID_AUDIO_FAST_CAPTURE_STATE_H 54