From 3547c9034e563828fcd72e2a5e752effe0ace5de Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 11 Jan 2017 10:12:42 -0800 Subject: [PATCH] Report audio decoder adaptation support correctly ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=144219518 --- .../ext/ffmpeg/FfmpegAudioRenderer.java | 8 +++++++- .../ext/flac/LibflacAudioRenderer.java | 2 +- .../ext/opus/LibopusAudioRenderer.java | 2 +- .../audio/SimpleDecoderAudioRenderer.java | 18 ++++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java index 1a70310a8d..0aac601045 100644 --- a/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java +++ b/extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java @@ -17,6 +17,7 @@ package com.google.android.exoplayer2.ext.ffmpeg; import android.os.Handler; import com.google.android.exoplayer2.C; +import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.audio.AudioCapabilities; import com.google.android.exoplayer2.audio.AudioRendererEventListener; @@ -60,7 +61,7 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer { } @Override - public int supportsFormat(Format format) { + protected int supportsFormatInternal(Format format) { if (!FfmpegLibrary.isAvailable()) { return FORMAT_UNSUPPORTED_TYPE; } @@ -69,6 +70,11 @@ public final class FfmpegAudioRenderer extends SimpleDecoderAudioRenderer { : MimeTypes.isAudio(mimeType) ? FORMAT_UNSUPPORTED_SUBTYPE : FORMAT_UNSUPPORTED_TYPE; } + @Override + public final int supportsMixedMimeTypeAdaptation() throws ExoPlaybackException { + return ADAPTIVE_NOT_SEAMLESS; + } + @Override protected FfmpegDecoder createDecoder(Format format, ExoMediaCrypto mediaCrypto) throws FfmpegDecoderException { diff --git a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java index 954a090ee9..eb7206c9cf 100644 --- a/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java +++ b/extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java @@ -56,7 +56,7 @@ public class LibflacAudioRenderer extends SimpleDecoderAudioRenderer { } @Override - public int supportsFormat(Format format) { + protected int supportsFormatInternal(Format format) { return FlacLibrary.isAvailable() && MimeTypes.AUDIO_FLAC.equalsIgnoreCase(format.sampleMimeType) ? FORMAT_HANDLED : FORMAT_UNSUPPORTED_TYPE; } diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java index 2dd2697aab..1850e68229 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java @@ -72,7 +72,7 @@ public final class LibopusAudioRenderer extends SimpleDecoderAudioRenderer { } @Override - public int supportsFormat(Format format) { + protected int supportsFormatInternal(Format format) { return OpusLibrary.isAvailable() && MimeTypes.AUDIO_OPUS.equalsIgnoreCase(format.sampleMimeType) ? FORMAT_HANDLED : FORMAT_UNSUPPORTED_TYPE; } diff --git a/library/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java b/library/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java index 6cecb83c13..ee305ca59f 100644 --- a/library/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java @@ -152,6 +152,24 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements return this; } + @Override + public final int supportsFormat(Format format) { + int formatSupport = supportsFormatInternal(format); + if (formatSupport == FORMAT_UNSUPPORTED_TYPE || formatSupport == FORMAT_UNSUPPORTED_SUBTYPE) { + return formatSupport; + } + return ADAPTIVE_NOT_SEAMLESS | formatSupport; + } + + /** + * Returns the {@link #FORMAT_SUPPORT_MASK} component of the return value for + * {@link #supportsFormat(Format)}. + * + * @param format The format. + * @return The extent to which the renderer supports the format itself. + */ + protected abstract int supportsFormatInternal(Format format); + @Override public void render(long positionUs, long elapsedRealtimeUs) throws ExoPlaybackException { if (outputStreamEnded) {