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
03276d1e
authored
Dec 07, 2022
by
claincly
Committed by
Ian Baker
Dec 12, 2022
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Rename surface to display surface for previewing.
PiperOrigin-RevId: 493557119
parent
9d059352
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
30 deletions
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/video/MediaCodecVideoRenderer.java
View file @
03276d1e
...
@@ -133,7 +133,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -133,7 +133,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
private
boolean
codecNeedsSetOutputSurfaceWorkaround
;
private
boolean
codecNeedsSetOutputSurfaceWorkaround
;
private
boolean
codecHandlesHdr10PlusOutOfBandMetadata
;
private
boolean
codecHandlesHdr10PlusOutOfBandMetadata
;
@Nullable
private
Surface
s
urface
;
@Nullable
private
Surface
displayS
urface
;
@Nullable
private
PlaceholderSurface
placeholderSurface
;
@Nullable
private
PlaceholderSurface
placeholderSurface
;
private
boolean
haveReportedFirstFrameRenderedForCurrentSurface
;
private
boolean
haveReportedFirstFrameRenderedForCurrentSurface
;
private
@C
.
VideoScalingMode
int
scalingMode
;
private
@C
.
VideoScalingMode
int
scalingMode
;
...
@@ -559,7 +559,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -559,7 +559,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
public
boolean
isReady
()
{
public
boolean
isReady
()
{
if
(
super
.
isReady
()
if
(
super
.
isReady
()
&&
(
renderedFirstFrameAfterReset
&&
(
renderedFirstFrameAfterReset
||
(
placeholderSurface
!=
null
&&
s
urface
==
placeholderSurface
)
||
(
placeholderSurface
!=
null
&&
displayS
urface
==
placeholderSurface
)
||
getCodec
()
==
null
||
getCodec
()
==
null
||
tunneling
))
{
||
tunneling
))
{
// Ready. If we were joining then we've now joined, so clear the joining deadline.
// Ready. If we were joining then we've now joined, so clear the joining deadline.
...
@@ -664,54 +664,54 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -664,54 +664,54 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
}
}
private
void
setOutput
(
@Nullable
Object
output
)
throws
ExoPlaybackException
{
private
void
setOutput
(
@Nullable
Object
output
)
throws
ExoPlaybackException
{
// Handle unsupported (i.e., non-Surface) outputs by clearing the surface.
// Handle unsupported (i.e., non-Surface) outputs by clearing the
display
surface.
@Nullable
Surface
s
urface
=
output
instanceof
Surface
?
(
Surface
)
output
:
null
;
@Nullable
Surface
displayS
urface
=
output
instanceof
Surface
?
(
Surface
)
output
:
null
;
if
(
s
urface
==
null
)
{
if
(
displayS
urface
==
null
)
{
// Use a placeholder surface if possible.
// Use a placeholder surface if possible.
if
(
placeholderSurface
!=
null
)
{
if
(
placeholderSurface
!=
null
)
{
s
urface
=
placeholderSurface
;
displayS
urface
=
placeholderSurface
;
}
else
{
}
else
{
MediaCodecInfo
codecInfo
=
getCodecInfo
();
MediaCodecInfo
codecInfo
=
getCodecInfo
();
if
(
codecInfo
!=
null
&&
shouldUsePlaceholderSurface
(
codecInfo
))
{
if
(
codecInfo
!=
null
&&
shouldUsePlaceholderSurface
(
codecInfo
))
{
placeholderSurface
=
PlaceholderSurface
.
newInstanceV17
(
context
,
codecInfo
.
secure
);
placeholderSurface
=
PlaceholderSurface
.
newInstanceV17
(
context
,
codecInfo
.
secure
);
s
urface
=
placeholderSurface
;
displayS
urface
=
placeholderSurface
;
}
}
}
}
}
}
// We only need to update the codec if the surface has changed.
// We only need to update the codec if the
display
surface has changed.
if
(
this
.
surface
!=
s
urface
)
{
if
(
this
.
displaySurface
!=
displayS
urface
)
{
this
.
surface
=
s
urface
;
this
.
displaySurface
=
displayS
urface
;
frameReleaseHelper
.
onSurfaceChanged
(
s
urface
);
frameReleaseHelper
.
onSurfaceChanged
(
displayS
urface
);
haveReportedFirstFrameRenderedForCurrentSurface
=
false
;
haveReportedFirstFrameRenderedForCurrentSurface
=
false
;
@State
int
state
=
getState
();
@State
int
state
=
getState
();
@Nullable
MediaCodecAdapter
codec
=
getCodec
();
@Nullable
MediaCodecAdapter
codec
=
getCodec
();
if
(
codec
!=
null
)
{
if
(
codec
!=
null
)
{
if
(
Util
.
SDK_INT
>=
23
&&
s
urface
!=
null
&&
!
codecNeedsSetOutputSurfaceWorkaround
)
{
if
(
Util
.
SDK_INT
>=
23
&&
displayS
urface
!=
null
&&
!
codecNeedsSetOutputSurfaceWorkaround
)
{
setOutputSurfaceV23
(
codec
,
s
urface
);
setOutputSurfaceV23
(
codec
,
displayS
urface
);
}
else
{
}
else
{
releaseCodec
();
releaseCodec
();
maybeInitCodecOrBypass
();
maybeInitCodecOrBypass
();
}
}
}
}
if
(
surface
!=
null
&&
s
urface
!=
placeholderSurface
)
{
if
(
displaySurface
!=
null
&&
displayS
urface
!=
placeholderSurface
)
{
// If we know the video size, report it again immediately.
// If we know the video size, report it again immediately.
maybeRenotifyVideoSizeChanged
();
maybeRenotifyVideoSizeChanged
();
// We haven't rendered to the new surface yet.
// We haven't rendered to the new
display
surface yet.
clearRenderedFirstFrame
();
clearRenderedFirstFrame
();
if
(
state
==
STATE_STARTED
)
{
if
(
state
==
STATE_STARTED
)
{
setJoiningDeadlineMs
();
setJoiningDeadlineMs
();
}
}
}
else
{
}
else
{
// The surface has been removed.
// The
display
surface has been removed.
clearReportedVideoSize
();
clearReportedVideoSize
();
clearRenderedFirstFrame
();
clearRenderedFirstFrame
();
}
}
}
else
if
(
surface
!=
null
&&
s
urface
!=
placeholderSurface
)
{
}
else
if
(
displaySurface
!=
null
&&
displayS
urface
!=
placeholderSurface
)
{
// The
surface is set and unchanged. If we know the video size and/or have already rendered to
// The
display surface is set and unchanged. If we know the video size and/or have already
//
the
surface, report these again immediately.
//
rendered to the display
surface, report these again immediately.
maybeRenotifyVideoSizeChanged
();
maybeRenotifyVideoSizeChanged
();
maybeRenotifyRenderedFirstFrame
();
maybeRenotifyRenderedFirstFrame
();
}
}
...
@@ -719,7 +719,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -719,7 +719,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
@Override
@Override
protected
boolean
shouldInitCodec
(
MediaCodecInfo
codecInfo
)
{
protected
boolean
shouldInitCodec
(
MediaCodecInfo
codecInfo
)
{
return
s
urface
!=
null
||
shouldUsePlaceholderSurface
(
codecInfo
);
return
displayS
urface
!=
null
||
shouldUsePlaceholderSurface
(
codecInfo
);
}
}
@Override
@Override
...
@@ -749,17 +749,17 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -749,17 +749,17 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
codecOperatingRate
,
codecOperatingRate
,
deviceNeedsNoPostProcessWorkaround
,
deviceNeedsNoPostProcessWorkaround
,
tunneling
?
tunnelingAudioSessionId
:
C
.
AUDIO_SESSION_ID_UNSET
);
tunneling
?
tunnelingAudioSessionId
:
C
.
AUDIO_SESSION_ID_UNSET
);
if
(
s
urface
==
null
)
{
if
(
displayS
urface
==
null
)
{
if
(!
shouldUsePlaceholderSurface
(
codecInfo
))
{
if
(!
shouldUsePlaceholderSurface
(
codecInfo
))
{
throw
new
IllegalStateException
();
throw
new
IllegalStateException
();
}
}
if
(
placeholderSurface
==
null
)
{
if
(
placeholderSurface
==
null
)
{
placeholderSurface
=
PlaceholderSurface
.
newInstanceV17
(
context
,
codecInfo
.
secure
);
placeholderSurface
=
PlaceholderSurface
.
newInstanceV17
(
context
,
codecInfo
.
secure
);
}
}
s
urface
=
placeholderSurface
;
displayS
urface
=
placeholderSurface
;
}
}
return
MediaCodecAdapter
.
Configuration
.
createForVideoDecoding
(
return
MediaCodecAdapter
.
Configuration
.
createForVideoDecoding
(
codecInfo
,
mediaFormat
,
format
,
s
urface
,
crypto
);
codecInfo
,
mediaFormat
,
format
,
displayS
urface
,
crypto
);
}
}
@Override
@Override
...
@@ -1063,7 +1063,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -1063,7 +1063,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
earlyUs
-=
elapsedRealtimeNowUs
-
elapsedRealtimeUs
;
earlyUs
-=
elapsedRealtimeNowUs
-
elapsedRealtimeUs
;
}
}
if
(
s
urface
==
placeholderSurface
)
{
if
(
displayS
urface
==
placeholderSurface
)
{
// Skip frames in sync with playback, so we'll be at the right frame if the mode changes.
// Skip frames in sync with playback, so we'll be at the right frame if the mode changes.
if
(
isBufferLate
(
earlyUs
))
{
if
(
isBufferLate
(
earlyUs
))
{
skipOutputBuffer
(
codec
,
bufferIndex
,
presentationTimeUs
);
skipOutputBuffer
(
codec
,
bufferIndex
,
presentationTimeUs
);
...
@@ -1378,8 +1378,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -1378,8 +1378,8 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
@RequiresApi
(
17
)
@RequiresApi
(
17
)
private
void
releasePlaceholderSurface
()
{
private
void
releasePlaceholderSurface
()
{
if
(
s
urface
==
placeholderSurface
)
{
if
(
displayS
urface
==
placeholderSurface
)
{
s
urface
=
null
;
displayS
urface
=
null
;
}
}
placeholderSurface
.
release
();
placeholderSurface
.
release
();
placeholderSurface
=
null
;
placeholderSurface
=
null
;
...
@@ -1411,14 +1411,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -1411,14 +1411,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
renderedFirstFrameAfterEnable
=
true
;
renderedFirstFrameAfterEnable
=
true
;
if
(!
renderedFirstFrameAfterReset
)
{
if
(!
renderedFirstFrameAfterReset
)
{
renderedFirstFrameAfterReset
=
true
;
renderedFirstFrameAfterReset
=
true
;
eventDispatcher
.
renderedFirstFrame
(
s
urface
);
eventDispatcher
.
renderedFirstFrame
(
displayS
urface
);
haveReportedFirstFrameRenderedForCurrentSurface
=
true
;
haveReportedFirstFrameRenderedForCurrentSurface
=
true
;
}
}
}
}
private
void
maybeRenotifyRenderedFirstFrame
()
{
private
void
maybeRenotifyRenderedFirstFrame
()
{
if
(
haveReportedFirstFrameRenderedForCurrentSurface
)
{
if
(
haveReportedFirstFrameRenderedForCurrentSurface
)
{
eventDispatcher
.
renderedFirstFrame
(
s
urface
);
eventDispatcher
.
renderedFirstFrame
(
displayS
urface
);
}
}
}
}
...
@@ -1626,7 +1626,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -1626,7 +1626,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
@Override
@Override
protected
MediaCodecDecoderException
createDecoderException
(
protected
MediaCodecDecoderException
createDecoderException
(
Throwable
cause
,
@Nullable
MediaCodecInfo
codecInfo
)
{
Throwable
cause
,
@Nullable
MediaCodecInfo
codecInfo
)
{
return
new
MediaCodecVideoDecoderException
(
cause
,
codecInfo
,
s
urface
);
return
new
MediaCodecVideoDecoderException
(
cause
,
codecInfo
,
displayS
urface
);
}
}
/**
/**
...
@@ -1755,8 +1755,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
...
@@ -1755,8 +1755,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
return
deviceNeedsSetOutputSurfaceWorkaround
;
return
deviceNeedsSetOutputSurfaceWorkaround
;
}
}
/** Returns the output surface. */
@Nullable
protected
Surface
getSurface
()
{
protected
Surface
getSurface
()
{
return
surface
;
// TODO(b/260702159) Consider renaming the method to getOutputSurface().
return
displaySurface
;
}
}
protected
static
final
class
CodecMaxValues
{
protected
static
final
class
CodecMaxValues
{
...
...
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