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 41 additions and 41 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")
......
......@@ -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