Commit 42351d31 by Rik Heijdens

Added id property to MediaFormat

Added the property 'id' to the MediaFormat class
 which serves as an identifier for the track.

DASH Representations will have the "id's" from their
Media Presentation Description mapped to the id property
 in the MediaFormat class that will represent the track.

We needed this for an use case where we wanted to read the 'id'
value from the DASH representation and present it to the user
in order for the user to select the right track.
parent 5b81612c
package com.google.android.exoplayer.demo;
/**
* @author Rik Heijdens <rik@jwplayer.com>
*/
public class MediaFormatIdTextViewHelper {
}
...@@ -45,20 +45,20 @@ public final class MediaFormatTest extends TestCase { ...@@ -45,20 +45,20 @@ public final class MediaFormatTest extends TestCase {
initData.add(initData2); initData.add(initData2);
testConversionToFrameworkFormatV16(MediaFormat.createVideoFormat( testConversionToFrameworkFormatV16(MediaFormat.createVideoFormat(
MediaFormat.NO_VALUE, "video/xyz", 5000, 102400, 1000L, 1280, 720, initData)); null, MediaFormat.NO_VALUE, "video/xyz", 5000, 102400, 1000L, 1280, 720, initData));
testConversionToFrameworkFormatV16(MediaFormat.createVideoFormat( testConversionToFrameworkFormatV16(MediaFormat.createVideoFormat(
MediaFormat.NO_VALUE, "video/xyz", 5000, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, 1280, 720, null, MediaFormat.NO_VALUE, "video/xyz", 5000, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, 1280, 720,
null)); null));
testConversionToFrameworkFormatV16(MediaFormat.createAudioFormat( testConversionToFrameworkFormatV16(MediaFormat.createAudioFormat(
MediaFormat.NO_VALUE, "audio/xyz", 500, 128, 1000L, 5, 44100, initData, null)); null, MediaFormat.NO_VALUE, "audio/xyz", 500, 128, 1000L, 5, 44100, initData, null));
testConversionToFrameworkFormatV16(MediaFormat.createAudioFormat( testConversionToFrameworkFormatV16(MediaFormat.createAudioFormat(
MediaFormat.NO_VALUE, "audio/xyz", 500, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, 5, 44100, null, MediaFormat.NO_VALUE, "audio/xyz", 500, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, 5, 44100,
null, null)); null, null));
testConversionToFrameworkFormatV16( testConversionToFrameworkFormatV16(
MediaFormat.createTextFormat(MediaFormat.NO_VALUE, "text/xyz", MediaFormat.NO_VALUE, 1000L, MediaFormat.createTextFormat(null, MediaFormat.NO_VALUE, "text/xyz", MediaFormat.NO_VALUE, 1000L,
"eng")); "eng"));
testConversionToFrameworkFormatV16( testConversionToFrameworkFormatV16(
MediaFormat.createTextFormat(MediaFormat.NO_VALUE, "text/xyz", MediaFormat.NO_VALUE, MediaFormat.createTextFormat(null, MediaFormat.NO_VALUE, "text/xyz", MediaFormat.NO_VALUE,
C.UNKNOWN_TIME_US, null)); C.UNKNOWN_TIME_US, null));
} }
......
...@@ -315,7 +315,7 @@ public final class FrameworkSampleSource implements SampleSource, SampleSourceRe ...@@ -315,7 +315,7 @@ public final class FrameworkSampleSource implements SampleSource, SampleSourceRe
} }
long durationUs = format.containsKey(android.media.MediaFormat.KEY_DURATION) long durationUs = format.containsKey(android.media.MediaFormat.KEY_DURATION)
? format.getLong(android.media.MediaFormat.KEY_DURATION) : C.UNKNOWN_TIME_US; ? format.getLong(android.media.MediaFormat.KEY_DURATION) : C.UNKNOWN_TIME_US;
MediaFormat mediaFormat = new MediaFormat(MediaFormat.NO_VALUE, mimeType, MediaFormat.NO_VALUE, MediaFormat mediaFormat = new MediaFormat(null, MediaFormat.NO_VALUE, mimeType, MediaFormat.NO_VALUE,
maxInputSize, durationUs, width, height, rotationDegrees, MediaFormat.NO_VALUE, maxInputSize, durationUs, width, height, rotationDegrees, MediaFormat.NO_VALUE,
channelCount, sampleRate, language, MediaFormat.OFFSET_SAMPLE_RELATIVE, initializationData, channelCount, sampleRate, language, MediaFormat.OFFSET_SAMPLE_RELATIVE, initializationData,
false, MediaFormat.NO_VALUE, MediaFormat.NO_VALUE); false, MediaFormat.NO_VALUE, MediaFormat.NO_VALUE);
......
...@@ -38,7 +38,10 @@ public final class MediaFormat { ...@@ -38,7 +38,10 @@ public final class MediaFormat {
* the timestamps of their parent samples. * the timestamps of their parent samples.
*/ */
public static final long OFFSET_SAMPLE_RELATIVE = Long.MAX_VALUE; public static final long OFFSET_SAMPLE_RELATIVE = Long.MAX_VALUE;
/**
* An identifier for the format.
*/
public final String id;
/** /**
* The identifier for the track represented by the format, or {@link #NO_VALUE} if unknown or not * The identifier for the track represented by the format, or {@link #NO_VALUE} if unknown or not
* applicable. * applicable.
...@@ -139,52 +142,53 @@ public final class MediaFormat { ...@@ -139,52 +142,53 @@ public final class MediaFormat {
private int hashCode; private int hashCode;
private android.media.MediaFormat frameworkMediaFormat; private android.media.MediaFormat frameworkMediaFormat;
public static MediaFormat createVideoFormat(int trackId, String mimeType, int bitrate, public static MediaFormat createVideoFormat(String id, int trackId, String mimeType, int bitrate,
int maxInputSize, long durationUs, int width, int height, List<byte[]> initializationData) { int maxInputSize, long durationUs, int width, int height, List<byte[]> initializationData) {
return createVideoFormat(trackId, mimeType, bitrate, maxInputSize, durationUs, width, height, return createVideoFormat(id, trackId, mimeType, bitrate, maxInputSize, durationUs, width, height,
initializationData, NO_VALUE, NO_VALUE); initializationData, NO_VALUE, NO_VALUE);
} }
public static MediaFormat createVideoFormat(int trackId, String mimeType, int bitrate, public static MediaFormat createVideoFormat(String id, int trackId, String mimeType, int bitrate,
int maxInputSize, long durationUs, int width, int height, List<byte[]> initializationData, int maxInputSize, long durationUs, int width, int height, List<byte[]> initializationData,
int rotationDegrees, float pixelWidthHeightRatio) { int rotationDegrees, float pixelWidthHeightRatio) {
return new MediaFormat(trackId, mimeType, bitrate, maxInputSize, durationUs, width, height, return new MediaFormat(id, trackId, mimeType, bitrate, maxInputSize, durationUs, width, height,
rotationDegrees, pixelWidthHeightRatio, NO_VALUE, NO_VALUE, null, OFFSET_SAMPLE_RELATIVE, rotationDegrees, pixelWidthHeightRatio, NO_VALUE, NO_VALUE, null, OFFSET_SAMPLE_RELATIVE,
initializationData, false, NO_VALUE, NO_VALUE); initializationData, false, NO_VALUE, NO_VALUE);
} }
public static MediaFormat createAudioFormat(int trackId, String mimeType, int bitrate, public static MediaFormat createAudioFormat(String id, int trackId, String mimeType, int bitrate,
int maxInputSize, long durationUs, int channelCount, int sampleRate, int maxInputSize, long durationUs, int channelCount, int sampleRate,
List<byte[]> initializationData, String language) { List<byte[]> initializationData, String language) {
return new MediaFormat(trackId, mimeType, bitrate, maxInputSize, durationUs, NO_VALUE, NO_VALUE, return new MediaFormat(id, trackId, mimeType, bitrate, maxInputSize, durationUs, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, channelCount, sampleRate, language, OFFSET_SAMPLE_RELATIVE, NO_VALUE, NO_VALUE, channelCount, sampleRate, language, OFFSET_SAMPLE_RELATIVE,
initializationData, false, NO_VALUE, NO_VALUE); initializationData, false, NO_VALUE, NO_VALUE);
} }
public static MediaFormat createTextFormat(int trackId, String mimeType, int bitrate, public static MediaFormat createTextFormat(String id, int trackId, String mimeType, int bitrate,
long durationUs, String language) { long durationUs, String language) {
return createTextFormat(trackId, mimeType, bitrate, durationUs, language, return createTextFormat(id, trackId, mimeType, bitrate, durationUs, language,
OFFSET_SAMPLE_RELATIVE); OFFSET_SAMPLE_RELATIVE);
} }
public static MediaFormat createTextFormat(int trackId, String mimeType, int bitrate, public static MediaFormat createTextFormat(String id, int trackId, String mimeType, int bitrate,
long durationUs, String language, long subsampleOffsetUs) { long durationUs, String language, long subsampleOffsetUs) {
return new MediaFormat(trackId, mimeType, bitrate, NO_VALUE, durationUs, NO_VALUE, NO_VALUE, return new MediaFormat(id, trackId, mimeType, bitrate, NO_VALUE, durationUs, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, language, subsampleOffsetUs, null, false, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, language, subsampleOffsetUs, null, false, NO_VALUE,
NO_VALUE); NO_VALUE);
} }
public static MediaFormat createFormatForMimeType(int trackId, String mimeType, int bitrate, public static MediaFormat createFormatForMimeType(String id, int trackId, String mimeType, int bitrate,
long durationUs) { long durationUs) {
return new MediaFormat(trackId, mimeType, bitrate, NO_VALUE, durationUs, NO_VALUE, NO_VALUE, return new MediaFormat(id, trackId, mimeType, bitrate, NO_VALUE, durationUs, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, OFFSET_SAMPLE_RELATIVE, null, false, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, OFFSET_SAMPLE_RELATIVE, null, false, NO_VALUE,
NO_VALUE); NO_VALUE);
} }
/* package */ MediaFormat(int trackId, String mimeType, int bitrate, int maxInputSize, /* package */ MediaFormat(String id, int trackId, String mimeType, int bitrate, int maxInputSize,
long durationUs, int width, int height, int rotationDegrees, float pixelWidthHeightRatio, long durationUs, int width, int height, int rotationDegrees, float pixelWidthHeightRatio,
int channelCount, int sampleRate, String language, long subsampleOffsetUs, int channelCount, int sampleRate, String language, long subsampleOffsetUs,
List<byte[]> initializationData, boolean adaptive, int maxWidth, int maxHeight) { List<byte[]> initializationData, boolean adaptive, int maxWidth, int maxHeight) {
this.id = id;
this.trackId = trackId; this.trackId = trackId;
this.mimeType = Assertions.checkNotEmpty(mimeType); this.mimeType = Assertions.checkNotEmpty(mimeType);
this.bitrate = bitrate; this.bitrate = bitrate;
...@@ -206,25 +210,25 @@ public final class MediaFormat { ...@@ -206,25 +210,25 @@ public final class MediaFormat {
} }
public MediaFormat copyWithMaxVideoDimensions(int maxWidth, int maxHeight) { public MediaFormat copyWithMaxVideoDimensions(int maxWidth, int maxHeight) {
return new MediaFormat(trackId, mimeType, bitrate, maxInputSize, durationUs, width, height, return new MediaFormat(id, trackId, mimeType, bitrate, maxInputSize, durationUs, width, height,
rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate, language, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate, language,
subsampleOffsetUs, initializationData, adaptive, maxWidth, maxHeight); subsampleOffsetUs, initializationData, adaptive, maxWidth, maxHeight);
} }
public MediaFormat copyWithSubsampleOffsetUs(long subsampleOffsetUs) { public MediaFormat copyWithSubsampleOffsetUs(long subsampleOffsetUs) {
return new MediaFormat(trackId, mimeType, bitrate, maxInputSize, durationUs, width, height, return new MediaFormat(id, trackId, mimeType, bitrate, maxInputSize, durationUs, width, height,
rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate, language, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate, language,
subsampleOffsetUs, initializationData, adaptive, maxWidth, maxHeight); subsampleOffsetUs, initializationData, adaptive, maxWidth, maxHeight);
} }
public MediaFormat copyWithDurationUs(long durationUs) { public MediaFormat copyWithDurationUs(long durationUs) {
return new MediaFormat(trackId, mimeType, bitrate, maxInputSize, durationUs, width, height, return new MediaFormat(id, trackId, mimeType, bitrate, maxInputSize, durationUs, width, height,
rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate, language, rotationDegrees, pixelWidthHeightRatio, channelCount, sampleRate, language,
subsampleOffsetUs, initializationData, adaptive, maxWidth, maxHeight); subsampleOffsetUs, initializationData, adaptive, maxWidth, maxHeight);
} }
public MediaFormat copyAsAdaptive() { public MediaFormat copyAsAdaptive() {
return new MediaFormat(trackId, mimeType, NO_VALUE, NO_VALUE, durationUs, NO_VALUE, NO_VALUE, return new MediaFormat(id, trackId, mimeType, NO_VALUE, NO_VALUE, durationUs, NO_VALUE, NO_VALUE,
NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, OFFSET_SAMPLE_RELATIVE, null, true, maxWidth, NO_VALUE, NO_VALUE, NO_VALUE, NO_VALUE, null, OFFSET_SAMPLE_RELATIVE, null, true, maxWidth,
maxHeight); maxHeight);
} }
......
...@@ -608,14 +608,14 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -608,14 +608,14 @@ public class DashChunkSource implements ChunkSource, Output {
String mediaMimeType, long durationUs) { String mediaMimeType, long durationUs) {
switch (adaptationSetType) { switch (adaptationSetType) {
case AdaptationSet.TYPE_VIDEO: case AdaptationSet.TYPE_VIDEO:
return MediaFormat.createVideoFormat(MediaFormat.NO_VALUE, mediaMimeType, format.bitrate, return MediaFormat.createVideoFormat(format.id, MediaFormat.NO_VALUE, mediaMimeType, format.bitrate,
MediaFormat.NO_VALUE, durationUs, format.width, format.height, null); MediaFormat.NO_VALUE, durationUs, format.width, format.height, null);
case AdaptationSet.TYPE_AUDIO: case AdaptationSet.TYPE_AUDIO:
return MediaFormat.createAudioFormat(MediaFormat.NO_VALUE, mediaMimeType, format.bitrate, return MediaFormat.createAudioFormat(format.id, MediaFormat.NO_VALUE, mediaMimeType, format.bitrate,
MediaFormat.NO_VALUE, durationUs, format.audioChannels, format.audioSamplingRate, null, MediaFormat.NO_VALUE, durationUs, format.audioChannels, format.audioSamplingRate, null,
format.language); format.language);
case AdaptationSet.TYPE_TEXT: case AdaptationSet.TYPE_TEXT:
return MediaFormat.createTextFormat(MediaFormat.NO_VALUE, mediaMimeType, format.bitrate, return MediaFormat.createTextFormat(format.id, MediaFormat.NO_VALUE, mediaMimeType, format.bitrate,
durationUs, format.language); durationUs, format.language);
default: default:
return null; return null;
...@@ -846,6 +846,7 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -846,6 +846,7 @@ public class DashChunkSource implements ChunkSource, Output {
public ExposedTrack(MediaFormat trackFormat, int adaptationSetIndex, Format fixedFormat) { public ExposedTrack(MediaFormat trackFormat, int adaptationSetIndex, Format fixedFormat) {
this.trackFormat = trackFormat; this.trackFormat = trackFormat;
this.adaptationSetIndex = adaptationSetIndex; this.adaptationSetIndex = adaptationSetIndex;
this.fixedFormat = fixedFormat; this.fixedFormat = fixedFormat;
this.adaptiveFormats = null; this.adaptiveFormats = null;
...@@ -865,9 +866,9 @@ public class DashChunkSource implements ChunkSource, Output { ...@@ -865,9 +866,9 @@ public class DashChunkSource implements ChunkSource, Output {
public boolean isAdaptive() { public boolean isAdaptive() {
return adaptiveFormats != null; return adaptiveFormats != null;
}
} }
}
private static final class RepresentationHolder { private static final class RepresentationHolder {
......
...@@ -332,7 +332,7 @@ public final class Mp3Extractor implements Extractor { ...@@ -332,7 +332,7 @@ public final class Mp3Extractor implements Extractor {
if (seeker == null) { if (seeker == null) {
setupSeeker(extractorInput, headerPosition); setupSeeker(extractorInput, headerPosition);
extractorOutput.seekMap(seeker); extractorOutput.seekMap(seeker);
trackOutput.format(MediaFormat.createAudioFormat(MediaFormat.NO_VALUE, trackOutput.format(MediaFormat.createAudioFormat(null, MediaFormat.NO_VALUE,
synchronizedHeader.mimeType, MediaFormat.NO_VALUE, MpegAudioHeader.MAX_FRAME_SIZE_BYTES, synchronizedHeader.mimeType, MediaFormat.NO_VALUE, MpegAudioHeader.MAX_FRAME_SIZE_BYTES,
seeker.getDurationUs(), synchronizedHeader.channels, synchronizedHeader.sampleRate, null, seeker.getDurationUs(), synchronizedHeader.channels, synchronizedHeader.sampleRate, null,
null)); null));
......
...@@ -383,13 +383,13 @@ import java.util.List; ...@@ -383,13 +383,13 @@ import java.util.List;
parseAudioSampleEntry(stsd, childAtomType, childStartPosition, childAtomSize, trackId, parseAudioSampleEntry(stsd, childAtomType, childStartPosition, childAtomSize, trackId,
durationUs, language, out, i); durationUs, language, out, i);
} else if (childAtomType == Atom.TYPE_TTML) { } else if (childAtomType == Atom.TYPE_TTML) {
out.mediaFormat = MediaFormat.createTextFormat(trackId, MimeTypes.APPLICATION_TTML, out.mediaFormat = MediaFormat.createTextFormat(null, trackId, MimeTypes.APPLICATION_TTML,
MediaFormat.NO_VALUE, durationUs, language); MediaFormat.NO_VALUE, durationUs, language);
} else if (childAtomType == Atom.TYPE_tx3g) { } else if (childAtomType == Atom.TYPE_tx3g) {
out.mediaFormat = MediaFormat.createTextFormat(trackId, MimeTypes.APPLICATION_TX3G, out.mediaFormat = MediaFormat.createTextFormat(null, trackId, MimeTypes.APPLICATION_TX3G,
MediaFormat.NO_VALUE, durationUs, language); MediaFormat.NO_VALUE, durationUs, language);
} else if (childAtomType == Atom.TYPE_stpp) { } else if (childAtomType == Atom.TYPE_stpp) {
out.mediaFormat = MediaFormat.createTextFormat(trackId, MimeTypes.APPLICATION_TTML, out.mediaFormat = MediaFormat.createTextFormat(null, trackId, MimeTypes.APPLICATION_TTML,
MediaFormat.NO_VALUE, durationUs, language, 0 /* subsample timing is absolute */); MediaFormat.NO_VALUE, durationUs, language, 0 /* subsample timing is absolute */);
} }
stsd.setPosition(childStartPosition + childAtomSize); stsd.setPosition(childStartPosition + childAtomSize);
...@@ -460,7 +460,7 @@ import java.util.List; ...@@ -460,7 +460,7 @@ import java.util.List;
return; return;
} }
out.mediaFormat = MediaFormat.createVideoFormat(trackId, mimeType, MediaFormat.NO_VALUE, out.mediaFormat = MediaFormat.createVideoFormat(null, trackId, mimeType, MediaFormat.NO_VALUE,
MediaFormat.NO_VALUE, durationUs, width, height, initializationData, rotationDegrees, MediaFormat.NO_VALUE, durationUs, width, height, initializationData, rotationDegrees,
pixelWidthHeightRatio); pixelWidthHeightRatio);
} }
...@@ -649,7 +649,7 @@ import java.util.List; ...@@ -649,7 +649,7 @@ import java.util.List;
} else if ((atomType == Atom.TYPE_dtsc || atomType == Atom.TYPE_dtse } else if ((atomType == Atom.TYPE_dtsc || atomType == Atom.TYPE_dtse
|| 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.mediaFormat = MediaFormat.createAudioFormat(trackId, mimeType, MediaFormat.NO_VALUE, out.mediaFormat = MediaFormat.createAudioFormat(null, trackId, mimeType, MediaFormat.NO_VALUE,
MediaFormat.NO_VALUE, durationUs, channelCount, sampleRate, null, language); MediaFormat.NO_VALUE, durationUs, channelCount, sampleRate, null, language);
return; return;
} }
...@@ -661,7 +661,7 @@ import java.util.List; ...@@ -661,7 +661,7 @@ import java.util.List;
return; return;
} }
out.mediaFormat = MediaFormat.createAudioFormat(trackId, mimeType, MediaFormat.NO_VALUE, out.mediaFormat = MediaFormat.createAudioFormat(null, trackId, mimeType, MediaFormat.NO_VALUE,
sampleSize, durationUs, channelCount, sampleRate, sampleSize, durationUs, channelCount, sampleRate,
initializationData == null ? null : Collections.singletonList(initializationData), initializationData == null ? null : Collections.singletonList(initializationData),
language); language);
......
...@@ -170,7 +170,7 @@ import java.util.Collections; ...@@ -170,7 +170,7 @@ import java.util.Collections;
Pair<Integer, Integer> audioParams = CodecSpecificDataUtil.parseAacAudioSpecificConfig( Pair<Integer, Integer> audioParams = CodecSpecificDataUtil.parseAacAudioSpecificConfig(
audioSpecificConfig); audioSpecificConfig);
MediaFormat mediaFormat = MediaFormat.createAudioFormat(MediaFormat.NO_VALUE, MediaFormat mediaFormat = MediaFormat.createAudioFormat(null, MediaFormat.NO_VALUE,
MimeTypes.AUDIO_AAC, MediaFormat.NO_VALUE, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, MimeTypes.AUDIO_AAC, MediaFormat.NO_VALUE, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US,
audioParams.second, audioParams.first, Collections.singletonList(audioSpecificConfig), audioParams.second, audioParams.first, Collections.singletonList(audioSpecificConfig),
null); null);
......
...@@ -210,7 +210,7 @@ import java.util.List; ...@@ -210,7 +210,7 @@ import java.util.List;
SpsData parsedSpsData = CodecSpecificDataUtil.parseSpsNalUnit(bitArray); SpsData parsedSpsData = CodecSpecificDataUtil.parseSpsNalUnit(bitArray);
// Construct and output the format. // Construct and output the format.
output.format(MediaFormat.createVideoFormat(MediaFormat.NO_VALUE, MimeTypes.VIDEO_H264, output.format(MediaFormat.createVideoFormat(null, MediaFormat.NO_VALUE, MimeTypes.VIDEO_H264,
MediaFormat.NO_VALUE, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, parsedSpsData.width, MediaFormat.NO_VALUE, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, parsedSpsData.width,
parsedSpsData.height, initializationData, MediaFormat.NO_VALUE, parsedSpsData.height, initializationData, MediaFormat.NO_VALUE,
parsedSpsData.pixelWidthAspectRatio)); parsedSpsData.pixelWidthAspectRatio));
......
...@@ -294,7 +294,7 @@ import java.util.Collections; ...@@ -294,7 +294,7 @@ import java.util.Collections;
} }
} }
output.format(MediaFormat.createVideoFormat(MediaFormat.NO_VALUE, MimeTypes.VIDEO_H265, output.format(MediaFormat.createVideoFormat(null, MediaFormat.NO_VALUE, MimeTypes.VIDEO_H265,
MediaFormat.NO_VALUE, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, picWidthInLumaSamples, MediaFormat.NO_VALUE, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, picWidthInLumaSamples,
picHeightInLumaSamples, Collections.singletonList(csd), MediaFormat.NO_VALUE, picHeightInLumaSamples, Collections.singletonList(csd), MediaFormat.NO_VALUE,
pixelWidthHeightRatio)); pixelWidthHeightRatio));
......
...@@ -35,7 +35,7 @@ import com.google.android.exoplayer.util.ParsableByteArray; ...@@ -35,7 +35,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
public Id3Reader(TrackOutput output) { public Id3Reader(TrackOutput output) {
super(output); super(output);
output.format(MediaFormat.createFormatForMimeType(MediaFormat.NO_VALUE, output.format(MediaFormat.createFormatForMimeType(null, MediaFormat.NO_VALUE,
MimeTypes.APPLICATION_ID3, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US)); MimeTypes.APPLICATION_ID3, MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US));
} }
......
...@@ -160,7 +160,7 @@ import com.google.android.exoplayer.util.ParsableByteArray; ...@@ -160,7 +160,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
frameSize = header.frameSize; frameSize = header.frameSize;
if (!hasOutputFormat) { if (!hasOutputFormat) {
frameDurationUs = (C.MICROS_PER_SECOND * header.samplesPerFrame) / header.sampleRate; frameDurationUs = (C.MICROS_PER_SECOND * header.samplesPerFrame) / header.sampleRate;
MediaFormat mediaFormat = MediaFormat.createAudioFormat(MediaFormat.NO_VALUE, header.mimeType, MediaFormat mediaFormat = MediaFormat.createAudioFormat(null, MediaFormat.NO_VALUE, header.mimeType,
MediaFormat.NO_VALUE, MpegAudioHeader.MAX_FRAME_SIZE_BYTES, C.UNKNOWN_TIME_US, MediaFormat.NO_VALUE, MpegAudioHeader.MAX_FRAME_SIZE_BYTES, C.UNKNOWN_TIME_US,
header.channels, header.sampleRate, null, null); header.channels, header.sampleRate, null, null);
output.format(mediaFormat); output.format(mediaFormat);
......
...@@ -32,7 +32,7 @@ import com.google.android.exoplayer.util.ParsableByteArray; ...@@ -32,7 +32,7 @@ import com.google.android.exoplayer.util.ParsableByteArray;
public SeiReader(TrackOutput output) { public SeiReader(TrackOutput output) {
super(output); super(output);
output.format(MediaFormat.createTextFormat(MediaFormat.NO_VALUE, MimeTypes.APPLICATION_EIA608, output.format(MediaFormat.createTextFormat(null, MediaFormat.NO_VALUE, MimeTypes.APPLICATION_EIA608,
MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, null)); MediaFormat.NO_VALUE, C.UNKNOWN_TIME_US, null));
} }
......
...@@ -1209,14 +1209,16 @@ public final class WebmExtractor implements Extractor { ...@@ -1209,14 +1209,16 @@ public final class WebmExtractor implements Extractor {
} }
MediaFormat format; MediaFormat format;
// TODO: Read the name of the track from the header of the webm container and
// supply this as id instead of 'null'
if (MimeTypes.isAudio(mimeType)) { if (MimeTypes.isAudio(mimeType)) {
format = MediaFormat.createAudioFormat(trackId, mimeType, MediaFormat.NO_VALUE, format = MediaFormat.createAudioFormat(null, trackId, mimeType, MediaFormat.NO_VALUE,
maxInputSize, durationUs, channelCount, sampleRate, initializationData, language); maxInputSize, durationUs, channelCount, sampleRate, initializationData, language);
} else if (MimeTypes.isVideo(mimeType)) { } else if (MimeTypes.isVideo(mimeType)) {
format = MediaFormat.createVideoFormat(trackId, mimeType, MediaFormat.NO_VALUE, format = MediaFormat.createVideoFormat(null, trackId, mimeType, MediaFormat.NO_VALUE,
maxInputSize, durationUs, width, height, initializationData); maxInputSize, durationUs, width, height, initializationData);
} else if (MimeTypes.APPLICATION_SUBRIP.equals(mimeType)) { } else if (MimeTypes.APPLICATION_SUBRIP.equals(mimeType)) {
format = MediaFormat.createTextFormat(trackId, mimeType, MediaFormat.NO_VALUE, durationUs, format = MediaFormat.createTextFormat(null, trackId, mimeType, MediaFormat.NO_VALUE, durationUs,
language); language);
} else { } else {
throw new ParserException("Unexpected MIME type."); throw new ParserException("Unexpected MIME type.");
......
...@@ -398,7 +398,7 @@ public class SmoothStreamingChunkSource implements ChunkSource, ...@@ -398,7 +398,7 @@ public class SmoothStreamingChunkSource implements ChunkSource,
int mp4TrackType; int mp4TrackType;
switch (element.type) { switch (element.type) {
case StreamElement.TYPE_VIDEO: case StreamElement.TYPE_VIDEO:
mediaFormat = MediaFormat.createVideoFormat(MediaFormat.NO_VALUE, format.mimeType, mediaFormat = MediaFormat.createVideoFormat(format.id, MediaFormat.NO_VALUE, format.mimeType,
format.bitrate, MediaFormat.NO_VALUE, durationUs, format.width, format.height, format.bitrate, MediaFormat.NO_VALUE, durationUs, format.width, format.height,
Arrays.asList(csdArray)); Arrays.asList(csdArray));
mp4TrackType = Track.TYPE_vide; mp4TrackType = Track.TYPE_vide;
...@@ -411,13 +411,13 @@ public class SmoothStreamingChunkSource implements ChunkSource, ...@@ -411,13 +411,13 @@ public class SmoothStreamingChunkSource implements ChunkSource,
csd = Collections.singletonList(CodecSpecificDataUtil.buildAacAudioSpecificConfig( csd = Collections.singletonList(CodecSpecificDataUtil.buildAacAudioSpecificConfig(
format.audioSamplingRate, format.audioChannels)); format.audioSamplingRate, format.audioChannels));
} }
mediaFormat = MediaFormat.createAudioFormat(MediaFormat.NO_VALUE, format.mimeType, mediaFormat = MediaFormat.createAudioFormat(format.id, MediaFormat.NO_VALUE, format.mimeType,
format.bitrate, MediaFormat.NO_VALUE, durationUs, format.audioChannels, format.bitrate, MediaFormat.NO_VALUE, durationUs, format.audioChannels,
format.audioSamplingRate, csd, format.language); format.audioSamplingRate, csd, format.language);
mp4TrackType = Track.TYPE_soun; mp4TrackType = Track.TYPE_soun;
break; break;
case StreamElement.TYPE_TEXT: case StreamElement.TYPE_TEXT:
mediaFormat = MediaFormat.createTextFormat(MediaFormat.NO_VALUE, format.mimeType, mediaFormat = MediaFormat.createTextFormat(format.id, MediaFormat.NO_VALUE, format.mimeType,
format.bitrate, durationUs, format.language); format.bitrate, durationUs, format.language);
mp4TrackType = Track.TYPE_text; mp4TrackType = Track.TYPE_text;
break; break;
......
...@@ -55,7 +55,7 @@ public final class Ac3Util { ...@@ -55,7 +55,7 @@ public final class Ac3Util {
if ((nextByte & 0x04) != 0) { if ((nextByte & 0x04) != 0) {
channelCount++; channelCount++;
} }
return MediaFormat.createAudioFormat(trackId, MimeTypes.AUDIO_AC3, MediaFormat.NO_VALUE, return MediaFormat.createAudioFormat(null, trackId, MimeTypes.AUDIO_AC3, MediaFormat.NO_VALUE,
MediaFormat.NO_VALUE, durationUs, channelCount, sampleRate, null, language); MediaFormat.NO_VALUE, durationUs, channelCount, sampleRate, null, language);
} }
...@@ -85,7 +85,7 @@ public final class Ac3Util { ...@@ -85,7 +85,7 @@ public final class Ac3Util {
if ((nextByte & 0x01) != 0) { if ((nextByte & 0x01) != 0) {
channelCount++; channelCount++;
} }
return MediaFormat.createAudioFormat(trackId, MimeTypes.AUDIO_EC3, MediaFormat.NO_VALUE, return MediaFormat.createAudioFormat(null, trackId, MimeTypes.AUDIO_EC3, MediaFormat.NO_VALUE,
MediaFormat.NO_VALUE, durationUs, channelCount, sampleRate, null, language); MediaFormat.NO_VALUE, durationUs, channelCount, sampleRate, null, language);
} }
...@@ -117,7 +117,7 @@ public final class Ac3Util { ...@@ -117,7 +117,7 @@ public final class Ac3Util {
data.skipBits(2); // dsurmod data.skipBits(2); // dsurmod
} }
boolean lfeon = data.readBit(); boolean lfeon = data.readBit();
return MediaFormat.createAudioFormat(trackId, MimeTypes.AUDIO_AC3, MediaFormat.NO_VALUE, return MediaFormat.createAudioFormat(null, trackId, MimeTypes.AUDIO_AC3, MediaFormat.NO_VALUE,
MediaFormat.NO_VALUE, durationUs, CHANNEL_COUNTS[acmod] + (lfeon ? 1 : 0), MediaFormat.NO_VALUE, durationUs, CHANNEL_COUNTS[acmod] + (lfeon ? 1 : 0),
SAMPLE_RATES[fscod], null, language); SAMPLE_RATES[fscod], null, 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