Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
53844557
authored
Nov 27, 2020
by
krocard
Committed by
Ian Baker
Nov 30, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Move FormatSupport in common
#player-to-common PiperOrigin-RevId: 344558028
parent
50bbfb57
Show whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
236 additions
and
222 deletions
extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java
extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java
extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegVideoRenderer.java
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java
extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java
extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java
library/common/src/main/java/com/google/android/exoplayer2/C.java
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/ExoPlaybackException.java
library/core/src/main/java/com/google/android/exoplayer2/NoSampleRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/RendererCapabilities.java
library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
library/core/src/main/java/com/google/android/exoplayer2/trackselection/MappingTrackSelector.java
library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/video/spherical/CameraMotionRenderer.java
library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java
library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java
library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java
library/core/src/test/java/com/google/android/exoplayer2/trackselection/MappingTrackSelectorTest.java
library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java
library/core/src/test/java/com/google/android/exoplayer2/video/MediaCodecVideoRendererTest.java
library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java
library/ui/src/main/java/com/google/android/exoplayer2/ui/TrackSelectionView.java
playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java
extensions/av1/src/main/java/com/google/android/exoplayer2/ext/av1/Libgav1VideoRenderer.java
View file @
53844557
...
@@ -130,12 +130,13 @@ public class Libgav1VideoRenderer extends DecoderVideoRenderer {
...
@@ -130,12 +130,13 @@ public class Libgav1VideoRenderer extends DecoderVideoRenderer {
public
final
int
supportsFormat
(
Format
format
)
{
public
final
int
supportsFormat
(
Format
format
)
{
if
(!
MimeTypes
.
VIDEO_AV1
.
equalsIgnoreCase
(
format
.
sampleMimeType
)
if
(!
MimeTypes
.
VIDEO_AV1
.
equalsIgnoreCase
(
format
.
sampleMimeType
)
||
!
Gav1Library
.
isAvailable
())
{
||
!
Gav1Library
.
isAvailable
())
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
if
(
format
.
exoMediaCryptoType
!=
null
)
{
if
(
format
.
exoMediaCryptoType
!=
null
)
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_DRM
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_DRM
);
}
}
return
RendererCapabilities
.
create
(
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
);
}
}
@Override
@Override
...
...
extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegAudioRenderer.java
View file @
53844557
...
@@ -91,19 +91,19 @@ public final class FfmpegAudioRenderer extends DecoderAudioRenderer<FfmpegAudioD
...
@@ -91,19 +91,19 @@ public final class FfmpegAudioRenderer extends DecoderAudioRenderer<FfmpegAudioD
}
}
@Override
@Override
@FormatSupport
@
C
.
FormatSupport
protected
int
supportsFormatInternal
(
Format
format
)
{
protected
int
supportsFormatInternal
(
Format
format
)
{
String
mimeType
=
Assertions
.
checkNotNull
(
format
.
sampleMimeType
);
String
mimeType
=
Assertions
.
checkNotNull
(
format
.
sampleMimeType
);
if
(!
FfmpegLibrary
.
isAvailable
()
||
!
MimeTypes
.
isAudio
(
mimeType
))
{
if
(!
FfmpegLibrary
.
isAvailable
()
||
!
MimeTypes
.
isAudio
(
mimeType
))
{
return
FORMAT_UNSUPPORTED_TYPE
;
return
C
.
FORMAT_UNSUPPORTED_TYPE
;
}
else
if
(!
FfmpegLibrary
.
supportsFormat
(
mimeType
)
}
else
if
(!
FfmpegLibrary
.
supportsFormat
(
mimeType
)
||
(!
sinkSupportsFormat
(
format
,
C
.
ENCODING_PCM_16BIT
)
||
(!
sinkSupportsFormat
(
format
,
C
.
ENCODING_PCM_16BIT
)
&&
!
sinkSupportsFormat
(
format
,
C
.
ENCODING_PCM_FLOAT
)))
{
&&
!
sinkSupportsFormat
(
format
,
C
.
ENCODING_PCM_FLOAT
)))
{
return
FORMAT_UNSUPPORTED_SUBTYPE
;
return
C
.
FORMAT_UNSUPPORTED_SUBTYPE
;
}
else
if
(
format
.
exoMediaCryptoType
!=
null
)
{
}
else
if
(
format
.
exoMediaCryptoType
!=
null
)
{
return
FORMAT_UNSUPPORTED_DRM
;
return
C
.
FORMAT_UNSUPPORTED_DRM
;
}
else
{
}
else
{
return
FORMAT_HANDLED
;
return
C
.
FORMAT_HANDLED
;
}
}
}
}
...
...
extensions/ffmpeg/src/main/java/com/google/android/exoplayer2/ext/ffmpeg/FfmpegVideoRenderer.java
View file @
53844557
...
@@ -74,7 +74,7 @@ public final class FfmpegVideoRenderer extends DecoderVideoRenderer {
...
@@ -74,7 +74,7 @@ public final class FfmpegVideoRenderer extends DecoderVideoRenderer {
@RendererCapabilities
.
Capabilities
@RendererCapabilities
.
Capabilities
public
final
int
supportsFormat
(
Format
format
)
{
public
final
int
supportsFormat
(
Format
format
)
{
// TODO: Remove this line and uncomment the implementation below.
// TODO: Remove this line and uncomment the implementation below.
return
FORMAT_UNSUPPORTED_TYPE
;
return
C
.
FORMAT_UNSUPPORTED_TYPE
;
/*
/*
String mimeType = Assertions.checkNotNull(format.sampleMimeType);
String mimeType = Assertions.checkNotNull(format.sampleMimeType);
if (!FfmpegLibrary.isAvailable() || !MimeTypes.isVideo(mimeType)) {
if (!FfmpegLibrary.isAvailable() || !MimeTypes.isVideo(mimeType)) {
...
...
extensions/flac/src/main/java/com/google/android/exoplayer2/ext/flac/LibflacAudioRenderer.java
View file @
53844557
...
@@ -79,11 +79,11 @@ public final class LibflacAudioRenderer extends DecoderAudioRenderer<FlacDecoder
...
@@ -79,11 +79,11 @@ public final class LibflacAudioRenderer extends DecoderAudioRenderer<FlacDecoder
}
}
@Override
@Override
@FormatSupport
@
C
.
FormatSupport
protected
int
supportsFormatInternal
(
Format
format
)
{
protected
int
supportsFormatInternal
(
Format
format
)
{
if
(!
FlacLibrary
.
isAvailable
()
if
(!
FlacLibrary
.
isAvailable
()
||
!
MimeTypes
.
AUDIO_FLAC
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
||
!
MimeTypes
.
AUDIO_FLAC
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
return
FORMAT_UNSUPPORTED_TYPE
;
return
C
.
FORMAT_UNSUPPORTED_TYPE
;
}
}
// Compute the format that the FLAC decoder will output.
// Compute the format that the FLAC decoder will output.
Format
outputFormat
;
Format
outputFormat
;
...
@@ -102,11 +102,11 @@ public final class LibflacAudioRenderer extends DecoderAudioRenderer<FlacDecoder
...
@@ -102,11 +102,11 @@ public final class LibflacAudioRenderer extends DecoderAudioRenderer<FlacDecoder
outputFormat
=
getOutputFormat
(
streamMetadata
);
outputFormat
=
getOutputFormat
(
streamMetadata
);
}
}
if
(!
sinkSupportsFormat
(
outputFormat
))
{
if
(!
sinkSupportsFormat
(
outputFormat
))
{
return
FORMAT_UNSUPPORTED_SUBTYPE
;
return
C
.
FORMAT_UNSUPPORTED_SUBTYPE
;
}
else
if
(
format
.
exoMediaCryptoType
!=
null
)
{
}
else
if
(
format
.
exoMediaCryptoType
!=
null
)
{
return
FORMAT_UNSUPPORTED_DRM
;
return
C
.
FORMAT_UNSUPPORTED_DRM
;
}
else
{
}
else
{
return
FORMAT_HANDLED
;
return
C
.
FORMAT_HANDLED
;
}
}
}
}
...
...
extensions/opus/src/main/java/com/google/android/exoplayer2/ext/opus/LibopusAudioRenderer.java
View file @
53844557
...
@@ -79,21 +79,21 @@ public class LibopusAudioRenderer extends DecoderAudioRenderer<OpusDecoder> {
...
@@ -79,21 +79,21 @@ public class LibopusAudioRenderer extends DecoderAudioRenderer<OpusDecoder> {
}
}
@Override
@Override
@FormatSupport
@
C
.
FormatSupport
protected
int
supportsFormatInternal
(
Format
format
)
{
protected
int
supportsFormatInternal
(
Format
format
)
{
boolean
drmIsSupported
=
boolean
drmIsSupported
=
format
.
exoMediaCryptoType
==
null
format
.
exoMediaCryptoType
==
null
||
OpusLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
);
||
OpusLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
);
if
(!
OpusLibrary
.
isAvailable
()
if
(!
OpusLibrary
.
isAvailable
()
||
!
MimeTypes
.
AUDIO_OPUS
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
||
!
MimeTypes
.
AUDIO_OPUS
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
return
FORMAT_UNSUPPORTED_TYPE
;
return
C
.
FORMAT_UNSUPPORTED_TYPE
;
}
else
if
(!
sinkSupportsFormat
(
}
else
if
(!
sinkSupportsFormat
(
Util
.
getPcmFormat
(
C
.
ENCODING_PCM_16BIT
,
format
.
channelCount
,
format
.
sampleRate
)))
{
Util
.
getPcmFormat
(
C
.
ENCODING_PCM_16BIT
,
format
.
channelCount
,
format
.
sampleRate
)))
{
return
FORMAT_UNSUPPORTED_SUBTYPE
;
return
C
.
FORMAT_UNSUPPORTED_SUBTYPE
;
}
else
if
(!
drmIsSupported
)
{
}
else
if
(!
drmIsSupported
)
{
return
FORMAT_UNSUPPORTED_DRM
;
return
C
.
FORMAT_UNSUPPORTED_DRM
;
}
else
{
}
else
{
return
FORMAT_HANDLED
;
return
C
.
FORMAT_HANDLED
;
}
}
}
}
...
...
extensions/vp9/src/main/java/com/google/android/exoplayer2/ext/vp9/LibvpxVideoRenderer.java
View file @
53844557
...
@@ -127,15 +127,16 @@ public class LibvpxVideoRenderer extends DecoderVideoRenderer {
...
@@ -127,15 +127,16 @@ public class LibvpxVideoRenderer extends DecoderVideoRenderer {
@Capabilities
@Capabilities
public
final
int
supportsFormat
(
Format
format
)
{
public
final
int
supportsFormat
(
Format
format
)
{
if
(!
VpxLibrary
.
isAvailable
()
||
!
MimeTypes
.
VIDEO_VP9
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
if
(!
VpxLibrary
.
isAvailable
()
||
!
MimeTypes
.
VIDEO_VP9
.
equalsIgnoreCase
(
format
.
sampleMimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
boolean
drmIsSupported
=
boolean
drmIsSupported
=
format
.
exoMediaCryptoType
==
null
format
.
exoMediaCryptoType
==
null
||
VpxLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
);
||
VpxLibrary
.
matchesExpectedExoMediaCryptoType
(
format
.
exoMediaCryptoType
);
if
(!
drmIsSupported
)
{
if
(!
drmIsSupported
)
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_DRM
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_DRM
);
}
}
return
RendererCapabilities
.
create
(
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
);
}
}
@Override
@Override
...
...
library/common/src/main/java/com/google/android/exoplayer2/C.java
View file @
53844557
...
@@ -24,6 +24,7 @@ import android.media.MediaFormat;
...
@@ -24,6 +24,7 @@ import android.media.MediaFormat;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.RequiresApi
;
import
androidx.annotation.RequiresApi
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
com.google.android.exoplayer2.util.Util
;
import
com.google.android.exoplayer2.util.Util
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.Retention
;
...
@@ -1100,8 +1101,63 @@ public final class C {
...
@@ -1100,8 +1101,63 @@ public final class C {
/* package */
static
final
int
REPEAT_MODE_ALL
=
2
;
/* package */
static
final
int
REPEAT_MODE_ALL
=
2
;
/**
/**
* Converts a time in microseconds to the corresponding time in milliseconds, preserving
* Level of renderer support for a format. One of {@link #FORMAT_HANDLED}, {@link
* {@link #TIME_UNSET} and {@link #TIME_END_OF_SOURCE} values.
* #FORMAT_EXCEEDS_CAPABILITIES}, {@link #FORMAT_UNSUPPORTED_DRM}, {@link
* #FORMAT_UNSUPPORTED_SUBTYPE} or {@link #FORMAT_UNSUPPORTED_TYPE}.
*/
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
FORMAT_HANDLED
,
FORMAT_EXCEEDS_CAPABILITIES
,
FORMAT_UNSUPPORTED_DRM
,
FORMAT_UNSUPPORTED_SUBTYPE
,
FORMAT_UNSUPPORTED_TYPE
})
public
static
@interface
FormatSupport
{}
// TODO(b/172315872) Renderer was a link. Link to equivalent concept or remove @code.
/** The {@code Renderer} is capable of rendering the format. */
public
static
final
int
FORMAT_HANDLED
=
0b100
;
/**
* The {@code Renderer} is capable of rendering formats with the same MIME type, but the
* properties of the format exceed the renderer's capabilities. There is a chance the renderer
* will be able to play the format in practice because some renderers report their capabilities
* conservatively, but the expected outcome is that playback will fail.
*
* <p>Example: The {@code Renderer} is capable of rendering H264 and the format's MIME type is
* {@code MimeTypes#VIDEO_H264}, but the format's resolution exceeds the maximum limit supported
* by the underlying H264 decoder.
*/
public
static
final
int
FORMAT_EXCEEDS_CAPABILITIES
=
0b011
;
/**
* The {@code Renderer} is capable of rendering formats with the same MIME type, but is not
* capable of rendering the format because the format's drm protection is not supported.
*
* <p>Example: The {@code Renderer} is capable of rendering H264 and the format's MIME type is
* {@link MimeTypes#VIDEO_H264}, but the format indicates PlayReady drm protection whereas the
* renderer only supports Widevine.
*/
public
static
final
int
FORMAT_UNSUPPORTED_DRM
=
0b010
;
/**
* The {@code Renderer} is a general purpose renderer for formats of the same top-level type, but
* is not capable of rendering the format or any other format with the same MIME type because the
* sub-type is not supported.
*
* <p>Example: The {@code Renderer} is a general purpose audio renderer and the format's MIME type
* matches audio/[subtype], but there does not exist a suitable decoder for [subtype].
*/
public
static
final
int
FORMAT_UNSUPPORTED_SUBTYPE
=
0b001
;
/**
* The {@code Renderer} is not capable of rendering the format, either because it does not support
* the format's top-level type, or because it's a specialized renderer for a different MIME type.
*
* <p>Example: The {@code Renderer} is a general purpose video renderer, but the format has an
* audio MIME type.
*/
public
static
final
int
FORMAT_UNSUPPORTED_TYPE
=
0b000
;
/**
* Converts a time in microseconds to the corresponding time in milliseconds, preserving {@link
* #TIME_UNSET} and {@link #TIME_END_OF_SOURCE} values.
*
*
* @param timeUs The time in microseconds.
* @param timeUs The time in microseconds.
* @return The corresponding time in milliseconds.
* @return The corresponding time in milliseconds.
...
@@ -1134,4 +1190,26 @@ public final class C {
...
@@ -1134,4 +1190,26 @@ public final class C {
return
audioManager
==
null
?
AudioManager
.
ERROR
:
audioManager
.
generateAudioSessionId
();
return
audioManager
==
null
?
AudioManager
.
ERROR
:
audioManager
.
generateAudioSessionId
();
}
}
/**
* Returns string representation of a {@link FormatSupport} flag.
*
* @param formatSupport A {@link FormatSupport} flag.
* @return A string representation of the flag.
*/
public
static
String
getFormatSupportString
(
@FormatSupport
int
formatSupport
)
{
switch
(
formatSupport
)
{
case
FORMAT_HANDLED:
return
"YES"
;
case
FORMAT_EXCEEDS_CAPABILITIES:
return
"NO_EXCEEDS_CAPABILITIES"
;
case
FORMAT_UNSUPPORTED_DRM:
return
"NO_UNSUPPORTED_DRM"
;
case
FORMAT_UNSUPPORTED_SUBTYPE:
return
"NO_UNSUPPORTED_TYPE"
;
case
FORMAT_UNSUPPORTED_TYPE:
return
"NO"
;
default
:
throw
new
IllegalStateException
();
}
}
}
}
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
View file @
53844557
...
@@ -354,7 +354,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
...
@@ -354,7 +354,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
*/
*/
protected
final
ExoPlaybackException
createRendererException
(
protected
final
ExoPlaybackException
createRendererException
(
Exception
cause
,
@Nullable
Format
format
,
boolean
isRecoverable
)
{
Exception
cause
,
@Nullable
Format
format
,
boolean
isRecoverable
)
{
@
FormatSupport
int
formatSupport
=
RendererCapabilities
.
FORMAT_HANDLED
;
@
C
.
FormatSupport
int
formatSupport
=
C
.
FORMAT_HANDLED
;
if
(
format
!=
null
&&
!
throwRendererExceptionIsExecuting
)
{
if
(
format
!=
null
&&
!
throwRendererExceptionIsExecuting
)
{
// Prevent recursive re-entry from subclass supportsFormat implementations.
// Prevent recursive re-entry from subclass supportsFormat implementations.
throwRendererExceptionIsExecuting
=
true
;
throwRendererExceptionIsExecuting
=
true
;
...
...
library/core/src/main/java/com/google/android/exoplayer2/ExoPlaybackException.java
View file @
53844557
...
@@ -20,7 +20,7 @@ import android.text.TextUtils;
...
@@ -20,7 +20,7 @@ import android.text.TextUtils;
import
androidx.annotation.CheckResult
;
import
androidx.annotation.CheckResult
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.
RendererCapabilities
.FormatSupport
;
import
com.google.android.exoplayer2.
C
.FormatSupport
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.source.MediaSource
;
import
com.google.android.exoplayer2.util.Assertions
;
import
com.google.android.exoplayer2.util.Assertions
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -121,7 +121,7 @@ public final class ExoPlaybackException extends Exception {
...
@@ -121,7 +121,7 @@ public final class ExoPlaybackException extends Exception {
/**
/**
* If {@link #type} is {@link #TYPE_RENDERER}, this is the level of {@link FormatSupport} of the
* If {@link #type} is {@link #TYPE_RENDERER}, this is the level of {@link FormatSupport} of the
* renderer for {@link #rendererFormat}. If {@link #rendererFormat} is null, this is {@link
* renderer for {@link #rendererFormat}. If {@link #rendererFormat} is null, this is {@link
*
RendererCapabilities
#FORMAT_HANDLED}.
*
C
#FORMAT_HANDLED}.
*/
*/
@FormatSupport
public
final
int
rendererFormatSupport
;
@FormatSupport
public
final
int
rendererFormatSupport
;
...
@@ -214,7 +214,7 @@ public final class ExoPlaybackException extends Exception {
...
@@ -214,7 +214,7 @@ public final class ExoPlaybackException extends Exception {
rendererName
,
rendererName
,
rendererIndex
,
rendererIndex
,
rendererFormat
,
rendererFormat
,
rendererFormat
==
null
?
RendererCapabilities
.
FORMAT_HANDLED
:
rendererFormatSupport
,
rendererFormat
==
null
?
C
.
FORMAT_HANDLED
:
rendererFormatSupport
,
TIMEOUT_OPERATION_UNDEFINED
,
TIMEOUT_OPERATION_UNDEFINED
,
isRecoverable
);
isRecoverable
);
}
}
...
@@ -265,7 +265,7 @@ public final class ExoPlaybackException extends Exception {
...
@@ -265,7 +265,7 @@ public final class ExoPlaybackException extends Exception {
/* rendererName= */
null
,
/* rendererName= */
null
,
/* rendererIndex= */
C
.
INDEX_UNSET
,
/* rendererIndex= */
C
.
INDEX_UNSET
,
/* rendererFormat= */
null
,
/* rendererFormat= */
null
,
/* rendererFormatSupport= */
RendererCapabilities
.
FORMAT_HANDLED
,
/* rendererFormatSupport= */
C
.
FORMAT_HANDLED
,
timeoutOperation
,
timeoutOperation
,
/* isRecoverable= */
false
);
/* isRecoverable= */
false
);
}
}
...
@@ -278,7 +278,7 @@ public final class ExoPlaybackException extends Exception {
...
@@ -278,7 +278,7 @@ public final class ExoPlaybackException extends Exception {
/* rendererName= */
null
,
/* rendererName= */
null
,
/* rendererIndex= */
C
.
INDEX_UNSET
,
/* rendererIndex= */
C
.
INDEX_UNSET
,
/* rendererFormat= */
null
,
/* rendererFormat= */
null
,
/* rendererFormatSupport= */
RendererCapabilities
.
FORMAT_HANDLED
,
/* rendererFormatSupport= */
C
.
FORMAT_HANDLED
,
TIMEOUT_OPERATION_UNDEFINED
,
TIMEOUT_OPERATION_UNDEFINED
,
/* isRecoverable= */
false
);
/* isRecoverable= */
false
);
}
}
...
@@ -291,7 +291,7 @@ public final class ExoPlaybackException extends Exception {
...
@@ -291,7 +291,7 @@ public final class ExoPlaybackException extends Exception {
/* rendererName= */
null
,
/* rendererName= */
null
,
/* rendererIndex= */
C
.
INDEX_UNSET
,
/* rendererIndex= */
C
.
INDEX_UNSET
,
/* rendererFormat= */
null
,
/* rendererFormat= */
null
,
/* rendererFormatSupport= */
RendererCapabilities
.
FORMAT_HANDLED
,
/* rendererFormatSupport= */
C
.
FORMAT_HANDLED
,
/* timeoutOperation= */
TIMEOUT_OPERATION_UNDEFINED
,
/* timeoutOperation= */
TIMEOUT_OPERATION_UNDEFINED
,
/* isRecoverable= */
false
);
/* isRecoverable= */
false
);
}
}
...
@@ -446,7 +446,7 @@ public final class ExoPlaybackException extends Exception {
...
@@ -446,7 +446,7 @@ public final class ExoPlaybackException extends Exception {
+
", format="
+
", format="
+
rendererFormat
+
rendererFormat
+
", format_supported="
+
", format_supported="
+
RendererCapabilities
.
getFormatSupportString
(
rendererFormatSupport
);
+
C
.
getFormatSupportString
(
rendererFormatSupport
);
break
;
break
;
case
TYPE_REMOTE:
case
TYPE_REMOTE:
message
=
"Remote error"
;
message
=
"Remote error"
;
...
...
library/core/src/main/java/com/google/android/exoplayer2/NoSampleRenderer.java
View file @
53844557
...
@@ -168,7 +168,7 @@ public abstract class NoSampleRenderer implements Renderer, RendererCapabilities
...
@@ -168,7 +168,7 @@ public abstract class NoSampleRenderer implements Renderer, RendererCapabilities
@Override
@Override
@Capabilities
@Capabilities
public
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
public
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@Override
@Override
...
...
library/core/src/main/java/com/google/android/exoplayer2/RendererCapabilities.java
View file @
53844557
...
@@ -17,7 +17,6 @@ package com.google.android.exoplayer2;
...
@@ -17,7 +17,6 @@ package com.google.android.exoplayer2;
import
android.annotation.SuppressLint
;
import
android.annotation.SuppressLint
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
com.google.android.exoplayer2.util.MimeTypes
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Documented
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.RetentionPolicy
;
...
@@ -27,11 +26,8 @@ import java.lang.annotation.RetentionPolicy;
...
@@ -27,11 +26,8 @@ import java.lang.annotation.RetentionPolicy;
*/
*/
public
interface
RendererCapabilities
{
public
interface
RendererCapabilities
{
/**
/** @deprecated Use {@link C.FormatSupport} instead. */
* Level of renderer support for a format. One of {@link #FORMAT_HANDLED}, {@link
@SuppressWarnings
(
"Deprecation"
)
* #FORMAT_EXCEEDS_CAPABILITIES}, {@link #FORMAT_UNSUPPORTED_DRM}, {@link
* #FORMAT_UNSUPPORTED_SUBTYPE} or {@link #FORMAT_UNSUPPORTED_TYPE}.
*/
@Documented
@Documented
@Retention
(
RetentionPolicy
.
SOURCE
)
@Retention
(
RetentionPolicy
.
SOURCE
)
@IntDef
({
@IntDef
({
...
@@ -41,52 +37,20 @@ public interface RendererCapabilities {
...
@@ -41,52 +37,20 @@ public interface RendererCapabilities {
FORMAT_UNSUPPORTED_SUBTYPE
,
FORMAT_UNSUPPORTED_SUBTYPE
,
FORMAT_UNSUPPORTED_TYPE
FORMAT_UNSUPPORTED_TYPE
})
})
@Deprecated
@interface
FormatSupport
{}
@interface
FormatSupport
{}
/** A mask to apply to {@link Capabilities} to obtain the {@link C.FormatSupport} only. */
/** A mask to apply to {@link Capabilities} to obtain the {@link FormatSupport} only. */
int
FORMAT_SUPPORT_MASK
=
0b111
;
int
FORMAT_SUPPORT_MASK
=
0b111
;
/**
/** @deprecated Use {@link C#FORMAT_HANDLED} instead. */
* The {@link Renderer} is capable of rendering the format.
@Deprecated
int
FORMAT_HANDLED
=
0b100
;
*/
/** @deprecated Use {@link C#FORMAT_EXCEEDS_CAPABILITIES} instead. */
int
FORMAT_HANDLED
=
0b100
;
@Deprecated
int
FORMAT_EXCEEDS_CAPABILITIES
=
0b011
;
/**
/** @deprecated Use {@link C#FORMAT_UNSUPPORTED_DRM} instead. */
* The {@link Renderer} is capable of rendering formats with the same mime type, but the
@Deprecated
int
FORMAT_UNSUPPORTED_DRM
=
0b010
;
* properties of the format exceed the renderer's capabilities. There is a chance the renderer
/** @deprecated Use {@link C#FORMAT_UNSUPPORTED_SUBTYPE} instead. */
* will be able to play the format in practice because some renderers report their capabilities
@Deprecated
int
FORMAT_UNSUPPORTED_SUBTYPE
=
0b001
;
* conservatively, but the expected outcome is that playback will fail.
/** @deprecated Use {@link C#FORMAT_UNSUPPORTED_TYPE} instead. */
* <p>
@Deprecated
int
FORMAT_UNSUPPORTED_TYPE
=
0b000
;
* Example: The {@link Renderer} is capable of rendering H264 and the format's mime type is
* {@link MimeTypes#VIDEO_H264}, but the format's resolution exceeds the maximum limit supported
* by the underlying H264 decoder.
*/
int
FORMAT_EXCEEDS_CAPABILITIES
=
0b011
;
/**
* The {@link Renderer} is capable of rendering formats with the same mime type, but is not
* capable of rendering the format because the format's drm protection is not supported.
* <p>
* Example: The {@link Renderer} is capable of rendering H264 and the format's mime type is
* {@link MimeTypes#VIDEO_H264}, but the format indicates PlayReady drm protection where-as the
* renderer only supports Widevine.
*/
int
FORMAT_UNSUPPORTED_DRM
=
0b010
;
/**
* The {@link Renderer} is a general purpose renderer for formats of the same top-level type,
* but is not capable of rendering the format or any other format with the same mime type because
* the sub-type is not supported.
* <p>
* Example: The {@link Renderer} is a general purpose audio renderer and the format's
* mime type matches audio/[subtype], but there does not exist a suitable decoder for [subtype].
*/
int
FORMAT_UNSUPPORTED_SUBTYPE
=
0b001
;
/**
* The {@link Renderer} is not capable of rendering the format, either because it does not
* support the format's top-level type, or because it's a specialized renderer for a different
* mime type.
* <p>
* Example: The {@link Renderer} is a general purpose video renderer, but the format has an
* audio mime type.
*/
int
FORMAT_UNSUPPORTED_TYPE
=
0b000
;
/**
/**
* Level of renderer support for adaptive format switches. One of {@link #ADAPTIVE_SEAMLESS},
* Level of renderer support for adaptive format switches. One of {@link #ADAPTIVE_SEAMLESS},
...
@@ -136,7 +100,7 @@ public interface RendererCapabilities {
...
@@ -136,7 +100,7 @@ public interface RendererCapabilities {
/**
/**
* Combined renderer capabilities.
* Combined renderer capabilities.
*
*
* <p>This is a bitwise OR of {@link FormatSupport}, {@link AdaptiveSupport} and {@link
* <p>This is a bitwise OR of {@link
C.
FormatSupport}, {@link AdaptiveSupport} and {@link
* TunnelingSupport}. Use {@link #getFormatSupport(int)}, {@link #getAdaptiveSupport(int)} or
* TunnelingSupport}. Use {@link #getFormatSupport(int)}, {@link #getAdaptiveSupport(int)} or
* {@link #getTunnelingSupport(int)} to obtain the individual flags. And use {@link #create(int)}
* {@link #getTunnelingSupport(int)} to obtain the individual flags. And use {@link #create(int)}
* or {@link #create(int, int, int)} to create the combined capabilities.
* or {@link #create(int, int, int)} to create the combined capabilities.
...
@@ -144,18 +108,19 @@ public interface RendererCapabilities {
...
@@ -144,18 +108,19 @@ public interface RendererCapabilities {
* <p>Possible values:
* <p>Possible values:
*
*
* <ul>
* <ul>
* <li>{@link FormatSupport}: The level of support for the format itself. One of {@link
* <li>{@link C.FormatSupport}: The level of support for the format itself. One of {@link
* #FORMAT_HANDLED}, {@link #FORMAT_EXCEEDS_CAPABILITIES}, {@link #FORMAT_UNSUPPORTED_DRM},
* C#FORMAT_HANDLED}, {@link C#FORMAT_EXCEEDS_CAPABILITIES}, {@link
* {@link #FORMAT_UNSUPPORTED_SUBTYPE} and {@link #FORMAT_UNSUPPORTED_TYPE}.
* C#FORMAT_UNSUPPORTED_DRM}, {@link C#FORMAT_UNSUPPORTED_SUBTYPE} and {@link
* C#FORMAT_UNSUPPORTED_TYPE}.
* <li>{@link AdaptiveSupport}: The level of support for adapting from the format to another
* <li>{@link AdaptiveSupport}: The level of support for adapting from the format to another
* format of the same mime type. One of {@link #ADAPTIVE_SEAMLESS}, {@link
* format of the same mime type. One of {@link #ADAPTIVE_SEAMLESS}, {@link
* #ADAPTIVE_NOT_SEAMLESS} and {@link #ADAPTIVE_NOT_SUPPORTED}. Only set if the level of
* #ADAPTIVE_NOT_SEAMLESS} and {@link #ADAPTIVE_NOT_SUPPORTED}. Only set if the level of
* support for the format itself is {@link #FORMAT_HANDLED} or {@link
* support for the format itself is {@link
C
#FORMAT_HANDLED} or {@link
* #FORMAT_EXCEEDS_CAPABILITIES}.
*
C
#FORMAT_EXCEEDS_CAPABILITIES}.
* <li>{@link TunnelingSupport}: The level of support for tunneling. One of {@link
* <li>{@link TunnelingSupport}: The level of support for tunneling. One of {@link
* #TUNNELING_SUPPORTED} and {@link #TUNNELING_NOT_SUPPORTED}. Only set if the level of
* #TUNNELING_SUPPORTED} and {@link #TUNNELING_NOT_SUPPORTED}. Only set if the level of
* support for the format itself is {@link #FORMAT_HANDLED} or {@link
* support for the format itself is {@link
C
#FORMAT_HANDLED} or {@link
* #FORMAT_EXCEEDS_CAPABILITIES}.
*
C
#FORMAT_EXCEEDS_CAPABILITIES}.
* </ul>
* </ul>
*/
*/
@Documented
@Documented
...
@@ -165,25 +130,25 @@ public interface RendererCapabilities {
...
@@ -165,25 +130,25 @@ public interface RendererCapabilities {
@interface
Capabilities
{}
@interface
Capabilities
{}
/**
/**
* Returns {@link Capabilities} for the given {@link FormatSupport}.
* Returns {@link Capabilities} for the given {@link
C.
FormatSupport}.
*
*
* <p>The {@link AdaptiveSupport} is set to {@link #ADAPTIVE_NOT_SUPPORTED} and {{@link
* <p>The {@link AdaptiveSupport} is set to {@link #ADAPTIVE_NOT_SUPPORTED} and {{@link
* TunnelingSupport} is set to {@link #TUNNELING_NOT_SUPPORTED}.
* TunnelingSupport} is set to {@link #TUNNELING_NOT_SUPPORTED}.
*
*
* @param formatSupport The {@link FormatSupport}.
* @param formatSupport The {@link
C.
FormatSupport}.
* @return The combined {@link Capabilities} of the given {@link FormatSupport}, {@link
* @return The combined {@link Capabilities} of the given {@link
C.
FormatSupport}, {@link
* #ADAPTIVE_NOT_SUPPORTED} and {@link #TUNNELING_NOT_SUPPORTED}.
* #ADAPTIVE_NOT_SUPPORTED} and {@link #TUNNELING_NOT_SUPPORTED}.
*/
*/
@Capabilities
@Capabilities
static
int
create
(
@FormatSupport
int
formatSupport
)
{
static
int
create
(
@
C
.
FormatSupport
int
formatSupport
)
{
return
create
(
formatSupport
,
ADAPTIVE_NOT_SUPPORTED
,
TUNNELING_NOT_SUPPORTED
);
return
create
(
formatSupport
,
ADAPTIVE_NOT_SUPPORTED
,
TUNNELING_NOT_SUPPORTED
);
}
}
/**
/**
* Returns {@link Capabilities} combining the given {@link
FormatSupport}, {@link AdaptiveSupport}
* Returns {@link Capabilities} combining the given {@link
C.FormatSupport}, {@link
* and {@link TunnelingSupport}.
*
AdaptiveSupport}
and {@link TunnelingSupport}.
*
*
* @param formatSupport The {@link FormatSupport}.
* @param formatSupport The {@link
C.
FormatSupport}.
* @param adaptiveSupport The {@link AdaptiveSupport}.
* @param adaptiveSupport The {@link AdaptiveSupport}.
* @param tunnelingSupport The {@link TunnelingSupport}.
* @param tunnelingSupport The {@link TunnelingSupport}.
* @return The combined {@link Capabilities}.
* @return The combined {@link Capabilities}.
...
@@ -192,21 +157,21 @@ public interface RendererCapabilities {
...
@@ -192,21 +157,21 @@ public interface RendererCapabilities {
@SuppressLint
(
"WrongConstant"
)
@SuppressLint
(
"WrongConstant"
)
@Capabilities
@Capabilities
static
int
create
(
static
int
create
(
@FormatSupport
int
formatSupport
,
@
C
.
FormatSupport
int
formatSupport
,
@AdaptiveSupport
int
adaptiveSupport
,
@AdaptiveSupport
int
adaptiveSupport
,
@TunnelingSupport
int
tunnelingSupport
)
{
@TunnelingSupport
int
tunnelingSupport
)
{
return
formatSupport
|
adaptiveSupport
|
tunnelingSupport
;
return
formatSupport
|
adaptiveSupport
|
tunnelingSupport
;
}
}
/**
/**
* Returns the {@link FormatSupport} from the combined {@link Capabilities}.
* Returns the {@link
C.
FormatSupport} from the combined {@link Capabilities}.
*
*
* @param supportFlags The combined {@link Capabilities}.
* @param supportFlags The combined {@link Capabilities}.
* @return The {@link FormatSupport} only.
* @return The {@link
C.
FormatSupport} only.
*/
*/
// Suppression needed for IntDef casting.
// Suppression needed for IntDef casting.
@SuppressLint
(
"WrongConstant"
)
@SuppressLint
(
"WrongConstant"
)
@FormatSupport
@
C
.
FormatSupport
static
int
getFormatSupport
(
@Capabilities
int
supportFlags
)
{
static
int
getFormatSupport
(
@Capabilities
int
supportFlags
)
{
return
supportFlags
&
FORMAT_SUPPORT_MASK
;
return
supportFlags
&
FORMAT_SUPPORT_MASK
;
}
}
...
@@ -237,29 +202,6 @@ public interface RendererCapabilities {
...
@@ -237,29 +202,6 @@ public interface RendererCapabilities {
return
supportFlags
&
TUNNELING_SUPPORT_MASK
;
return
supportFlags
&
TUNNELING_SUPPORT_MASK
;
}
}
/**
* Returns string representation of a {@link FormatSupport} flag.
*
* @param formatSupport A {@link FormatSupport} flag.
* @return A string representation of the flag.
*/
static
String
getFormatSupportString
(
@FormatSupport
int
formatSupport
)
{
switch
(
formatSupport
)
{
case
RendererCapabilities
.
FORMAT_HANDLED
:
return
"YES"
;
case
RendererCapabilities
.
FORMAT_EXCEEDS_CAPABILITIES
:
return
"NO_EXCEEDS_CAPABILITIES"
;
case
RendererCapabilities
.
FORMAT_UNSUPPORTED_DRM
:
return
"NO_UNSUPPORTED_DRM"
;
case
RendererCapabilities
.
FORMAT_UNSUPPORTED_SUBTYPE
:
return
"NO_UNSUPPORTED_TYPE"
;
case
RendererCapabilities
.
FORMAT_UNSUPPORTED_TYPE
:
return
"NO"
;
default
:
throw
new
IllegalStateException
();
}
}
/** Returns the name of the {@link Renderer}. */
/** Returns the name of the {@link Renderer}. */
String
getName
();
String
getName
();
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java
View file @
53844557
...
@@ -215,10 +215,10 @@ public abstract class DecoderAudioRenderer<
...
@@ -215,10 +215,10 @@ public abstract class DecoderAudioRenderer<
@Capabilities
@Capabilities
public
final
int
supportsFormat
(
Format
format
)
{
public
final
int
supportsFormat
(
Format
format
)
{
if
(!
MimeTypes
.
isAudio
(
format
.
sampleMimeType
))
{
if
(!
MimeTypes
.
isAudio
(
format
.
sampleMimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@FormatSupport
int
formatSupport
=
supportsFormatInternal
(
format
);
@
C
.
FormatSupport
int
formatSupport
=
supportsFormatInternal
(
format
);
if
(
formatSupport
<=
FORMAT_UNSUPPORTED_DRM
)
{
if
(
formatSupport
<=
C
.
FORMAT_UNSUPPORTED_DRM
)
{
return
RendererCapabilities
.
create
(
formatSupport
);
return
RendererCapabilities
.
create
(
formatSupport
);
}
}
@TunnelingSupport
@TunnelingSupport
...
@@ -227,12 +227,12 @@ public abstract class DecoderAudioRenderer<
...
@@ -227,12 +227,12 @@ public abstract class DecoderAudioRenderer<
}
}
/**
/**
* Returns the {@link FormatSupport} for the given {@link Format}.
* Returns the {@link
C.
FormatSupport} for the given {@link Format}.
*
*
* @param format The format, which has an audio {@link Format#sampleMimeType}.
* @param format The format, which has an audio {@link Format#sampleMimeType}.
* @return The {@link FormatSupport} for this {@link Format}.
* @return The {@link
C.
FormatSupport} for this {@link Format}.
*/
*/
@FormatSupport
@
C
.
FormatSupport
protected
abstract
int
supportsFormatInternal
(
Format
format
);
protected
abstract
int
supportsFormatInternal
(
Format
format
);
/**
/**
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
View file @
53844557
...
@@ -232,7 +232,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -232,7 +232,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
protected
int
supportsFormat
(
MediaCodecSelector
mediaCodecSelector
,
Format
format
)
protected
int
supportsFormat
(
MediaCodecSelector
mediaCodecSelector
,
Format
format
)
throws
DecoderQueryException
{
throws
DecoderQueryException
{
if
(!
MimeTypes
.
isAudio
(
format
.
sampleMimeType
))
{
if
(!
MimeTypes
.
isAudio
(
format
.
sampleMimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@TunnelingSupport
@TunnelingSupport
int
tunnelingSupport
=
Util
.
SDK_INT
>=
21
?
TUNNELING_SUPPORTED
:
TUNNELING_NOT_SUPPORTED
;
int
tunnelingSupport
=
Util
.
SDK_INT
>=
21
?
TUNNELING_SUPPORTED
:
TUNNELING_NOT_SUPPORTED
;
...
@@ -243,25 +243,25 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -243,25 +243,25 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
if
(
supportsFormatDrm
if
(
supportsFormatDrm
&&
audioSink
.
supportsFormat
(
format
)
&&
audioSink
.
supportsFormat
(
format
)
&&
(!
formatHasDrm
||
MediaCodecUtil
.
getDecryptOnlyDecoderInfo
()
!=
null
))
{
&&
(!
formatHasDrm
||
MediaCodecUtil
.
getDecryptOnlyDecoderInfo
()
!=
null
))
{
return
RendererCapabilities
.
create
(
FORMAT_HANDLED
,
ADAPTIVE_NOT_SEAMLESS
,
tunnelingSupport
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_HANDLED
,
ADAPTIVE_NOT_SEAMLESS
,
tunnelingSupport
);
}
}
// If the input is PCM then it will be passed directly to the sink. Hence the sink must support
// If the input is PCM then it will be passed directly to the sink. Hence the sink must support
// the input format directly.
// the input format directly.
if
(
MimeTypes
.
AUDIO_RAW
.
equals
(
format
.
sampleMimeType
)
&&
!
audioSink
.
supportsFormat
(
format
))
{
if
(
MimeTypes
.
AUDIO_RAW
.
equals
(
format
.
sampleMimeType
)
&&
!
audioSink
.
supportsFormat
(
format
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_SUBTYPE
);
}
}
// For all other input formats, we expect the decoder to output 16-bit PCM.
// For all other input formats, we expect the decoder to output 16-bit PCM.
if
(!
audioSink
.
supportsFormat
(
if
(!
audioSink
.
supportsFormat
(
Util
.
getPcmFormat
(
C
.
ENCODING_PCM_16BIT
,
format
.
channelCount
,
format
.
sampleRate
)))
{
Util
.
getPcmFormat
(
C
.
ENCODING_PCM_16BIT
,
format
.
channelCount
,
format
.
sampleRate
)))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_SUBTYPE
);
}
}
List
<
MediaCodecInfo
>
decoderInfos
=
List
<
MediaCodecInfo
>
decoderInfos
=
getDecoderInfos
(
mediaCodecSelector
,
format
,
/* requiresSecureDecoder= */
false
);
getDecoderInfos
(
mediaCodecSelector
,
format
,
/* requiresSecureDecoder= */
false
);
if
(
decoderInfos
.
isEmpty
())
{
if
(
decoderInfos
.
isEmpty
())
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_SUBTYPE
);
}
}
if
(!
supportsFormatDrm
)
{
if
(!
supportsFormatDrm
)
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_DRM
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_DRM
);
}
}
// Check capabilities for the first decoder in the list, which takes priority.
// Check capabilities for the first decoder in the list, which takes priority.
MediaCodecInfo
decoderInfo
=
decoderInfos
.
get
(
0
);
MediaCodecInfo
decoderInfo
=
decoderInfos
.
get
(
0
);
...
@@ -271,8 +271,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -271,8 +271,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
isFormatSupported
&&
decoderInfo
.
isSeamlessAdaptationSupported
(
format
)
isFormatSupported
&&
decoderInfo
.
isSeamlessAdaptationSupported
(
format
)
?
ADAPTIVE_SEAMLESS
?
ADAPTIVE_SEAMLESS
:
ADAPTIVE_NOT_SEAMLESS
;
:
ADAPTIVE_NOT_SEAMLESS
;
@FormatSupport
@
C
.
FormatSupport
int
formatSupport
=
isFormatSupported
?
FORMAT_HANDLED
:
FORMAT_EXCEEDS_CAPABILITIES
;
int
formatSupport
=
isFormatSupported
?
C
.
FORMAT_HANDLED
:
C
.
FORMAT_EXCEEDS_CAPABILITIES
;
return
RendererCapabilities
.
create
(
formatSupport
,
adaptiveSupport
,
tunnelingSupport
);
return
RendererCapabilities
.
create
(
formatSupport
,
adaptiveSupport
,
tunnelingSupport
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java
View file @
53844557
...
@@ -103,9 +103,9 @@ public final class MetadataRenderer extends BaseRenderer implements Callback {
...
@@ -103,9 +103,9 @@ public final class MetadataRenderer extends BaseRenderer implements Callback {
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
return
RendererCapabilities
.
create
(
return
RendererCapabilities
.
create
(
format
.
exoMediaCryptoType
==
null
?
FORMAT_HANDLED
:
FORMAT_UNSUPPORTED_DRM
);
format
.
exoMediaCryptoType
==
null
?
C
.
FORMAT_HANDLED
:
C
.
FORMAT_UNSUPPORTED_DRM
);
}
else
{
}
else
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java
View file @
53844557
...
@@ -133,11 +133,11 @@ public final class TextRenderer extends BaseRenderer implements Callback {
...
@@ -133,11 +133,11 @@ public final class TextRenderer extends BaseRenderer implements Callback {
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
if
(
decoderFactory
.
supportsFormat
(
format
))
{
return
RendererCapabilities
.
create
(
return
RendererCapabilities
.
create
(
format
.
exoMediaCryptoType
==
null
?
FORMAT_HANDLED
:
FORMAT_UNSUPPORTED_DRM
);
format
.
exoMediaCryptoType
==
null
?
C
.
FORMAT_HANDLED
:
C
.
FORMAT_UNSUPPORTED_DRM
);
}
else
if
(
MimeTypes
.
isText
(
format
.
sampleMimeType
))
{
}
else
if
(
MimeTypes
.
isText
(
format
.
sampleMimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_SUBTYPE
);
}
else
{
}
else
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java
View file @
53844557
...
@@ -25,6 +25,7 @@ import android.util.SparseArray;
...
@@ -25,6 +25,7 @@ import android.util.SparseArray;
import
android.util.SparseBooleanArray
;
import
android.util.SparseBooleanArray
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C.FormatSupport
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player
;
...
@@ -32,7 +33,6 @@ import com.google.android.exoplayer2.Renderer;
...
@@ -32,7 +33,6 @@ import com.google.android.exoplayer2.Renderer;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport
;
import
com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport
;
import
com.google.android.exoplayer2.RendererCapabilities.Capabilities
;
import
com.google.android.exoplayer2.RendererCapabilities.Capabilities
;
import
com.google.android.exoplayer2.RendererCapabilities.FormatSupport
;
import
com.google.android.exoplayer2.RendererConfiguration
;
import
com.google.android.exoplayer2.RendererConfiguration
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
...
@@ -2405,21 +2405,21 @@ public class DefaultTrackSelector extends MappingTrackSelector {
...
@@ -2405,21 +2405,21 @@ public class DefaultTrackSelector extends MappingTrackSelector {
/**
/**
* Returns true if the {@link FormatSupport} in the given {@link Capabilities} is {@link
* Returns true if the {@link FormatSupport} in the given {@link Capabilities} is {@link
*
RendererCapabilities#FORMAT_HANDLED} or if {@code allowExceedsCapabilities} is set and the
*
C#FORMAT_HANDLED} or if {@code allowExceedsCapabilities} is set and the format support is
*
format support is {@link RendererCapabilities
#FORMAT_EXCEEDS_CAPABILITIES}.
*
{@link C
#FORMAT_EXCEEDS_CAPABILITIES}.
*
*
* @param formatSupport {@link Capabilities}.
* @param formatSupport {@link Capabilities}.
* @param allowExceedsCapabilities Whether to return true if {@link FormatSupport} is {@link
* @param allowExceedsCapabilities Whether to return true if {@link FormatSupport} is {@link
*
RendererCapabilities
#FORMAT_EXCEEDS_CAPABILITIES}.
*
C
#FORMAT_EXCEEDS_CAPABILITIES}.
* @return True if {@link FormatSupport} is {@link
RendererCapabilities#FORMAT_HANDLED}, or if
* @return True if {@link FormatSupport} is {@link
C#FORMAT_HANDLED}, or if {@code
*
{@code
allowExceedsCapabilities} is set and the format support is {@link
* allowExceedsCapabilities} is set and the format support is {@link
*
RendererCapabilities
#FORMAT_EXCEEDS_CAPABILITIES}.
*
C
#FORMAT_EXCEEDS_CAPABILITIES}.
*/
*/
protected
static
boolean
isSupported
(
protected
static
boolean
isSupported
(
@Capabilities
int
formatSupport
,
boolean
allowExceedsCapabilities
)
{
@Capabilities
int
formatSupport
,
boolean
allowExceedsCapabilities
)
{
@FormatSupport
int
maskedSupport
=
RendererCapabilities
.
getFormatSupport
(
formatSupport
);
@FormatSupport
int
maskedSupport
=
RendererCapabilities
.
getFormatSupport
(
formatSupport
);
return
maskedSupport
==
RendererCapabilities
.
FORMAT_HANDLED
||
(
allowExceedsCapabilities
return
maskedSupport
==
C
.
FORMAT_HANDLED
&&
maskedSupport
==
RendererCapabilities
.
FORMAT_EXCEEDS_CAPABILITIES
);
||
(
allowExceedsCapabilities
&&
maskedSupport
==
C
.
FORMAT_EXCEEDS_CAPABILITIES
);
}
}
/**
/**
...
...
library/core/src/main/java/com/google/android/exoplayer2/trackselection/MappingTrackSelector.java
View file @
53844557
...
@@ -22,12 +22,12 @@ import android.util.Pair;
...
@@ -22,12 +22,12 @@ import android.util.Pair;
import
androidx.annotation.IntDef
;
import
androidx.annotation.IntDef
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C.FormatSupport
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.Renderer
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport
;
import
com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport
;
import
com.google.android.exoplayer2.RendererCapabilities.Capabilities
;
import
com.google.android.exoplayer2.RendererCapabilities.Capabilities
;
import
com.google.android.exoplayer2.RendererCapabilities.FormatSupport
;
import
com.google.android.exoplayer2.RendererConfiguration
;
import
com.google.android.exoplayer2.RendererConfiguration
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
...
@@ -71,23 +71,22 @@ public abstract class MappingTrackSelector extends TrackSelector {
...
@@ -71,23 +71,22 @@ public abstract class MappingTrackSelector extends TrackSelector {
public
static
final
int
RENDERER_SUPPORT_NO_TRACKS
=
0
;
public
static
final
int
RENDERER_SUPPORT_NO_TRACKS
=
0
;
/**
/**
* The renderer has tracks mapped to it, but all are unsupported. In other words, {@link
* The renderer has tracks mapped to it, but all are unsupported. In other words, {@link
* #getTrackSupport(int, int, int)} returns {@link
RendererCapabilities#FORMAT_UNSUPPORTED_DRM},
* #getTrackSupport(int, int, int)} returns {@link
C#FORMAT_UNSUPPORTED_DRM}, {@link
*
{@link RendererCapabilities#FORMAT_UNSUPPORTED_SUBTYPE} or {@link
*
C#FORMAT_UNSUPPORTED_SUBTYPE} or {@link C#FORMAT_UNSUPPORTED_TYPE} for all tracks mapped to
*
RendererCapabilities#FORMAT_UNSUPPORTED_TYPE} for all tracks mapped to
the renderer.
* the renderer.
*/
*/
public
static
final
int
RENDERER_SUPPORT_UNSUPPORTED_TRACKS
=
1
;
public
static
final
int
RENDERER_SUPPORT_UNSUPPORTED_TRACKS
=
1
;
/**
/**
* The renderer has tracks mapped to it and at least one is of a supported type, but all such
* The renderer has tracks mapped to it and at least one is of a supported type, but all such
* tracks exceed the renderer's capabilities. In other words, {@link #getTrackSupport(int, int,
* tracks exceed the renderer's capabilities. In other words, {@link #getTrackSupport(int, int,
* int)} returns {@link RendererCapabilities#FORMAT_EXCEEDS_CAPABILITIES} for at least one
* int)} returns {@link C#FORMAT_EXCEEDS_CAPABILITIES} for at least one track mapped to the
* track mapped to the renderer, but does not return {@link
* renderer, but does not return {@link C#FORMAT_HANDLED} for any tracks mapped to the renderer.
* RendererCapabilities#FORMAT_HANDLED} for any tracks mapped to the renderer.
*/
*/
public
static
final
int
RENDERER_SUPPORT_EXCEEDS_CAPABILITIES_TRACKS
=
2
;
public
static
final
int
RENDERER_SUPPORT_EXCEEDS_CAPABILITIES_TRACKS
=
2
;
/**
/**
* The renderer has tracks mapped to it, and at least one such track is playable. In other
* The renderer has tracks mapped to it, and at least one such track is playable. In other
* words, {@link #getTrackSupport(int, int, int)} returns {@link
* words, {@link #getTrackSupport(int, int, int)} returns {@link
C#FORMAT_HANDLED} for at least
*
RendererCapabilities#FORMAT_HANDLED} for at least
one track mapped to the renderer.
* one track mapped to the renderer.
*/
*/
public
static
final
int
RENDERER_SUPPORT_PLAYABLE_TRACKS
=
3
;
public
static
final
int
RENDERER_SUPPORT_PLAYABLE_TRACKS
=
3
;
...
@@ -181,14 +180,14 @@ public abstract class MappingTrackSelector extends TrackSelector {
...
@@ -181,14 +180,14 @@ public abstract class MappingTrackSelector extends TrackSelector {
for
(
@Capabilities
int
trackFormatSupport
:
trackGroupFormatSupport
)
{
for
(
@Capabilities
int
trackFormatSupport
:
trackGroupFormatSupport
)
{
int
trackRendererSupport
;
int
trackRendererSupport
;
switch
(
RendererCapabilities
.
getFormatSupport
(
trackFormatSupport
))
{
switch
(
RendererCapabilities
.
getFormatSupport
(
trackFormatSupport
))
{
case
RendererCapabilities
.
FORMAT_HANDLED
:
case
C
.
FORMAT_HANDLED
:
return
RENDERER_SUPPORT_PLAYABLE_TRACKS
;
return
RENDERER_SUPPORT_PLAYABLE_TRACKS
;
case
RendererCapabilities
.
FORMAT_EXCEEDS_CAPABILITIES
:
case
C
.
FORMAT_EXCEEDS_CAPABILITIES
:
trackRendererSupport
=
RENDERER_SUPPORT_EXCEEDS_CAPABILITIES_TRACKS
;
trackRendererSupport
=
RENDERER_SUPPORT_EXCEEDS_CAPABILITIES_TRACKS
;
break
;
break
;
case
RendererCapabilities
.
FORMAT_UNSUPPORTED_TYPE
:
case
C
.
FORMAT_UNSUPPORTED_TYPE
:
case
RendererCapabilities
.
FORMAT_UNSUPPORTED_SUBTYPE
:
case
C
.
FORMAT_UNSUPPORTED_SUBTYPE
:
case
RendererCapabilities
.
FORMAT_UNSUPPORTED_DRM
:
case
C
.
FORMAT_UNSUPPORTED_DRM
:
trackRendererSupport
=
RENDERER_SUPPORT_UNSUPPORTED_TRACKS
;
trackRendererSupport
=
RENDERER_SUPPORT_UNSUPPORTED_TRACKS
;
break
;
break
;
default
:
default
:
...
@@ -252,14 +251,12 @@ public abstract class MappingTrackSelector extends TrackSelector {
...
@@ -252,14 +251,12 @@ public abstract class MappingTrackSelector extends TrackSelector {
* Returns the extent to which a renderer supports adaptation between supported tracks in a
* Returns the extent to which a renderer supports adaptation between supported tracks in a
* specified {@link TrackGroup}.
* specified {@link TrackGroup}.
*
*
* <p>Tracks for which {@link #getTrackSupport(int, int, int)} returns {@link
* <p>Tracks for which {@link #getTrackSupport(int, int, int)} returns {@link C#FORMAT_HANDLED}
* RendererCapabilities#FORMAT_HANDLED} are always considered. Tracks for which {@link
* are always considered. Tracks for which {@link #getTrackSupport(int, int, int)} returns
* #getTrackSupport(int, int, int)} returns {@link
* {@link C#FORMAT_EXCEEDS_CAPABILITIES} are also considered if {@code
* RendererCapabilities#FORMAT_EXCEEDS_CAPABILITIES} are also considered if {@code
* includeCapabilitiesExceededTracks} is set to {@code true}. Tracks for which {@link
* includeCapabilitiesExceededTracks} is set to {@code true}. Tracks for which {@link
* #getTrackSupport(int, int, int)} returns {@link RendererCapabilities#FORMAT_UNSUPPORTED_DRM},
* #getTrackSupport(int, int, int)} returns {@link C#FORMAT_UNSUPPORTED_DRM}, {@link
* {@link RendererCapabilities#FORMAT_UNSUPPORTED_TYPE} or {@link
* C#FORMAT_UNSUPPORTED_TYPE} or {@link C#FORMAT_UNSUPPORTED_SUBTYPE} are never considered.
* RendererCapabilities#FORMAT_UNSUPPORTED_SUBTYPE} are never considered.
*
*
* @param rendererIndex The renderer index.
* @param rendererIndex The renderer index.
* @param groupIndex The index of the track group.
* @param groupIndex The index of the track group.
...
@@ -276,9 +273,9 @@ public abstract class MappingTrackSelector extends TrackSelector {
...
@@ -276,9 +273,9 @@ public abstract class MappingTrackSelector extends TrackSelector {
int
trackIndexCount
=
0
;
int
trackIndexCount
=
0
;
for
(
int
i
=
0
;
i
<
trackCount
;
i
++)
{
for
(
int
i
=
0
;
i
<
trackCount
;
i
++)
{
@FormatSupport
int
fixedSupport
=
getTrackSupport
(
rendererIndex
,
groupIndex
,
i
);
@FormatSupport
int
fixedSupport
=
getTrackSupport
(
rendererIndex
,
groupIndex
,
i
);
if
(
fixedSupport
==
RendererCapabilities
.
FORMAT_HANDLED
if
(
fixedSupport
==
C
.
FORMAT_HANDLED
||
(
includeCapabilitiesExceededTracks
||
(
includeCapabilitiesExceededTracks
&&
fixedSupport
==
RendererCapabilities
.
FORMAT_EXCEEDS_CAPABILITIES
))
{
&&
fixedSupport
==
C
.
FORMAT_EXCEEDS_CAPABILITIES
))
{
trackIndices
[
trackIndexCount
++]
=
i
;
trackIndices
[
trackIndexCount
++]
=
i
;
}
}
}
}
...
@@ -469,10 +466,8 @@ public abstract class MappingTrackSelector extends TrackSelector {
...
@@ -469,10 +466,8 @@ public abstract class MappingTrackSelector extends TrackSelector {
* Finds the renderer to which the provided {@link TrackGroup} should be mapped.
* Finds the renderer to which the provided {@link TrackGroup} should be mapped.
*
*
* <p>A {@link TrackGroup} is mapped to the renderer that reports the highest of (listed in
* <p>A {@link TrackGroup} is mapped to the renderer that reports the highest of (listed in
* decreasing order of support) {@link RendererCapabilities#FORMAT_HANDLED}, {@link
* decreasing order of support) {@link C#FORMAT_HANDLED}, {@link C#FORMAT_EXCEEDS_CAPABILITIES},
* RendererCapabilities#FORMAT_EXCEEDS_CAPABILITIES}, {@link
* {@link C#FORMAT_UNSUPPORTED_DRM} and {@link C#FORMAT_UNSUPPORTED_SUBTYPE}.
* RendererCapabilities#FORMAT_UNSUPPORTED_DRM} and {@link
* RendererCapabilities#FORMAT_UNSUPPORTED_SUBTYPE}.
*
*
* <p>In the case that two or more renderers report the same level of support, the assignment
* <p>In the case that two or more renderers report the same level of support, the assignment
* depends on {@code preferUnassociatedRenderer}.
* depends on {@code preferUnassociatedRenderer}.
...
@@ -485,9 +480,9 @@ public abstract class MappingTrackSelector extends TrackSelector {
...
@@ -485,9 +480,9 @@ public abstract class MappingTrackSelector extends TrackSelector {
* available renderers have already mapped track groups.
* available renderers have already mapped track groups.
* </ul>
* </ul>
*
*
* <p>If all renderers report {@link
RendererCapabilities#FORMAT_UNSUPPORTED_TYPE} for all of
the
* <p>If all renderers report {@link
C#FORMAT_UNSUPPORTED_TYPE} for all of the tracks in
the
*
tracks in the group, then {@code renderers.length} is returned to indicate that the group was
*
group, then {@code renderers.length} is returned to indicate that the group was not mapped to
*
not mapped to
any renderer.
* any renderer.
*
*
* @param rendererCapabilities The {@link RendererCapabilities} of the renderers.
* @param rendererCapabilities The {@link RendererCapabilities} of the renderers.
* @param group The track group to map to a renderer.
* @param group The track group to map to a renderer.
...
@@ -505,11 +500,11 @@ public abstract class MappingTrackSelector extends TrackSelector {
...
@@ -505,11 +500,11 @@ public abstract class MappingTrackSelector extends TrackSelector {
boolean
preferUnassociatedRenderer
)
boolean
preferUnassociatedRenderer
)
throws
ExoPlaybackException
{
throws
ExoPlaybackException
{
int
bestRendererIndex
=
rendererCapabilities
.
length
;
int
bestRendererIndex
=
rendererCapabilities
.
length
;
@FormatSupport
int
bestFormatSupportLevel
=
RendererCapabilities
.
FORMAT_UNSUPPORTED_TYPE
;
@FormatSupport
int
bestFormatSupportLevel
=
C
.
FORMAT_UNSUPPORTED_TYPE
;
boolean
bestRendererIsUnassociated
=
true
;
boolean
bestRendererIsUnassociated
=
true
;
for
(
int
rendererIndex
=
0
;
rendererIndex
<
rendererCapabilities
.
length
;
rendererIndex
++)
{
for
(
int
rendererIndex
=
0
;
rendererIndex
<
rendererCapabilities
.
length
;
rendererIndex
++)
{
RendererCapabilities
rendererCapability
=
rendererCapabilities
[
rendererIndex
];
RendererCapabilities
rendererCapability
=
rendererCapabilities
[
rendererIndex
];
@FormatSupport
int
formatSupportLevel
=
RendererCapabilities
.
FORMAT_UNSUPPORTED_TYPE
;
@FormatSupport
int
formatSupportLevel
=
C
.
FORMAT_UNSUPPORTED_TYPE
;
for
(
int
trackIndex
=
0
;
trackIndex
<
group
.
length
;
trackIndex
++)
{
for
(
int
trackIndex
=
0
;
trackIndex
<
group
.
length
;
trackIndex
++)
{
@FormatSupport
@FormatSupport
int
trackFormatSupportLevel
=
int
trackFormatSupportLevel
=
...
...
library/core/src/main/java/com/google/android/exoplayer2/util/EventLogger.java
View file @
53844557
...
@@ -239,7 +239,7 @@ public class EventLogger implements AnalyticsListener {
...
@@ -239,7 +239,7 @@ public class EventLogger implements AnalyticsListener {
for
(
int
trackIndex
=
0
;
trackIndex
<
trackGroup
.
length
;
trackIndex
++)
{
for
(
int
trackIndex
=
0
;
trackIndex
<
trackGroup
.
length
;
trackIndex
++)
{
String
status
=
getTrackStatusString
(
trackSelection
,
trackGroup
,
trackIndex
);
String
status
=
getTrackStatusString
(
trackSelection
,
trackGroup
,
trackIndex
);
String
formatSupport
=
String
formatSupport
=
RendererCapabilities
.
getFormatSupportString
(
C
.
getFormatSupportString
(
mappedTrackInfo
.
getTrackSupport
(
rendererIndex
,
groupIndex
,
trackIndex
));
mappedTrackInfo
.
getTrackSupport
(
rendererIndex
,
groupIndex
,
trackIndex
));
logd
(
logd
(
" "
" "
...
@@ -277,9 +277,7 @@ public class EventLogger implements AnalyticsListener {
...
@@ -277,9 +277,7 @@ public class EventLogger implements AnalyticsListener {
TrackGroup
trackGroup
=
unassociatedTrackGroups
.
get
(
groupIndex
);
TrackGroup
trackGroup
=
unassociatedTrackGroups
.
get
(
groupIndex
);
for
(
int
trackIndex
=
0
;
trackIndex
<
trackGroup
.
length
;
trackIndex
++)
{
for
(
int
trackIndex
=
0
;
trackIndex
<
trackGroup
.
length
;
trackIndex
++)
{
String
status
=
getTrackStatusString
(
false
);
String
status
=
getTrackStatusString
(
false
);
String
formatSupport
=
String
formatSupport
=
C
.
getFormatSupportString
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
RendererCapabilities
.
getFormatSupportString
(
RendererCapabilities
.
FORMAT_UNSUPPORTED_TYPE
);
logd
(
logd
(
" "
" "
+
status
+
status
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
View file @
53844557
...
@@ -260,7 +260,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -260,7 +260,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
throws
DecoderQueryException
{
throws
DecoderQueryException
{
String
mimeType
=
format
.
sampleMimeType
;
String
mimeType
=
format
.
sampleMimeType
;
if
(!
MimeTypes
.
isVideo
(
mimeType
))
{
if
(!
MimeTypes
.
isVideo
(
mimeType
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@Nullable
DrmInitData
drmInitData
=
format
.
drmInitData
;
@Nullable
DrmInitData
drmInitData
=
format
.
drmInitData
;
// Assume encrypted content requires secure decoders.
// Assume encrypted content requires secure decoders.
...
@@ -281,10 +281,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -281,10 +281,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
/* requiresTunnelingDecoder= */
false
);
/* requiresTunnelingDecoder= */
false
);
}
}
if
(
decoderInfos
.
isEmpty
())
{
if
(
decoderInfos
.
isEmpty
())
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_SUBTYPE
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_SUBTYPE
);
}
}
if
(!
supportsFormatDrm
(
format
))
{
if
(!
supportsFormatDrm
(
format
))
{
return
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_DRM
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_DRM
);
}
}
// Check capabilities for the first decoder in the list, which takes priority.
// Check capabilities for the first decoder in the list, which takes priority.
MediaCodecInfo
decoderInfo
=
decoderInfos
.
get
(
0
);
MediaCodecInfo
decoderInfo
=
decoderInfos
.
get
(
0
);
...
@@ -310,8 +310,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -310,8 +310,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
}
}
}
}
}
}
@FormatSupport
@
C
.
FormatSupport
int
formatSupport
=
isFormatSupported
?
FORMAT_HANDLED
:
FORMAT_EXCEEDS_CAPABILITIES
;
int
formatSupport
=
isFormatSupported
?
C
.
FORMAT_HANDLED
:
C
.
FORMAT_EXCEEDS_CAPABILITIES
;
return
RendererCapabilities
.
create
(
formatSupport
,
adaptiveSupport
,
tunnelingSupport
);
return
RendererCapabilities
.
create
(
formatSupport
,
adaptiveSupport
,
tunnelingSupport
);
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/spherical/CameraMotionRenderer.java
View file @
53844557
...
@@ -59,8 +59,8 @@ public final class CameraMotionRenderer extends BaseRenderer {
...
@@ -59,8 +59,8 @@ public final class CameraMotionRenderer extends BaseRenderer {
@Capabilities
@Capabilities
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
return
MimeTypes
.
APPLICATION_CAMERA_MOTION
.
equals
(
format
.
sampleMimeType
)
return
MimeTypes
.
APPLICATION_CAMERA_MOTION
.
equals
(
format
.
sampleMimeType
)
?
RendererCapabilities
.
create
(
FORMAT_HANDLED
)
?
RendererCapabilities
.
create
(
C
.
FORMAT_HANDLED
)
:
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
:
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@Override
@Override
...
...
library/core/src/test/java/com/google/android/exoplayer2/audio/DecoderAudioRendererTest.java
View file @
53844557
...
@@ -15,8 +15,8 @@
...
@@ -15,8 +15,8 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
audio
;
package
com
.
google
.
android
.
exoplayer2
.
audio
;
import
static
com
.
google
.
android
.
exoplayer2
.
C
.
FORMAT_HANDLED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
ADAPTIVE_NOT_SEAMLESS
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
ADAPTIVE_NOT_SEAMLESS
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
FORMAT_HANDLED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
TUNNELING_NOT_SUPPORTED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
TUNNELING_NOT_SUPPORTED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
TUNNELING_SUPPORTED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
TUNNELING_SUPPORTED
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
FakeSampleStream
.
FakeSampleStreamItem
.
END_OF_STREAM_ITEM
;
import
static
com
.
google
.
android
.
exoplayer2
.
testutil
.
FakeSampleStream
.
FakeSampleStreamItem
.
END_OF_STREAM_ITEM
;
...
@@ -68,7 +68,7 @@ public class DecoderAudioRendererTest {
...
@@ -68,7 +68,7 @@ public class DecoderAudioRendererTest {
}
}
@Override
@Override
@FormatSupport
@
C
.
FormatSupport
protected
int
supportsFormatInternal
(
Format
format
)
{
protected
int
supportsFormatInternal
(
Format
format
)
{
return
FORMAT_HANDLED
;
return
FORMAT_HANDLED
;
}
}
...
...
library/core/src/test/java/com/google/android/exoplayer2/audio/MediaCodecAudioRendererTest.java
View file @
53844557
...
@@ -240,7 +240,7 @@ public class MediaCodecAudioRendererTest {
...
@@ -240,7 +240,7 @@ public class MediaCodecAudioRendererTest {
"rendererName"
,
"rendererName"
,
/* rendererIndex= */
0
,
/* rendererIndex= */
0
,
format
,
format
,
FORMAT_HANDLED
));
C
.
FORMAT_HANDLED
));
}
}
}
}
};
};
...
...
library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java
View file @
53844557
...
@@ -15,10 +15,10 @@
...
@@ -15,10 +15,10 @@
*/
*/
package
com
.
google
.
android
.
exoplayer2
.
trackselection
;
package
com
.
google
.
android
.
exoplayer2
.
trackselection
;
import
static
com
.
google
.
android
.
exoplayer2
.
C
.
FORMAT_EXCEEDS_CAPABILITIES
;
import
static
com
.
google
.
android
.
exoplayer2
.
C
.
FORMAT_HANDLED
;
import
static
com
.
google
.
android
.
exoplayer2
.
C
.
FORMAT_UNSUPPORTED_SUBTYPE
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
ADAPTIVE_NOT_SEAMLESS
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
ADAPTIVE_NOT_SEAMLESS
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
FORMAT_EXCEEDS_CAPABILITIES
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
FORMAT_HANDLED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
FORMAT_UNSUPPORTED_SUBTYPE
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
TUNNELING_NOT_SUPPORTED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererCapabilities
.
TUNNELING_NOT_SUPPORTED
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererConfiguration
.
DEFAULT
;
import
static
com
.
google
.
android
.
exoplayer2
.
RendererConfiguration
.
DEFAULT
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
import
static
com
.
google
.
common
.
truth
.
Truth
.
assertThat
;
...
@@ -38,7 +38,6 @@ import com.google.android.exoplayer2.C;
...
@@ -38,7 +38,6 @@ import com.google.android.exoplayer2.C;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.ExoPlaybackException
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities.Capabilities
;
import
com.google.android.exoplayer2.RendererConfiguration
;
import
com.google.android.exoplayer2.RendererConfiguration
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
import
com.google.android.exoplayer2.source.MediaSource.MediaPeriodId
;
...
@@ -1538,9 +1537,9 @@ public final class DefaultTrackSelectorTest {
...
@@ -1538,9 +1537,9 @@ public final class DefaultTrackSelectorTest {
}
}
/**
/**
* A {@link RendererCapabilities} that advertises support for all formats of a given type using
* A {@link RendererCapabilities} that advertises support for all formats of a given type using
a
*
a provided support value. For any format that does not have the given track type,
*
provided support value. For any format that does not have the given track type, {@link
*
{@link #supportsFormat(Format)} will return {@link
#FORMAT_UNSUPPORTED_TYPE}.
*
#supportsFormat(Format)} will return {@link C
#FORMAT_UNSUPPORTED_TYPE}.
*/
*/
private
static
final
class
FakeRendererCapabilities
implements
RendererCapabilities
{
private
static
final
class
FakeRendererCapabilities
implements
RendererCapabilities
{
...
@@ -1589,7 +1588,7 @@ public final class DefaultTrackSelectorTest {
...
@@ -1589,7 +1588,7 @@ public final class DefaultTrackSelectorTest {
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
return
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
)
==
trackType
return
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
)
==
trackType
?
supportValue
?
supportValue
:
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
:
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@Override
@Override
...
@@ -1615,8 +1614,8 @@ public final class DefaultTrackSelectorTest {
...
@@ -1615,8 +1614,8 @@ public final class DefaultTrackSelectorTest {
*
*
* @param trackType the track type to be returned for {@link #getTrackType()}
* @param trackType the track type to be returned for {@link #getTrackType()}
* @param formatToCapability a map of (format id, support level) that will be used to return
* @param formatToCapability a map of (format id, support level) that will be used to return
*
support level for any given format. For any format that's not in the map,
*
support level for any given format. For any format that's not in the map, {@link
*
{@link #supportsFormat(Format)} will return {@link
#FORMAT_UNSUPPORTED_TYPE}.
*
#supportsFormat(Format)} will return {@link C
#FORMAT_UNSUPPORTED_TYPE}.
*/
*/
FakeMappedRendererCapabilities
(
int
trackType
,
Map
<
String
,
Integer
>
formatToCapability
)
{
FakeMappedRendererCapabilities
(
int
trackType
,
Map
<
String
,
Integer
>
formatToCapability
)
{
this
.
trackType
=
trackType
;
this
.
trackType
=
trackType
;
...
@@ -1638,7 +1637,7 @@ public final class DefaultTrackSelectorTest {
...
@@ -1638,7 +1637,7 @@ public final class DefaultTrackSelectorTest {
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
return
format
.
id
!=
null
&&
formatToCapability
.
containsKey
(
format
.
id
)
return
format
.
id
!=
null
&&
formatToCapability
.
containsKey
(
format
.
id
)
?
formatToCapability
.
get
(
format
.
id
)
?
formatToCapability
.
get
(
format
.
id
)
:
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
:
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@Override
@Override
...
...
library/core/src/test/java/com/google/android/exoplayer2/trackselection/MappingTrackSelectorTest.java
View file @
53844557
...
@@ -184,8 +184,9 @@ public final class MappingTrackSelectorTest {
...
@@ -184,8 +184,9 @@ public final class MappingTrackSelectorTest {
@Capabilities
@Capabilities
public
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
public
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
return
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
)
==
trackType
return
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
)
==
trackType
?
RendererCapabilities
.
create
(
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
)
?
RendererCapabilities
.
create
(
:
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
C
.
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
)
:
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@Override
@Override
...
...
library/core/src/test/java/com/google/android/exoplayer2/video/DecoderVideoRendererTest.java
View file @
53844557
...
@@ -89,7 +89,7 @@ public final class DecoderVideoRendererTest {
...
@@ -89,7 +89,7 @@ public final class DecoderVideoRendererTest {
@Override
@Override
@Capabilities
@Capabilities
public
int
supportsFormat
(
Format
format
)
{
public
int
supportsFormat
(
Format
format
)
{
return
RendererCapabilities
.
create
(
FORMAT_HANDLED
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_HANDLED
);
}
}
@Override
@Override
...
...
library/core/src/test/java/com/google/android/exoplayer2/video/MediaCodecVideoRendererTest.java
View file @
53844557
...
@@ -107,7 +107,7 @@ public class MediaCodecVideoRendererTest {
...
@@ -107,7 +107,7 @@ public class MediaCodecVideoRendererTest {
@Override
@Override
@Capabilities
@Capabilities
protected
int
supportsFormat
(
MediaCodecSelector
mediaCodecSelector
,
Format
format
)
{
protected
int
supportsFormat
(
MediaCodecSelector
mediaCodecSelector
,
Format
format
)
{
return
RendererCapabilities
.
create
(
FORMAT_HANDLED
);
return
RendererCapabilities
.
create
(
C
.
FORMAT_HANDLED
);
}
}
@Override
@Override
...
...
library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerControlView.java
View file @
53844557
...
@@ -56,7 +56,6 @@ import com.google.android.exoplayer2.PlaybackPreparer;
...
@@ -56,7 +56,6 @@ import com.google.android.exoplayer2.PlaybackPreparer;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player
;
import
com.google.android.exoplayer2.Player.Events
;
import
com.google.android.exoplayer2.Player.Events
;
import
com.google.android.exoplayer2.Player.State
;
import
com.google.android.exoplayer2.Player.State
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.Timeline
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
...
@@ -1307,7 +1306,7 @@ public class StyledPlayerControlView extends FrameLayout {
...
@@ -1307,7 +1306,7 @@ public class StyledPlayerControlView extends FrameLayout {
for
(
int
trackIndex
=
0
;
trackIndex
<
trackGroup
.
length
;
trackIndex
++)
{
for
(
int
trackIndex
=
0
;
trackIndex
<
trackGroup
.
length
;
trackIndex
++)
{
Format
format
=
trackGroup
.
getFormat
(
trackIndex
);
Format
format
=
trackGroup
.
getFormat
(
trackIndex
);
if
(
mappedTrackInfo
.
getTrackSupport
(
rendererIndex
,
groupIndex
,
trackIndex
)
if
(
mappedTrackInfo
.
getTrackSupport
(
rendererIndex
,
groupIndex
,
trackIndex
)
==
RendererCapabilities
.
FORMAT_HANDLED
)
{
==
C
.
FORMAT_HANDLED
)
{
boolean
trackIsSelected
=
boolean
trackIsSelected
=
trackSelection
!=
null
&&
trackSelection
.
indexOf
(
format
)
!=
C
.
INDEX_UNSET
;
trackSelection
!=
null
&&
trackSelection
.
indexOf
(
format
)
!=
C
.
INDEX_UNSET
;
tracks
.
add
(
tracks
.
add
(
...
...
library/ui/src/main/java/com/google/android/exoplayer2/ui/TrackSelectionView.java
View file @
53844557
...
@@ -25,6 +25,7 @@ import android.widget.CheckedTextView;
...
@@ -25,6 +25,7 @@ import android.widget.CheckedTextView;
import
android.widget.LinearLayout
;
import
android.widget.LinearLayout
;
import
androidx.annotation.AttrRes
;
import
androidx.annotation.AttrRes
;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.Format
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.RendererCapabilities
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
...
@@ -291,7 +292,7 @@ public class TrackSelectionView extends LinearLayout {
...
@@ -291,7 +292,7 @@ public class TrackSelectionView extends LinearLayout {
trackView
.
setText
(
trackNameProvider
.
getTrackName
(
trackInfos
[
trackIndex
].
format
));
trackView
.
setText
(
trackNameProvider
.
getTrackName
(
trackInfos
[
trackIndex
].
format
));
trackView
.
setTag
(
trackInfos
[
trackIndex
]);
trackView
.
setTag
(
trackInfos
[
trackIndex
]);
if
(
mappedTrackInfo
.
getTrackSupport
(
rendererIndex
,
groupIndex
,
trackIndex
)
if
(
mappedTrackInfo
.
getTrackSupport
(
rendererIndex
,
groupIndex
,
trackIndex
)
==
RendererCapabilities
.
FORMAT_HANDLED
)
{
==
C
.
FORMAT_HANDLED
)
{
trackView
.
setFocusable
(
true
);
trackView
.
setFocusable
(
true
);
trackView
.
setOnClickListener
(
componentListener
);
trackView
.
setOnClickListener
(
componentListener
);
}
else
{
}
else
{
...
...
playbacktests/src/androidTest/java/com/google/android/exoplayer2/playbacktests/gts/DashTestRunner.java
View file @
53844557
...
@@ -458,8 +458,7 @@ import java.util.List;
...
@@ -458,8 +458,7 @@ import java.util.List;
}
}
private
static
boolean
isFormatHandled
(
int
formatSupport
)
{
private
static
boolean
isFormatHandled
(
int
formatSupport
)
{
return
RendererCapabilities
.
getFormatSupport
(
formatSupport
)
return
RendererCapabilities
.
getFormatSupport
(
formatSupport
)
==
C
.
FORMAT_HANDLED
;
==
RendererCapabilities
.
FORMAT_HANDLED
;
}
}
}
}
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java
View file @
53844557
...
@@ -108,7 +108,7 @@ public class FakeRenderer extends BaseRenderer {
...
@@ -108,7 +108,7 @@ public class FakeRenderer extends BaseRenderer {
getName
(),
getName
(),
getIndex
(),
getIndex
(),
format
,
format
,
FORMAT_UNSUPPORTED_TYPE
);
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
formatsRead
.
add
(
format
);
formatsRead
.
add
(
format
);
onFormatChanged
(
format
);
onFormatChanged
(
format
);
...
@@ -149,8 +149,8 @@ public class FakeRenderer extends BaseRenderer {
...
@@ -149,8 +149,8 @@ public class FakeRenderer extends BaseRenderer {
public
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
public
int
supportsFormat
(
Format
format
)
throws
ExoPlaybackException
{
int
trackType
=
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
);
int
trackType
=
MimeTypes
.
getTrackType
(
format
.
sampleMimeType
);
return
trackType
!=
C
.
TRACK_TYPE_UNKNOWN
&&
trackType
==
getTrackType
()
return
trackType
!=
C
.
TRACK_TYPE_UNKNOWN
&&
trackType
==
getTrackType
()
?
RendererCapabilities
.
create
(
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
)
?
RendererCapabilities
.
create
(
C
.
FORMAT_HANDLED
,
ADAPTIVE_SEAMLESS
,
TUNNELING_NOT_SUPPORTED
)
:
RendererCapabilities
.
create
(
FORMAT_UNSUPPORTED_TYPE
);
:
RendererCapabilities
.
create
(
C
.
FORMAT_UNSUPPORTED_TYPE
);
}
}
@Override
@Override
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment