Remove unnecessary configuration parameter.

- It's always fine to prefer the manifest drm init data. In
  DASH we always do this anyway. In SS the manifest and sample
  formats are identical.
- Optimized the case where the manifest and sample formats are
  identical by avoiding the format copy.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=147385282
This commit is contained in:
olly 2017-02-13 13:27:17 -08:00 committed by Oliver Woodman
parent 8cb3b6ed07
commit 7625c1b862
5 changed files with 12 additions and 18 deletions

View file

@ -438,16 +438,19 @@ public final class Format implements Parcelable {
drmInitData, metadata);
}
public Format copyWithManifestFormatInfo(Format manifestFormat,
boolean preferManifestDrmInitData) {
public Format copyWithManifestFormatInfo(Format manifestFormat) {
if (this == manifestFormat) {
// No need to copy from ourselves.
return this;
}
String id = manifestFormat.id;
String codecs = this.codecs == null ? manifestFormat.codecs : this.codecs;
int bitrate = this.bitrate == NO_VALUE ? manifestFormat.bitrate : this.bitrate;
float frameRate = this.frameRate == NO_VALUE ? manifestFormat.frameRate : this.frameRate;
@C.SelectionFlags int selectionFlags = this.selectionFlags | manifestFormat.selectionFlags;
String language = this.language == null ? manifestFormat.language : this.language;
DrmInitData drmInitData = (preferManifestDrmInitData && manifestFormat.drmInitData != null)
|| this.drmInitData == null ? manifestFormat.drmInitData : this.drmInitData;
DrmInitData drmInitData = manifestFormat.drmInitData != null ? manifestFormat.drmInitData
: this.drmInitData;
return new Format(id, containerMimeType, sampleMimeType, codecs, bitrate, maxInputSize, width,
height, frameRate, rotationDegrees, pixelWidthHeightRatio, projectionData, stereoMode,
channelCount, sampleRate, pcmEncoding, encoderDelay, encoderPadding, selectionFlags,

View file

@ -312,8 +312,7 @@ public final class OfflineLicenseHelper<T extends ExoMediaCrypto> {
final boolean isWebm = mimeType.startsWith(MimeTypes.VIDEO_WEBM)
|| mimeType.startsWith(MimeTypes.AUDIO_WEBM);
final Extractor extractor = isWebm ? new MatroskaExtractor() : new FragmentedMp4Extractor();
return new ChunkExtractorWrapper(extractor, format, trackType,
false /* preferManifestDrmInitData */);
return new ChunkExtractorWrapper(extractor, format, trackType);
}
}

View file

@ -17,7 +17,6 @@ package com.google.android.exoplayer2.source.chunk;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.drm.DrmInitData;
import com.google.android.exoplayer2.extractor.DummyTrackOutput;
import com.google.android.exoplayer2.extractor.Extractor;
import com.google.android.exoplayer2.extractor.ExtractorInput;
@ -39,7 +38,6 @@ public final class ChunkExtractorWrapper implements ExtractorOutput, TrackOutput
private final Format manifestFormat;
private final int primaryTrackType;
private final boolean preferManifestDrmInitData;
private boolean extractorInitialized;
private TrackOutput trackOutput;
@ -56,15 +54,11 @@ public final class ChunkExtractorWrapper implements ExtractorOutput, TrackOutput
* sample {@link Format} output from the {@link Extractor}.
* @param primaryTrackType The type of the primary track. Typically one of the {@link C}
* {@code TRACK_TYPE_*} constants.
* @param preferManifestDrmInitData Whether {@link DrmInitData} defined in {@code manifestFormat}
* should be preferred when the sample and manifest {@link Format}s are merged.
*/
public ChunkExtractorWrapper(Extractor extractor, Format manifestFormat, int primaryTrackType,
boolean preferManifestDrmInitData) {
public ChunkExtractorWrapper(Extractor extractor, Format manifestFormat, int primaryTrackType) {
this.extractor = extractor;
this.manifestFormat = manifestFormat;
this.primaryTrackType = primaryTrackType;
this.preferManifestDrmInitData = preferManifestDrmInitData;
}
/**
@ -127,7 +121,7 @@ public final class ChunkExtractorWrapper implements ExtractorOutput, TrackOutput
@Override
public void format(Format format) {
sampleFormat = format.copyWithManifestFormatInfo(manifestFormat, preferManifestDrmInitData);
sampleFormat = format.copyWithManifestFormatInfo(manifestFormat);
if (trackOutput != null) {
trackOutput.format(sampleFormat);
}

View file

@ -382,8 +382,7 @@ public class DefaultDashChunkSource implements DashChunkSource {
}
// Prefer drmInitData obtained from the manifest over drmInitData obtained from the stream,
// as per DASH IF Interoperability Recommendations V3.0, 7.5.3.
extractorWrapper = new ChunkExtractorWrapper(extractor, representation.format,
trackType, true /* preferManifestDrmInitData */);
extractorWrapper = new ChunkExtractorWrapper(extractor, representation.format, trackType);
}
segmentIndex = representation.getIndex();
}

View file

@ -102,8 +102,7 @@ public class DefaultSsChunkSource implements SsChunkSource {
FragmentedMp4Extractor extractor = new FragmentedMp4Extractor(
FragmentedMp4Extractor.FLAG_WORKAROUND_EVERY_VIDEO_FRAME_IS_SYNC_FRAME
| FragmentedMp4Extractor.FLAG_WORKAROUND_IGNORE_TFDT_BOX, null, track);
extractorWrappers[i] = new ChunkExtractorWrapper(extractor, format, streamElement.type,
false);
extractorWrappers[i] = new ChunkExtractorWrapper(extractor, format, streamElement.type);
}
}