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