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
890700fa
authored
Sep 11, 2019
by
aquilescanta
Committed by
Oliver Woodman
Sep 13, 2019
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Push formatHolder up to the BaseRenderer class
PiperOrigin-RevId: 268431514
parent
bbe8c258
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
19 additions
and
30 deletions
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/video/spherical/CameraMotionRenderer.java
testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java
library/core/src/main/java/com/google/android/exoplayer2/BaseRenderer.java
View file @
890700fa
...
...
@@ -34,6 +34,7 @@ import java.io.IOException;
public
abstract
class
BaseRenderer
implements
Renderer
,
RendererCapabilities
{
private
final
int
trackType
;
private
final
FormatHolder
formatHolder
;
private
RendererConfiguration
configuration
;
private
int
index
;
...
...
@@ -50,6 +51,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
*/
public
BaseRenderer
(
int
trackType
)
{
this
.
trackType
=
trackType
;
formatHolder
=
new
FormatHolder
();
readingPositionUs
=
C
.
TIME_END_OF_SOURCE
;
}
...
...
@@ -157,6 +159,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
@Override
public
final
void
disable
()
{
Assertions
.
checkState
(
state
==
STATE_ENABLED
);
formatHolder
.
clear
();
state
=
STATE_DISABLED
;
stream
=
null
;
streamFormats
=
null
;
...
...
@@ -167,6 +170,7 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
@Override
public
final
void
reset
()
{
Assertions
.
checkState
(
state
==
STATE_DISABLED
);
formatHolder
.
clear
();
onReset
();
}
...
...
@@ -275,6 +279,12 @@ public abstract class BaseRenderer implements Renderer, RendererCapabilities {
// Methods to be called by subclasses.
/** Returns a clear {@link FormatHolder}. */
protected
final
FormatHolder
getFormatHolder
()
{
formatHolder
.
clear
();
return
formatHolder
;
}
/** Returns the formats of the currently enabled stream. */
protected
final
Format
[]
getStreamFormats
()
{
return
streamFormats
;
...
...
library/core/src/main/java/com/google/android/exoplayer2/audio/SimpleDecoderAudioRenderer.java
View file @
890700fa
...
...
@@ -94,7 +94,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
private
final
boolean
playClearSamplesWithoutKeys
;
private
final
EventDispatcher
eventDispatcher
;
private
final
AudioSink
audioSink
;
private
final
FormatHolder
formatHolder
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
DecoderCounters
decoderCounters
;
...
...
@@ -212,7 +211,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
eventDispatcher
=
new
EventDispatcher
(
eventHandler
,
eventListener
);
this
.
audioSink
=
audioSink
;
audioSink
.
setListener
(
new
AudioSinkListener
());
formatHolder
=
new
FormatHolder
();
flagsOnlyBuffer
=
DecoderInputBuffer
.
newFlagsOnlyInstance
();
decoderReinitializationState
=
REINITIALIZATION_STATE_NONE
;
audioTrackNeedsConfigure
=
true
;
...
...
@@ -270,12 +268,11 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
// Try and read a format if we don't have one already.
if
(
inputFormat
==
null
)
{
// We don't have a format yet, so try and read one.
formatHolder
.
clea
r
();
FormatHolder
formatHolder
=
getFormatHolde
r
();
flagsOnlyBuffer
.
clear
();
int
result
=
readSource
(
formatHolder
,
flagsOnlyBuffer
,
true
);
if
(
result
==
C
.
RESULT_FORMAT_READ
)
{
onInputFormatChanged
(
formatHolder
);
formatHolder
.
clear
();
}
else
if
(
result
==
C
.
RESULT_BUFFER_READ
)
{
// End of stream read having not read a format.
Assertions
.
checkState
(
flagsOnlyBuffer
.
isEndOfStream
());
...
...
@@ -440,11 +437,11 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
}
int
result
;
FormatHolder
formatHolder
=
getFormatHolder
();
if
(
waitingForKeys
)
{
// We've already read an encrypted sample into buffer, and are waiting for keys.
result
=
C
.
RESULT_BUFFER_READ
;
}
else
{
formatHolder
.
clear
();
result
=
readSource
(
formatHolder
,
inputBuffer
,
false
);
}
...
...
@@ -453,7 +450,6 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
}
if
(
result
==
C
.
RESULT_FORMAT_READ
)
{
onInputFormatChanged
(
formatHolder
);
formatHolder
.
clear
();
return
true
;
}
if
(
inputBuffer
.
isEndOfStream
())
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java
View file @
890700fa
...
...
@@ -319,7 +319,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
private
final
float
assumedMinimumCodecOperatingRate
;
private
final
DecoderInputBuffer
buffer
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
final
FormatHolder
formatHolder
;
private
final
TimedValueQueue
<
Format
>
formatQueue
;
private
final
ArrayList
<
Long
>
decodeOnlyPresentationTimestamps
;
private
final
MediaCodec
.
BufferInfo
outputBufferInfo
;
...
...
@@ -405,7 +404,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
this
.
assumedMinimumCodecOperatingRate
=
assumedMinimumCodecOperatingRate
;
buffer
=
new
DecoderInputBuffer
(
DecoderInputBuffer
.
BUFFER_REPLACEMENT_MODE_DISABLED
);
flagsOnlyBuffer
=
DecoderInputBuffer
.
newFlagsOnlyInstance
();
formatHolder
=
new
FormatHolder
();
formatQueue
=
new
TimedValueQueue
<>();
decodeOnlyPresentationTimestamps
=
new
ArrayList
<>();
outputBufferInfo
=
new
MediaCodec
.
BufferInfo
();
...
...
@@ -769,12 +767,11 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
/** Reads into {@link #flagsOnlyBuffer} and returns whether a format was read. */
private
boolean
readToFlagsOnlyBuffer
(
boolean
requireFormat
)
throws
ExoPlaybackException
{
formatHolder
.
clea
r
();
FormatHolder
formatHolder
=
getFormatHolde
r
();
flagsOnlyBuffer
.
clear
();
int
result
=
readSource
(
formatHolder
,
flagsOnlyBuffer
,
requireFormat
);
if
(
result
==
C
.
RESULT_FORMAT_READ
)
{
onInputFormatChanged
(
formatHolder
);
formatHolder
.
clear
();
return
true
;
}
else
if
(
result
==
C
.
RESULT_BUFFER_READ
&&
flagsOnlyBuffer
.
isEndOfStream
())
{
inputStreamEnded
=
true
;
...
...
@@ -1042,6 +1039,7 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
}
int
result
;
FormatHolder
formatHolder
=
getFormatHolder
();
int
adaptiveReconfigurationBytes
=
0
;
if
(
waitingForKeys
)
{
// We've already read an encrypted sample into buffer, and are waiting for keys.
...
...
@@ -1057,7 +1055,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
codecReconfigurationState
=
RECONFIGURATION_STATE_QUEUE_PENDING
;
}
adaptiveReconfigurationBytes
=
buffer
.
data
.
position
();
formatHolder
.
clear
();
result
=
readSource
(
formatHolder
,
buffer
,
false
);
}
...
...
@@ -1077,7 +1074,6 @@ public abstract class MediaCodecRenderer extends BaseRenderer {
codecReconfigurationState
=
RECONFIGURATION_STATE_WRITE_PENDING
;
}
onInputFormatChanged
(
formatHolder
);
formatHolder
.
clear
();
return
true
;
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/metadata/MetadataRenderer.java
View file @
890700fa
...
...
@@ -45,7 +45,6 @@ public final class MetadataRenderer extends BaseRenderer implements Callback {
private
final
MetadataDecoderFactory
decoderFactory
;
private
final
MetadataOutput
output
;
@Nullable
private
final
Handler
outputHandler
;
private
final
FormatHolder
formatHolder
;
private
final
MetadataInputBuffer
buffer
;
private
final
Metadata
[]
pendingMetadata
;
private
final
long
[]
pendingMetadataTimestamps
;
...
...
@@ -84,7 +83,6 @@ public final class MetadataRenderer extends BaseRenderer implements Callback {
this
.
outputHandler
=
outputLooper
==
null
?
null
:
Util
.
createHandler
(
outputLooper
,
/* callback= */
this
);
this
.
decoderFactory
=
Assertions
.
checkNotNull
(
decoderFactory
);
formatHolder
=
new
FormatHolder
();
buffer
=
new
MetadataInputBuffer
();
pendingMetadata
=
new
Metadata
[
MAX_PENDING_METADATA_COUNT
];
pendingMetadataTimestamps
=
new
long
[
MAX_PENDING_METADATA_COUNT
];
...
...
@@ -114,7 +112,7 @@ public final class MetadataRenderer extends BaseRenderer implements Callback {
public
void
render
(
long
positionUs
,
long
elapsedRealtimeUs
)
throws
ExoPlaybackException
{
if
(!
inputStreamEnded
&&
pendingMetadataCount
<
MAX_PENDING_METADATA_COUNT
)
{
buffer
.
clear
();
formatHolder
.
clea
r
();
FormatHolder
formatHolder
=
getFormatHolde
r
();
int
result
=
readSource
(
formatHolder
,
buffer
,
false
);
if
(
result
==
C
.
RESULT_BUFFER_READ
)
{
if
(
buffer
.
isEndOfStream
())
{
...
...
@@ -142,7 +140,6 @@ public final class MetadataRenderer extends BaseRenderer implements Callback {
}
}
else
if
(
result
==
C
.
RESULT_FORMAT_READ
)
{
subsampleOffsetUs
=
formatHolder
.
format
.
subsampleOffsetUs
;
formatHolder
.
clear
();
}
}
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/SimpleDecoderVideoRenderer.java
View file @
890700fa
...
...
@@ -73,7 +73,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
private
final
int
maxDroppedFramesToNotify
;
private
final
boolean
playClearSamplesWithoutKeys
;
private
final
EventDispatcher
eventDispatcher
;
private
final
FormatHolder
formatHolder
;
private
final
TimedValueQueue
<
Format
>
formatQueue
;
private
final
DecoderInputBuffer
flagsOnlyBuffer
;
private
final
DrmSessionManager
<
ExoMediaCrypto
>
drmSessionManager
;
...
...
@@ -144,7 +143,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
this
.
playClearSamplesWithoutKeys
=
playClearSamplesWithoutKeys
;
joiningDeadlineMs
=
C
.
TIME_UNSET
;
clearReportedVideoSize
();
formatHolder
=
new
FormatHolder
();
formatQueue
=
new
TimedValueQueue
<>();
flagsOnlyBuffer
=
DecoderInputBuffer
.
newFlagsOnlyInstance
();
eventDispatcher
=
new
EventDispatcher
(
eventHandler
,
eventListener
);
...
...
@@ -166,12 +164,11 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
if
(
inputFormat
==
null
)
{
// We don't have a format yet, so try and read one.
formatHolder
.
clea
r
();
FormatHolder
formatHolder
=
getFormatHolde
r
();
flagsOnlyBuffer
.
clear
();
int
result
=
readSource
(
formatHolder
,
flagsOnlyBuffer
,
true
);
if
(
result
==
C
.
RESULT_FORMAT_READ
)
{
onInputFormatChanged
(
formatHolder
);
formatHolder
.
clear
();
}
else
if
(
result
==
C
.
RESULT_BUFFER_READ
)
{
// End of stream read having not read a format.
Assertions
.
checkState
(
flagsOnlyBuffer
.
isEndOfStream
());
...
...
@@ -680,11 +677,11 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
}
int
result
;
FormatHolder
formatHolder
=
getFormatHolder
();
if
(
waitingForKeys
)
{
// We've already read an encrypted sample into buffer, and are waiting for keys.
result
=
C
.
RESULT_BUFFER_READ
;
}
else
{
formatHolder
.
clear
();
result
=
readSource
(
formatHolder
,
inputBuffer
,
false
);
}
...
...
@@ -693,7 +690,6 @@ public abstract class SimpleDecoderVideoRenderer extends BaseRenderer {
}
if
(
result
==
C
.
RESULT_FORMAT_READ
)
{
onInputFormatChanged
(
formatHolder
);
formatHolder
.
clear
();
return
true
;
}
if
(
inputBuffer
.
isEndOfStream
())
{
...
...
library/core/src/main/java/com/google/android/exoplayer2/video/spherical/CameraMotionRenderer.java
View file @
890700fa
...
...
@@ -34,7 +34,6 @@ public class CameraMotionRenderer extends BaseRenderer {
// The amount of time to read samples ahead of the current time.
private
static
final
int
SAMPLE_WINDOW_DURATION_US
=
100000
;
private
final
FormatHolder
formatHolder
;
private
final
DecoderInputBuffer
buffer
;
private
final
ParsableByteArray
scratch
;
...
...
@@ -44,7 +43,6 @@ public class CameraMotionRenderer extends BaseRenderer {
public
CameraMotionRenderer
()
{
super
(
C
.
TRACK_TYPE_CAMERA_MOTION
);
formatHolder
=
new
FormatHolder
();
buffer
=
new
DecoderInputBuffer
(
DecoderInputBuffer
.
BUFFER_REPLACEMENT_MODE_NORMAL
);
scratch
=
new
ParsableByteArray
();
}
...
...
@@ -85,10 +83,9 @@ public class CameraMotionRenderer extends BaseRenderer {
// Keep reading available samples as long as the sample time is not too far into the future.
while
(!
hasReadStreamToEnd
()
&&
lastTimestampUs
<
positionUs
+
SAMPLE_WINDOW_DURATION_US
)
{
buffer
.
clear
();
formatHolder
.
clea
r
();
FormatHolder
formatHolder
=
getFormatHolde
r
();
int
result
=
readSource
(
formatHolder
,
buffer
,
/* formatRequired= */
false
);
if
(
result
!=
C
.
RESULT_BUFFER_READ
||
buffer
.
isEndOfStream
())
{
formatHolder
.
clear
();
return
;
}
...
...
testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeRenderer.java
View file @
890700fa
...
...
@@ -45,7 +45,6 @@ public class FakeRenderer extends BaseRenderer {
private
final
List
<
Format
>
expectedFormats
;
private
final
DecoderInputBuffer
buffer
;
private
final
FormatHolder
formatHolder
;
private
long
playbackPositionUs
;
private
long
lastSamplePositionUs
;
...
...
@@ -60,7 +59,6 @@ public class FakeRenderer extends BaseRenderer {
:
MimeTypes
.
getTrackType
(
expectedFormats
[
0
].
sampleMimeType
));
this
.
expectedFormats
=
Collections
.
unmodifiableList
(
Arrays
.
asList
(
expectedFormats
));
buffer
=
new
DecoderInputBuffer
(
DecoderInputBuffer
.
BUFFER_REPLACEMENT_MODE_NORMAL
);
formatHolder
=
new
FormatHolder
();
lastSamplePositionUs
=
Long
.
MIN_VALUE
;
}
...
...
@@ -79,14 +77,13 @@ public class FakeRenderer extends BaseRenderer {
}
playbackPositionUs
=
positionUs
;
while
(
lastSamplePositionUs
<
positionUs
+
SOURCE_READAHEAD_US
)
{
formatHolder
.
clea
r
();
FormatHolder
formatHolder
=
getFormatHolde
r
();
buffer
.
clear
();
int
result
=
readSource
(
formatHolder
,
buffer
,
false
);
if
(
result
==
C
.
RESULT_FORMAT_READ
)
{
formatReadCount
++;
assertThat
(
expectedFormats
).
contains
(
formatHolder
.
format
);
onFormatChanged
(
formatHolder
.
format
);
formatHolder
.
clear
();
}
else
if
(
result
==
C
.
RESULT_BUFFER_READ
)
{
if
(
buffer
.
isEndOfStream
())
{
isEnded
=
true
;
...
...
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