/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_AUDIO_IO_DESCRIPTOR_H #define ANDROID_AUDIO_IO_DESCRIPTOR_H namespace android { enum audio_io_config_event { AUDIO_OUTPUT_OPENED, AUDIO_OUTPUT_CLOSED, AUDIO_OUTPUT_CONFIG_CHANGED, AUDIO_INPUT_OPENED, AUDIO_INPUT_CLOSED, AUDIO_INPUT_CONFIG_CHANGED, }; // audio input/output descriptor used to cache output configurations in client process to avoid // frequent calls through IAudioFlinger class AudioIoDescriptor : public RefBase { public: AudioIoDescriptor() : mIoHandle(AUDIO_IO_HANDLE_NONE), mSamplingRate(0), mFormat(AUDIO_FORMAT_DEFAULT), mChannelMask(AUDIO_CHANNEL_NONE), mFrameCount(0), mFrameCountHAL(0), mLatency(0) { memset(&mPatch, 0, sizeof(struct audio_patch)); } virtual ~AudioIoDescriptor() {} audio_port_handle_t getDeviceId() { if (mPatch.num_sources != 0 && mPatch.num_sinks != 0) { if (mPatch.sources[0].type == AUDIO_PORT_TYPE_MIX) { // this is an output mix // FIXME: the API only returns the first device in case of multiple device selection return mPatch.sinks[0].id; } else { // this is an input mix return mPatch.sources[0].id; } } return AUDIO_PORT_HANDLE_NONE; } audio_io_handle_t mIoHandle; struct audio_patch mPatch; uint32_t mSamplingRate; audio_format_t mFormat; audio_channel_mask_t mChannelMask; size_t mFrameCount; size_t mFrameCountHAL; uint32_t mLatency; // only valid for output }; }; // namespace android #endif /*ANDROID_AUDIO_IO_DESCRIPTOR_H*/