Commit 448ca0cf by olly Committed by Oliver Woodman

Sanitize internal parameter ordering in Format

This is a precursor to merging https://github.com/google/ExoPlayer/pull/5578

PiperOrigin-RevId: 239371046
parent d775b9b4
...@@ -48,7 +48,8 @@ public final class Format implements Parcelable { ...@@ -48,7 +48,8 @@ public final class Format implements Parcelable {
public final @Nullable String id; public final @Nullable String id;
/** The human readable label, or null if unknown or not applicable. */ /** The human readable label, or null if unknown or not applicable. */
public final @Nullable String label; public final @Nullable String label;
/** Track selection flags. */
@C.SelectionFlags public final int selectionFlags;
/** /**
* The average bandwidth in bits per second, or {@link #NO_VALUE} if unknown or not applicable. * The average bandwidth in bits per second, or {@link #NO_VALUE} if unknown or not applicable.
*/ */
...@@ -153,15 +154,8 @@ public final class Format implements Parcelable { ...@@ -153,15 +154,8 @@ public final class Format implements Parcelable {
// Audio and text specific. // Audio and text specific.
/**
* Track selection flags.
*/
@C.SelectionFlags
public final int selectionFlags;
/** The language as ISO 639-2/T three-letter code, or null if unknown or not applicable. */ /** The language as ISO 639-2/T three-letter code, or null if unknown or not applicable. */
public final @Nullable String language; public final @Nullable String language;
/** /**
* The Accessibility channel, or {@link #NO_VALUE} if not known or applicable. * The Accessibility channel, or {@link #NO_VALUE} if not known or applicable.
*/ */
...@@ -213,11 +207,16 @@ public final class Format implements Parcelable { ...@@ -213,11 +207,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
/* metadata= */ null,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
initializationData,
/* drmInitData= */ null,
OFFSET_SAMPLE_RELATIVE,
width, width,
height, height,
frameRate, frameRate,
...@@ -231,13 +230,8 @@ public final class Format implements Parcelable { ...@@ -231,13 +230,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
selectionFlags,
/* language= */ null, /* language= */ null,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
OFFSET_SAMPLE_RELATIVE,
initializationData,
/* drmInitData= */ null,
/* metadata= */ null);
} }
public static Format createVideoSampleFormat( public static Format createVideoSampleFormat(
...@@ -316,11 +310,16 @@ public final class Format implements Parcelable { ...@@ -316,11 +310,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
/* label= */ null, /* label= */ null,
/* selectionFlags= */ 0,
bitrate,
codecs,
/* metadata= */ null,
/* containerMimeType= */ null, /* containerMimeType= */ null,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
OFFSET_SAMPLE_RELATIVE,
width, width,
height, height,
frameRate, frameRate,
...@@ -334,13 +333,8 @@ public final class Format implements Parcelable { ...@@ -334,13 +333,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
/* selectionFlags= */ 0,
/* language= */ null, /* language= */ null,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
OFFSET_SAMPLE_RELATIVE,
initializationData,
drmInitData,
/* metadata= */ null);
} }
// Audio. // Audio.
...@@ -386,11 +380,16 @@ public final class Format implements Parcelable { ...@@ -386,11 +380,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
/* metadata= */ null,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
initializationData,
/* drmInitData= */ null,
OFFSET_SAMPLE_RELATIVE,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -404,13 +403,8 @@ public final class Format implements Parcelable { ...@@ -404,13 +403,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
selectionFlags,
language, language,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
OFFSET_SAMPLE_RELATIVE,
initializationData,
/* drmInitData= */ null,
/* metadata= */ null);
} }
public static Format createAudioSampleFormat( public static Format createAudioSampleFormat(
...@@ -490,11 +484,16 @@ public final class Format implements Parcelable { ...@@ -490,11 +484,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
/* label= */ null, /* label= */ null,
selectionFlags,
bitrate,
codecs,
metadata,
/* containerMimeType= */ null, /* containerMimeType= */ null,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
OFFSET_SAMPLE_RELATIVE,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -508,13 +507,8 @@ public final class Format implements Parcelable { ...@@ -508,13 +507,8 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
OFFSET_SAMPLE_RELATIVE,
initializationData,
drmInitData,
metadata);
} }
// Text. // Text.
...@@ -573,11 +567,16 @@ public final class Format implements Parcelable { ...@@ -573,11 +567,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
/* metadata= */ null,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
/* initializationData= */ null,
/* drmInitData= */ null,
OFFSET_SAMPLE_RELATIVE,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -591,13 +590,8 @@ public final class Format implements Parcelable { ...@@ -591,13 +590,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
OFFSET_SAMPLE_RELATIVE,
/* initializationData= */ null,
/* drmInitData= */ null,
/* metadata= */ null);
} }
public static Format createTextSampleFormat( public static Format createTextSampleFormat(
...@@ -685,11 +679,16 @@ public final class Format implements Parcelable { ...@@ -685,11 +679,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
/* label= */ null, /* label= */ null,
selectionFlags,
bitrate,
codecs,
/* metadata= */ null,
/* containerMimeType= */ null, /* containerMimeType= */ null,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
initializationData,
drmInitData,
subsampleOffsetUs,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -703,13 +702,8 @@ public final class Format implements Parcelable { ...@@ -703,13 +702,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
/* metadata= */ null);
} }
// Image. // Image.
...@@ -726,11 +720,16 @@ public final class Format implements Parcelable { ...@@ -726,11 +720,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
/* label= */ null, /* label= */ null,
selectionFlags,
bitrate,
codecs,
/* metadata=*/ null,
/* containerMimeType= */ null, /* containerMimeType= */ null,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
initializationData,
drmInitData,
OFFSET_SAMPLE_RELATIVE,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -744,13 +743,8 @@ public final class Format implements Parcelable { ...@@ -744,13 +743,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
selectionFlags,
language, language,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
OFFSET_SAMPLE_RELATIVE,
initializationData,
drmInitData,
/* metadata=*/ null);
} }
// Generic. // Generic.
...@@ -787,11 +781,16 @@ public final class Format implements Parcelable { ...@@ -787,11 +781,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
/* metadata= */ null,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
/* initializationData= */ null,
/* drmInitData= */ null,
OFFSET_SAMPLE_RELATIVE,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -805,13 +804,8 @@ public final class Format implements Parcelable { ...@@ -805,13 +804,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
selectionFlags,
language, language,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
OFFSET_SAMPLE_RELATIVE,
/* initializationData= */ null,
/* drmInitData= */ null,
/* metadata= */ null);
} }
public static Format createSampleFormat( public static Format createSampleFormat(
...@@ -819,11 +813,16 @@ public final class Format implements Parcelable { ...@@ -819,11 +813,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
/* label= */ null, /* label= */ null,
/* selectionFlags= */ 0,
/* bitrate= */ NO_VALUE,
/* codecs= */ null,
/* metadata= */ null,
/* containerMimeType= */ null, /* containerMimeType= */ null,
sampleMimeType, sampleMimeType,
/* codecs= */ null,
/* bitrate= */ NO_VALUE,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
/* initializationData= */ null,
/* drmInitData= */ null,
subsampleOffsetUs,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -837,13 +836,8 @@ public final class Format implements Parcelable { ...@@ -837,13 +836,8 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
/* selectionFlags= */ 0,
/* language= */ null, /* language= */ null,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
subsampleOffsetUs,
/* initializationData= */ null,
/* drmInitData= */ null,
/* metadata= */ null);
} }
public static Format createSampleFormat( public static Format createSampleFormat(
...@@ -855,11 +849,16 @@ public final class Format implements Parcelable { ...@@ -855,11 +849,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
/* label= */ null, /* label= */ null,
/* selectionFlags= */ 0,
bitrate,
codecs,
/* metadata= */ null,
/* containerMimeType= */ null, /* containerMimeType= */ null,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
/* maxInputSize= */ NO_VALUE, /* maxInputSize= */ NO_VALUE,
/* initializationData= */ null,
drmInitData,
OFFSET_SAMPLE_RELATIVE,
/* width= */ NO_VALUE, /* width= */ NO_VALUE,
/* height= */ NO_VALUE, /* height= */ NO_VALUE,
/* frameRate= */ NO_VALUE, /* frameRate= */ NO_VALUE,
...@@ -873,23 +872,26 @@ public final class Format implements Parcelable { ...@@ -873,23 +872,26 @@ public final class Format implements Parcelable {
/* pcmEncoding= */ NO_VALUE, /* pcmEncoding= */ NO_VALUE,
/* encoderDelay= */ NO_VALUE, /* encoderDelay= */ NO_VALUE,
/* encoderPadding= */ NO_VALUE, /* encoderPadding= */ NO_VALUE,
/* selectionFlags= */ 0,
/* language= */ null, /* language= */ null,
/* accessibilityChannel= */ NO_VALUE, /* accessibilityChannel= */ NO_VALUE);
OFFSET_SAMPLE_RELATIVE,
/* initializationData= */ null,
drmInitData,
/* metadata= */ null);
} }
/* package */ Format( /* package */ Format(
@Nullable String id, @Nullable String id,
@Nullable String label, @Nullable String label,
@C.SelectionFlags int selectionFlags,
int bitrate,
@Nullable String codecs,
@Nullable Metadata metadata,
// Container specific.
@Nullable String containerMimeType, @Nullable String containerMimeType,
// Elementary stream specific.
@Nullable String sampleMimeType, @Nullable String sampleMimeType,
@Nullable String codecs,
int bitrate,
int maxInputSize, int maxInputSize,
@Nullable List<byte[]> initializationData,
@Nullable DrmInitData drmInitData,
long subsampleOffsetUs,
// Video specific.
int width, int width,
int height, int height,
float frameRate, float frameRate,
...@@ -898,25 +900,31 @@ public final class Format implements Parcelable { ...@@ -898,25 +900,31 @@ public final class Format implements Parcelable {
@Nullable byte[] projectionData, @Nullable byte[] projectionData,
@C.StereoMode int stereoMode, @C.StereoMode int stereoMode,
@Nullable ColorInfo colorInfo, @Nullable ColorInfo colorInfo,
// Audio specific.
int channelCount, int channelCount,
int sampleRate, int sampleRate,
@C.PcmEncoding int pcmEncoding, @C.PcmEncoding int pcmEncoding,
int encoderDelay, int encoderDelay,
int encoderPadding, int encoderPadding,
@C.SelectionFlags int selectionFlags, // Audio and text specific.
@Nullable String language, @Nullable String language,
int accessibilityChannel, int accessibilityChannel) {
long subsampleOffsetUs,
@Nullable List<byte[]> initializationData,
@Nullable DrmInitData drmInitData,
@Nullable Metadata metadata) {
this.id = id; this.id = id;
this.label = label; this.label = label;
this.selectionFlags = selectionFlags;
this.bitrate = bitrate;
this.codecs = codecs;
this.metadata = metadata;
// Container specific.
this.containerMimeType = containerMimeType; this.containerMimeType = containerMimeType;
// Elementary stream specific.
this.sampleMimeType = sampleMimeType; this.sampleMimeType = sampleMimeType;
this.codecs = codecs;
this.bitrate = bitrate;
this.maxInputSize = maxInputSize; this.maxInputSize = maxInputSize;
this.initializationData =
initializationData == null ? Collections.emptyList() : initializationData;
this.drmInitData = drmInitData;
this.subsampleOffsetUs = subsampleOffsetUs;
// Video specific.
this.width = width; this.width = width;
this.height = height; this.height = height;
this.frameRate = frameRate; this.frameRate = frameRate;
...@@ -926,30 +934,38 @@ public final class Format implements Parcelable { ...@@ -926,30 +934,38 @@ public final class Format implements Parcelable {
this.projectionData = projectionData; this.projectionData = projectionData;
this.stereoMode = stereoMode; this.stereoMode = stereoMode;
this.colorInfo = colorInfo; this.colorInfo = colorInfo;
// Audio specific.
this.channelCount = channelCount; this.channelCount = channelCount;
this.sampleRate = sampleRate; this.sampleRate = sampleRate;
this.pcmEncoding = pcmEncoding; this.pcmEncoding = pcmEncoding;
this.encoderDelay = encoderDelay == Format.NO_VALUE ? 0 : encoderDelay; this.encoderDelay = encoderDelay == Format.NO_VALUE ? 0 : encoderDelay;
this.encoderPadding = encoderPadding == Format.NO_VALUE ? 0 : encoderPadding; this.encoderPadding = encoderPadding == Format.NO_VALUE ? 0 : encoderPadding;
this.selectionFlags = selectionFlags; // Audio and text specific.
this.language = Util.normalizeLanguageCode(language); this.language = Util.normalizeLanguageCode(language);
this.accessibilityChannel = accessibilityChannel; this.accessibilityChannel = accessibilityChannel;
this.subsampleOffsetUs = subsampleOffsetUs;
this.initializationData =
initializationData == null ? Collections.emptyList() : initializationData;
this.drmInitData = drmInitData;
this.metadata = metadata;
} }
@SuppressWarnings("ResourceType") @SuppressWarnings("ResourceType")
/* package */ Format(Parcel in) { /* package */ Format(Parcel in) {
id = in.readString(); id = in.readString();
label = in.readString(); label = in.readString();
selectionFlags = in.readInt();
bitrate = in.readInt();
codecs = in.readString();
metadata = in.readParcelable(Metadata.class.getClassLoader());
// Container specific.
containerMimeType = in.readString(); containerMimeType = in.readString();
// Elementary stream specific.
sampleMimeType = in.readString(); sampleMimeType = in.readString();
codecs = in.readString();
bitrate = in.readInt();
maxInputSize = in.readInt(); maxInputSize = in.readInt();
int initializationDataSize = in.readInt();
initializationData = new ArrayList<>(initializationDataSize);
for (int i = 0; i < initializationDataSize; i++) {
initializationData.add(in.createByteArray());
}
drmInitData = in.readParcelable(DrmInitData.class.getClassLoader());
subsampleOffsetUs = in.readLong();
// Video specific.
width = in.readInt(); width = in.readInt();
height = in.readInt(); height = in.readInt();
frameRate = in.readFloat(); frameRate = in.readFloat();
...@@ -959,33 +975,32 @@ public final class Format implements Parcelable { ...@@ -959,33 +975,32 @@ public final class Format implements Parcelable {
projectionData = hasProjectionData ? in.createByteArray() : null; projectionData = hasProjectionData ? in.createByteArray() : null;
stereoMode = in.readInt(); stereoMode = in.readInt();
colorInfo = in.readParcelable(ColorInfo.class.getClassLoader()); colorInfo = in.readParcelable(ColorInfo.class.getClassLoader());
// Audio specific.
channelCount = in.readInt(); channelCount = in.readInt();
sampleRate = in.readInt(); sampleRate = in.readInt();
pcmEncoding = in.readInt(); pcmEncoding = in.readInt();
encoderDelay = in.readInt(); encoderDelay = in.readInt();
encoderPadding = in.readInt(); encoderPadding = in.readInt();
selectionFlags = in.readInt(); // Audio and text specific.
language = in.readString(); language = in.readString();
accessibilityChannel = in.readInt(); accessibilityChannel = in.readInt();
subsampleOffsetUs = in.readLong();
int initializationDataSize = in.readInt();
initializationData = new ArrayList<>(initializationDataSize);
for (int i = 0; i < initializationDataSize; i++) {
initializationData.add(in.createByteArray());
}
drmInitData = in.readParcelable(DrmInitData.class.getClassLoader());
metadata = in.readParcelable(Metadata.class.getClassLoader());
} }
public Format copyWithMaxInputSize(int maxInputSize) { public Format copyWithMaxInputSize(int maxInputSize) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -999,24 +1014,24 @@ public final class Format implements Parcelable { ...@@ -999,24 +1014,24 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithSubsampleOffsetUs(long subsampleOffsetUs) { public Format copyWithSubsampleOffsetUs(long subsampleOffsetUs) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1030,13 +1045,8 @@ public final class Format implements Parcelable { ...@@ -1030,13 +1045,8 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithContainerInfo( public Format copyWithContainerInfo(
...@@ -1053,11 +1063,16 @@ public final class Format implements Parcelable { ...@@ -1053,11 +1063,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1071,13 +1086,8 @@ public final class Format implements Parcelable { ...@@ -1071,13 +1086,8 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
@SuppressWarnings("ReferenceEquality") @SuppressWarnings("ReferenceEquality")
...@@ -1124,11 +1134,16 @@ public final class Format implements Parcelable { ...@@ -1124,11 +1134,16 @@ public final class Format implements Parcelable {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1142,24 +1157,24 @@ public final class Format implements Parcelable { ...@@ -1142,24 +1157,24 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithGaplessInfo(int encoderDelay, int encoderPadding) { public Format copyWithGaplessInfo(int encoderDelay, int encoderPadding) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1173,24 +1188,24 @@ public final class Format implements Parcelable { ...@@ -1173,24 +1188,24 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithFrameRate(float frameRate) { public Format copyWithFrameRate(float frameRate) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1204,24 +1219,24 @@ public final class Format implements Parcelable { ...@@ -1204,24 +1219,24 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithDrmInitData(@Nullable DrmInitData drmInitData) { public Format copyWithDrmInitData(@Nullable DrmInitData drmInitData) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1235,24 +1250,24 @@ public final class Format implements Parcelable { ...@@ -1235,24 +1250,24 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithMetadata(@Nullable Metadata metadata) { public Format copyWithMetadata(@Nullable Metadata metadata) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1266,24 +1281,24 @@ public final class Format implements Parcelable { ...@@ -1266,24 +1281,24 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithRotationDegrees(int rotationDegrees) { public Format copyWithRotationDegrees(int rotationDegrees) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1297,24 +1312,24 @@ public final class Format implements Parcelable { ...@@ -1297,24 +1312,24 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
public Format copyWithBitrate(int bitrate) { public Format copyWithBitrate(int bitrate) {
return new Format( return new Format(
id, id,
label, label,
selectionFlags,
bitrate,
codecs,
metadata,
containerMimeType, containerMimeType,
sampleMimeType, sampleMimeType,
codecs,
bitrate,
maxInputSize, maxInputSize,
initializationData,
drmInitData,
subsampleOffsetUs,
width, width,
height, height,
frameRate, frameRate,
...@@ -1328,13 +1343,8 @@ public final class Format implements Parcelable { ...@@ -1328,13 +1343,8 @@ public final class Format implements Parcelable {
pcmEncoding, pcmEncoding,
encoderDelay, encoderDelay,
encoderPadding, encoderPadding,
selectionFlags,
language, language,
accessibilityChannel, accessibilityChannel);
subsampleOffsetUs,
initializationData,
drmInitData,
metadata);
} }
/** /**
...@@ -1378,32 +1388,40 @@ public final class Format implements Parcelable { ...@@ -1378,32 +1388,40 @@ public final class Format implements Parcelable {
@Override @Override
public int hashCode() { public int hashCode() {
if (hashCode == 0) { if (hashCode == 0) {
// Some fields for which hashing is expensive are deliberately omitted.
int result = 17; int result = 17;
result = 31 * result + (id == null ? 0 : id.hashCode()); result = 31 * result + (id == null ? 0 : id.hashCode());
result = 31 * result + (containerMimeType == null ? 0 : containerMimeType.hashCode()); result = 31 * result + (label != null ? label.hashCode() : 0);
result = 31 * result + (sampleMimeType == null ? 0 : sampleMimeType.hashCode()); result = 31 * result + selectionFlags;
result = 31 * result + (codecs == null ? 0 : codecs.hashCode());
result = 31 * result + bitrate; result = 31 * result + bitrate;
result = 31 * result + width; result = 31 * result + (codecs == null ? 0 : codecs.hashCode());
result = 31 * result + height;
result = 31 * result + channelCount;
result = 31 * result + sampleRate;
result = 31 * result + (language == null ? 0 : language.hashCode());
result = 31 * result + accessibilityChannel;
result = 31 * result + (drmInitData == null ? 0 : drmInitData.hashCode());
result = 31 * result + (metadata == null ? 0 : metadata.hashCode()); result = 31 * result + (metadata == null ? 0 : metadata.hashCode());
result = 31 * result + (label != null ? label.hashCode() : 0); // Container specific.
result = 31 * result + (containerMimeType == null ? 0 : containerMimeType.hashCode());
// Elementary stream specific.
result = 31 * result + (sampleMimeType == null ? 0 : sampleMimeType.hashCode());
result = 31 * result + maxInputSize; result = 31 * result + maxInputSize;
// [Omitted] initializationData.
// [Omitted] drmInitData.
result = 31 * result + (int) subsampleOffsetUs; result = 31 * result + (int) subsampleOffsetUs;
// Video specific.
result = 31 * result + width;
result = 31 * result + height;
result = 31 * result + Float.floatToIntBits(frameRate); result = 31 * result + Float.floatToIntBits(frameRate);
result = 31 * result + Float.floatToIntBits(pixelWidthHeightRatio);
result = 31 * result + rotationDegrees; result = 31 * result + rotationDegrees;
result = 31 * result + Float.floatToIntBits(pixelWidthHeightRatio);
// [Omitted] projectionData.
result = 31 * result + stereoMode; result = 31 * result + stereoMode;
// [Omitted] colorInfo.
// Audio specific.
result = 31 * result + channelCount;
result = 31 * result + sampleRate;
result = 31 * result + pcmEncoding; result = 31 * result + pcmEncoding;
result = 31 * result + encoderDelay; result = 31 * result + encoderDelay;
result = 31 * result + encoderPadding; result = 31 * result + encoderPadding;
result = 31 * result + selectionFlags; // Audio and text specific.
// Not all of the fields are included to keep the calculation quick enough. result = 31 * result + (language == null ? 0 : language.hashCode());
result = 31 * result + accessibilityChannel;
hashCode = result; hashCode = result;
} }
return hashCode; return hashCode;
...@@ -1421,32 +1439,33 @@ public final class Format implements Parcelable { ...@@ -1421,32 +1439,33 @@ public final class Format implements Parcelable {
if (hashCode != 0 && other.hashCode != 0 && hashCode != other.hashCode) { if (hashCode != 0 && other.hashCode != 0 && hashCode != other.hashCode) {
return false; return false;
} }
return bitrate == other.bitrate // Field equality checks ordered by type, with the cheapest checks first.
return selectionFlags == other.selectionFlags
&& bitrate == other.bitrate
&& maxInputSize == other.maxInputSize && maxInputSize == other.maxInputSize
&& subsampleOffsetUs == other.subsampleOffsetUs
&& width == other.width && width == other.width
&& height == other.height && height == other.height
&& Float.compare(frameRate, other.frameRate) == 0
&& rotationDegrees == other.rotationDegrees && rotationDegrees == other.rotationDegrees
&& Float.compare(pixelWidthHeightRatio, other.pixelWidthHeightRatio) == 0
&& stereoMode == other.stereoMode && stereoMode == other.stereoMode
&& channelCount == other.channelCount && channelCount == other.channelCount
&& sampleRate == other.sampleRate && sampleRate == other.sampleRate
&& pcmEncoding == other.pcmEncoding && pcmEncoding == other.pcmEncoding
&& encoderDelay == other.encoderDelay && encoderDelay == other.encoderDelay
&& encoderPadding == other.encoderPadding && encoderPadding == other.encoderPadding
&& subsampleOffsetUs == other.subsampleOffsetUs && accessibilityChannel == other.accessibilityChannel
&& selectionFlags == other.selectionFlags && Float.compare(frameRate, other.frameRate) == 0
&& Float.compare(pixelWidthHeightRatio, other.pixelWidthHeightRatio) == 0
&& Util.areEqual(id, other.id) && Util.areEqual(id, other.id)
&& Util.areEqual(label, other.label) && Util.areEqual(label, other.label)
&& Util.areEqual(language, other.language) && Util.areEqual(codecs, other.codecs)
&& accessibilityChannel == other.accessibilityChannel
&& Util.areEqual(containerMimeType, other.containerMimeType) && Util.areEqual(containerMimeType, other.containerMimeType)
&& Util.areEqual(sampleMimeType, other.sampleMimeType) && Util.areEqual(sampleMimeType, other.sampleMimeType)
&& Util.areEqual(codecs, other.codecs) && Util.areEqual(language, other.language)
&& Util.areEqual(drmInitData, other.drmInitData) && Arrays.equals(projectionData, other.projectionData)
&& Util.areEqual(metadata, other.metadata) && Util.areEqual(metadata, other.metadata)
&& Util.areEqual(colorInfo, other.colorInfo) && Util.areEqual(colorInfo, other.colorInfo)
&& Arrays.equals(projectionData, other.projectionData) && Util.areEqual(drmInitData, other.drmInitData)
&& initializationDataEquals(other); && initializationDataEquals(other);
} }
...@@ -1517,11 +1536,23 @@ public final class Format implements Parcelable { ...@@ -1517,11 +1536,23 @@ public final class Format implements Parcelable {
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeString(id); dest.writeString(id);
dest.writeString(label); dest.writeString(label);
dest.writeInt(selectionFlags);
dest.writeInt(bitrate);
dest.writeString(codecs);
dest.writeParcelable(metadata, 0);
// Container specific.
dest.writeString(containerMimeType); dest.writeString(containerMimeType);
// Elementary stream specific.
dest.writeString(sampleMimeType); dest.writeString(sampleMimeType);
dest.writeString(codecs);
dest.writeInt(bitrate);
dest.writeInt(maxInputSize); dest.writeInt(maxInputSize);
int initializationDataSize = initializationData.size();
dest.writeInt(initializationDataSize);
for (int i = 0; i < initializationDataSize; i++) {
dest.writeByteArray(initializationData.get(i));
}
dest.writeParcelable(drmInitData, 0);
dest.writeLong(subsampleOffsetUs);
// Video specific.
dest.writeInt(width); dest.writeInt(width);
dest.writeInt(height); dest.writeInt(height);
dest.writeFloat(frameRate); dest.writeFloat(frameRate);
...@@ -1533,22 +1564,15 @@ public final class Format implements Parcelable { ...@@ -1533,22 +1564,15 @@ public final class Format implements Parcelable {
} }
dest.writeInt(stereoMode); dest.writeInt(stereoMode);
dest.writeParcelable(colorInfo, flags); dest.writeParcelable(colorInfo, flags);
// Audio specific.
dest.writeInt(channelCount); dest.writeInt(channelCount);
dest.writeInt(sampleRate); dest.writeInt(sampleRate);
dest.writeInt(pcmEncoding); dest.writeInt(pcmEncoding);
dest.writeInt(encoderDelay); dest.writeInt(encoderDelay);
dest.writeInt(encoderPadding); dest.writeInt(encoderPadding);
dest.writeInt(selectionFlags); // Audio and text specific.
dest.writeString(language); dest.writeString(language);
dest.writeInt(accessibilityChannel); dest.writeInt(accessibilityChannel);
dest.writeLong(subsampleOffsetUs);
int initializationDataSize = initializationData.size();
dest.writeInt(initializationDataSize);
for (int i = 0; i < initializationDataSize; i++) {
dest.writeByteArray(initializationData.get(i));
}
dest.writeParcelable(drmInitData, 0);
dest.writeParcelable(metadata, 0);
} }
public static final Creator<Format> CREATOR = new Creator<Format>() { public static final Creator<Format> CREATOR = new Creator<Format>() {
......
...@@ -38,14 +38,15 @@ import org.junit.runner.RunWith; ...@@ -38,14 +38,15 @@ import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public final class FormatTest { public final class FormatTest {
private static final List<byte[]> INIT_DATA; private static final List<byte[]> initData;
static { static {
byte[] initData1 = new byte[] {1, 2, 3}; byte[] initData1 = new byte[] {1, 2, 3};
byte[] initData2 = new byte[] {4, 5, 6}; byte[] initData2 = new byte[] {4, 5, 6};
List<byte[]> initData = new ArrayList<>(); List<byte[]> initDataList = new ArrayList<>();
initData.add(initData1); initDataList.add(initData1);
initData.add(initData2); initDataList.add(initData2);
INIT_DATA = Collections.unmodifiableList(initData); initData = Collections.unmodifiableList(initDataList);
} }
@Test @Test
...@@ -66,11 +67,16 @@ public final class FormatTest { ...@@ -66,11 +67,16 @@ public final class FormatTest {
new Format( new Format(
"id", "id",
"label", "label",
C.SELECTION_FLAG_DEFAULT,
/* bitrate= */ 1024,
"codec",
metadata,
/* containerMimeType= */ MimeTypes.VIDEO_MP4, /* containerMimeType= */ MimeTypes.VIDEO_MP4,
/* sampleMimeType= */ MimeTypes.VIDEO_H264, /* sampleMimeType= */ MimeTypes.VIDEO_H264,
"codec",
/* bitrate= */ 1024,
/* maxInputSize= */ 2048, /* maxInputSize= */ 2048,
initData,
drmInitData,
Format.OFFSET_SAMPLE_RELATIVE,
/* width= */ 1920, /* width= */ 1920,
/* height= */ 1080, /* height= */ 1080,
/* frameRate= */ 24, /* frameRate= */ 24,
...@@ -84,13 +90,8 @@ public final class FormatTest { ...@@ -84,13 +90,8 @@ public final class FormatTest {
C.ENCODING_PCM_24BIT, C.ENCODING_PCM_24BIT,
/* encoderDelay= */ 1001, /* encoderDelay= */ 1001,
/* encoderPadding= */ 1002, /* encoderPadding= */ 1002,
C.SELECTION_FLAG_DEFAULT,
"language", "language",
/* accessibilityChannel= */ Format.NO_VALUE, /* accessibilityChannel= */ Format.NO_VALUE);
Format.OFFSET_SAMPLE_RELATIVE,
INIT_DATA,
drmInitData,
metadata);
Parcel parcel = Parcel.obtain(); Parcel parcel = Parcel.obtain();
formatToParcel.writeToParcel(parcel, 0); formatToParcel.writeToParcel(parcel, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment