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
9bd79ebd
authored
Nov 29, 2022
by
kimvde
Committed by
Rohit Singh
Nov 29, 2022
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Move sample processing to transformer thread
PiperOrigin-RevId: 491623586
parent
4cf877b8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
35 additions
and
41 deletions
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/BaseSamplePipeline.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoader.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoaderRenderer.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SamplePipeline.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/BaseSamplePipeline.java
View file @
9bd79ebd
...
@@ -39,7 +39,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -39,7 +39,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
@Nullable
private
DecoderInputBuffer
inputBuffer
;
@Nullable
private
DecoderInputBuffer
inputBuffer
;
private
boolean
muxerWrapperTrackAdded
;
private
boolean
muxerWrapperTrackAdded
;
private
boolean
isEnded
;
public
BaseSamplePipeline
(
public
BaseSamplePipeline
(
Format
inputFormat
,
Format
inputFormat
,
...
@@ -81,11 +80,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -81,11 +80,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return
feedMuxer
()
||
processDataUpToMuxer
();
return
feedMuxer
()
||
processDataUpToMuxer
();
}
}
@Override
public
boolean
isEnded
()
{
return
isEnded
;
}
@Nullable
@Nullable
protected
abstract
DecoderInputBuffer
dequeueInputBufferInternal
()
throws
TransformationException
;
protected
abstract
DecoderInputBuffer
dequeueInputBufferInternal
()
throws
TransformationException
;
...
@@ -148,7 +142,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -148,7 +142,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
if
(
isMuxerInputEnded
())
{
if
(
isMuxerInputEnded
())
{
muxerWrapper
.
endTrack
(
trackType
);
muxerWrapper
.
endTrack
(
trackType
);
isEnded
=
true
;
return
false
;
return
false
;
}
}
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoader.java
View file @
9bd79ebd
...
@@ -20,7 +20,6 @@ import static com.google.android.exoplayer2.DefaultLoadControl.DEFAULT_BUFFER_FO
...
@@ -20,7 +20,6 @@ import static com.google.android.exoplayer2.DefaultLoadControl.DEFAULT_BUFFER_FO
import
static
com
.
google
.
android
.
exoplayer2
.
DefaultLoadControl
.
DEFAULT_BUFFER_FOR_PLAYBACK_MS
;
import
static
com
.
google
.
android
.
exoplayer2
.
DefaultLoadControl
.
DEFAULT_BUFFER_FOR_PLAYBACK_MS
;
import
static
com
.
google
.
android
.
exoplayer2
.
DefaultLoadControl
.
DEFAULT_MAX_BUFFER_MS
;
import
static
com
.
google
.
android
.
exoplayer2
.
DefaultLoadControl
.
DEFAULT_MAX_BUFFER_MS
;
import
static
com
.
google
.
android
.
exoplayer2
.
DefaultLoadControl
.
DEFAULT_MIN_BUFFER_MS
;
import
static
com
.
google
.
android
.
exoplayer2
.
DefaultLoadControl
.
DEFAULT_MIN_BUFFER_MS
;
import
static
com
.
google
.
android
.
exoplayer2
.
util
.
Assertions
.
checkNotNull
;
import
android.content.Context
;
import
android.content.Context
;
import
android.os.Handler
;
import
android.os.Handler
;
...
@@ -55,11 +54,10 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
...
@@ -55,11 +54,10 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
void
onAllTracksRegistered
();
void
onAllTracksRegistered
();
SamplePipeline
onTrackAdded
(
Format
format
,
long
streamStartPositionUs
,
long
streamOffsetUs
)
SamplePipeline
.
Input
onTrackAdded
(
Format
format
,
long
streamStartPositionUs
,
long
streamOffsetUs
)
throws
TransformationException
;
throws
TransformationException
;
void
onEnded
();
void
onError
(
Exception
e
);
void
onError
(
Exception
e
);
}
}
...
@@ -111,6 +109,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
...
@@ -111,6 +109,7 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
public
void
start
()
{
public
void
start
()
{
player
.
setMediaItem
(
mediaItem
);
player
.
setMediaItem
(
mediaItem
);
player
.
prepare
();
player
.
prepare
();
player
.
play
();
}
}
public
void
release
()
{
public
void
release
()
{
...
@@ -168,13 +167,6 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
...
@@ -168,13 +167,6 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
}
}
@Override
@Override
public
void
onPlaybackStateChanged
(
int
state
)
{
if
(
state
==
Player
.
STATE_ENDED
)
{
listener
.
onEnded
();
}
}
@Override
public
void
onTimelineChanged
(
Timeline
timeline
,
int
reason
)
{
public
void
onTimelineChanged
(
Timeline
timeline
,
int
reason
)
{
if
(
hasSentDuration
)
{
if
(
hasSentDuration
)
{
return
;
return
;
...
@@ -184,7 +176,6 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
...
@@ -184,7 +176,6 @@ import com.google.android.exoplayer2.video.VideoRendererEventListener;
if
(!
window
.
isPlaceholder
)
{
if
(!
window
.
isPlaceholder
)
{
listener
.
onDurationMs
(
Util
.
usToMs
(
window
.
durationUs
));
listener
.
onDurationMs
(
Util
.
usToMs
(
window
.
durationUs
));
hasSentDuration
=
true
;
hasSentDuration
=
true
;
checkNotNull
(
player
).
play
();
}
}
}
}
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/ExoPlayerAssetLoaderRenderer.java
View file @
9bd79ebd
...
@@ -45,7 +45,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -45,7 +45,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private
boolean
isTransformationRunning
;
private
boolean
isTransformationRunning
;
private
long
streamStartPositionUs
;
private
long
streamStartPositionUs
;
private
long
streamOffsetUs
;
private
long
streamOffsetUs
;
private
@MonotonicNonNull
SamplePipeline
samplePipeline
;
private
SamplePipeline
.
@MonotonicNonNull
Input
samplePipelineInput
;
private
boolean
isEnded
;
public
ExoPlayerAssetLoaderRenderer
(
public
ExoPlayerAssetLoaderRenderer
(
int
trackType
,
int
trackType
,
...
@@ -88,7 +89,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -88,7 +89,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
@Override
@Override
public
boolean
isEnded
()
{
public
boolean
isEnded
()
{
return
samplePipeline
!=
null
&&
samplePipeline
.
isEnded
()
;
return
isEnded
;
}
}
@Override
@Override
...
@@ -98,7 +99,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -98,7 +99,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return
;
return
;
}
}
while
(
samplePipeline
.
processData
()
||
feedPipelineFromInput
())
{}
while
(
feedPipelineFromInput
())
{}
}
catch
(
TransformationException
e
)
{
}
catch
(
TransformationException
e
)
{
isTransformationRunning
=
false
;
isTransformationRunning
=
false
;
assetLoaderListener
.
onError
(
e
);
assetLoaderListener
.
onError
(
e
);
...
@@ -127,16 +128,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -127,16 +128,9 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
isTransformationRunning
=
false
;
isTransformationRunning
=
false
;
}
}
@Override
@EnsuresNonNullIf
(
expression
=
"samplePipelineInput"
,
result
=
true
)
protected
void
onReset
()
{
if
(
samplePipeline
!=
null
)
{
samplePipeline
.
release
();
}
}
@EnsuresNonNullIf
(
expression
=
"samplePipeline"
,
result
=
true
)
private
boolean
ensureConfigured
()
throws
TransformationException
{
private
boolean
ensureConfigured
()
throws
TransformationException
{
if
(
samplePipeline
!=
null
)
{
if
(
samplePipeline
Input
!=
null
)
{
return
true
;
return
true
;
}
}
...
@@ -147,7 +141,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -147,7 +141,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
return
false
;
return
false
;
}
}
Format
inputFormat
=
checkNotNull
(
formatHolder
.
format
);
Format
inputFormat
=
checkNotNull
(
formatHolder
.
format
);
samplePipeline
=
samplePipeline
Input
=
assetLoaderListener
.
onTrackAdded
(
inputFormat
,
streamStartPositionUs
,
streamOffsetUs
);
assetLoaderListener
.
onTrackAdded
(
inputFormat
,
streamStartPositionUs
,
streamOffsetUs
);
return
true
;
return
true
;
}
}
...
@@ -156,11 +150,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -156,11 +150,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
* Attempts to read input data and pass the input data to the sample pipeline.
* Attempts to read input data and pass the input data to the sample pipeline.
*
*
* @return Whether it may be possible to read more data immediately by calling this method again.
* @return Whether it may be possible to read more data immediately by calling this method again.
* @throws TransformationException If a {@link SamplePipeline} problem occurs.
*/
*/
@RequiresNonNull
(
"samplePipeline"
)
@RequiresNonNull
(
"samplePipelineInput"
)
private
boolean
feedPipelineFromInput
()
throws
TransformationException
{
private
boolean
feedPipelineFromInput
()
{
@Nullable
DecoderInputBuffer
samplePipelineInputBuffer
=
samplePipeline
.
dequeueInputBuffer
();
@Nullable
DecoderInputBuffer
samplePipelineInputBuffer
=
samplePipelineInput
.
dequeueInputBuffer
();
if
(
samplePipelineInputBuffer
==
null
)
{
if
(
samplePipelineInputBuffer
==
null
)
{
return
false
;
return
false
;
}
}
...
@@ -171,11 +165,12 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -171,11 +165,12 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
case
C
.
RESULT_BUFFER_READ
:
case
C
.
RESULT_BUFFER_READ
:
samplePipelineInputBuffer
.
flip
();
samplePipelineInputBuffer
.
flip
();
if
(
samplePipelineInputBuffer
.
isEndOfStream
())
{
if
(
samplePipelineInputBuffer
.
isEndOfStream
())
{
samplePipeline
.
queueInputBuffer
();
samplePipelineInput
.
queueInputBuffer
();
isEnded
=
true
;
return
false
;
return
false
;
}
}
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
samplePipelineInputBuffer
.
timeUs
);
mediaClock
.
updateTimeForTrackType
(
getTrackType
(),
samplePipelineInputBuffer
.
timeUs
);
samplePipeline
.
queueInputBuffer
();
samplePipeline
Input
.
queueInputBuffer
();
return
true
;
return
true
;
case
C
.
RESULT_FORMAT_READ
:
case
C
.
RESULT_FORMAT_READ
:
throw
new
IllegalStateException
(
"Format changes are not supported."
);
throw
new
IllegalStateException
(
"Format changes are not supported."
);
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/MuxerWrapper.java
View file @
9bd79ebd
...
@@ -69,6 +69,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -69,6 +69,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private
int
trackCount
;
private
int
trackCount
;
private
int
trackFormatCount
;
private
int
trackFormatCount
;
private
boolean
isReady
;
private
boolean
isReady
;
private
boolean
isEnded
;
private
@C
.
TrackType
int
previousTrackType
;
private
@C
.
TrackType
int
previousTrackType
;
private
long
minTrackTimeUs
;
private
long
minTrackTimeUs
;
private
@MonotonicNonNull
ScheduledFuture
<?>
abortScheduledFuture
;
private
@MonotonicNonNull
ScheduledFuture
<?>
abortScheduledFuture
;
...
@@ -216,9 +217,15 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
...
@@ -216,9 +217,15 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
trackTypeToIndex
.
delete
(
trackType
);
trackTypeToIndex
.
delete
(
trackType
);
if
(
trackTypeToIndex
.
size
()
==
0
)
{
if
(
trackTypeToIndex
.
size
()
==
0
)
{
abortScheduledExecutorService
.
shutdownNow
();
abortScheduledExecutorService
.
shutdownNow
();
isEnded
=
true
;
}
}
}
}
/** Returns whether all the tracks are {@linkplain #endTrack(int) ended}. */
public
boolean
isEnded
()
{
return
isEnded
;
}
/**
/**
* Finishes writing the output and releases any resources associated with muxing.
* Finishes writing the output and releases any resources associated with muxing.
*
*
...
...
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SamplePipeline.java
View file @
9bd79ebd
...
@@ -26,6 +26,17 @@ import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
...
@@ -26,6 +26,17 @@ import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
*/
*/
/* package */
interface
SamplePipeline
{
/* package */
interface
SamplePipeline
{
/** Input of a {@link SamplePipeline}. */
interface
Input
{
/** See {@link SamplePipeline#dequeueInputBuffer()}. */
@Nullable
DecoderInputBuffer
dequeueInputBuffer
();
/** See {@link SamplePipeline#queueInputBuffer()}. */
void
queueInputBuffer
();
}
/** A listener for the sample pipeline events. */
/** A listener for the sample pipeline events. */
interface
Listener
{
interface
Listener
{
...
@@ -63,9 +74,6 @@ import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
...
@@ -63,9 +74,6 @@ import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
*/
*/
boolean
processData
()
throws
TransformationException
;
boolean
processData
()
throws
TransformationException
;
/** Returns whether the pipeline has ended. */
boolean
isEnded
();
/** Releases all resources held by the pipeline. */
/** Releases all resources held by the pipeline. */
void
release
();
void
release
();
}
}
library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerInternal.java
View file @
9bd79ebd
This diff is collapsed.
Click to expand it.
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