1599c758b258cc5da0dba9b530425381facc37d77Eric Laurent/* 2599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * Copyright (C) 2015 The Android Open Source Project 3599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * 4599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * Licensed under the Apache License, Version 2.0 (the "License"); 5599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * you may not use this file except in compliance with the License. 6599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * You may obtain a copy of the License at 7599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * 8599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * http://www.apache.org/licenses/LICENSE-2.0 9599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * 10599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * Unless required by applicable law or agreed to in writing, software 11599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * distributed under the License is distributed on an "AS IS" BASIS, 12599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * See the License for the specific language governing permissions and 14599c758b258cc5da0dba9b530425381facc37d77Eric Laurent * limitations under the License. 15599c758b258cc5da0dba9b530425381facc37d77Eric Laurent */ 16599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 17599c758b258cc5da0dba9b530425381facc37d77Eric Laurent#pragma once 18599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 19599c758b258cc5da0dba9b530425381facc37d77Eric Laurent#include <system/audio.h> 20599c758b258cc5da0dba9b530425381facc37d77Eric Laurent#include <utils/Errors.h> 21599c758b258cc5da0dba9b530425381facc37d77Eric Laurent#include <utils/RefBase.h> 22599c758b258cc5da0dba9b530425381facc37d77Eric Laurent#include <utils/Errors.h> 23599c758b258cc5da0dba9b530425381facc37d77Eric Laurent#include <utils/KeyedVector.h> 242f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi#include <media/AudioPolicy.h> 258c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi#include "AudioSessionInfoProvider.h" 26599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 27599c758b258cc5da0dba9b530425381facc37d77Eric Laurentnamespace android { 28599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 292f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Triviclass AudioPolicyClientInterface; 302f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi 318c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Triviclass AudioSession : public RefBase, public AudioSessionInfoUpdateListener 32599c758b258cc5da0dba9b530425381facc37d77Eric Laurent{ 33599c758b258cc5da0dba9b530425381facc37d77Eric Laurentpublic: 34599c758b258cc5da0dba9b530425381facc37d77Eric Laurent AudioSession(audio_session_t session, 35599c758b258cc5da0dba9b530425381facc37d77Eric Laurent audio_source_t inputSource, 36599c758b258cc5da0dba9b530425381facc37d77Eric Laurent audio_format_t format, 37599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t sampleRate, 38599c758b258cc5da0dba9b530425381facc37d77Eric Laurent audio_channel_mask_t channelMask, 39599c758b258cc5da0dba9b530425381facc37d77Eric Laurent audio_input_flags_t flags, 40599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uid_t uid, 412f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi bool isSoundTrigger, 422f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi AudioMix* policyMix, 432f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi AudioPolicyClientInterface *clientInterface); 44599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 45599c758b258cc5da0dba9b530425381facc37d77Eric Laurent status_t dump(int fd, int spaces, int index) const; 46599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 47599c758b258cc5da0dba9b530425381facc37d77Eric Laurent audio_session_t session() const { return mSession; } 48599c758b258cc5da0dba9b530425381facc37d77Eric Laurent audio_source_t inputSource()const { return mInputSource; } 497281aa9810b33eff47b00104db26c97c77931611Jean-Michel Trivi audio_format_t format() const { return mConfig.format; } 507281aa9810b33eff47b00104db26c97c77931611Jean-Michel Trivi uint32_t sampleRate() const { return mConfig.sample_rate; } 517281aa9810b33eff47b00104db26c97c77931611Jean-Michel Trivi audio_channel_mask_t channelMask() const { return mConfig.channel_mask; } 52599c758b258cc5da0dba9b530425381facc37d77Eric Laurent audio_input_flags_t flags() const { return mFlags; } 53599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uid_t uid() const { return mUid; } 54599c758b258cc5da0dba9b530425381facc37d77Eric Laurent bool matches(const sp<AudioSession> &other) const; 55599c758b258cc5da0dba9b530425381facc37d77Eric Laurent bool isSoundTrigger() const { return mIsSoundTrigger; } 56599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t openCount() const { return mOpenCount; } ; 57599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t activeCount() const { return mActiveCount; } ; 58599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 59599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t changeOpenCount(int delta); 60599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t changeActiveCount(int delta); 61599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 628c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi void setInfoProvider(AudioSessionInfoProvider *provider); 638c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi // implementation of AudioSessionInfoUpdateListener 648c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi virtual void onSessionInfoUpdate() const; 657281aa9810b33eff47b00104db26c97c77931611Jean-Michel Trivi 66599c758b258cc5da0dba9b530425381facc37d77Eric Laurentprivate: 67599c758b258cc5da0dba9b530425381facc37d77Eric Laurent const audio_session_t mSession; 68599c758b258cc5da0dba9b530425381facc37d77Eric Laurent const audio_source_t mInputSource; 697281aa9810b33eff47b00104db26c97c77931611Jean-Michel Trivi const struct audio_config_base mConfig; 70599c758b258cc5da0dba9b530425381facc37d77Eric Laurent const audio_input_flags_t mFlags; 71599c758b258cc5da0dba9b530425381facc37d77Eric Laurent const uid_t mUid; 72599c758b258cc5da0dba9b530425381facc37d77Eric Laurent bool mIsSoundTrigger; 73599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t mOpenCount; 74599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t mActiveCount; 752f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi AudioMix* mPolicyMix; // non NULL when used by a dynamic policy 762f4fe9f7df8f22c6bc8745407d19df73128810ecJean-Michel Trivi AudioPolicyClientInterface* mClientInterface; 778c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi const AudioSessionInfoProvider* mInfoProvider; 78599c758b258cc5da0dba9b530425381facc37d77Eric Laurent}; 79599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 80599c758b258cc5da0dba9b530425381facc37d77Eric Laurentclass AudioSessionCollection : 818c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi public DefaultKeyedVector<audio_session_t, sp<AudioSession> >, 828c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi public AudioSessionInfoUpdateListener 83599c758b258cc5da0dba9b530425381facc37d77Eric Laurent{ 84599c758b258cc5da0dba9b530425381facc37d77Eric Laurentpublic: 85599c758b258cc5da0dba9b530425381facc37d77Eric Laurent status_t addSession(audio_session_t session, 868c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi const sp<AudioSession>& audioSession, 878c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi AudioSessionInfoProvider *provider); 88599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 89599c758b258cc5da0dba9b530425381facc37d77Eric Laurent status_t removeSession(audio_session_t session); 90599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 91599c758b258cc5da0dba9b530425381facc37d77Eric Laurent uint32_t getOpenCount() const; 92599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 93599c758b258cc5da0dba9b530425381facc37d77Eric Laurent AudioSessionCollection getActiveSessions() const; 94599c758b258cc5da0dba9b530425381facc37d77Eric Laurent bool hasActiveSession() const; 95599c758b258cc5da0dba9b530425381facc37d77Eric Laurent bool isSourceActive(audio_source_t source) const; 96599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 978c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi // implementation of AudioSessionInfoUpdateListener 988c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi virtual void onSessionInfoUpdate() const; 998c7cf3b7d0d7bccb9affbc34ae2ab2d6b332f972Jean-Michel Trivi 100599c758b258cc5da0dba9b530425381facc37d77Eric Laurent status_t dump(int fd, int spaces) const; 101599c758b258cc5da0dba9b530425381facc37d77Eric Laurent}; 102599c758b258cc5da0dba9b530425381facc37d77Eric Laurent 103599c758b258cc5da0dba9b530425381facc37d77Eric Laurent}; // namespace android 104