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
5cdb886d
authored
Jul 16, 2018
by
Jinming he
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Address comments.
parent
db53606c
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
29 additions
and
39 deletions
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/DebugRenderersFactory.java
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
View file @
5cdb886d
...
...
@@ -137,7 +137,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
}
@Override
public
void
setOperatingRate
(
float
operatingRate
)
{
public
final
void
setOperatingRate
(
float
operatingRate
)
{
onOperatingRateChanged
(
operatingRate
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java
View file @
5cdb886d
...
...
@@ -23,7 +23,6 @@ import android.media.MediaCodec;
import
android.media.MediaCrypto
;
import
android.media.MediaFormat
;
import
android.media.audiofx.Virtualizer
;
import
android.os.Bundle
;
import
android.os.Handler
;
import
android.support.annotation.Nullable
;
import
com.google.android.exoplayer2.C
;
...
...
@@ -318,12 +317,12 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
@Override
protected
void
configureCodec
(
MediaCodecInfo
codecInfo
,
MediaCodec
codec
,
Format
format
,
MediaCrypto
crypto
)
{
MediaCrypto
crypto
,
float
codecOperatingRate
)
{
codecMaxInputSize
=
getCodecMaxInputSize
(
codecInfo
,
format
,
getStreamFormats
());
codecNeedsDiscardChannelsWorkaround
=
codecNeedsDiscardChannelsWorkaround
(
codecInfo
.
name
);
passthroughEnabled
=
codecInfo
.
passthrough
;
String
codecMimeType
=
codecInfo
.
mimeType
==
null
?
MimeTypes
.
AUDIO_RAW
:
codecInfo
.
mimeType
;
MediaFormat
mediaFormat
=
getMediaFormat
(
format
,
codecMimeType
,
codecMaxInputSize
);
MediaFormat
mediaFormat
=
getMediaFormat
(
format
,
codecMimeType
,
codecMaxInputSize
,
codecOperatingRate
);
codec
.
configure
(
mediaFormat
,
/* surface= */
null
,
crypto
,
/* flags= */
0
);
if
(
passthroughEnabled
)
{
// Store the input MIME type if we're using the passthrough codec.
...
...
@@ -351,19 +350,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
return
this
;
}
@TargetApi
(
23
)
@Override
protected
void
updateCodecOperatingRate
(
Format
format
)
{
if
(
format
.
sampleRate
==
Format
.
NO_VALUE
)
{
return
;
}
MediaCodec
codec
=
getCodec
();
float
codecOperatingRate
=
getCodecOperatingRate
();
Bundle
codecParameters
=
new
Bundle
();
codecParameters
.
putFloat
(
MediaFormat
.
KEY_OPERATING_RATE
,
format
.
sampleRate
*
codecOperatingRate
);
codec
.
setParameters
(
codecParameters
);
}
@Override
protected
void
onCodecInitialized
(
String
name
,
long
initializedTimestampMs
,
long
initializationDurationMs
)
{
...
...
@@ -647,10 +633,12 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
* @param format The format of the media.
* @param codecMimeType The MIME type handled by the codec.
* @param codecMaxInputSize The maximum input size supported by the codec.
* @param codecOperatingRate
* @return The framework media format.
*/
@SuppressLint
(
"InlinedApi"
)
protected
MediaFormat
getMediaFormat
(
Format
format
,
String
codecMimeType
,
int
codecMaxInputSize
)
{
protected
MediaFormat
getMediaFormat
(
Format
format
,
String
codecMimeType
,
int
codecMaxInputSize
,
float
codecOperatingRate
)
{
MediaFormat
mediaFormat
=
new
MediaFormat
();
// Set format parameters that should always be set.
mediaFormat
.
setString
(
MediaFormat
.
KEY_MIME
,
codecMimeType
);
...
...
@@ -663,7 +651,6 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
if
(
Util
.
SDK_INT
>=
23
)
{
mediaFormat
.
setInteger
(
MediaFormat
.
KEY_PRIORITY
,
0
/* realtime priority */
);
if
(
format
.
sampleRate
!=
Format
.
NO_VALUE
)
{
float
codecOperatingRate
=
getCodecOperatingRate
();
mediaFormat
.
setFloat
(
MediaFormat
.
KEY_OPERATING_RATE
,
codecOperatingRate
*
format
.
sampleRate
);
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java
View file @
5cdb886d
...
...
@@ -274,7 +274,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private
DrmSession
<
FrameworkMediaCrypto
>
drmSession
;
private
DrmSession
<
FrameworkMediaCrypto
>
pendingDrmSession
;
private
MediaCodec
codec
;
private
float
codecOperatingRate
=
1
;
private
float
codecOperatingRate
=
1
.0f
;
private
@Nullable
ArrayDeque
<
MediaCodecInfo
>
availableCodecInfos
;
private
@Nullable
DecoderInitializationException
preferredDecoderInitializationException
;
private
@Nullable
MediaCodecInfo
codecInfo
;
...
...
@@ -386,10 +386,13 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
* @param codec The {@link MediaCodec} to configure.
* @param format The format for which the codec is being configured.
* @param crypto For drm protected playbacks, a {@link MediaCrypto} to use for decryption.
* @param codecOperatingRate The {@link MediaFormat#KEY_OPERATING_RATE} to use for configuration.
* @throws DecoderQueryException If an error occurs querying {@code codecInfo}.
*/
protected
abstract
void
configureCodec
(
MediaCodecInfo
codecInfo
,
MediaCodec
codec
,
Format
format
,
MediaCrypto
crypto
)
throws
DecoderQueryException
;
protected
abstract
void
configureCodec
(
MediaCodecInfo
codecInfo
,
MediaCodec
codec
,
Format
format
,
MediaCrypto
crypto
,
float
codecOperatingRate
)
throws
DecoderQueryException
;
protected
final
void
maybeInitCodec
()
throws
ExoPlaybackException
{
if
(
codec
!=
null
||
format
==
null
)
{
...
...
@@ -466,8 +469,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
return
codecInfo
;
}
protected
final
float
getCodecOperatingRate
()
{
return
codecOperatingRate
;
}
@Override
protected
void
onEnabled
(
boolean
joining
)
throws
ExoPlaybackException
{
decoderCounters
=
new
DecoderCounters
();
...
...
@@ -485,8 +486,8 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
@Override
protected
void
onOperatingRateChanged
(
float
operatingRate
)
{
codecOperatingRate
=
operatingRate
;
if
(
codec
!=
null
&&
format
!=
null
)
{
updateCodecOperatingRate
(
format
);
if
(
format
!=
null
)
{
updateCodecOperatingRate
(
codec
,
format
,
operatingRate
);
}
}
...
...
@@ -734,7 +735,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
codec
=
MediaCodec
.
createByCodecName
(
name
);
TraceUtil
.
endSection
();
TraceUtil
.
beginSection
(
"configureCodec"
);
configureCodec
(
codecInfo
,
codec
,
format
,
crypto
);
configureCodec
(
codecInfo
,
codec
,
format
,
crypto
,
codecOperatingRate
);
TraceUtil
.
endSection
();
TraceUtil
.
beginSection
(
"startCodec"
);
codec
.
start
();
...
...
@@ -1038,7 +1039,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
}
}
else
{
if
(
Util
.
SDK_INT
>=
23
)
{
updateCodecOperatingRate
(
format
);
updateCodecOperatingRate
(
codec
,
format
,
codecOperatingRate
);
}
}
}
...
...
@@ -1048,7 +1049,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
* <p>
* The default implementation is a no-op.
*/
protected
void
updateCodecOperatingRate
(
Format
format
)
{
protected
void
updateCodecOperatingRate
(
MediaCodec
codec
,
Format
format
,
float
codecOperatingRate
)
{
// Do nothing.
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
View file @
5cdb886d
...
...
@@ -443,11 +443,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
}
@Override
protected
void
configureCodec
(
MediaCodecInfo
codecInfo
,
MediaCodec
codec
,
Format
format
,
MediaCrypto
crypto
)
throws
DecoderQueryException
{
protected
void
configureCodec
(
MediaCodecInfo
codecInfo
,
MediaCodec
codec
,
Format
format
,
MediaCrypto
crypto
,
float
codecOperatingRate
)
throws
DecoderQueryException
{
codecMaxValues
=
getCodecMaxValues
(
codecInfo
,
format
,
getStreamFormats
());
MediaFormat
mediaFormat
=
getMediaFormat
(
format
,
codecMaxValues
,
deviceNeedsAutoFrcWorkaround
,
tunnelingAudioSessionId
);
tunnelingAudioSessionId
,
codecOperatingRate
);
if
(
surface
==
null
)
{
Assertions
.
checkState
(
shouldUseDummySurface
(
codecInfo
));
if
(
dummySurface
==
null
)
{
...
...
@@ -501,12 +504,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
@TargetApi
(
23
)
@Override
protected
void
updateCodecOperatingRate
(
Format
format
)
{
protected
void
updateCodecOperatingRate
(
MediaCodec
codec
,
Format
format
,
float
codecOperatingRate
)
{
if
(
format
.
frameRate
==
Format
.
NO_VALUE
)
{
return
;
}
MediaCodec
codec
=
getCodec
();
float
codecOperatingRate
=
getCodecOperatingRate
();
Bundle
codecParameters
=
new
Bundle
();
codecParameters
.
putFloat
(
MediaFormat
.
KEY_OPERATING_RATE
,
format
.
frameRate
*
codecOperatingRate
);
codec
.
setParameters
(
codecParameters
);
...
...
@@ -951,6 +952,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
* logic that negatively impacts ExoPlayer.
* @param tunnelingAudioSessionId The audio session id to use for tunneling, or {@link
* C#AUDIO_SESSION_ID_UNSET} if tunneling should not be enabled.
* @param codecOperatingRate
* @return The framework {@link MediaFormat} that should be used to configure the decoder.
*/
@SuppressLint
(
"InlinedApi"
)
...
...
@@ -958,7 +960,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
Format
format
,
CodecMaxValues
codecMaxValues
,
boolean
deviceNeedsAutoFrcWorkaround
,
int
tunnelingAudioSessionId
)
{
int
tunnelingAudioSessionId
,
float
codecOperatingRate
)
{
MediaFormat
mediaFormat
=
new
MediaFormat
();
// Set format parameters that should always be set.
mediaFormat
.
setString
(
MediaFormat
.
KEY_MIME
,
format
.
sampleMimeType
);
...
...
@@ -978,7 +981,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
if
(
Util
.
SDK_INT
>=
23
)
{
mediaFormat
.
setInteger
(
MediaFormat
.
KEY_PRIORITY
,
0
/* realtime priority */
);
if
(
format
.
frameRate
!=
Format
.
NO_VALUE
)
{
float
codecOperatingRate
=
getCodecOperatingRate
();
mediaFormat
.
setFloat
(
MediaFormat
.
KEY_OPERATING_RATE
,
codecOperatingRate
*
format
.
frameRate
);
}
}
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/DebugRenderersFactory.java
View file @
5cdb886d
...
...
@@ -82,14 +82,14 @@ public class DebugRenderersFactory extends DefaultRenderersFactory {
@Override
protected
void
configureCodec
(
MediaCodecInfo
codecInfo
,
MediaCodec
codec
,
Format
format
,
MediaCrypto
crypto
)
throws
DecoderQueryException
{
MediaCrypto
crypto
,
float
codecOperatingRate
)
throws
DecoderQueryException
{
// If the codec is being initialized whilst the renderer is started, default behavior is to
// render the first frame (i.e. the keyframe before the current position), then drop frames up
// to the current playback position. For test runs that place a maximum limit on the number of
// dropped frames allowed, this is not desired behavior. Hence we skip (rather than drop)
// frames up to the current playback position [Internal: b/66494991].
skipToPositionBeforeRenderingFirstFrame
=
getState
()
==
Renderer
.
STATE_STARTED
;
super
.
configureCodec
(
codecInfo
,
codec
,
format
,
crypto
);
super
.
configureCodec
(
codecInfo
,
codec
,
format
,
crypto
,
codecOperatingRate
);
}
@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