Commit fce17e7f by aquilescanta Committed by Oliver Woodman

Added a trackSelectionFlags field to format.

This field will allow us to flexibly add information provided by the container
or streaming manifests related to the tracks that must be selected.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=122559858
parent a16a333d
Showing with 104 additions and 80 deletions
......@@ -106,7 +106,7 @@ public final class FlacExtractor implements Extractor {
Format mediaFormat = Format.createAudioSampleFormat(null, MimeTypes.AUDIO_RAW,
streamInfo.bitRate(), Format.NO_VALUE, streamInfo.channels, streamInfo.sampleRate,
C.ENCODING_PCM_16BIT, null, null, null);
C.ENCODING_PCM_16BIT, null, null, 0, null);
trackOutput.format(mediaFormat);
outputBuffer = new ParsableByteArray(streamInfo.maxDecodedFrameSize());
......@@ -120,8 +120,8 @@ public final class FlacExtractor implements Extractor {
}
trackOutput.sampleData(outputBuffer, size);
trackOutput
.sampleMetadata(decoder.getLastSampleTimestamp(), C.BUFFER_FLAG_KEY_FRAME, size, 0, null);
trackOutput.sampleMetadata(decoder.getLastSampleTimestamp(), C.BUFFER_FLAG_KEY_FRAME, size, 0,
null);
return decoder.isEndOfData() ? RESULT_END_OF_INPUT : RESULT_CONTINUE;
}
......
......@@ -60,7 +60,7 @@ public final class FormatTest extends TestCase {
DrmInitData drmInitData = new DrmInitData(DRM_DATA_1, DRM_DATA_2);
Format formatToParcel = new Format("id", MimeTypes.VIDEO_MP4, MimeTypes.VIDEO_H264, 1024, 2048,
1920, 1080, 24, 90, 2, 6, 44100, C.ENCODING_PCM_24BIT, 1001, 1002, "und",
1920, 1080, 24, 90, 2, 6, 44100, C.ENCODING_PCM_24BIT, 1001, 1002, 0, "und",
Format.OFFSET_SAMPLE_RELATIVE, INIT_DATA, drmInitData, false);
Parcel parcel = Parcel.obtain();
......@@ -84,13 +84,13 @@ public final class FormatTest extends TestCase {
testConversionToFrameworkMediaFormatV16(Format.createVideoSampleFormat(null, "video/xyz", 5000,
Format.NO_VALUE, 1280, 720, 30, null, null));
testConversionToFrameworkMediaFormatV16(Format.createAudioSampleFormat(null, "audio/xyz", 500,
128, 5, 44100, INIT_DATA, null, null));
128, 5, 44100, INIT_DATA, null, 0, null));
testConversionToFrameworkMediaFormatV16(Format.createAudioSampleFormat(null, "audio/xyz", 500,
Format.NO_VALUE, 5, 44100, null, null, null));
Format.NO_VALUE, 5, 44100, null, null, 0, null));
testConversionToFrameworkMediaFormatV16(Format.createTextSampleFormat(null, "text/xyz",
Format.NO_VALUE, "eng", null));
Format.NO_VALUE, 0, "eng", null));
testConversionToFrameworkMediaFormatV16(Format.createTextSampleFormat(null, "text/xyz",
Format.NO_VALUE, null, null));
Format.NO_VALUE, 0, null, null));
}
@SuppressLint("InlinedApi")
......
......@@ -52,6 +52,16 @@ public final class Format implements Parcelable {
public static final int NO_VALUE = -1;
/**
* Indicates that the track should be selected if user preferences do not state otherwise.
*/
public static final int SELECTION_FLAG_DEFAULT = 1;
/**
* Indicates that the track must be displayed. Only applies to text tracks.
*/
public static final int SELECTION_FLAG_FORCED = 2;
/**
* A value for {@link #subsampleOffsetUs} to indicate that subsample timestamps are relative to
* the timestamps of their parent samples.
*/
......@@ -163,6 +173,11 @@ public final class Format implements Parcelable {
// Audio and text specific.
/**
* Track selection flags.
*/
public final int selectionFlags;
/**
* The language, or null if unknown or not applicable.
*/
public final String language;
......@@ -178,7 +193,7 @@ public final class Format implements Parcelable {
String sampleMimeType, int bitrate, int width, int height, float frameRate,
List<byte[]> initializationData) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, NO_VALUE, width, height,
frameRate, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null,
frameRate, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, 0, null,
OFFSET_SAMPLE_RELATIVE, initializationData, null, false);
}
......@@ -193,7 +208,7 @@ public final class Format implements Parcelable {
int maxInputSize, int width, int height, float frameRate, List<byte[]> initializationData,
int rotationDegrees, float pixelWidthHeightRatio, DrmInitData drmInitData) {
return new Format(id, null, sampleMimeType, bitrate, maxInputSize, width, height, frameRate,
rotationDegrees, pixelWidthHeightRatio, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
rotationDegrees, pixelWidthHeightRatio, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, 0,
null, OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, false);
}
......@@ -201,63 +216,67 @@ public final class Format implements Parcelable {
public static Format createAudioContainerFormat(String id, String containerMimeType,
String sampleMimeType, int bitrate, int channelCount, int sampleRate,
List<byte[]> initializationData, String language) {
List<byte[]> initializationData, int selectionFlags, String language) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, channelCount, sampleRate, NO_VALUE, NO_VALUE, NO_VALUE,
language, OFFSET_SAMPLE_RELATIVE, initializationData, null, false);
selectionFlags, language, OFFSET_SAMPLE_RELATIVE, initializationData, null, false);
}
public static Format createAudioSampleFormat(String id, String sampleMimeType, int bitrate,
int maxInputSize, int channelCount, int sampleRate, List<byte[]> initializationData,
DrmInitData drmInitData, String language) {
DrmInitData drmInitData, int selectionFlags, String language) {
return createAudioSampleFormat(id, sampleMimeType, bitrate, maxInputSize, channelCount,
sampleRate, NO_VALUE, initializationData, drmInitData, language);
sampleRate, NO_VALUE, initializationData, drmInitData, selectionFlags, language);
}
public static Format createAudioSampleFormat(String id, String sampleMimeType, int bitrate,
int maxInputSize, int channelCount, int sampleRate, int pcmEncoding,
List<byte[]> initializationData, DrmInitData drmInitData, String language) {
List<byte[]> initializationData, DrmInitData drmInitData, int selectionFlags,
String language) {
return createAudioSampleFormat(id, sampleMimeType, bitrate, maxInputSize, channelCount,
sampleRate, pcmEncoding, NO_VALUE, NO_VALUE, initializationData, drmInitData, language);
sampleRate, pcmEncoding, NO_VALUE, NO_VALUE, initializationData, drmInitData,
selectionFlags, language);
}
public static Format createAudioSampleFormat(String id, String sampleMimeType, int bitrate,
int maxInputSize, int channelCount, int sampleRate, int pcmEncoding, int encoderDelay,
int encoderPadding, List<byte[]> initializationData, DrmInitData drmInitData,
String language) {
int selectionFlags, String language) {
return new Format(id, null, sampleMimeType, bitrate, maxInputSize, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding,
language, OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, false);
selectionFlags, language, OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData,
false);
}
// Text.
public static Format createTextContainerFormat(String id, String containerMimeType,
String sampleMimeType, int bitrate, String language) {
String sampleMimeType, int bitrate, int selectionFlags, String language) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, language,
OFFSET_SAMPLE_RELATIVE, null, null, false);
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
selectionFlags, language, OFFSET_SAMPLE_RELATIVE, null, null, false);
}
public static Format createTextSampleFormat(String id, String sampleMimeType, int bitrate,
String language, DrmInitData drmInitData) {
return createTextSampleFormat(id, sampleMimeType, bitrate, language, drmInitData,
OFFSET_SAMPLE_RELATIVE);
int selectionFlags, String language, DrmInitData drmInitData) {
return createTextSampleFormat(id, sampleMimeType, bitrate, selectionFlags, language,
drmInitData, OFFSET_SAMPLE_RELATIVE);
}
public static Format createTextSampleFormat(String id, String sampleMimeType, int bitrate,
String language, DrmInitData drmInitData, long subsampleOffsetUs) {
int selectionFlags, String language, DrmInitData drmInitData, long subsampleOffsetUs) {
return new Format(id, null, sampleMimeType, bitrate, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, language,
subsampleOffsetUs, null, drmInitData, false);
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
selectionFlags, language, subsampleOffsetUs, null, drmInitData, false);
}
// Image.
public static Format createImageSampleFormat(String id, String sampleMimeType, int bitrate,
List<byte[]> initializationData, String language, DrmInitData drmInitData) {
List<byte[]> initializationData, String language,
DrmInitData drmInitData) {
return new Format(id, null, sampleMimeType, bitrate, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, language,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, 0, language,
OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, false);
}
......@@ -266,22 +285,23 @@ public final class Format implements Parcelable {
public static Format createContainerFormat(String id, String containerMimeType,
String sampleMimeType, int bitrate) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, 0, null,
OFFSET_SAMPLE_RELATIVE, null, null, false);
}
public static Format createSampleFormat(String id, String sampleMimeType, int bitrate,
DrmInitData drmInitData) {
return new Format(id, null, sampleMimeType, bitrate, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, 0, null,
OFFSET_SAMPLE_RELATIVE, null, drmInitData, false);
}
/* package */ Format(String id, String containerMimeType, String sampleMimeType,
int bitrate, int maxInputSize, int width, int height, float frameRate, int rotationDegrees,
/* package */ Format(String id, String containerMimeType, String sampleMimeType, int bitrate,
int maxInputSize, int width, int height, float frameRate, int rotationDegrees,
float pixelWidthHeightRatio, int channelCount, int sampleRate, int pcmEncoding,
int encoderDelay, int encoderPadding, String language, long subsampleOffsetUs,
List<byte[]> initializationData, DrmInitData drmInitData, boolean requiresSecureDecryption) {
int encoderDelay, int encoderPadding, int selectionFlags, String language,
long subsampleOffsetUs, List<byte[]> initializationData, DrmInitData drmInitData,
boolean requiresSecureDecryption) {
this.id = id;
this.containerMimeType = containerMimeType;
this.sampleMimeType = sampleMimeType;
......@@ -297,6 +317,7 @@ public final class Format implements Parcelable {
this.pcmEncoding = pcmEncoding;
this.encoderDelay = encoderDelay;
this.encoderPadding = encoderPadding;
this.selectionFlags = selectionFlags;
this.language = language;
this.subsampleOffsetUs = subsampleOffsetUs;
this.initializationData = initializationData == null ? Collections.<byte[]>emptyList()
......@@ -321,6 +342,7 @@ public final class Format implements Parcelable {
pcmEncoding = in.readInt();
encoderDelay = in.readInt();
encoderPadding = in.readInt();
selectionFlags = in.readInt();
language = in.readString();
subsampleOffsetUs = in.readLong();
int initializationDataSize = in.readInt();
......@@ -335,37 +357,37 @@ public final class Format implements Parcelable {
public Format copyWithMaxInputSize(int maxInputSize) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, maxInputSize, width,
height, frameRate, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate,
pcmEncoding, encoderDelay, encoderPadding, language, subsampleOffsetUs, initializationData,
drmInitData, requiresSecureDecryption);
pcmEncoding, encoderDelay, encoderPadding, selectionFlags, language, subsampleOffsetUs,
initializationData, drmInitData, requiresSecureDecryption);
}
public Format copyWithSubsampleOffsetUs(long subsampleOffsetUs) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, maxInputSize, width,
height, frameRate, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate,
pcmEncoding, encoderDelay, encoderPadding, language, subsampleOffsetUs, initializationData,
drmInitData, requiresSecureDecryption);
pcmEncoding, encoderDelay, encoderPadding, selectionFlags, language, subsampleOffsetUs,
initializationData, drmInitData, requiresSecureDecryption);
}
public Format copyWithContainerInfo(String id, int bitrate, int width, int height,
String language) {
int selectionFlags, String language) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, maxInputSize, width,
height, frameRate, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate,
pcmEncoding, encoderDelay, encoderPadding, language, subsampleOffsetUs, initializationData,
drmInitData, requiresSecureDecryption);
pcmEncoding, encoderDelay, encoderPadding, selectionFlags, language, subsampleOffsetUs,
initializationData, drmInitData, requiresSecureDecryption);
}
public Format copyWithGaplessInfo(int encoderDelay, int encoderPadding) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, maxInputSize, width,
height, frameRate, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate,
pcmEncoding, encoderDelay, encoderPadding, language, subsampleOffsetUs, initializationData,
drmInitData, requiresSecureDecryption);
pcmEncoding, encoderDelay, encoderPadding, selectionFlags, language, subsampleOffsetUs,
initializationData, drmInitData, requiresSecureDecryption);
}
public Format copyWithDrmInitData(DrmInitData drmInitData) {
return new Format(id, containerMimeType, sampleMimeType, bitrate, maxInputSize, width,
height, frameRate, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate,
pcmEncoding, encoderDelay, encoderPadding, language, subsampleOffsetUs, initializationData,
drmInitData, requiresSecureDecryption);
pcmEncoding, encoderDelay, encoderPadding, selectionFlags, language, subsampleOffsetUs,
initializationData, drmInitData, requiresSecureDecryption);
}
/**
......@@ -450,7 +472,8 @@ public final class Format implements Parcelable {
|| channelCount != other.channelCount || sampleRate != other.sampleRate
|| pcmEncoding != other.pcmEncoding || encoderDelay != other.encoderDelay
|| encoderPadding != other.encoderPadding || subsampleOffsetUs != other.subsampleOffsetUs
|| !Util.areEqual(id, other.id) || !Util.areEqual(language, other.language)
|| selectionFlags != other.selectionFlags || !Util.areEqual(id, other.id)
|| !Util.areEqual(language, other.language)
|| !Util.areEqual(containerMimeType, other.containerMimeType)
|| !Util.areEqual(sampleMimeType, other.sampleMimeType)
|| !Util.areEqual(drmInitData, other.drmInitData)
......@@ -510,6 +533,7 @@ public final class Format implements Parcelable {
dest.writeInt(pcmEncoding);
dest.writeInt(encoderDelay);
dest.writeInt(encoderPadding);
dest.writeInt(selectionFlags);
dest.writeString(language);
dest.writeLong(subsampleOffsetUs);
int initializationDataSize = initializationData.size();
......
......@@ -333,7 +333,7 @@ public final class FrameworkSampleSource implements SampleSource {
int pcmEncoding = MimeTypes.AUDIO_RAW.equals(mimeType) ? C.ENCODING_PCM_16BIT : Format.NO_VALUE;
Format format = new Format(Integer.toString(index), null, mimeType, Format.NO_VALUE,
maxInputSize, width, height, frameRate, rotationDegrees, Format.NO_VALUE, channelCount,
sampleRate, pcmEncoding, encoderDelay, encoderPadding, language,
sampleRate, pcmEncoding, encoderDelay, encoderPadding, 0, language,
Format.OFFSET_SAMPLE_RELATIVE, initializationData, drmInitData, false);
format.setFrameworkMediaFormatV16(mediaFormat);
return format;
......
......@@ -411,9 +411,9 @@ public class MediaPresentationDescriptionParser extends DefaultHandler
width, height, frameRate, null);
} else if (MimeTypes.isAudio(sampleMimeType)) {
return Format.createAudioContainerFormat(id, containerMimeType, sampleMimeType, bitrate,
audioChannels, audioSamplingRate, null, language);
audioChannels, audioSamplingRate, null, 0, language);
} else if (mimeTypeIsRawText(sampleMimeType)) {
return Format.createTextContainerFormat(id, containerMimeType, sampleMimeType, bitrate,
return Format.createTextContainerFormat(id, containerMimeType, sampleMimeType, bitrate, 0,
language);
} else {
return Format.createContainerFormat(id, containerMimeType, sampleMimeType, bitrate);
......
......@@ -144,7 +144,7 @@ public abstract class AudioDecoderTrackRenderer extends TrackRenderer implements
protected Format getOutputFormat() {
return Format.createAudioSampleFormat(null, MimeTypes.AUDIO_RAW, Format.NO_VALUE,
Format.NO_VALUE, inputFormat.channelCount, inputFormat.sampleRate, C.ENCODING_PCM_16BIT,
null, null, null);
null, null, 0, null);
}
private boolean drainOutputBuffer() throws AudioDecoderException,
......
......@@ -88,7 +88,7 @@ import java.util.Collections;
audioSpecifiConfig);
Format format = Format.createAudioSampleFormat(null, MimeTypes.AUDIO_AAC,
Format.NO_VALUE, Format.NO_VALUE, audioParams.second, audioParams.first,
Collections.singletonList(audioSpecifiConfig), null, null);
Collections.singletonList(audioSpecifiConfig), null, 0, null);
output.format(format);
hasOutputFormat = true;
} else if (packetType == AAC_PACKET_TYPE_AAC_RAW) {
......
......@@ -1324,7 +1324,7 @@ public final class MatroskaExtractor implements Extractor {
if (MimeTypes.isAudio(mimeType)) {
format = Format.createAudioSampleFormat(Integer.toString(trackId), mimeType,
Format.NO_VALUE, maxInputSize, channelCount, sampleRate, pcmEncoding,
initializationData, drmInitData, language);
initializationData, drmInitData, 0, language);
} else if (MimeTypes.isVideo(mimeType)) {
if (displayUnit == Track.DISPLAY_UNIT_PIXELS) {
displayWidth = displayWidth == Format.NO_VALUE ? width : displayWidth;
......@@ -1339,7 +1339,7 @@ public final class MatroskaExtractor implements Extractor {
Format.NO_VALUE, pixelWidthHeightRatio, drmInitData);
} else if (MimeTypes.APPLICATION_SUBRIP.equals(mimeType)) {
format = Format.createTextSampleFormat(Integer.toString(trackId), mimeType, Format.NO_VALUE,
language, drmInitData);
0, language, drmInitData);
} else if (MimeTypes.APPLICATION_VOBSUB.equals(mimeType)
|| MimeTypes.APPLICATION_PGS.equals(mimeType)) {
format = Format.createImageSampleFormat(Integer.toString(trackId), mimeType,
......
......@@ -128,7 +128,7 @@ public final class Mp3Extractor implements Extractor {
trackOutput.format(Format.createAudioSampleFormat(null, synchronizedHeader.mimeType,
Format.NO_VALUE, MpegAudioHeader.MAX_FRAME_SIZE_BYTES, synchronizedHeader.channels,
synchronizedHeader.sampleRate, Format.NO_VALUE, gaplessInfoHolder.encoderDelay,
gaplessInfoHolder.encoderPadding, null, null, null));
gaplessInfoHolder.encoderPadding, null, null, 0, null));
}
return readSample(input);
}
......
......@@ -602,16 +602,16 @@ import java.util.List;
language, isQuickTime, drmInitData, out, i);
} else if (childAtomType == Atom.TYPE_TTML) {
out.format = Format.createTextSampleFormat(Integer.toString(trackId),
MimeTypes.APPLICATION_TTML, Format.NO_VALUE, language, drmInitData);
MimeTypes.APPLICATION_TTML, Format.NO_VALUE, 0, language, drmInitData);
} else if (childAtomType == Atom.TYPE_tx3g) {
out.format = Format.createTextSampleFormat(Integer.toString(trackId),
MimeTypes.APPLICATION_TX3G, Format.NO_VALUE, language, drmInitData);
MimeTypes.APPLICATION_TX3G, Format.NO_VALUE, 0, language, drmInitData);
} else if (childAtomType == Atom.TYPE_wvtt) {
out.format = Format.createTextSampleFormat(Integer.toString(trackId),
MimeTypes.APPLICATION_MP4VTT, Format.NO_VALUE, language, drmInitData);
MimeTypes.APPLICATION_MP4VTT, Format.NO_VALUE, 0, language, drmInitData);
} else if (childAtomType == Atom.TYPE_stpp) {
out.format = Format.createTextSampleFormat(Integer.toString(trackId),
MimeTypes.APPLICATION_TTML, Format.NO_VALUE, language, drmInitData,
MimeTypes.APPLICATION_TTML, Format.NO_VALUE, 0, language, drmInitData,
0 /* subsample timing is absolute */);
}
stsd.setPosition(childStartPosition + childAtomSize);
......@@ -948,7 +948,7 @@ import java.util.List;
|| atomType == Atom.TYPE_dtsh || atomType == Atom.TYPE_dtsl)
&& childAtomType == Atom.TYPE_ddts) {
out.format = Format.createAudioSampleFormat(Integer.toString(trackId), mimeType,
Format.NO_VALUE, Format.NO_VALUE, channelCount, sampleRate, null, drmInitData,
Format.NO_VALUE, Format.NO_VALUE, channelCount, sampleRate, null, drmInitData, 0,
language);
return;
}
......@@ -966,7 +966,7 @@ import java.util.List;
out.format = Format.createAudioSampleFormat(Integer.toString(trackId), mimeType,
Format.NO_VALUE, Format.NO_VALUE, channelCount, sampleRate, pcmEncoding,
initializationData == null ? null : Collections.singletonList(initializationData),
drmInitData, language);
drmInitData, 0, language);
}
/** Returns the position of the esds box within a parent, or -1 if no esds box is found */
......
......@@ -68,7 +68,7 @@ import java.util.List;
List<byte[]> initializationData = Collections.singletonList(metadata);
trackOutput.format(Format.createAudioSampleFormat(null, MimeTypes.AUDIO_FLAC,
streamInfo.bitRate(), Format.NO_VALUE, streamInfo.channels, streamInfo.sampleRate,
initializationData, null, null));
initializationData, null, 0, null));
} else if (data[0] == AUDIO_PACKET_TYPE) {
if (!firstAudioPacketProcessed) {
if (seekTable != null) {
......
......@@ -74,7 +74,7 @@ import java.util.List;
List<byte[]> initializationData = Collections.singletonList(metadata);
trackOutput.format(Format.createAudioSampleFormat(null, MimeTypes.AUDIO_OPUS,
Format.NO_VALUE, Format.NO_VALUE, channelCount, SAMPLE_RATE,
initializationData, null, null));
initializationData, null, 0, null));
state = STATE_READ_TAGS;
} break;
case STATE_READ_TAGS:
......
......@@ -96,7 +96,7 @@ import java.util.ArrayList;
trackOutput.format(Format.createAudioSampleFormat(null, MimeTypes.AUDIO_VORBIS,
this.vorbisSetup.idHeader.bitrateNominal, OggParser.OGG_MAX_SEGMENT_SIZE * 255,
this.vorbisSetup.idHeader.channels, (int) this.vorbisSetup.idHeader.sampleRate,
codecInitialisationData, null, null));
codecInitialisationData, null, 0, null));
if (inputLength != C.LENGTH_UNBOUNDED) {
oggSeeker.setup(inputLength - audioStartPosition, totalSamples);
......
......@@ -276,7 +276,7 @@ import java.util.Collections;
Format format = Format.createAudioSampleFormat(null, MimeTypes.AUDIO_AAC, Format.NO_VALUE,
Format.NO_VALUE, audioParams.second, audioParams.first,
Collections.singletonList(audioSpecificConfig), null, null);
Collections.singletonList(audioSpecificConfig), null, 0, null);
// In this class a sample is an access unit, but the MediaFormat sample rate specifies the
// number of PCM audio samples per second.
sampleDurationUs = (C.MICROS_PER_SECOND * 1024) / format.sampleRate;
......
......@@ -163,7 +163,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
if (!hasOutputFormat) {
frameDurationUs = (C.MICROS_PER_SECOND * header.samplesPerFrame) / header.sampleRate;
Format format = Format.createAudioSampleFormat(null, header.mimeType, Format.NO_VALUE,
MpegAudioHeader.MAX_FRAME_SIZE_BYTES, header.channels, header.sampleRate, null, null,
MpegAudioHeader.MAX_FRAME_SIZE_BYTES, header.channels, header.sampleRate, null, null, 0,
null);
output.format(format);
hasOutputFormat = true;
......
......@@ -34,7 +34,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
public SeiReader(TrackOutput output) {
this.output = output;
output.format(Format.createTextSampleFormat(null, MimeTypes.APPLICATION_EIA608, Format.NO_VALUE,
null, null));
0, null, null));
}
public void consume(long pesTimeUs, ParsableByteArray seiBuffer) {
......
......@@ -74,7 +74,7 @@ public final class WavExtractor implements Extractor, SeekMap {
}
Format format = Format.createAudioSampleFormat(null, MimeTypes.AUDIO_RAW,
wavHeader.getBitrate(), MAX_INPUT_SIZE, wavHeader.getNumChannels(),
wavHeader.getSampleRateHz(), wavHeader.getEncoding(), null, null, null);
wavHeader.getSampleRateHz(), wavHeader.getEncoding(), null, null, 0, null);
trackOutput.format(format);
bytesPerFrame = wavHeader.getBytesPerFrame();
}
......
......@@ -526,7 +526,7 @@ import java.util.List;
return sampleFormat;
}
return sampleFormat.copyWithContainerInfo(containerFormat.id, containerFormat.bitrate,
containerFormat.width, containerFormat.height, containerFormat.language);
containerFormat.width, containerFormat.height, 0, containerFormat.language);
}
/**
......
......@@ -165,7 +165,7 @@ import java.util.regex.Pattern;
private TrackOutput buildTrackOutput(long subsampleOffsetUs) {
TrackOutput trackOutput = output.track(0);
trackOutput.format(Format.createTextSampleFormat(null, MimeTypes.TEXT_VTT, Format.NO_VALUE,
trackOutput.format(Format.createTextSampleFormat(null, MimeTypes.TEXT_VTT, Format.NO_VALUE, 0,
language, null, subsampleOffsetUs));
output.endTracks();
return trackOutput;
......
......@@ -168,7 +168,7 @@ public final class HlsPlaylistParser implements UriLoadable.Parser<HlsPlaylist>
String captionName = HlsParserUtil.parseStringAttr(line, NAME_ATTR_REGEX, NAME_ATTR);
String language = HlsParserUtil.parseOptionalStringAttr(line, LANGUAGE_ATTR_REGEX);
muxedCaptionFormat = Format.createTextContainerFormat(captionName,
MimeTypes.APPLICATION_M3U8, MimeTypes.APPLICATION_EIA608, -1, language);
MimeTypes.APPLICATION_M3U8, MimeTypes.APPLICATION_EIA608, -1, 0, language);
}
} else if (SUBTITLES_TYPE.equals(type)) {
// We assume all subtitles belong to the same group.
......@@ -176,7 +176,7 @@ public final class HlsPlaylistParser implements UriLoadable.Parser<HlsPlaylist>
String uri = HlsParserUtil.parseStringAttr(line, URI_ATTR_REGEX, URI_ATTR);
String language = HlsParserUtil.parseOptionalStringAttr(line, LANGUAGE_ATTR_REGEX);
Format format = Format.createTextContainerFormat(subtitleName, MimeTypes.APPLICATION_M3U8,
MimeTypes.TEXT_VTT, bitrate, language);
MimeTypes.TEXT_VTT, bitrate, 0, language);
subtitles.add(new Variant(uri, format, codecs));
} else if (AUDIO_TYPE.equals(type)) {
// We assume all audios belong to the same group.
......@@ -185,7 +185,7 @@ public final class HlsPlaylistParser implements UriLoadable.Parser<HlsPlaylist>
String audioName = HlsParserUtil.parseStringAttr(line, NAME_ATTR_REGEX, NAME_ATTR);
int audioBitrate = uri != null ? bitrate : -1;
Format format = Format.createAudioContainerFormat(audioName, MimeTypes.APPLICATION_M3U8,
null, audioBitrate, -1, -1, null, language);
null, audioBitrate, -1, -1, null, 0, language);
if (uri != null) {
audios.add(new Variant(uri, format, codecs));
} else {
......
......@@ -641,11 +641,11 @@ public class SmoothStreamingManifestParser implements UriLoadable.Parser<SmoothS
parser.getAttributeValue(null, KEY_CODEC_PRIVATE_DATA));
String language = (String) getNormalizedAttribute(KEY_LANGUAGE);
format = Format.createAudioContainerFormat(id, MimeTypes.AUDIO_MP4, sampleMimeType, bitrate,
channels, samplingRate, codecSpecificData, language);
channels, samplingRate, codecSpecificData, 0, language);
} else if (type == C.TRACK_TYPE_TEXT) {
String language = (String) getNormalizedAttribute(KEY_LANGUAGE);
format = Format.createTextContainerFormat(id, MimeTypes.APPLICATION_MP4, sampleMimeType,
bitrate, language);
bitrate, 0, language);
} else {
format = Format.createContainerFormat(id, MimeTypes.APPLICATION_MP4, sampleMimeType,
bitrate);
......
......@@ -80,7 +80,7 @@ public final class Ac3Util {
channelCount++;
}
return Format.createAudioSampleFormat(trackId, MimeTypes.AUDIO_AC3, Format.NO_VALUE,
Format.NO_VALUE, channelCount, sampleRate, null, drmInitData, language);
Format.NO_VALUE, channelCount, sampleRate, null, drmInitData, 0, language);
}
/**
......@@ -107,7 +107,7 @@ public final class Ac3Util {
channelCount++;
}
return Format.createAudioSampleFormat(trackId, MimeTypes.AUDIO_E_AC3, Format.NO_VALUE,
Format.NO_VALUE, channelCount, sampleRate, null, drmInitData, language);
Format.NO_VALUE, channelCount, sampleRate, null, drmInitData, 0, language);
}
/**
......@@ -138,7 +138,7 @@ public final class Ac3Util {
boolean lfeon = data.readBit();
return Format.createAudioSampleFormat(trackId, MimeTypes.AUDIO_AC3, Format.NO_VALUE,
Format.NO_VALUE, CHANNEL_COUNT_BY_ACMOD[acmod] + (lfeon ? 1 : 0),
SAMPLE_RATE_BY_FSCOD[fscod], null, drmInitData, language);
SAMPLE_RATE_BY_FSCOD[fscod], null, drmInitData, 0, language);
}
/**
......@@ -166,7 +166,7 @@ public final class Ac3Util {
boolean lfeon = data.readBit();
return Format.createAudioSampleFormat(trackId, MimeTypes.AUDIO_E_AC3, Format.NO_VALUE,
Format.NO_VALUE, CHANNEL_COUNT_BY_ACMOD[acmod] + (lfeon ? 1 : 0), sampleRate, null,
drmInitData, language);
drmInitData, 0, language);
}
/**
......
......@@ -73,7 +73,7 @@ public final class DtsUtil {
frameBits.skipBits(10); // MIX, DYNF, TIMEF, AUXF, HDCD, EXT_AUDIO_ID, EXT_AUDIO, ASPF
channelCount += frameBits.readBits(2) > 0 ? 1 : 0; // LFF
return Format.createAudioSampleFormat(trackId, MimeTypes.AUDIO_DTS, bitrate, Format.NO_VALUE,
channelCount, sampleRate, null, drmInitData, language);
channelCount, sampleRate, null, drmInitData, 0, language);
}
/**
......
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