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
42d3ca27
authored
Aug 01, 2019
by
olly
Committed by
Oliver Woodman
Aug 01, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Propagate non-standard MIME type aliases
Issue: #5938 PiperOrigin-RevId: 261150349
parent
4c40878b
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
91 additions
and
76 deletions
RELEASENOTES.md
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecInfo.java
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
RELEASENOTES.md
View file @
42d3ca27
...
@@ -29,6 +29,8 @@
...
@@ -29,6 +29,8 @@
the
`Player`
set later using
`AnalyticsCollector.setPlayer`
.
the
`Player`
set later using
`AnalyticsCollector.setPlayer`
.
*
Calculate correct duration for clipped WAV streams
*
Calculate correct duration for clipped WAV streams
(
[
#6241
](
https://github.com/google/ExoPlayer/issues/6241
)
).
(
[
#6241
](
https://github.com/google/ExoPlayer/issues/6241
)
).
*
Fix Flac and ALAC playback on some LG devices
(
[
#5938
](
https://github.com/google/ExoPlayer/issues/5938
)
).
### 2.10.4 ###
### 2.10.4 ###
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
View file @
42d3ca27
...
@@ -392,7 +392,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
...
@@ -392,7 +392,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
codecNeedsDiscardChannelsWorkaround
=
codecNeedsDiscardChannelsWorkaround
(
codecInfo
.
name
);
codecNeedsDiscardChannelsWorkaround
=
codecNeedsDiscardChannelsWorkaround
(
codecInfo
.
name
);
codecNeedsEosBufferTimestampWorkaround
=
codecNeedsEosBufferTimestampWorkaround
(
codecInfo
.
name
);
codecNeedsEosBufferTimestampWorkaround
=
codecNeedsEosBufferTimestampWorkaround
(
codecInfo
.
name
);
passthroughEnabled
=
codecInfo
.
passthrough
;
passthroughEnabled
=
codecInfo
.
passthrough
;
String
codecMimeType
=
passthroughEnabled
?
MimeTypes
.
AUDIO_RAW
:
codecInfo
.
m
imeType
;
String
codecMimeType
=
passthroughEnabled
?
MimeTypes
.
AUDIO_RAW
:
codecInfo
.
codecM
imeType
;
MediaFormat
mediaFormat
=
MediaFormat
mediaFormat
=
getMediaFormat
(
format
,
codecMimeType
,
codecMaxInputSize
,
codecOperatingRate
);
getMediaFormat
(
format
,
codecMimeType
,
codecMaxInputSize
,
codecOperatingRate
);
codec
.
configure
(
mediaFormat
,
/* surface= */
null
,
crypto
,
/* flags= */
0
);
codec
.
configure
(
mediaFormat
,
/* surface= */
null
,
crypto
,
/* flags= */
0
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecInfo.java
View file @
42d3ca27
...
@@ -54,6 +54,13 @@ public final class MediaCodecInfo {
...
@@ -54,6 +54,13 @@ public final class MediaCodecInfo {
@Nullable
public
final
String
mimeType
;
@Nullable
public
final
String
mimeType
;
/**
/**
* The MIME type that the codec uses for media of type {@link #mimeType}, or {@code null} if this
* is a passthrough codec. Equal to {@link #mimeType} unless the codec is known to use a
* non-standard MIME type alias.
*/
@Nullable
public
final
String
codecMimeType
;
/**
* The capabilities of the decoder, like the profiles/levels it supports, or {@code null} if not
* The capabilities of the decoder, like the profiles/levels it supports, or {@code null} if not
* known.
* known.
*/
*/
...
@@ -98,6 +105,7 @@ public final class MediaCodecInfo {
...
@@ -98,6 +105,7 @@ public final class MediaCodecInfo {
return
new
MediaCodecInfo
(
return
new
MediaCodecInfo
(
name
,
name
,
/* mimeType= */
null
,
/* mimeType= */
null
,
/* codecMimeType= */
null
,
/* capabilities= */
null
,
/* capabilities= */
null
,
/* passthrough= */
true
,
/* passthrough= */
true
,
/* forceDisableAdaptive= */
false
,
/* forceDisableAdaptive= */
false
,
...
@@ -109,26 +117,8 @@ public final class MediaCodecInfo {
...
@@ -109,26 +117,8 @@ public final class MediaCodecInfo {
*
*
* @param name The name of the {@link MediaCodec}.
* @param name The name of the {@link MediaCodec}.
* @param mimeType A mime type supported by the {@link MediaCodec}.
* @param mimeType A mime type supported by the {@link MediaCodec}.
* @param capabilities The capabilities of the {@link MediaCodec} for the specified mime type, or
* @param codecMimeType The MIME type that the codec uses for media of type {@code #mimeType}.
* {@code null} if not known.
* Equal to {@code mimeType} unless the codec is known to use a non-standard MIME type alias.
* @return The created instance.
*/
public
static
MediaCodecInfo
newInstance
(
String
name
,
String
mimeType
,
@Nullable
CodecCapabilities
capabilities
)
{
return
new
MediaCodecInfo
(
name
,
mimeType
,
capabilities
,
/* passthrough= */
false
,
/* forceDisableAdaptive= */
false
,
/* forceSecure= */
false
);
}
/**
* Creates an instance.
*
* @param name The name of the {@link MediaCodec}.
* @param mimeType A mime type supported by the {@link MediaCodec}.
* @param capabilities The capabilities of the {@link MediaCodec} for the specified mime type, or
* @param capabilities The capabilities of the {@link MediaCodec} for the specified mime type, or
* {@code null} if not known.
* {@code null} if not known.
* @param forceDisableAdaptive Whether {@link #adaptive} should be forced to {@code false}.
* @param forceDisableAdaptive Whether {@link #adaptive} should be forced to {@code false}.
...
@@ -138,22 +128,31 @@ public final class MediaCodecInfo {
...
@@ -138,22 +128,31 @@ public final class MediaCodecInfo {
public
static
MediaCodecInfo
newInstance
(
public
static
MediaCodecInfo
newInstance
(
String
name
,
String
name
,
String
mimeType
,
String
mimeType
,
String
codecMimeType
,
@Nullable
CodecCapabilities
capabilities
,
@Nullable
CodecCapabilities
capabilities
,
boolean
forceDisableAdaptive
,
boolean
forceDisableAdaptive
,
boolean
forceSecure
)
{
boolean
forceSecure
)
{
return
new
MediaCodecInfo
(
return
new
MediaCodecInfo
(
name
,
mimeType
,
capabilities
,
/* passthrough= */
false
,
forceDisableAdaptive
,
forceSecure
);
name
,
mimeType
,
codecMimeType
,
capabilities
,
/* passthrough= */
false
,
forceDisableAdaptive
,
forceSecure
);
}
}
private
MediaCodecInfo
(
private
MediaCodecInfo
(
String
name
,
String
name
,
@Nullable
String
mimeType
,
@Nullable
String
mimeType
,
@Nullable
String
codecMimeType
,
@Nullable
CodecCapabilities
capabilities
,
@Nullable
CodecCapabilities
capabilities
,
boolean
passthrough
,
boolean
passthrough
,
boolean
forceDisableAdaptive
,
boolean
forceDisableAdaptive
,
boolean
forceSecure
)
{
boolean
forceSecure
)
{
this
.
name
=
Assertions
.
checkNotNull
(
name
);
this
.
name
=
Assertions
.
checkNotNull
(
name
);
this
.
mimeType
=
mimeType
;
this
.
mimeType
=
mimeType
;
this
.
codecMimeType
=
codecMimeType
;
this
.
capabilities
=
capabilities
;
this
.
capabilities
=
capabilities
;
this
.
passthrough
=
passthrough
;
this
.
passthrough
=
passthrough
;
adaptive
=
!
forceDisableAdaptive
&&
capabilities
!=
null
&&
isAdaptive
(
capabilities
);
adaptive
=
!
forceDisableAdaptive
&&
capabilities
!=
null
&&
isAdaptive
(
capabilities
);
...
...
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java
View file @
42d3ca27
...
@@ -171,12 +171,12 @@ public final class MediaCodecUtil {
...
@@ -171,12 +171,12 @@ public final class MediaCodecUtil {
Util
.
SDK_INT
>=
21
Util
.
SDK_INT
>=
21
?
new
MediaCodecListCompatV21
(
secure
,
tunneling
)
?
new
MediaCodecListCompatV21
(
secure
,
tunneling
)
:
new
MediaCodecListCompatV16
();
:
new
MediaCodecListCompatV16
();
ArrayList
<
MediaCodecInfo
>
decoderInfos
=
getDecoderInfosInternal
(
key
,
mediaCodecList
,
mimeType
);
ArrayList
<
MediaCodecInfo
>
decoderInfos
=
getDecoderInfosInternal
(
key
,
mediaCodecList
);
if
(
secure
&&
decoderInfos
.
isEmpty
()
&&
21
<=
Util
.
SDK_INT
&&
Util
.
SDK_INT
<=
23
)
{
if
(
secure
&&
decoderInfos
.
isEmpty
()
&&
21
<=
Util
.
SDK_INT
&&
Util
.
SDK_INT
<=
23
)
{
// Some devices don't list secure decoders on API level 21 [Internal: b/18678462]. Try the
// Some devices don't list secure decoders on API level 21 [Internal: b/18678462]. Try the
// legacy path. We also try this path on API levels 22 and 23 as a defensive measure.
// legacy path. We also try this path on API levels 22 and 23 as a defensive measure.
mediaCodecList
=
new
MediaCodecListCompatV16
();
mediaCodecList
=
new
MediaCodecListCompatV16
();
decoderInfos
=
getDecoderInfosInternal
(
key
,
mediaCodecList
,
mimeType
);
decoderInfos
=
getDecoderInfosInternal
(
key
,
mediaCodecList
);
if
(!
decoderInfos
.
isEmpty
())
{
if
(!
decoderInfos
.
isEmpty
())
{
Log
.
w
(
TAG
,
"MediaCodecList API didn't list secure decoder for: "
+
mimeType
Log
.
w
(
TAG
,
"MediaCodecList API didn't list secure decoder for: "
+
mimeType
+
". Assuming: "
+
decoderInfos
.
get
(
0
).
name
);
+
". Assuming: "
+
decoderInfos
.
get
(
0
).
name
);
...
@@ -268,18 +268,16 @@ public final class MediaCodecUtil {
...
@@ -268,18 +268,16 @@ public final class MediaCodecUtil {
// Internal methods.
// Internal methods.
/**
/**
* Returns {@link MediaCodecInfo}s for the given codec {@
code k
ey} in the order given by
* Returns {@link MediaCodecInfo}s for the given codec {@
link CodecK
ey} in the order given by
* {@code mediaCodecList}.
* {@code mediaCodecList}.
*
*
* @param key The codec key.
* @param key The codec key.
* @param mediaCodecList The codec list.
* @param mediaCodecList The codec list.
* @param requestedMimeType The originally requested MIME type, which may differ from the codec
* key MIME type if the codec key is being considered as a fallback.
* @return The codec information for usable codecs matching the specified key.
* @return The codec information for usable codecs matching the specified key.
* @throws DecoderQueryException If there was an error querying the available decoders.
* @throws DecoderQueryException If there was an error querying the available decoders.
*/
*/
private
static
ArrayList
<
MediaCodecInfo
>
getDecoderInfosInternal
(
CodecKey
key
,
private
static
ArrayList
<
MediaCodecInfo
>
getDecoderInfosInternal
(
MediaCodecListCompat
mediaCodecList
,
String
requestedMimeType
)
throws
DecoderQueryException
{
CodecKey
key
,
MediaCodecListCompat
mediaCodecList
)
throws
DecoderQueryException
{
try
{
try
{
ArrayList
<
MediaCodecInfo
>
decoderInfos
=
new
ArrayList
<>();
ArrayList
<
MediaCodecInfo
>
decoderInfos
=
new
ArrayList
<>();
String
mimeType
=
key
.
mimeType
;
String
mimeType
=
key
.
mimeType
;
...
@@ -289,28 +287,27 @@ public final class MediaCodecUtil {
...
@@ -289,28 +287,27 @@ public final class MediaCodecUtil {
for
(
int
i
=
0
;
i
<
numberOfCodecs
;
i
++)
{
for
(
int
i
=
0
;
i
<
numberOfCodecs
;
i
++)
{
android
.
media
.
MediaCodecInfo
codecInfo
=
mediaCodecList
.
getCodecInfoAt
(
i
);
android
.
media
.
MediaCodecInfo
codecInfo
=
mediaCodecList
.
getCodecInfoAt
(
i
);
String
name
=
codecInfo
.
getName
();
String
name
=
codecInfo
.
getName
();
String
supportedType
=
String
codecMimeType
=
getCodecMimeType
(
codecInfo
,
name
,
secureDecodersExplicit
,
mimeType
);
getCodecSupportedType
(
codecInfo
,
name
,
secureDecodersExplicit
,
requestedMimeType
);
if
(
codecMimeType
==
null
)
{
if
(
supportedType
==
null
)
{
continue
;
continue
;
}
}
try
{
try
{
CodecCapabilities
capabilities
=
codecInfo
.
getCapabilitiesForType
(
supported
Type
);
CodecCapabilities
capabilities
=
codecInfo
.
getCapabilitiesForType
(
codecMime
Type
);
boolean
tunnelingSupported
=
boolean
tunnelingSupported
=
mediaCodecList
.
isFeatureSupported
(
mediaCodecList
.
isFeatureSupported
(
CodecCapabilities
.
FEATURE_TunneledPlayback
,
supported
Type
,
capabilities
);
CodecCapabilities
.
FEATURE_TunneledPlayback
,
codecMime
Type
,
capabilities
);
boolean
tunnelingRequired
=
boolean
tunnelingRequired
=
mediaCodecList
.
isFeatureRequired
(
mediaCodecList
.
isFeatureRequired
(
CodecCapabilities
.
FEATURE_TunneledPlayback
,
supported
Type
,
capabilities
);
CodecCapabilities
.
FEATURE_TunneledPlayback
,
codecMime
Type
,
capabilities
);
if
((!
key
.
tunneling
&&
tunnelingRequired
)
||
(
key
.
tunneling
&&
!
tunnelingSupported
))
{
if
((!
key
.
tunneling
&&
tunnelingRequired
)
||
(
key
.
tunneling
&&
!
tunnelingSupported
))
{
continue
;
continue
;
}
}
boolean
secureSupported
=
boolean
secureSupported
=
mediaCodecList
.
isFeatureSupported
(
mediaCodecList
.
isFeatureSupported
(
CodecCapabilities
.
FEATURE_SecurePlayback
,
supported
Type
,
capabilities
);
CodecCapabilities
.
FEATURE_SecurePlayback
,
codecMime
Type
,
capabilities
);
boolean
secureRequired
=
boolean
secureRequired
=
mediaCodecList
.
isFeatureRequired
(
mediaCodecList
.
isFeatureRequired
(
CodecCapabilities
.
FEATURE_SecurePlayback
,
supported
Type
,
capabilities
);
CodecCapabilities
.
FEATURE_SecurePlayback
,
codecMime
Type
,
capabilities
);
if
((!
key
.
secure
&&
secureRequired
)
||
(
key
.
secure
&&
!
secureSupported
))
{
if
((!
key
.
secure
&&
secureRequired
)
||
(
key
.
secure
&&
!
secureSupported
))
{
continue
;
continue
;
}
}
...
@@ -319,12 +316,18 @@ public final class MediaCodecUtil {
...
@@ -319,12 +316,18 @@ public final class MediaCodecUtil {
||
(!
secureDecodersExplicit
&&
!
key
.
secure
))
{
||
(!
secureDecodersExplicit
&&
!
key
.
secure
))
{
decoderInfos
.
add
(
decoderInfos
.
add
(
MediaCodecInfo
.
newInstance
(
MediaCodecInfo
.
newInstance
(
name
,
mimeType
,
capabilities
,
forceDisableAdaptive
,
/* forceSecure= */
false
));
name
,
mimeType
,
codecMimeType
,
capabilities
,
forceDisableAdaptive
,
/* forceSecure= */
false
));
}
else
if
(!
secureDecodersExplicit
&&
secureSupported
)
{
}
else
if
(!
secureDecodersExplicit
&&
secureSupported
)
{
decoderInfos
.
add
(
decoderInfos
.
add
(
MediaCodecInfo
.
newInstance
(
MediaCodecInfo
.
newInstance
(
name
+
".secure"
,
name
+
".secure"
,
mimeType
,
mimeType
,
codecMimeType
,
capabilities
,
capabilities
,
forceDisableAdaptive
,
forceDisableAdaptive
,
/* forceSecure= */
true
));
/* forceSecure= */
true
));
...
@@ -338,7 +341,7 @@ public final class MediaCodecUtil {
...
@@ -338,7 +341,7 @@ public final class MediaCodecUtil {
}
else
{
}
else
{
// Rethrow error querying primary codec capabilities, or secondary codec
// Rethrow error querying primary codec capabilities, or secondary codec
// capabilities if API level is greater than 23.
// capabilities if API level is greater than 23.
Log
.
e
(
TAG
,
"Failed to query codec "
+
name
+
" ("
+
supported
Type
+
")"
);
Log
.
e
(
TAG
,
"Failed to query codec "
+
name
+
" ("
+
codecMime
Type
+
")"
);
throw
e
;
throw
e
;
}
}
}
}
...
@@ -352,48 +355,49 @@ public final class MediaCodecUtil {
...
@@ -352,48 +355,49 @@ public final class MediaCodecUtil {
}
}
/**
/**
* Returns the codec's supported
type for decoding {@code requestedMimeType} on the current
* Returns the codec's supported
MIME type for media of type {@code mimeType}, or {@code null} if
*
device, or {@code null} if
the codec can't be used.
* the codec can't be used.
*
*
* @param info The codec information.
* @param info The codec information.
* @param name The name of the codec
* @param name The name of the codec
* @param secureDecodersExplicit Whether secure decoders were explicitly listed, if present.
* @param secureDecodersExplicit Whether secure decoders were explicitly listed, if present.
* @param
requestedMimeType The originally requested MIME type, which may differ from the codec
* @param
mimeType The MIME type.
*
key MIME type if the codec key is being considered as a fallback.
*
@return The codec's supported MIME type for media of type {@code mimeType}, or {@code null} if
*
@return The codec's supported type for decoding {@code requestedMimeType}, or {@code null} if
*
the codec can't be used. If non-null, the returned type will be equal to {@code mimeType}
*
the codec can't be used
.
*
except in cases where the codec is known to use a non-standard MIME type alias
.
*/
*/
@Nullable
@Nullable
private
static
String
getCodec
Supported
Type
(
private
static
String
getCodec
Mime
Type
(
android
.
media
.
MediaCodecInfo
info
,
android
.
media
.
MediaCodecInfo
info
,
String
name
,
String
name
,
boolean
secureDecodersExplicit
,
boolean
secureDecodersExplicit
,
String
requestedMimeType
)
{
String
mimeType
)
{
if
(
isCodecUsableDecoder
(
info
,
name
,
secureDecodersExplicit
,
requestedMimeType
))
{
if
(!
isCodecUsableDecoder
(
info
,
name
,
secureDecodersExplicit
,
mimeType
))
{
String
[]
supportedTypes
=
info
.
getSupportedTypes
();
return
null
;
for
(
String
supportedType
:
supportedTypes
)
{
}
if
(
supportedType
.
equalsIgnoreCase
(
requestedMimeType
))
{
return
supportedType
;
String
[]
supportedTypes
=
info
.
getSupportedTypes
();
}
for
(
String
supportedType
:
supportedTypes
)
{
if
(
supportedType
.
equalsIgnoreCase
(
mimeType
))
{
return
supportedType
;
}
}
}
if
(
requestedMimeType
.
equals
(
MimeTypes
.
VIDEO_DOLBY_VISION
))
{
if
(
mimeType
.
equals
(
MimeTypes
.
VIDEO_DOLBY_VISION
))
{
// Handle decoders that declare support for DV via MIME types that aren't
// Handle decoders that declare support for DV via MIME types that aren't
// video/dolby-vision.
// video/dolby-vision.
if
(
"OMX.MS.HEVCDV.Decoder"
.
equals
(
name
))
{
if
(
"OMX.MS.HEVCDV.Decoder"
.
equals
(
name
))
{
return
"video/hevcdv"
;
return
"video/hevcdv"
;
}
else
if
(
"OMX.RTK.video.decoder"
.
equals
(
name
)
}
else
if
(
"OMX.RTK.video.decoder"
.
equals
(
name
)
||
"OMX.realtek.video.decoder.tunneled"
.
equals
(
name
))
{
||
"OMX.realtek.video.decoder.tunneled"
.
equals
(
name
))
{
return
"video/dv_hevc"
;
return
"video/dv_hevc"
;
}
}
else
if
(
requestedMimeType
.
equals
(
MimeTypes
.
AUDIO_ALAC
)
&&
"OMX.lge.alac.decoder"
.
equals
(
name
))
{
return
"audio/x-lg-alac"
;
}
else
if
(
requestedMimeType
.
equals
(
MimeTypes
.
AUDIO_FLAC
)
&&
"OMX.lge.flac.decoder"
.
equals
(
name
))
{
return
"audio/x-lg-flac"
;
}
}
}
else
if
(
mimeType
.
equals
(
MimeTypes
.
AUDIO_ALAC
)
&&
"OMX.lge.alac.decoder"
.
equals
(
name
))
{
return
"audio/x-lg-alac"
;
}
else
if
(
mimeType
.
equals
(
MimeTypes
.
AUDIO_FLAC
)
&&
"OMX.lge.flac.decoder"
.
equals
(
name
))
{
return
"audio/x-lg-flac"
;
}
}
return
null
;
return
null
;
}
}
...
@@ -403,12 +407,14 @@ public final class MediaCodecUtil {
...
@@ -403,12 +407,14 @@ public final class MediaCodecUtil {
* @param info The codec information.
* @param info The codec information.
* @param name The name of the codec
* @param name The name of the codec
* @param secureDecodersExplicit Whether secure decoders were explicitly listed, if present.
* @param secureDecodersExplicit Whether secure decoders were explicitly listed, if present.
* @param requestedMimeType The originally requested MIME type, which may differ from the codec
* @param mimeType The MIME type.
* key MIME type if the codec key is being considered as a fallback.
* @return Whether the specified codec is usable for decoding on the current device.
* @return Whether the specified codec is usable for decoding on the current device.
*/
*/
private
static
boolean
isCodecUsableDecoder
(
android
.
media
.
MediaCodecInfo
info
,
String
name
,
private
static
boolean
isCodecUsableDecoder
(
boolean
secureDecodersExplicit
,
String
requestedMimeType
)
{
android
.
media
.
MediaCodecInfo
info
,
String
name
,
boolean
secureDecodersExplicit
,
String
mimeType
)
{
if
(
info
.
isEncoder
()
||
(!
secureDecodersExplicit
&&
name
.
endsWith
(
".secure"
)))
{
if
(
info
.
isEncoder
()
||
(!
secureDecodersExplicit
&&
name
.
endsWith
(
".secure"
)))
{
return
false
;
return
false
;
}
}
...
@@ -497,8 +503,7 @@ public final class MediaCodecUtil {
...
@@ -497,8 +503,7 @@ public final class MediaCodecUtil {
}
}
// MTK E-AC3 decoder doesn't support decoding JOC streams in 2-D. See [Internal: b/69400041].
// MTK E-AC3 decoder doesn't support decoding JOC streams in 2-D. See [Internal: b/69400041].
if
(
MimeTypes
.
AUDIO_E_AC3_JOC
.
equals
(
requestedMimeType
)
if
(
MimeTypes
.
AUDIO_E_AC3_JOC
.
equals
(
mimeType
)
&&
"OMX.MTK.AUDIO.DECODER.DSPAC3"
.
equals
(
name
))
{
&&
"OMX.MTK.AUDIO.DECODER.DSPAC3"
.
equals
(
name
))
{
return
false
;
return
false
;
}
}
...
@@ -522,7 +527,12 @@ public final class MediaCodecUtil {
...
@@ -522,7 +527,12 @@ public final class MediaCodecUtil {
// name. See <a href="https://github.com/google/ExoPlayer/issues/5782">Issue #5782</a>.
// name. See <a href="https://github.com/google/ExoPlayer/issues/5782">Issue #5782</a>.
decoderInfos
.
add
(
decoderInfos
.
add
(
MediaCodecInfo
.
newInstance
(
MediaCodecInfo
.
newInstance
(
"OMX.google.raw.decoder"
,
MimeTypes
.
AUDIO_RAW
,
/* capabilities= */
null
));
/* name= */
"OMX.google.raw.decoder"
,
/* mimeType= */
MimeTypes
.
AUDIO_RAW
,
/* codecMimeType= */
MimeTypes
.
AUDIO_RAW
,
/* capabilities= */
null
,
/* forceDisableAdaptive= */
false
,
/* forceSecure= */
false
));
}
}
// Work around inconsistent raw audio decoding behavior across different devices.
// Work around inconsistent raw audio decoding behavior across different devices.
sortByScore
(
sortByScore
(
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
View file @
42d3ca27
...
@@ -603,10 +603,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -603,10 +603,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
Format
format
,
Format
format
,
MediaCrypto
crypto
,
MediaCrypto
crypto
,
float
codecOperatingRate
)
{
float
codecOperatingRate
)
{
String
codecMimeType
=
codecInfo
.
codecMimeType
;
codecMaxValues
=
getCodecMaxValues
(
codecInfo
,
format
,
getStreamFormats
());
codecMaxValues
=
getCodecMaxValues
(
codecInfo
,
format
,
getStreamFormats
());
MediaFormat
mediaFormat
=
MediaFormat
mediaFormat
=
getMediaFormat
(
getMediaFormat
(
format
,
format
,
codecMimeType
,
codecMaxValues
,
codecMaxValues
,
codecOperatingRate
,
codecOperatingRate
,
deviceNeedsNoPostProcessWorkaround
,
deviceNeedsNoPostProcessWorkaround
,
...
@@ -1164,6 +1166,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -1164,6 +1166,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
* Returns the framework {@link MediaFormat} that should be used to configure the decoder.
* Returns the framework {@link MediaFormat} that should be used to configure the decoder.
*
*
* @param format The format of media.
* @param format The format of media.
* @param codecMimeType The MIME type handled by the codec.
* @param codecMaxValues Codec max values that should be used when configuring the decoder.
* @param codecMaxValues Codec max values that should be used when configuring the decoder.
* @param codecOperatingRate The codec operating rate, or {@link #CODEC_OPERATING_RATE_UNSET} if
* @param codecOperatingRate The codec operating rate, or {@link #CODEC_OPERATING_RATE_UNSET} if
* no codec operating rate should be set.
* no codec operating rate should be set.
...
@@ -1176,13 +1179,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -1176,13 +1179,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
@SuppressLint
(
"InlinedApi"
)
@SuppressLint
(
"InlinedApi"
)
protected
MediaFormat
getMediaFormat
(
protected
MediaFormat
getMediaFormat
(
Format
format
,
Format
format
,
String
codecMimeType
,
CodecMaxValues
codecMaxValues
,
CodecMaxValues
codecMaxValues
,
float
codecOperatingRate
,
float
codecOperatingRate
,
boolean
deviceNeedsNoPostProcessWorkaround
,
boolean
deviceNeedsNoPostProcessWorkaround
,
int
tunnelingAudioSessionId
)
{
int
tunnelingAudioSessionId
)
{
MediaFormat
mediaFormat
=
new
MediaFormat
();
MediaFormat
mediaFormat
=
new
MediaFormat
();
// Set format parameters that should always be set.
// Set format parameters that should always be set.
mediaFormat
.
setString
(
MediaFormat
.
KEY_MIME
,
format
.
sample
MimeType
);
mediaFormat
.
setString
(
MediaFormat
.
KEY_MIME
,
codec
MimeType
);
mediaFormat
.
setInteger
(
MediaFormat
.
KEY_WIDTH
,
format
.
width
);
mediaFormat
.
setInteger
(
MediaFormat
.
KEY_WIDTH
,
format
.
width
);
mediaFormat
.
setInteger
(
MediaFormat
.
KEY_HEIGHT
,
format
.
height
);
mediaFormat
.
setInteger
(
MediaFormat
.
KEY_HEIGHT
,
format
.
height
);
MediaFormatUtil
.
setCsdBuffers
(
mediaFormat
,
format
.
initializationData
);
MediaFormatUtil
.
setCsdBuffers
(
mediaFormat
,
format
.
initializationData
);
...
...
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