PatchPanel.h revision 83b8808faad1e91690c64d7007348be8d9ebde73
11c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent/* 21c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** 31c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** Copyright 2014, The Android Open Source Project 41c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** 51c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** Licensed under the Apache License, Version 2.0 (the "License"); 61c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** you may not use this file except in compliance with the License. 71c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** You may obtain a copy of the License at 81c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** 91c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** http://www.apache.org/licenses/LICENSE-2.0 101c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** 111c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** Unless required by applicable law or agreed to in writing, software 121c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** distributed under the License is distributed on an "AS IS" BASIS, 131c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 141c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** See the License for the specific language governing permissions and 151c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent** limitations under the License. 161c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent*/ 171c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 181c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent#ifndef INCLUDING_FROM_AUDIOFLINGER_H 191c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent #error This header file should only be included from AudioFlinger.h 201c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent#endif 211c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 221c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurentclass PatchPanel : public RefBase { 231c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurentpublic: 2483b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent 2583b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent class Patch; 2683b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent 271c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent PatchPanel(const sp<AudioFlinger>& audioFlinger); 281c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent virtual ~PatchPanel(); 291c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 301c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent /* List connected audio ports and their attributes */ 311c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent status_t listAudioPorts(unsigned int *num_ports, 321c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent struct audio_port *ports); 331c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 341c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent /* Get supported attributes for a given audio port */ 351c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent status_t getAudioPort(struct audio_port *port); 361c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 371c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent /* Create a patch between several source and sink ports */ 381c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent status_t createAudioPatch(const struct audio_patch *patch, 391c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent audio_patch_handle_t *handle); 401c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 411c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent /* Release a patch */ 421c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent status_t releaseAudioPatch(audio_patch_handle_t handle); 431c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 441c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent /* List connected audio devices and they attributes */ 451c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent status_t listAudioPatches(unsigned int *num_patches, 461c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent struct audio_patch *patches); 471c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 481c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent /* Set audio port configuration */ 491c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent status_t setAudioPortConfig(const struct audio_port_config *config); 501c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 5183b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent status_t createPatchConnections(Patch *patch, 5283b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent const struct audio_patch *audioPatch); 5383b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent void clearPatchConnections(Patch *patch); 5483b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent 551c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent class Patch { 561c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent public: 571c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent Patch(const struct audio_patch *patch) : 5883b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent mAudioPatch(*patch), mHandle(AUDIO_PATCH_HANDLE_NONE), 5983b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent mHalHandle(AUDIO_PATCH_HANDLE_NONE), mRecordPatchHandle(AUDIO_PATCH_HANDLE_NONE), 6083b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent mPlaybackPatchHandle(AUDIO_PATCH_HANDLE_NONE) {} 6183b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent ~Patch() {} 6283b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent 6383b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent struct audio_patch mAudioPatch; 6483b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent audio_patch_handle_t mHandle; 6583b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent audio_patch_handle_t mHalHandle; 6683b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent sp<PlaybackThread> mPlaybackThread; 6783b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent sp<PlaybackThread::PatchTrack> mPatchTrack; 6883b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent sp<RecordThread> mRecordThread; 6983b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent sp<RecordThread::PatchRecord> mPatchRecord; 7083b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent audio_patch_handle_t mRecordPatchHandle; 7183b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent audio_patch_handle_t mPlaybackPatchHandle; 721c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent 731c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent }; 7483b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent 751c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurentprivate: 7683b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent const wp<AudioFlinger> mAudioFlinger; 7783b8808faad1e91690c64d7007348be8d9ebde73Eric Laurent SortedVector <Patch *> mPatches; 781c333e252cbca3337c1bedbc57a005f3b7d23fdbEric Laurent}; 79