From 73b6b20fa3e93a3787682b381786a93fb4c98fdb Mon Sep 17 00:00:00 2001 From: olly Date: Thu, 1 Mar 2018 10:49:07 -0800 Subject: [PATCH] Improve decoder retention logic. 1. Allow retaining a decoder without any reconfiguration, in addition to retaining with reconfiguration (and not retaining) 2. Fix retention logic for video decoders to take into account changing ColorInfo 3. Allow retention of audio decoders when possible ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=187500285 --- .../src/androidTest/assets/bear.flac.0.dump | 8 +- .../src/androidTest/assets/bear.flac.1.dump | 8 +- .../src/androidTest/assets/bear.flac.2.dump | 8 +- .../src/androidTest/assets/bear.flac.3.dump | 8 +- .../android/exoplayer2/BaseRenderer.java | 8 + .../com/google/android/exoplayer2/Format.java | 144 ++++++------------ .../audio/MediaCodecAudioRenderer.java | 85 ++++++++++- .../audio/SimpleDecoderAudioRenderer.java | 4 +- .../mediacodec/MediaCodecRenderer.java | 95 +++++++----- .../mediacodec/MediaFormatUtil.java | 111 ++++++++++++++ .../source/ClippingMediaPeriod.java | 2 +- .../video/MediaCodecVideoRenderer.java | 123 ++++++++------- .../src/test/assets/flv/sample.flv.0.dump | 14 +- .../src/test/assets/mkv/sample.mkv.0.dump | 14 +- .../src/test/assets/mkv/sample.mkv.1.dump | 14 +- .../src/test/assets/mkv/sample.mkv.2.dump | 14 +- .../src/test/assets/mkv/sample.mkv.3.dump | 14 +- .../subsample_encrypted_altref.webm.0.dump | 6 +- .../subsample_encrypted_noaltref.webm.0.dump | 6 +- .../core/src/test/assets/mp3/bear.mp3.0.dump | 4 +- .../core/src/test/assets/mp3/bear.mp3.1.dump | 4 +- .../core/src/test/assets/mp3/bear.mp3.2.dump | 4 +- .../core/src/test/assets/mp3/bear.mp3.3.dump | 4 +- .../test/assets/mp3/play-trimmed.mp3.0.dump | 8 +- .../test/assets/mp3/play-trimmed.mp3.1.dump | 8 +- .../test/assets/mp3/play-trimmed.mp3.2.dump | 8 +- .../test/assets/mp3/play-trimmed.mp3.3.dump | 8 +- .../assets/mp3/play-trimmed.mp3.unklen.dump | 8 +- .../src/test/assets/mp4/sample.mp4.0.dump | 12 +- .../src/test/assets/mp4/sample.mp4.1.dump | 12 +- .../src/test/assets/mp4/sample.mp4.2.dump | 12 +- .../src/test/assets/mp4/sample.mp4.3.dump | 12 +- .../assets/mp4/sample_fragmented.mp4.0.dump | 12 +- .../mp4/sample_fragmented_sei.mp4.0.dump | 20 +-- .../core/src/test/assets/ogg/bear.opus.0.dump | 8 +- .../core/src/test/assets/ogg/bear.opus.1.dump | 8 +- .../core/src/test/assets/ogg/bear.opus.2.dump | 8 +- .../core/src/test/assets/ogg/bear.opus.3.dump | 8 +- .../src/test/assets/ogg/bear.opus.unklen.dump | 8 +- .../src/test/assets/ogg/bear_flac.ogg.0.dump | 8 +- .../src/test/assets/ogg/bear_flac.ogg.1.dump | 8 +- .../src/test/assets/ogg/bear_flac.ogg.2.dump | 8 +- .../src/test/assets/ogg/bear_flac.ogg.3.dump | 8 +- .../test/assets/ogg/bear_flac.ogg.unklen.dump | 8 +- .../ogg/bear_flac_noseektable.ogg.0.dump | 8 +- .../ogg/bear_flac_noseektable.ogg.1.dump | 8 +- .../ogg/bear_flac_noseektable.ogg.2.dump | 8 +- .../ogg/bear_flac_noseektable.ogg.3.dump | 8 +- .../ogg/bear_flac_noseektable.ogg.unklen.dump | 8 +- .../test/assets/ogg/bear_vorbis.ogg.0.dump | 8 +- .../test/assets/ogg/bear_vorbis.ogg.1.dump | 8 +- .../test/assets/ogg/bear_vorbis.ogg.2.dump | 8 +- .../test/assets/ogg/bear_vorbis.ogg.3.dump | 8 +- .../assets/ogg/bear_vorbis.ogg.unklen.dump | 8 +- .../src/test/assets/rawcc/sample.rawcc.0.dump | 8 +- .../core/src/test/assets/ts/sample.ac3.0.dump | 8 +- .../src/test/assets/ts/sample.adts.0.dump | 16 +- .../core/src/test/assets/ts/sample.ps.0.dump | 14 +- .../core/src/test/assets/ts/sample.ts.0.dump | 14 +- .../src/test/assets/wav/sample.wav.0.dump | 8 +- .../src/test/assets/wav/sample.wav.1.dump | 8 +- .../src/test/assets/wav/sample.wav.2.dump | 8 +- .../src/test/assets/wav/sample.wav.3.dump | 8 +- .../google/android/exoplayer2/FormatTest.java | 75 --------- 64 files changed, 622 insertions(+), 527 deletions(-) create mode 100644 library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaFormatUtil.java diff --git a/extensions/flac/src/androidTest/assets/bear.flac.0.dump b/extensions/flac/src/androidTest/assets/bear.flac.0.dump index 2a17cbdea6..21a4bcb13b 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.0.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/extensions/flac/src/androidTest/assets/bear.flac.1.dump b/extensions/flac/src/androidTest/assets/bear.flac.1.dump index 412e4a1b8f..b7a7d3ffb9 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.1.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.1.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/extensions/flac/src/androidTest/assets/bear.flac.2.dump b/extensions/flac/src/androidTest/assets/bear.flac.2.dump index 42ebb125d1..44e2eefcb0 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.2.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.2.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/extensions/flac/src/androidTest/assets/bear.flac.3.dump b/extensions/flac/src/androidTest/assets/bear.flac.3.dump index 958cb0d418..41920528c1 100644 --- a/extensions/flac/src/androidTest/assets/bear.flac.3.dump +++ b/extensions/flac/src/androidTest/assets/bear.flac.3.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java index 8ee9a13c55..cb917b9b79 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java @@ -35,6 +35,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities { private int index; private int state; private SampleStream stream; + private Format[] streamFormats; private long streamOffsetUs; private boolean readEndOfStream; private boolean streamIsFinal; @@ -98,6 +99,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities { Assertions.checkState(!streamIsFinal); this.stream = stream; readEndOfStream = false; + streamFormats = formats; streamOffsetUs = offsetUs; onStreamChanged(formats, offsetUs); } @@ -146,6 +148,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities { Assertions.checkState(state == STATE_ENABLED); state = STATE_DISABLED; stream = null; + streamFormats = null; streamIsFinal = false; onDisabled(); } @@ -246,6 +249,11 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities { // Methods to be called by subclasses. + /** Returns the formats of the currently enabled stream. */ + protected final Format[] getStreamFormats() { + return streamFormats; + } + /** * Returns the configuration set when the renderer was most recently enabled. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Format.java b/library/core/src/main/java/com/google/android/exoplayer2/Format.java index c830a246ae..2c4c75a630 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Format.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Format.java @@ -15,9 +15,6 @@ */ package com.google.android.exoplayer2; -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.media.MediaFormat; import android.os.Parcel; import android.os.Parcelable; import com.google.android.exoplayer2.drm.DrmInitData; @@ -25,7 +22,6 @@ import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.video.ColorInfo; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -109,14 +105,10 @@ public final class Format implements Parcelable { public final float frameRate; /** * The clockwise rotation that should be applied to the video for it to be rendered in the correct - * orientation, or {@link #NO_VALUE} if unknown or not applicable. Only 0, 90, 180 and 270 are - * supported. + * orientation, or 0 if unknown or not applicable. Only 0, 90, 180 and 270 are supported. */ public final int rotationDegrees; - /** - * The width to height ratio of pixels in the video, or {@link #NO_VALUE} if unknown or not - * applicable. - */ + /** The width to height ratio of pixels in the video, or 1.0 if unknown or not applicable. */ public final float pixelWidthHeightRatio; /** * The stereo layout for 360/3D/VR video, or {@link #NO_VALUE} if not applicable. Valid stereo @@ -153,11 +145,12 @@ public final class Format implements Parcelable { @C.PcmEncoding public final int pcmEncoding; /** - * The number of samples to trim from the start of the decoded audio stream. + * The number of samples to trim from the start of the decoded audio stream, or 0 if not + * applicable. */ public final int encoderDelay; /** - * The number of samples to trim from the end of the decoded audio stream. + * The number of samples to trim from the end of the decoded audio stream, or 0 if not applicable. */ public final int encoderPadding; @@ -402,16 +395,17 @@ public final class Format implements Parcelable { this.width = width; this.height = height; this.frameRate = frameRate; - this.rotationDegrees = rotationDegrees; - this.pixelWidthHeightRatio = pixelWidthHeightRatio; + this.rotationDegrees = rotationDegrees == Format.NO_VALUE ? 0 : rotationDegrees; + this.pixelWidthHeightRatio = + pixelWidthHeightRatio == Format.NO_VALUE ? 1 : pixelWidthHeightRatio; this.projectionData = projectionData; this.stereoMode = stereoMode; this.colorInfo = colorInfo; this.channelCount = channelCount; this.sampleRate = sampleRate; this.pcmEncoding = pcmEncoding; - this.encoderDelay = encoderDelay; - this.encoderPadding = encoderPadding; + this.encoderDelay = encoderDelay == Format.NO_VALUE ? 0 : encoderDelay; + this.encoderPadding = encoderPadding == Format.NO_VALUE ? 0 : encoderPadding; this.selectionFlags = selectionFlags; this.language = language; this.accessibilityChannel = accessibilityChannel; @@ -550,29 +544,6 @@ public final class Format implements Parcelable { return width == NO_VALUE || height == NO_VALUE ? NO_VALUE : (width * height); } - /** - * Returns a {@link MediaFormat} representation of this format. - */ - @SuppressLint("InlinedApi") - @TargetApi(16) - public final MediaFormat getFrameworkMediaFormatV16() { - MediaFormat format = new MediaFormat(); - format.setString(MediaFormat.KEY_MIME, sampleMimeType); - maybeSetStringV16(format, MediaFormat.KEY_LANGUAGE, language); - maybeSetIntegerV16(format, MediaFormat.KEY_MAX_INPUT_SIZE, maxInputSize); - maybeSetIntegerV16(format, MediaFormat.KEY_WIDTH, width); - maybeSetIntegerV16(format, MediaFormat.KEY_HEIGHT, height); - maybeSetFloatV16(format, MediaFormat.KEY_FRAME_RATE, frameRate); - maybeSetIntegerV16(format, "rotation-degrees", rotationDegrees); - maybeSetIntegerV16(format, MediaFormat.KEY_CHANNEL_COUNT, channelCount); - maybeSetIntegerV16(format, MediaFormat.KEY_SAMPLE_RATE, sampleRate); - for (int i = 0; i < initializationData.size(); i++) { - format.setByteBuffer("csd-" + i, ByteBuffer.wrap(initializationData.get(i))); - } - maybeSetColorInfoV24(format, colorInfo); - return format; - } - @Override public String toString() { return "Format(" + id + ", " + containerMimeType + ", " + sampleMimeType + ", " + bitrate + ", " @@ -611,24 +582,44 @@ public final class Format implements Parcelable { return false; } Format other = (Format) obj; - if (bitrate != other.bitrate || maxInputSize != other.maxInputSize - || width != other.width || height != other.height || frameRate != other.frameRate - || rotationDegrees != other.rotationDegrees - || pixelWidthHeightRatio != other.pixelWidthHeightRatio || stereoMode != other.stereoMode - || channelCount != other.channelCount || sampleRate != other.sampleRate - || pcmEncoding != other.pcmEncoding || encoderDelay != other.encoderDelay - || encoderPadding != other.encoderPadding || subsampleOffsetUs != other.subsampleOffsetUs - || selectionFlags != other.selectionFlags || !Util.areEqual(id, other.id) - || !Util.areEqual(language, other.language) - || accessibilityChannel != other.accessibilityChannel - || !Util.areEqual(containerMimeType, other.containerMimeType) - || !Util.areEqual(sampleMimeType, other.sampleMimeType) - || !Util.areEqual(codecs, other.codecs) - || !Util.areEqual(drmInitData, other.drmInitData) - || !Util.areEqual(metadata, other.metadata) - || !Util.areEqual(colorInfo, other.colorInfo) - || !Arrays.equals(projectionData, other.projectionData) - || initializationData.size() != other.initializationData.size()) { + return bitrate == other.bitrate + && maxInputSize == other.maxInputSize + && width == other.width + && height == other.height + && frameRate == other.frameRate + && rotationDegrees == other.rotationDegrees + && pixelWidthHeightRatio == other.pixelWidthHeightRatio + && stereoMode == other.stereoMode + && channelCount == other.channelCount + && sampleRate == other.sampleRate + && pcmEncoding == other.pcmEncoding + && encoderDelay == other.encoderDelay + && encoderPadding == other.encoderPadding + && subsampleOffsetUs == other.subsampleOffsetUs + && selectionFlags == other.selectionFlags + && Util.areEqual(id, other.id) + && Util.areEqual(language, other.language) + && accessibilityChannel == other.accessibilityChannel + && Util.areEqual(containerMimeType, other.containerMimeType) + && Util.areEqual(sampleMimeType, other.sampleMimeType) + && Util.areEqual(codecs, other.codecs) + && Util.areEqual(drmInitData, other.drmInitData) + && Util.areEqual(metadata, other.metadata) + && Util.areEqual(colorInfo, other.colorInfo) + && Arrays.equals(projectionData, other.projectionData) + && initializationDataEquals(other); + } + + /** + * Returns whether the {@link #initializationData}s belonging to this format and {@code other} are + * equal. + * + * @param other The other format whose {@link #initializationData} is being compared. + * @return Whether the {@link #initializationData}s belonging to this format and {@code other} are + * equal. + */ + public boolean initializationDataEquals(Format other) { + if (initializationData.size() != other.initializationData.size()) { return false; } for (int i = 0; i < initializationData.size(); i++) { @@ -639,45 +630,6 @@ public final class Format implements Parcelable { return true; } - @TargetApi(24) - private static void maybeSetColorInfoV24(MediaFormat format, ColorInfo colorInfo) { - if (colorInfo == null) { - return; - } - maybeSetIntegerV16(format, MediaFormat.KEY_COLOR_TRANSFER, colorInfo.colorTransfer); - maybeSetIntegerV16(format, MediaFormat.KEY_COLOR_STANDARD, colorInfo.colorSpace); - maybeSetIntegerV16(format, MediaFormat.KEY_COLOR_RANGE, colorInfo.colorRange); - maybeSetByteBufferV16(format, MediaFormat.KEY_HDR_STATIC_INFO, colorInfo.hdrStaticInfo); - } - - @TargetApi(16) - private static void maybeSetStringV16(MediaFormat format, String key, String value) { - if (value != null) { - format.setString(key, value); - } - } - - @TargetApi(16) - private static void maybeSetIntegerV16(MediaFormat format, String key, int value) { - if (value != NO_VALUE) { - format.setInteger(key, value); - } - } - - @TargetApi(16) - private static void maybeSetFloatV16(MediaFormat format, String key, float value) { - if (value != NO_VALUE) { - format.setFloat(key, value); - } - } - - @TargetApi(16) - private static void maybeSetByteBufferV16(MediaFormat format, String key, byte[] value) { - if (value != null) { - format.setByteBuffer(key, ByteBuffer.wrap(value)); - } - } - // Utility methods /** diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java index 33a67554a5..54a8257083 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java @@ -15,6 +15,7 @@ */ package com.google.android.exoplayer2.audio; +import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.media.MediaCodec; import android.media.MediaCrypto; @@ -37,6 +38,7 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecInfo; import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; +import com.google.android.exoplayer2.mediacodec.MediaFormatUtil; import com.google.android.exoplayer2.util.MediaClock; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.Util; @@ -62,6 +64,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media private final EventDispatcher eventDispatcher; private final AudioSink audioSink; + private int codecMaxInputSize; private boolean passthroughEnabled; private boolean codecNeedsDiscardChannelsWorkaround; private android.media.MediaFormat passthroughMediaFormat; @@ -254,8 +257,9 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media @Override protected void configureCodec(MediaCodecInfo codecInfo, MediaCodec codec, Format format, MediaCrypto crypto) { + codecMaxInputSize = getCodecMaxInputSize(format, getStreamFormats()); codecNeedsDiscardChannelsWorkaround = codecNeedsDiscardChannelsWorkaround(codecInfo.name); - MediaFormat mediaFormat = getMediaFormatForPlayback(format); + MediaFormat mediaFormat = getMediaFormat(format, codecMaxInputSize); if (passthroughEnabled) { // Override the MIME type used to configure the codec if we are using a passthrough decoder. passthroughMediaFormat = mediaFormat; @@ -268,6 +272,15 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media } } + @Override + protected @KeepCodecResult int canKeepCodec( + MediaCodec codec, boolean codecIsAdaptive, Format oldFormat, Format newFormat) { + return newFormat.maxInputSize <= codecMaxInputSize + && areAdaptationCompatible(oldFormat, newFormat) + ? KEEP_CODEC_RESULT_YES_WITHOUT_RECONFIGURATION + : KEEP_CODEC_RESULT_NO; + } + @Override public MediaClock getMediaClock() { return this; @@ -288,8 +301,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media pcmEncoding = MimeTypes.AUDIO_RAW.equals(newFormat.sampleMimeType) ? newFormat.pcmEncoding : C.ENCODING_PCM_16BIT; channelCount = newFormat.channelCount; - encoderDelay = newFormat.encoderDelay != Format.NO_VALUE ? newFormat.encoderDelay : 0; - encoderPadding = newFormat.encoderPadding != Format.NO_VALUE ? newFormat.encoderPadding : 0; + encoderDelay = newFormat.encoderDelay; + encoderPadding = newFormat.encoderPadding; } @Override @@ -494,6 +507,53 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media } } + /** + * Returns a maximum input size suitable for configuring a codec for {@code format} in a way that + * will allow possible adaptation to other compatible formats in {@code streamFormats}. + * + * @param format The format for which the codec is being configured. + * @param streamFormats The possible stream formats. + * @return A suitable maximum input size. + */ + protected int getCodecMaxInputSize(Format format, Format[] streamFormats) { + int maxInputSize = format.maxInputSize; + if (streamFormats.length == 1) { + // The single entry in streamFormats must correspond to the format for which the codec is + // being configured. + return maxInputSize; + } + for (Format streamFormat : streamFormats) { + if (areAdaptationCompatible(format, streamFormat)) { + maxInputSize = Math.max(maxInputSize, streamFormat.maxInputSize); + } + } + return maxInputSize; + } + + /** + * Returns the framework {@link MediaFormat} that can be used to configure a {@link MediaCodec} + * for decoding the given {@link Format} for playback. + * + * @param format The format of the media. + * @return The framework media format. + */ + @SuppressLint("InlinedApi") + protected MediaFormat getMediaFormat(Format format, int codecMaxInputSize) { + MediaFormat mediaFormat = new MediaFormat(); + // Set format parameters that should always be set. + mediaFormat.setString(MediaFormat.KEY_MIME, format.sampleMimeType); + mediaFormat.setInteger(MediaFormat.KEY_CHANNEL_COUNT, format.channelCount); + mediaFormat.setInteger(MediaFormat.KEY_SAMPLE_RATE, format.sampleRate); + MediaFormatUtil.setCsdBuffers(mediaFormat, format.initializationData); + // Set codec max values. + MediaFormatUtil.maybeSetInteger(mediaFormat, MediaFormat.KEY_MAX_INPUT_SIZE, codecMaxInputSize); + // Set codec configuration values. + if (Util.SDK_INT >= 23) { + mediaFormat.setInteger(MediaFormat.KEY_PRIORITY, 0 /* realtime priority */); + } + return mediaFormat; + } + private void updateCurrentPosition() { long newCurrentPositionUs = audioSink.getCurrentPositionUs(isEnded()); if (newCurrentPositionUs != AudioSink.CURRENT_POSITION_NOT_SET) { @@ -505,6 +565,25 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media } } + /** + * Returns whether a codec with suitable maximum input size will support adaptation between two + * {@link Format}s. + * + * @param first The first format. + * @param second The second format. + * @return Whether the codec will support adaptation between the two {@link Format}s. + */ + private static boolean areAdaptationCompatible(Format first, Format second) { + return first.sampleMimeType.equals(second.sampleMimeType) + && first.channelCount == second.channelCount + && first.sampleRate == second.sampleRate + && first.encoderDelay == 0 + && first.encoderPadding == 0 + && second.encoderDelay == 0 + && second.encoderPadding == 0 + && first.initializationDataEquals(second); + } + /** * Returns whether the decoder is known to output six audio channels when provided with input with * fewer than six channels. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java index 83c33ee6d7..1a23c41262 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java @@ -651,8 +651,8 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements audioTrackNeedsConfigure = true; } - encoderDelay = newFormat.encoderDelay == Format.NO_VALUE ? 0 : newFormat.encoderDelay; - encoderPadding = newFormat.encoderPadding == Format.NO_VALUE ? 0 : newFormat.encoderPadding; + encoderDelay = newFormat.encoderDelay; + encoderPadding = newFormat.encoderPadding; eventDispatcher.inputFormatChanged(newFormat); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index 2e8fc602a2..dce3f72302 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -129,6 +129,24 @@ public abstract class MediaCodecRenderer extends BaseRenderer { */ private static final long MAX_CODEC_HOTSWAP_TIME_MS = 1000; + /** The possible return values for {@link #canKeepCodec(MediaCodec, boolean, Format, Format)}. */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({ + KEEP_CODEC_RESULT_NO, + KEEP_CODEC_RESULT_YES_WITHOUT_RECONFIGURATION, + KEEP_CODEC_RESULT_YES_WITH_RECONFIGURATION + }) + protected @interface KeepCodecResult {} + /** The codec cannot be kept. */ + protected static final int KEEP_CODEC_RESULT_NO = 0; + /** The codec can be kept. No reconfiguration is required. */ + protected static final int KEEP_CODEC_RESULT_YES_WITHOUT_RECONFIGURATION = 1; + /** + * The codec can be kept, but must be reconfigured by prefixing the next input buffer with the new + * format's configuration data. + */ + protected static final int KEEP_CODEC_RESULT_YES_WITH_RECONFIGURATION = 3; + @Retention(RetentionPolicy.SOURCE) @IntDef({RECONFIGURATION_STATE_NONE, RECONFIGURATION_STATE_WRITE_PENDING, RECONFIGURATION_STATE_QUEUE_PENDING}) @@ -432,21 +450,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { return codecInfo; } - /** - * Returns the framework {@link MediaFormat} that can be used to configure a {@link MediaCodec} - * for decoding the given {@link Format} for playback. - * - * @param format The format of the media. - * @return The framework media format. - */ - protected final MediaFormat getMediaFormatForPlayback(Format format) { - MediaFormat mediaFormat = format.getFrameworkMediaFormatV16(); - if (Util.SDK_INT >= 23) { - configureMediaFormatForPlaybackV23(mediaFormat); - } - return mediaFormat; - } - @Override protected void onEnabled(boolean joining) throws ExoPlaybackException { decoderCounters = new DecoderCounters(); @@ -863,8 +866,8 @@ public abstract class MediaCodecRenderer extends BaseRenderer { Format oldFormat = format; format = newFormat; - boolean drmInitDataChanged = !Util.areEqual(format.drmInitData, oldFormat == null ? null - : oldFormat.drmInitData); + boolean drmInitDataChanged = + !Util.areEqual(format.drmInitData, oldFormat == null ? null : oldFormat.drmInitData); if (drmInitDataChanged) { if (format.drmInitData != null) { if (drmSessionManager == null) { @@ -880,15 +883,31 @@ public abstract class MediaCodecRenderer extends BaseRenderer { } } - if (pendingDrmSession == drmSession && codec != null - && canReconfigureCodec(codec, codecInfo.adaptive, oldFormat, format)) { - codecReconfigured = true; - codecReconfigurationState = RECONFIGURATION_STATE_WRITE_PENDING; - codecNeedsAdaptationWorkaroundBuffer = - codecAdaptationWorkaroundMode == ADAPTATION_WORKAROUND_MODE_ALWAYS - || (codecAdaptationWorkaroundMode == ADAPTATION_WORKAROUND_MODE_SAME_RESOLUTION - && format.width == oldFormat.width && format.height == oldFormat.height); - } else { + boolean keepingCodec = false; + if (pendingDrmSession == drmSession && codec != null) { + switch (canKeepCodec(codec, codecInfo.adaptive, oldFormat, format)) { + case KEEP_CODEC_RESULT_NO: + // Do nothing. + break; + case KEEP_CODEC_RESULT_YES_WITHOUT_RECONFIGURATION: + keepingCodec = true; + break; + case KEEP_CODEC_RESULT_YES_WITH_RECONFIGURATION: + keepingCodec = true; + codecReconfigured = true; + codecReconfigurationState = RECONFIGURATION_STATE_WRITE_PENDING; + codecNeedsAdaptationWorkaroundBuffer = + codecAdaptationWorkaroundMode == ADAPTATION_WORKAROUND_MODE_ALWAYS + || (codecAdaptationWorkaroundMode == ADAPTATION_WORKAROUND_MODE_SAME_RESOLUTION + && format.width == oldFormat.width + && format.height == oldFormat.height); + break; + default: + throw new IllegalStateException(); // Never happens. + } + } + + if (!keepingCodec) { if (codecReceivedBuffers) { // Signal end of stream and wait for any final output buffers before re-initialization. codecReinitializationState = REINITIALIZATION_STATE_SIGNAL_END_OF_STREAM; @@ -937,23 +956,20 @@ public abstract class MediaCodecRenderer extends BaseRenderer { } /** - * Determines whether the existing {@link MediaCodec} should be reconfigured for a new format by - * sending codec specific initialization data at the start of the next input buffer. If true is - * returned then the {@link MediaCodec} instance will be reconfigured in this way. If false is - * returned then the instance will be released, and a new instance will be created for the new - * format. - *

- * The default implementation returns false. + * Determines whether the existing {@link MediaCodec} can be kept for a new format, and if it can + * whether it requires reconfiguration. + * + *

The default implementation returns {@link #KEEP_CODEC_RESULT_NO}. * * @param codec The existing {@link MediaCodec} instance. * @param codecIsAdaptive Whether the codec is adaptive. * @param oldFormat The format for which the existing instance is configured. * @param newFormat The new format. - * @return Whether the existing instance can be reconfigured. + * @return Whether the instance can be kept, and if it can whether it requires reconfiguration. */ - protected boolean canReconfigureCodec(MediaCodec codec, boolean codecIsAdaptive, Format oldFormat, - Format newFormat) { - return false; + protected @KeepCodecResult int canKeepCodec( + MediaCodec codec, boolean codecIsAdaptive, Format oldFormat, Format newFormat) { + return KEEP_CODEC_RESULT_NO; } @Override @@ -1185,11 +1201,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer { return false; } - @TargetApi(23) - private static void configureMediaFormatForPlaybackV23(MediaFormat mediaFormat) { - mediaFormat.setInteger(MediaFormat.KEY_PRIORITY, 0 /* realtime priority */); - } - /** * Returns whether the decoder is known to fail when flushed. *

diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaFormatUtil.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaFormatUtil.java new file mode 100644 index 0000000000..3cfefc0736 --- /dev/null +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaFormatUtil.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.exoplayer2.mediacodec; + +import android.annotation.TargetApi; +import android.media.MediaFormat; +import android.support.annotation.Nullable; +import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.video.ColorInfo; +import java.nio.ByteBuffer; +import java.util.List; + +/** Helper class for configuring {@link MediaFormat} instances. */ +@TargetApi(16) +public final class MediaFormatUtil { + + private MediaFormatUtil() {} + + /** + * Sets a {@link MediaFormat} {@link String} value. + * + * @param format The {@link MediaFormat} being configured. + * @param key The key to set. + * @param value The value to set. + */ + public static void setString(MediaFormat format, String key, String value) { + format.setString(key, value); + } + + /** + * Sets a {@link MediaFormat}'s codec specific data buffers. + * + * @param format The {@link MediaFormat} being configured. + * @param csdBuffers The csd buffers to set. + */ + public static void setCsdBuffers(MediaFormat format, List csdBuffers) { + for (int i = 0; i < csdBuffers.size(); i++) { + format.setByteBuffer("csd-" + i, ByteBuffer.wrap(csdBuffers.get(i))); + } + } + + /** + * Sets a {@link MediaFormat} integer value. Does nothing if {@code value} is {@link + * Format#NO_VALUE}. + * + * @param format The {@link MediaFormat} being configured. + * @param key The key to set. + * @param value The value to set. + */ + public static void maybeSetInteger(MediaFormat format, String key, int value) { + if (value != Format.NO_VALUE) { + format.setInteger(key, value); + } + } + + /** + * Sets a {@link MediaFormat} float value. Does nothing if {@code value} is {@link + * Format#NO_VALUE}. + * + * @param format The {@link MediaFormat} being configured. + * @param key The key to set. + * @param value The value to set. + */ + public static void maybeSetFloat(MediaFormat format, String key, float value) { + if (value != Format.NO_VALUE) { + format.setFloat(key, value); + } + } + + /** + * Sets a {@link MediaFormat} {@link ByteBuffer} value. Does nothing if {@code value} is null. + * + * @param format The {@link MediaFormat} being configured. + * @param key The key to set. + * @param value The {@link byte[]} that will be wrapped to obtain the value. + */ + public static void maybeSetByteBuffer(MediaFormat format, String key, @Nullable byte[] value) { + if (value != null) { + format.setByteBuffer(key, ByteBuffer.wrap(value)); + } + } + + /** + * Sets a {@link MediaFormat}'s color information. Does nothing if {@code colorInfo} is null. + * + * @param format The {@link MediaFormat} being configured. + * @param colorInfo The color info to set. + */ + @SuppressWarnings("InlinedApi") + public static void maybeSetColorInfo(MediaFormat format, @Nullable ColorInfo colorInfo) { + if (colorInfo != null) { + maybeSetInteger(format, MediaFormat.KEY_COLOR_TRANSFER, colorInfo.colorTransfer); + maybeSetInteger(format, MediaFormat.KEY_COLOR_STANDARD, colorInfo.colorSpace); + maybeSetInteger(format, MediaFormat.KEY_COLOR_RANGE, colorInfo.colorRange); + maybeSetByteBuffer(format, MediaFormat.KEY_HDR_STATIC_INFO, colorInfo.hdrStaticInfo); + } + } +} diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java index e71c278e37..98bd7daaec 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaPeriod.java @@ -293,7 +293,7 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb int result = childStream.readData(formatHolder, buffer, requireFormat); if (result == C.RESULT_FORMAT_READ) { Format format = formatHolder.format; - if (format.encoderDelay != Format.NO_VALUE || format.encoderPadding != Format.NO_VALUE) { + if (format.encoderDelay != 0 || format.encoderPadding != 0) { // Clear gapless playback metadata if the start/end points don't match the media. int encoderDelay = startUs != 0 ? 0 : format.encoderDelay; int encoderPadding = endUs != C.TIME_END_OF_SOURCE ? 0 : format.encoderPadding; diff --git a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java index 62a7657ea7..3ac5b1a12a 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java @@ -44,6 +44,7 @@ import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer; import com.google.android.exoplayer2.mediacodec.MediaCodecSelector; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; +import com.google.android.exoplayer2.mediacodec.MediaFormatUtil; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.TraceUtil; @@ -91,7 +92,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { private final boolean deviceNeedsAutoFrcWorkaround; private final long[] pendingOutputStreamOffsetsUs; - private Format[] streamFormats; private CodecMaxValues codecMaxValues; private boolean codecNeedsSetOutputSurfaceWorkaround; @@ -258,7 +258,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { @Override protected void onStreamChanged(Format[] formats, long offsetUs) throws ExoPlaybackException { - streamFormats = formats; if (outputStreamOffsetUs == C.TIME_UNSET) { outputStreamOffsetUs = offsetUs; } else { @@ -352,7 +351,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { scalingMode = (Integer) message; MediaCodec codec = getCodec(); if (codec != null) { - setVideoScalingMode(codec, scalingMode); + codec.setVideoScalingMode(scalingMode); } } else { super.handleMessage(messageType, message); @@ -415,7 +414,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { @Override protected void configureCodec(MediaCodecInfo codecInfo, MediaCodec codec, Format format, MediaCrypto crypto) throws DecoderQueryException { - codecMaxValues = getCodecMaxValues(codecInfo, format, streamFormats); + codecMaxValues = getCodecMaxValues(codecInfo, format, getStreamFormats()); MediaFormat mediaFormat = getMediaFormat(format, codecMaxValues, deviceNeedsAutoFrcWorkaround, tunnelingAudioSessionId); if (surface == null) { @@ -431,6 +430,20 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { } } + @Override + protected @KeepCodecResult int canKeepCodec( + MediaCodec codec, boolean codecIsAdaptive, Format oldFormat, Format newFormat) { + if (areAdaptationCompatible(codecIsAdaptive, oldFormat, newFormat) + && newFormat.width <= codecMaxValues.width + && newFormat.height <= codecMaxValues.height + && getMaxInputSize(newFormat) <= codecMaxValues.inputSize) { + return oldFormat.initializationDataEquals(newFormat) + ? KEEP_CODEC_RESULT_YES_WITHOUT_RECONFIGURATION + : KEEP_CODEC_RESULT_YES_WITH_RECONFIGURATION; + } + return KEEP_CODEC_RESULT_NO; + } + @CallSuper @Override protected void releaseCodec() { @@ -468,8 +481,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { protected void onInputFormatChanged(Format newFormat) throws ExoPlaybackException { super.onInputFormatChanged(newFormat); eventDispatcher.inputFormatChanged(newFormat); - pendingPixelWidthHeightRatio = getPixelWidthHeightRatio(newFormat); - pendingRotationDegrees = getRotationDegrees(newFormat); + pendingPixelWidthHeightRatio = newFormat.pixelWidthHeightRatio; + pendingRotationDegrees = newFormat.rotationDegrees; } /** @@ -513,15 +526,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { currentUnappliedRotationDegrees = pendingRotationDegrees; } // Must be applied each time the output format changes. - setVideoScalingMode(codec, scalingMode); - } - - @Override - protected boolean canReconfigureCodec(MediaCodec codec, boolean codecIsAdaptive, - Format oldFormat, Format newFormat) { - return areAdaptationCompatible(codecIsAdaptive, oldFormat, newFormat) - && newFormat.width <= codecMaxValues.width && newFormat.height <= codecMaxValues.height - && getMaxInputSize(newFormat) <= codecMaxValues.inputSize; + codec.setVideoScalingMode(scalingMode); } @Override @@ -908,33 +913,48 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { } /** - * Returns the framework {@link MediaFormat} that should be used to configure the decoder when - * playing media in the specified input format. + * Returns the framework {@link MediaFormat} that should be used to configure the decoder. * - * @param format The format of input media. - * @param codecMaxValues The codec's maximum supported values. + * @param format The format of media. + * @param codecMaxValues Codec max values that should be used when configuring the decoder. * @param deviceNeedsAutoFrcWorkaround Whether the device is known to enable frame-rate conversion * logic that negatively impacts ExoPlayer. - * @param tunnelingAudioSessionId The audio session id to use for tunneling, or - * {@link C#AUDIO_SESSION_ID_UNSET} if tunneling should not be enabled. + * @param tunnelingAudioSessionId The audio session id to use for tunneling, or {@link + * C#AUDIO_SESSION_ID_UNSET} if tunneling should not be enabled. * @return The framework {@link MediaFormat} that should be used to configure the decoder. */ @SuppressLint("InlinedApi") - protected MediaFormat getMediaFormat(Format format, CodecMaxValues codecMaxValues, - boolean deviceNeedsAutoFrcWorkaround, int tunnelingAudioSessionId) { - MediaFormat frameworkMediaFormat = getMediaFormatForPlayback(format); - frameworkMediaFormat.setInteger(MediaFormat.KEY_MAX_WIDTH, codecMaxValues.width); - frameworkMediaFormat.setInteger(MediaFormat.KEY_MAX_HEIGHT, codecMaxValues.height); - if (codecMaxValues.inputSize != Format.NO_VALUE) { - frameworkMediaFormat.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE, codecMaxValues.inputSize); + protected MediaFormat getMediaFormat( + Format format, + CodecMaxValues codecMaxValues, + boolean deviceNeedsAutoFrcWorkaround, + int tunnelingAudioSessionId) { + MediaFormat mediaFormat = new MediaFormat(); + // Set format parameters that should always be set. + mediaFormat.setString(MediaFormat.KEY_MIME, format.sampleMimeType); + mediaFormat.setInteger(MediaFormat.KEY_WIDTH, format.width); + mediaFormat.setInteger(MediaFormat.KEY_HEIGHT, format.height); + MediaFormatUtil.setCsdBuffers(mediaFormat, format.initializationData); + // Set format parameters that may be unset. + MediaFormatUtil.maybeSetFloat(mediaFormat, MediaFormat.KEY_FRAME_RATE, format.frameRate); + MediaFormatUtil.maybeSetInteger(mediaFormat, MediaFormat.KEY_ROTATION, format.rotationDegrees); + MediaFormatUtil.maybeSetColorInfo(mediaFormat, format.colorInfo); + // Set codec max values. + mediaFormat.setInteger(MediaFormat.KEY_MAX_WIDTH, codecMaxValues.width); + mediaFormat.setInteger(MediaFormat.KEY_MAX_HEIGHT, codecMaxValues.height); + MediaFormatUtil.maybeSetInteger( + mediaFormat, MediaFormat.KEY_MAX_INPUT_SIZE, codecMaxValues.inputSize); + // Set codec configuration values. + if (Util.SDK_INT >= 23) { + mediaFormat.setInteger(MediaFormat.KEY_PRIORITY, 0 /* realtime priority */); } if (deviceNeedsAutoFrcWorkaround) { - frameworkMediaFormat.setInteger("auto-frc", 0); + mediaFormat.setInteger("auto-frc", 0); } if (tunnelingAudioSessionId != C.AUDIO_SESSION_ID_UNSET) { - configureTunnelingV21(frameworkMediaFormat, tunnelingAudioSessionId); + configureTunnelingV21(mediaFormat, tunnelingAudioSessionId); } - return frameworkMediaFormat; + return mediaFormat; } /** @@ -1054,8 +1074,21 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { return (maxPixels * 3) / (2 * minCompressionRatio); } - private static void setVideoScalingMode(MediaCodec codec, int scalingMode) { - codec.setVideoScalingMode(scalingMode); + /** + * Returns whether a codec with suitable {@link CodecMaxValues} will support adaptation between + * two {@link Format}s. + * + * @param codecIsAdaptive Whether the codec supports seamless resolution switches. + * @param first The first format. + * @param second The second format. + * @return Whether the codec will support adaptation between the two {@link Format}s. + */ + private static boolean areAdaptationCompatible( + boolean codecIsAdaptive, Format first, Format second) { + return first.sampleMimeType.equals(second.sampleMimeType) + && first.rotationDegrees == second.rotationDegrees + && (codecIsAdaptive || (first.width == second.width && first.height == second.height)) + && Util.areEqual(first.colorInfo, second.colorInfo); } /** @@ -1103,30 +1136,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { && "OMX.k3.video.decoder.avc".equals(name)); } - /** - * Returns whether a codec with suitable {@link CodecMaxValues} will support adaptation between - * two {@link Format}s. - * - * @param codecIsAdaptive Whether the codec supports seamless resolution switches. - * @param first The first format. - * @param second The second format. - * @return Whether the codec will support adaptation between the two {@link Format}s. - */ - private static boolean areAdaptationCompatible(boolean codecIsAdaptive, Format first, - Format second) { - return first.sampleMimeType.equals(second.sampleMimeType) - && getRotationDegrees(first) == getRotationDegrees(second) - && (codecIsAdaptive || (first.width == second.width && first.height == second.height)); - } - - private static float getPixelWidthHeightRatio(Format format) { - return format.pixelWidthHeightRatio == Format.NO_VALUE ? 1 : format.pixelWidthHeightRatio; - } - - private static int getRotationDegrees(Format format) { - return format.rotationDegrees == Format.NO_VALUE ? 0 : format.rotationDegrees; - } - protected static final class CodecMaxValues { public final int width; diff --git a/library/core/src/test/assets/flv/sample.flv.0.dump b/library/core/src/test/assets/flv/sample.flv.0.dump index f4502749f5..098311a310 100644 --- a/library/core/src/test/assets/flv/sample.flv.0.dump +++ b/library/core/src/test/assets/flv/sample.flv.0.dump @@ -13,13 +13,13 @@ track 8: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -218,13 +218,13 @@ track 9: width = 1080 height = 720 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mkv/sample.mkv.0.dump b/library/core/src/test/assets/mkv/sample.mkv.0.dump index 009ff55c23..847799396d 100644 --- a/library/core/src/test/assets/mkv/sample.mkv.0.dump +++ b/library/core/src/test/assets/mkv/sample.mkv.0.dump @@ -13,13 +13,13 @@ track 1: width = 1080 height = 720 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -159,13 +159,13 @@ track 2: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 1 language = und diff --git a/library/core/src/test/assets/mkv/sample.mkv.1.dump b/library/core/src/test/assets/mkv/sample.mkv.1.dump index 91396e81b8..5caa638437 100644 --- a/library/core/src/test/assets/mkv/sample.mkv.1.dump +++ b/library/core/src/test/assets/mkv/sample.mkv.1.dump @@ -13,13 +13,13 @@ track 1: width = 1080 height = 720 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -127,13 +127,13 @@ track 2: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 1 language = und diff --git a/library/core/src/test/assets/mkv/sample.mkv.2.dump b/library/core/src/test/assets/mkv/sample.mkv.2.dump index 5c56dcc8af..de4e2a58bf 100644 --- a/library/core/src/test/assets/mkv/sample.mkv.2.dump +++ b/library/core/src/test/assets/mkv/sample.mkv.2.dump @@ -13,13 +13,13 @@ track 1: width = 1080 height = 720 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -83,13 +83,13 @@ track 2: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 1 language = und diff --git a/library/core/src/test/assets/mkv/sample.mkv.3.dump b/library/core/src/test/assets/mkv/sample.mkv.3.dump index cf5a0199fc..6034c54dec 100644 --- a/library/core/src/test/assets/mkv/sample.mkv.3.dump +++ b/library/core/src/test/assets/mkv/sample.mkv.3.dump @@ -13,13 +13,13 @@ track 1: width = 1080 height = 720 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -39,13 +39,13 @@ track 2: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 1 language = und diff --git a/library/core/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump b/library/core/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump index 62a270eb9e..89a7514784 100644 --- a/library/core/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump +++ b/library/core/src/test/assets/mkv/subsample_encrypted_altref.webm.0.dump @@ -13,13 +13,13 @@ track 1: width = 360 height = 240 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump b/library/core/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump index 43e5eed5d1..1caa3f9f27 100644 --- a/library/core/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump +++ b/library/core/src/test/assets/mkv/subsample_encrypted_noaltref.webm.0.dump @@ -13,13 +13,13 @@ track 1: width = 360 height = 240 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mp3/bear.mp3.0.dump b/library/core/src/test/assets/mp3/bear.mp3.0.dump index b12a68a60b..5c8700fed1 100644 --- a/library/core/src/test/assets/mp3/bear.mp3.0.dump +++ b/library/core/src/test/assets/mp3/bear.mp3.0.dump @@ -13,8 +13,8 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 diff --git a/library/core/src/test/assets/mp3/bear.mp3.1.dump b/library/core/src/test/assets/mp3/bear.mp3.1.dump index abf5b10415..c2f37973b7 100644 --- a/library/core/src/test/assets/mp3/bear.mp3.1.dump +++ b/library/core/src/test/assets/mp3/bear.mp3.1.dump @@ -13,8 +13,8 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 diff --git a/library/core/src/test/assets/mp3/bear.mp3.2.dump b/library/core/src/test/assets/mp3/bear.mp3.2.dump index 813f61b7fc..543cf44cc0 100644 --- a/library/core/src/test/assets/mp3/bear.mp3.2.dump +++ b/library/core/src/test/assets/mp3/bear.mp3.2.dump @@ -13,8 +13,8 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 diff --git a/library/core/src/test/assets/mp3/bear.mp3.3.dump b/library/core/src/test/assets/mp3/bear.mp3.3.dump index 9a0207bd53..a87b7d6d37 100644 --- a/library/core/src/test/assets/mp3/bear.mp3.3.dump +++ b/library/core/src/test/assets/mp3/bear.mp3.3.dump @@ -13,8 +13,8 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 diff --git a/library/core/src/test/assets/mp3/play-trimmed.mp3.0.dump b/library/core/src/test/assets/mp3/play-trimmed.mp3.0.dump index 435360dfed..96b0cd259c 100644 --- a/library/core/src/test/assets/mp3/play-trimmed.mp3.0.dump +++ b/library/core/src/test/assets/mp3/play-trimmed.mp3.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mp3/play-trimmed.mp3.1.dump b/library/core/src/test/assets/mp3/play-trimmed.mp3.1.dump index 435360dfed..96b0cd259c 100644 --- a/library/core/src/test/assets/mp3/play-trimmed.mp3.1.dump +++ b/library/core/src/test/assets/mp3/play-trimmed.mp3.1.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mp3/play-trimmed.mp3.2.dump b/library/core/src/test/assets/mp3/play-trimmed.mp3.2.dump index 435360dfed..96b0cd259c 100644 --- a/library/core/src/test/assets/mp3/play-trimmed.mp3.2.dump +++ b/library/core/src/test/assets/mp3/play-trimmed.mp3.2.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mp3/play-trimmed.mp3.3.dump b/library/core/src/test/assets/mp3/play-trimmed.mp3.3.dump index 435360dfed..96b0cd259c 100644 --- a/library/core/src/test/assets/mp3/play-trimmed.mp3.3.dump +++ b/library/core/src/test/assets/mp3/play-trimmed.mp3.3.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mp3/play-trimmed.mp3.unklen.dump b/library/core/src/test/assets/mp3/play-trimmed.mp3.unklen.dump index 6b49619b50..d28cca025b 100644 --- a/library/core/src/test/assets/mp3/play-trimmed.mp3.unklen.dump +++ b/library/core/src/test/assets/mp3/play-trimmed.mp3.unklen.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/mp4/sample.mp4.0.dump b/library/core/src/test/assets/mp4/sample.mp4.0.dump index 77708b16df..efc804d48b 100644 --- a/library/core/src/test/assets/mp4/sample.mp4.0.dump +++ b/library/core/src/test/assets/mp4/sample.mp4.0.dump @@ -18,8 +18,8 @@ track 0: channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -159,13 +159,13 @@ track 1: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = und diff --git a/library/core/src/test/assets/mp4/sample.mp4.1.dump b/library/core/src/test/assets/mp4/sample.mp4.1.dump index 30ed21ef98..10104b5e81 100644 --- a/library/core/src/test/assets/mp4/sample.mp4.1.dump +++ b/library/core/src/test/assets/mp4/sample.mp4.1.dump @@ -18,8 +18,8 @@ track 0: channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -159,13 +159,13 @@ track 1: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = und diff --git a/library/core/src/test/assets/mp4/sample.mp4.2.dump b/library/core/src/test/assets/mp4/sample.mp4.2.dump index 640d92722c..8af96be673 100644 --- a/library/core/src/test/assets/mp4/sample.mp4.2.dump +++ b/library/core/src/test/assets/mp4/sample.mp4.2.dump @@ -18,8 +18,8 @@ track 0: channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -159,13 +159,13 @@ track 1: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = und diff --git a/library/core/src/test/assets/mp4/sample.mp4.3.dump b/library/core/src/test/assets/mp4/sample.mp4.3.dump index b4fd4a0b02..f1259661ed 100644 --- a/library/core/src/test/assets/mp4/sample.mp4.3.dump +++ b/library/core/src/test/assets/mp4/sample.mp4.3.dump @@ -18,8 +18,8 @@ track 0: channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -159,13 +159,13 @@ track 1: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = und diff --git a/library/core/src/test/assets/mp4/sample_fragmented.mp4.0.dump b/library/core/src/test/assets/mp4/sample_fragmented.mp4.0.dump index ec2cb7b8ce..faa8a015ca 100644 --- a/library/core/src/test/assets/mp4/sample_fragmented.mp4.0.dump +++ b/library/core/src/test/assets/mp4/sample_fragmented.mp4.0.dump @@ -18,8 +18,8 @@ track 0: channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -159,13 +159,13 @@ track 1: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = und diff --git a/library/core/src/test/assets/mp4/sample_fragmented_sei.mp4.0.dump b/library/core/src/test/assets/mp4/sample_fragmented_sei.mp4.0.dump index ae012055fe..87f2cc6714 100644 --- a/library/core/src/test/assets/mp4/sample_fragmented_sei.mp4.0.dump +++ b/library/core/src/test/assets/mp4/sample_fragmented_sei.mp4.0.dump @@ -18,8 +18,8 @@ track 0: channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -159,13 +159,13 @@ track 1: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = und @@ -368,13 +368,13 @@ track 3: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear.opus.0.dump b/library/core/src/test/assets/ogg/bear.opus.0.dump index 643972b836..f8eadb16fa 100644 --- a/library/core/src/test/assets/ogg/bear.opus.0.dump +++ b/library/core/src/test/assets/ogg/bear.opus.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear.opus.1.dump b/library/core/src/test/assets/ogg/bear.opus.1.dump index 8df1563d90..593116a22e 100644 --- a/library/core/src/test/assets/ogg/bear.opus.1.dump +++ b/library/core/src/test/assets/ogg/bear.opus.1.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear.opus.2.dump b/library/core/src/test/assets/ogg/bear.opus.2.dump index bed4c46d9c..beabde35c8 100644 --- a/library/core/src/test/assets/ogg/bear.opus.2.dump +++ b/library/core/src/test/assets/ogg/bear.opus.2.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear.opus.3.dump b/library/core/src/test/assets/ogg/bear.opus.3.dump index 8a9c99250e..d0f3e2948b 100644 --- a/library/core/src/test/assets/ogg/bear.opus.3.dump +++ b/library/core/src/test/assets/ogg/bear.opus.3.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear.opus.unklen.dump b/library/core/src/test/assets/ogg/bear.opus.unklen.dump index 5d2c84b047..ec8f8b8665 100644 --- a/library/core/src/test/assets/ogg/bear.opus.unklen.dump +++ b/library/core/src/test/assets/ogg/bear.opus.unklen.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump index ff22bb2d3e..dbe97c02bd 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump index 50110149fd..d1246a3e64 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.1.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump index 483ae36721..ec0336309a 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.2.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump index a47407e63d..1e3254a9fc 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.3.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump b/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump index ff22bb2d3e..dbe97c02bd 100644 --- a/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump +++ b/library/core/src/test/assets/ogg/bear_flac.ogg.unklen.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump index 32f350efcb..cce7bf2450 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump index 3082e8faca..ac36a48412 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.1.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump index b574409f70..dae0d878fa 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.2.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump index f411596b44..c9570ab58e 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.3.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump index bdfe90277d..7a3e7ef5ac 100644 --- a/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump +++ b/library/core/src/test/assets/ogg/bear_flac_noseektable.ogg.unklen.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_vorbis.ogg.0.dump b/library/core/src/test/assets/ogg/bear_vorbis.ogg.0.dump index dd129ce9dc..138e13c54d 100644 --- a/library/core/src/test/assets/ogg/bear_vorbis.ogg.0.dump +++ b/library/core/src/test/assets/ogg/bear_vorbis.ogg.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_vorbis.ogg.1.dump b/library/core/src/test/assets/ogg/bear_vorbis.ogg.1.dump index 4fb8a74d92..6b37dfb6cf 100644 --- a/library/core/src/test/assets/ogg/bear_vorbis.ogg.1.dump +++ b/library/core/src/test/assets/ogg/bear_vorbis.ogg.1.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_vorbis.ogg.2.dump b/library/core/src/test/assets/ogg/bear_vorbis.ogg.2.dump index fad8f33d77..9620979357 100644 --- a/library/core/src/test/assets/ogg/bear_vorbis.ogg.2.dump +++ b/library/core/src/test/assets/ogg/bear_vorbis.ogg.2.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_vorbis.ogg.3.dump b/library/core/src/test/assets/ogg/bear_vorbis.ogg.3.dump index 49dca02220..18d869030d 100644 --- a/library/core/src/test/assets/ogg/bear_vorbis.ogg.3.dump +++ b/library/core/src/test/assets/ogg/bear_vorbis.ogg.3.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ogg/bear_vorbis.ogg.unklen.dump b/library/core/src/test/assets/ogg/bear_vorbis.ogg.unklen.dump index 756be42854..2686f740db 100644 --- a/library/core/src/test/assets/ogg/bear_vorbis.ogg.unklen.dump +++ b/library/core/src/test/assets/ogg/bear_vorbis.ogg.unklen.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 2 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/rawcc/sample.rawcc.0.dump b/library/core/src/test/assets/rawcc/sample.rawcc.0.dump index 130be06ceb..adeaaf6a37 100644 --- a/library/core/src/test/assets/rawcc/sample.rawcc.0.dump +++ b/library/core/src/test/assets/rawcc/sample.rawcc.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ts/sample.ac3.0.dump b/library/core/src/test/assets/ts/sample.ac3.0.dump index 46028638fe..a1d29a77dc 100644 --- a/library/core/src/test/assets/ts/sample.ac3.0.dump +++ b/library/core/src/test/assets/ts/sample.ac3.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 6 sampleRate = 48000 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ts/sample.adts.0.dump b/library/core/src/test/assets/ts/sample.adts.0.dump index 132859a00e..93d7b776c0 100644 --- a/library/core/src/test/assets/ts/sample.adts.0.dump +++ b/library/core/src/test/assets/ts/sample.adts.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -614,13 +614,13 @@ track 1: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ts/sample.ps.0.dump b/library/core/src/test/assets/ts/sample.ps.0.dump index e833201692..dda6de8ab4 100644 --- a/library/core/src/test/assets/ts/sample.ps.0.dump +++ b/library/core/src/test/assets/ts/sample.ps.0.dump @@ -13,13 +13,13 @@ track 192: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -53,13 +53,13 @@ track 224: width = 640 height = 426 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/ts/sample.ts.0.dump b/library/core/src/test/assets/ts/sample.ts.0.dump index 39b1565289..a74268a702 100644 --- a/library/core/src/test/assets/ts/sample.ts.0.dump +++ b/library/core/src/test/assets/ts/sample.ts.0.dump @@ -13,13 +13,13 @@ track 256: width = 640 height = 426 frameRate = -1.0 - rotationDegrees = -1 + rotationDegrees = 0 pixelWidthHeightRatio = 1.0 channelCount = -1 sampleRate = -1 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null @@ -46,13 +46,13 @@ track 257: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = -1 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = und diff --git a/library/core/src/test/assets/wav/sample.wav.0.dump b/library/core/src/test/assets/wav/sample.wav.0.dump index 32f9d495d2..a6c46f75fc 100644 --- a/library/core/src/test/assets/wav/sample.wav.0.dump +++ b/library/core/src/test/assets/wav/sample.wav.0.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/wav/sample.wav.1.dump b/library/core/src/test/assets/wav/sample.wav.1.dump index d4758e65b5..3cc70dc71f 100644 --- a/library/core/src/test/assets/wav/sample.wav.1.dump +++ b/library/core/src/test/assets/wav/sample.wav.1.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/wav/sample.wav.2.dump b/library/core/src/test/assets/wav/sample.wav.2.dump index ea33c62423..07ce135dfa 100644 --- a/library/core/src/test/assets/wav/sample.wav.2.dump +++ b/library/core/src/test/assets/wav/sample.wav.2.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/assets/wav/sample.wav.3.dump b/library/core/src/test/assets/wav/sample.wav.3.dump index de0d8f22d0..82ed95ad60 100644 --- a/library/core/src/test/assets/wav/sample.wav.3.dump +++ b/library/core/src/test/assets/wav/sample.wav.3.dump @@ -13,13 +13,13 @@ track 0: width = -1 height = -1 frameRate = -1.0 - rotationDegrees = -1 - pixelWidthHeightRatio = -1.0 + rotationDegrees = 0 + pixelWidthHeightRatio = 1.0 channelCount = 1 sampleRate = 44100 pcmEncoding = 2 - encoderDelay = -1 - encoderPadding = -1 + encoderDelay = 0 + encoderPadding = 0 subsampleOffsetUs = 9223372036854775807 selectionFlags = 0 language = null diff --git a/library/core/src/test/java/com/google/android/exoplayer2/FormatTest.java b/library/core/src/test/java/com/google/android/exoplayer2/FormatTest.java index eb51485a36..7ca2181ebf 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/FormatTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/FormatTest.java @@ -20,20 +20,14 @@ import static com.google.android.exoplayer2.util.MimeTypes.VIDEO_MP4; import static com.google.android.exoplayer2.util.MimeTypes.VIDEO_WEBM; import static com.google.common.truth.Truth.assertThat; -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.media.MediaFormat; import android.os.Parcel; import com.google.android.exoplayer2.drm.DrmInitData; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.id3.TextInformationFrame; import com.google.android.exoplayer2.testutil.TestUtil; import com.google.android.exoplayer2.util.MimeTypes; -import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.video.ColorInfo; -import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; import org.junit.Test; @@ -85,73 +79,4 @@ public final class FormatTest { parcel.recycle(); } - @Test - public void testConversionToFrameworkMediaFormat() { - if (Util.SDK_INT < 16) { - // Test doesn't apply. - return; - } - - testConversionToFrameworkMediaFormatV16(Format.createVideoSampleFormat(null, "video/xyz", null, - 5000, 102400, 1280, 720, 30, INIT_DATA, null)); - testConversionToFrameworkMediaFormatV16(Format.createVideoSampleFormat(null, "video/xyz", null, - 5000, Format.NO_VALUE, 1280, 720, 30, null, null)); - testConversionToFrameworkMediaFormatV16(Format.createAudioSampleFormat(null, "audio/xyz", null, - 500, 128, 5, 44100, INIT_DATA, null, 0, null)); - testConversionToFrameworkMediaFormatV16(Format.createAudioSampleFormat(null, "audio/xyz", null, - 500, Format.NO_VALUE, 5, 44100, null, null, 0, null)); - testConversionToFrameworkMediaFormatV16(Format.createTextSampleFormat(null, "text/xyz", 0, - "eng")); - testConversionToFrameworkMediaFormatV16(Format.createTextSampleFormat(null, "text/xyz", 0, - null)); - } - - @SuppressLint("InlinedApi") - @TargetApi(16) - private static void testConversionToFrameworkMediaFormatV16(Format in) { - MediaFormat out = in.getFrameworkMediaFormatV16(); - assertThat(out.getString(MediaFormat.KEY_MIME)).isEqualTo(in.sampleMimeType); - assertOptionalV16(out, MediaFormat.KEY_LANGUAGE, in.language); - assertOptionalV16(out, MediaFormat.KEY_MAX_INPUT_SIZE, in.maxInputSize); - assertOptionalV16(out, MediaFormat.KEY_WIDTH, in.width); - assertOptionalV16(out, MediaFormat.KEY_HEIGHT, in.height); - assertOptionalV16(out, MediaFormat.KEY_CHANNEL_COUNT, in.channelCount); - assertOptionalV16(out, MediaFormat.KEY_SAMPLE_RATE, in.sampleRate); - assertOptionalV16(out, MediaFormat.KEY_FRAME_RATE, in.frameRate); - - for (int i = 0; i < in.initializationData.size(); i++) { - byte[] originalData = in.initializationData.get(i); - ByteBuffer frameworkBuffer = out.getByteBuffer("csd-" + i); - byte[] frameworkData = Arrays.copyOf(frameworkBuffer.array(), frameworkBuffer.limit()); - assertThat(frameworkData).isEqualTo(originalData); - } - } - - @TargetApi(16) - private static void assertOptionalV16(MediaFormat format, String key, String value) { - if (value == null) { - assertThat(format.containsKey(key)).isEqualTo(false); - } else { - assertThat(format.getString(key)).isEqualTo(value); - } - } - - @TargetApi(16) - private static void assertOptionalV16(MediaFormat format, String key, int value) { - if (value == Format.NO_VALUE) { - assertThat(format.containsKey(key)).isEqualTo(false); - } else { - assertThat(format.getInteger(key)).isEqualTo(value); - } - } - - @TargetApi(16) - private static void assertOptionalV16(MediaFormat format, String key, float value) { - if (value == Format.NO_VALUE) { - assertThat(format.containsKey(key)).isEqualTo(false); - } else { - assertThat(format.getFloat(key)).isEqualTo(value); - } - } - }