1a198a29250acb7c3e918f1566727190966bb336fEric Laurent/*
2a198a29250acb7c3e918f1566727190966bb336fEric Laurent * Copyright (C) 2014 The Android Open Source Project
3a198a29250acb7c3e918f1566727190966bb336fEric Laurent *
4a198a29250acb7c3e918f1566727190966bb336fEric Laurent * Licensed under the Apache License, Version 2.0 (the "License");
5a198a29250acb7c3e918f1566727190966bb336fEric Laurent * you may not use this file except in compliance with the License.
6a198a29250acb7c3e918f1566727190966bb336fEric Laurent * You may obtain a copy of the License at
7a198a29250acb7c3e918f1566727190966bb336fEric Laurent *
8a198a29250acb7c3e918f1566727190966bb336fEric Laurent *      http://www.apache.org/licenses/LICENSE-2.0
9a198a29250acb7c3e918f1566727190966bb336fEric Laurent *
10a198a29250acb7c3e918f1566727190966bb336fEric Laurent * Unless required by applicable law or agreed to in writing, software
11a198a29250acb7c3e918f1566727190966bb336fEric Laurent * distributed under the License is distributed on an "AS IS" BASIS,
12a198a29250acb7c3e918f1566727190966bb336fEric Laurent * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a198a29250acb7c3e918f1566727190966bb336fEric Laurent * See the License for the specific language governing permissions and
14a198a29250acb7c3e918f1566727190966bb336fEric Laurent * limitations under the License.
15a198a29250acb7c3e918f1566727190966bb336fEric Laurent */
16a198a29250acb7c3e918f1566727190966bb336fEric Laurent
17a198a29250acb7c3e918f1566727190966bb336fEric Laurentpackage android.media;
18a198a29250acb7c3e918f1566727190966bb336fEric Laurent
19a198a29250acb7c3e918f1566727190966bb336fEric Laurent/**
20a198a29250acb7c3e918f1566727190966bb336fEric Laurent * An AudioPortConfig contains a possible configuration of an audio port chosen
21a198a29250acb7c3e918f1566727190966bb336fEric Laurent * among all possible attributes described by an AudioPort.
22a198a29250acb7c3e918f1566727190966bb336fEric Laurent * An AudioPortConfig is created by AudioPort.buildConfiguration().
23a198a29250acb7c3e918f1566727190966bb336fEric Laurent * AudioPorts are used to specify the sources and sinks of a patch created
24a198a29250acb7c3e918f1566727190966bb336fEric Laurent * with AudioManager.connectAudioPatch().
25a198a29250acb7c3e918f1566727190966bb336fEric Laurent * Several specialized versions of AudioPortConfig exist to handle different categories of
26a198a29250acb7c3e918f1566727190966bb336fEric Laurent * audio ports and their specific attributes:
27a198a29250acb7c3e918f1566727190966bb336fEric Laurent * - AudioDevicePortConfig for input (e.g micropohone) and output devices (e.g speaker)
28a198a29250acb7c3e918f1566727190966bb336fEric Laurent * - AudioMixPortConfig for input or output streams of the audio framework.
29a198a29250acb7c3e918f1566727190966bb336fEric Laurent * @hide
30a198a29250acb7c3e918f1566727190966bb336fEric Laurent */
31a198a29250acb7c3e918f1566727190966bb336fEric Laurent
32a198a29250acb7c3e918f1566727190966bb336fEric Laurentpublic class AudioPortConfig {
33a198a29250acb7c3e918f1566727190966bb336fEric Laurent    final AudioPort mPort;
34a198a29250acb7c3e918f1566727190966bb336fEric Laurent    private final int mSamplingRate;
35a198a29250acb7c3e918f1566727190966bb336fEric Laurent    private final int mChannelMask;
36a198a29250acb7c3e918f1566727190966bb336fEric Laurent    private final int mFormat;
37a198a29250acb7c3e918f1566727190966bb336fEric Laurent    private final AudioGainConfig mGain;
38a198a29250acb7c3e918f1566727190966bb336fEric Laurent
39a198a29250acb7c3e918f1566727190966bb336fEric Laurent    // mConfigMask indicates which fields in this configuration should be
40a198a29250acb7c3e918f1566727190966bb336fEric Laurent    // taken into account. Used with AudioSystem.setAudioPortConfig()
41a198a29250acb7c3e918f1566727190966bb336fEric Laurent    // framework use only.
42a198a29250acb7c3e918f1566727190966bb336fEric Laurent    static final int SAMPLE_RATE  = 0x1;
43a198a29250acb7c3e918f1566727190966bb336fEric Laurent    static final int CHANNEL_MASK = 0x2;
44a198a29250acb7c3e918f1566727190966bb336fEric Laurent    static final int FORMAT       = 0x4;
45a198a29250acb7c3e918f1566727190966bb336fEric Laurent    static final int GAIN         = 0x8;
46a198a29250acb7c3e918f1566727190966bb336fEric Laurent    int mConfigMask;
47a198a29250acb7c3e918f1566727190966bb336fEric Laurent
48a198a29250acb7c3e918f1566727190966bb336fEric Laurent    AudioPortConfig(AudioPort port, int samplingRate, int channelMask, int format,
49a198a29250acb7c3e918f1566727190966bb336fEric Laurent            AudioGainConfig gain) {
50a198a29250acb7c3e918f1566727190966bb336fEric Laurent        mPort = port;
51a198a29250acb7c3e918f1566727190966bb336fEric Laurent        mSamplingRate = samplingRate;
52a198a29250acb7c3e918f1566727190966bb336fEric Laurent        mChannelMask = channelMask;
53a198a29250acb7c3e918f1566727190966bb336fEric Laurent        mFormat = format;
54a198a29250acb7c3e918f1566727190966bb336fEric Laurent        mGain = gain;
55a198a29250acb7c3e918f1566727190966bb336fEric Laurent        mConfigMask = 0;
56a198a29250acb7c3e918f1566727190966bb336fEric Laurent    }
57a198a29250acb7c3e918f1566727190966bb336fEric Laurent
58a198a29250acb7c3e918f1566727190966bb336fEric Laurent    /**
59a198a29250acb7c3e918f1566727190966bb336fEric Laurent     * Returns the audio port this AudioPortConfig is issued from.
60a198a29250acb7c3e918f1566727190966bb336fEric Laurent     */
61a198a29250acb7c3e918f1566727190966bb336fEric Laurent    public AudioPort port() {
62a198a29250acb7c3e918f1566727190966bb336fEric Laurent        return mPort;
63a198a29250acb7c3e918f1566727190966bb336fEric Laurent    }
64a198a29250acb7c3e918f1566727190966bb336fEric Laurent
65a198a29250acb7c3e918f1566727190966bb336fEric Laurent    /**
66a198a29250acb7c3e918f1566727190966bb336fEric Laurent     * Sampling rate configured for this AudioPortConfig.
67a198a29250acb7c3e918f1566727190966bb336fEric Laurent     */
68a198a29250acb7c3e918f1566727190966bb336fEric Laurent    public int samplingRate() {
69a198a29250acb7c3e918f1566727190966bb336fEric Laurent        return mSamplingRate;
70a198a29250acb7c3e918f1566727190966bb336fEric Laurent    }
71a198a29250acb7c3e918f1566727190966bb336fEric Laurent
72a198a29250acb7c3e918f1566727190966bb336fEric Laurent    /**
73a198a29250acb7c3e918f1566727190966bb336fEric Laurent     * Channel mask configuration (e.g AudioFormat.CHANNEL_CONFIGURATION_STEREO).
74a198a29250acb7c3e918f1566727190966bb336fEric Laurent     */
75a198a29250acb7c3e918f1566727190966bb336fEric Laurent    public int channelMask() {
76a198a29250acb7c3e918f1566727190966bb336fEric Laurent        return mChannelMask;
77a198a29250acb7c3e918f1566727190966bb336fEric Laurent    }
78a198a29250acb7c3e918f1566727190966bb336fEric Laurent
79a198a29250acb7c3e918f1566727190966bb336fEric Laurent    /**
80a198a29250acb7c3e918f1566727190966bb336fEric Laurent     * Audio format configuration (e.g AudioFormat.ENCODING_PCM_16BIT).
81a198a29250acb7c3e918f1566727190966bb336fEric Laurent     */
82a198a29250acb7c3e918f1566727190966bb336fEric Laurent    public int format() {
83a198a29250acb7c3e918f1566727190966bb336fEric Laurent        return mFormat;
84a198a29250acb7c3e918f1566727190966bb336fEric Laurent    }
85a198a29250acb7c3e918f1566727190966bb336fEric Laurent
86a198a29250acb7c3e918f1566727190966bb336fEric Laurent    /**
87a198a29250acb7c3e918f1566727190966bb336fEric Laurent     * The gain configuration if this port supports gain control, null otherwise
88a198a29250acb7c3e918f1566727190966bb336fEric Laurent     * @see AudioGainConfig.
89a198a29250acb7c3e918f1566727190966bb336fEric Laurent     */
90a198a29250acb7c3e918f1566727190966bb336fEric Laurent    public AudioGainConfig gain() {
91a198a29250acb7c3e918f1566727190966bb336fEric Laurent        return mGain;
92a198a29250acb7c3e918f1566727190966bb336fEric Laurent    }
932754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood
942754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood    @Override
952754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood    public String toString() {
962754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood        return "{mPort:" + mPort
972754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood                + ", mSamplingRate:" + mSamplingRate
982754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood                + ", mChannelMask: " + mChannelMask
992754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood                + ", mFormat:" + mFormat
1002754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood                + ", mGain:" + mGain
1012754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood                + "}";
1022754fd0cd3f055b1d5f7f2ea1470b4d84011b379Mike Lockwood    }
103a198a29250acb7c3e918f1566727190966bb336fEric Laurent}
104