Merge "AudioFormat: Make member variables final for immutable class"
This commit is contained in:
@@ -669,13 +669,6 @@ public final class AudioFormat implements Parcelable {
|
||||
throw new UnsupportedOperationException("There is no valid usage of this constructor");
|
||||
}
|
||||
|
||||
/**
|
||||
* Private constructor with an ignored argument to differentiate from the removed default ctor
|
||||
* @param ignoredArgument
|
||||
*/
|
||||
private AudioFormat(int ignoredArgument) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor used by the JNI. Parameters are not checked for validity.
|
||||
*/
|
||||
@@ -683,14 +676,37 @@ public final class AudioFormat implements Parcelable {
|
||||
// constructor
|
||||
@UnsupportedAppUsage
|
||||
private AudioFormat(int encoding, int sampleRate, int channelMask, int channelIndexMask) {
|
||||
mEncoding = encoding;
|
||||
mSampleRate = sampleRate;
|
||||
mChannelMask = channelMask;
|
||||
mChannelIndexMask = channelIndexMask;
|
||||
mPropertySetMask = AUDIO_FORMAT_HAS_PROPERTY_ENCODING |
|
||||
AUDIO_FORMAT_HAS_PROPERTY_SAMPLE_RATE |
|
||||
AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_MASK |
|
||||
AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_INDEX_MASK;
|
||||
this(
|
||||
AUDIO_FORMAT_HAS_PROPERTY_ENCODING
|
||||
| AUDIO_FORMAT_HAS_PROPERTY_SAMPLE_RATE
|
||||
| AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_MASK
|
||||
| AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_INDEX_MASK,
|
||||
encoding, sampleRate, channelMask, channelIndexMask
|
||||
);
|
||||
}
|
||||
|
||||
private AudioFormat(int propertySetMask,
|
||||
int encoding, int sampleRate, int channelMask, int channelIndexMask) {
|
||||
mPropertySetMask = propertySetMask;
|
||||
mEncoding = (propertySetMask & AUDIO_FORMAT_HAS_PROPERTY_ENCODING) != 0
|
||||
? encoding : ENCODING_INVALID;
|
||||
mSampleRate = (propertySetMask & AUDIO_FORMAT_HAS_PROPERTY_SAMPLE_RATE) != 0
|
||||
? sampleRate : SAMPLE_RATE_UNSPECIFIED;
|
||||
mChannelMask = (propertySetMask & AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_MASK) != 0
|
||||
? channelMask : CHANNEL_INVALID;
|
||||
mChannelIndexMask = (propertySetMask & AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_INDEX_MASK) != 0
|
||||
? channelIndexMask : CHANNEL_INVALID;
|
||||
|
||||
// Compute derived values.
|
||||
|
||||
final int channelIndexCount = Integer.bitCount(getChannelIndexMask());
|
||||
int channelCount = channelCountFromOutChannelMask(getChannelMask());
|
||||
if (channelCount == 0) {
|
||||
channelCount = channelIndexCount;
|
||||
} else if (channelCount != channelIndexCount && channelIndexCount != 0) {
|
||||
channelCount = 0; // position and index channel count mismatch
|
||||
}
|
||||
mChannelCount = channelCount;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@@ -704,14 +720,20 @@ public final class AudioFormat implements Parcelable {
|
||||
/** @hide */
|
||||
public final static int AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_INDEX_MASK = 0x1 << 3;
|
||||
|
||||
// This is an immutable class, all member variables are final.
|
||||
|
||||
// Essential values.
|
||||
@UnsupportedAppUsage
|
||||
private int mEncoding;
|
||||
private final int mEncoding;
|
||||
@UnsupportedAppUsage
|
||||
private int mSampleRate;
|
||||
private final int mSampleRate;
|
||||
@UnsupportedAppUsage
|
||||
private int mChannelMask;
|
||||
private int mChannelIndexMask;
|
||||
private int mPropertySetMask;
|
||||
private final int mChannelMask;
|
||||
private final int mChannelIndexMask;
|
||||
private final int mPropertySetMask;
|
||||
|
||||
// Derived values computed in the constructor, cached here.
|
||||
private final int mChannelCount;
|
||||
|
||||
/**
|
||||
* Return the encoding.
|
||||
@@ -721,9 +743,6 @@ public final class AudioFormat implements Parcelable {
|
||||
* {@link AudioFormat#ENCODING_INVALID} if not set.
|
||||
*/
|
||||
public int getEncoding() {
|
||||
if ((mPropertySetMask & AUDIO_FORMAT_HAS_PROPERTY_ENCODING) == 0) {
|
||||
return ENCODING_INVALID;
|
||||
}
|
||||
return mEncoding;
|
||||
}
|
||||
|
||||
@@ -745,9 +764,6 @@ public final class AudioFormat implements Parcelable {
|
||||
* {@link AudioFormat#CHANNEL_INVALID} if not set.
|
||||
*/
|
||||
public int getChannelMask() {
|
||||
if ((mPropertySetMask & AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_MASK) == 0) {
|
||||
return CHANNEL_INVALID;
|
||||
}
|
||||
return mChannelMask;
|
||||
}
|
||||
|
||||
@@ -760,9 +776,6 @@ public final class AudioFormat implements Parcelable {
|
||||
* {@link AudioFormat#CHANNEL_INVALID} if not set or an invalid mask was used.
|
||||
*/
|
||||
public int getChannelIndexMask() {
|
||||
if ((mPropertySetMask & AUDIO_FORMAT_HAS_PROPERTY_CHANNEL_INDEX_MASK) == 0) {
|
||||
return CHANNEL_INVALID;
|
||||
}
|
||||
return mChannelIndexMask;
|
||||
}
|
||||
|
||||
@@ -772,14 +785,7 @@ public final class AudioFormat implements Parcelable {
|
||||
* Zero is returned if both the channel position mask and the channel index mask are not set.
|
||||
*/
|
||||
public int getChannelCount() {
|
||||
final int channelIndexCount = Integer.bitCount(getChannelIndexMask());
|
||||
int channelCount = channelCountFromOutChannelMask(getChannelMask());
|
||||
if (channelCount == 0) {
|
||||
channelCount = channelIndexCount;
|
||||
} else if (channelCount != channelIndexCount && channelIndexCount != 0) {
|
||||
channelCount = 0; // position and index channel count mismatch
|
||||
}
|
||||
return channelCount;
|
||||
return mChannelCount;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@@ -790,7 +796,7 @@ public final class AudioFormat implements Parcelable {
|
||||
/** @hide */
|
||||
public String toLogFriendlyString() {
|
||||
return String.format("%dch %dHz %s",
|
||||
getChannelCount(), mSampleRate, toLogFriendlyEncoding(mEncoding));
|
||||
mChannelCount, mSampleRate, toLogFriendlyEncoding(mEncoding));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -839,14 +845,13 @@ public final class AudioFormat implements Parcelable {
|
||||
* @return a new {@link AudioFormat} object
|
||||
*/
|
||||
public AudioFormat build() {
|
||||
AudioFormat af = new AudioFormat(1980/*ignored*/);
|
||||
af.mEncoding = mEncoding;
|
||||
// not calling setSampleRate is equivalent to calling
|
||||
// setSampleRate(SAMPLE_RATE_UNSPECIFIED)
|
||||
af.mSampleRate = mSampleRate;
|
||||
af.mChannelMask = mChannelMask;
|
||||
af.mChannelIndexMask = mChannelIndexMask;
|
||||
af.mPropertySetMask = mPropertySetMask;
|
||||
AudioFormat af = new AudioFormat(
|
||||
mPropertySetMask,
|
||||
mEncoding,
|
||||
mSampleRate,
|
||||
mChannelMask,
|
||||
mChannelIndexMask
|
||||
);
|
||||
return af;
|
||||
}
|
||||
|
||||
@@ -1049,11 +1054,13 @@ public final class AudioFormat implements Parcelable {
|
||||
}
|
||||
|
||||
private AudioFormat(Parcel in) {
|
||||
mPropertySetMask = in.readInt();
|
||||
mEncoding = in.readInt();
|
||||
mSampleRate = in.readInt();
|
||||
mChannelMask = in.readInt();
|
||||
mChannelIndexMask = in.readInt();
|
||||
this(
|
||||
in.readInt(), // propertySetMask
|
||||
in.readInt(), // encoding
|
||||
in.readInt(), // sampleRate
|
||||
in.readInt(), // channelMask
|
||||
in.readInt() // channelIndexMask
|
||||
);
|
||||
}
|
||||
|
||||
public static final Parcelable.Creator<AudioFormat> CREATOR =
|
||||
|
||||
Reference in New Issue
Block a user