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
dd0246a3
authored
Nov 26, 2020
by
olly
Committed by
Andrew Lewis
Nov 27, 2020
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
DefaultAudioSink: Fix transient position calculation errors
PiperOrigin-RevId: 344408351
parent
43713abe
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
13 deletions
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java
View file @
dd0246a3
...
@@ -1407,21 +1407,33 @@ public final class DefaultAudioSink implements AudioSink {
...
@@ -1407,21 +1407,33 @@ public final class DefaultAudioSink implements AudioSink {
mediaPositionParameters
=
mediaPositionParametersCheckpoints
.
remove
();
mediaPositionParameters
=
mediaPositionParametersCheckpoints
.
remove
();
}
}
long
playoutDurationSinceLastCheckpoint
=
long
playoutDurationSinceLastCheckpoint
Us
=
positionUs
-
mediaPositionParameters
.
audioTrackPositionUs
;
positionUs
-
mediaPositionParameters
.
audioTrackPositionUs
;
if
(!
mediaPositionParameters
.
playbackParameters
.
equals
(
PlaybackParameters
.
DEFAULT
))
{
if
(
mediaPositionParameters
.
playbackParameters
.
equals
(
PlaybackParameters
.
DEFAULT
))
{
if
(
mediaPositionParametersCheckpoints
.
isEmpty
())
{
return
mediaPositionParameters
.
mediaTimeUs
+
playoutDurationSinceLastCheckpointUs
;
playoutDurationSinceLastCheckpoint
=
}
else
if
(
mediaPositionParametersCheckpoints
.
isEmpty
())
{
audioProcessorChain
.
getMediaDuration
(
playoutDurationSinceLastCheckpoint
);
long
mediaDurationSinceLastCheckpointUs
=
}
else
{
audioProcessorChain
.
getMediaDuration
(
playoutDurationSinceLastCheckpointUs
);
// Playing data at a previous playback speed, so fall back to multiplying by the speed.
return
mediaPositionParameters
.
mediaTimeUs
+
mediaDurationSinceLastCheckpointUs
;
playoutDurationSinceLastCheckpoint
=
}
else
{
Util
.
getMediaDurationForPlayoutDuration
(
// The processor chain has been configured with new parameters, but we're still playing audio
playoutDurationSinceLastCheckpoint
,
// that was processed using previous parameters. We can't scale the playout duration using the
mediaPositionParameters
.
playbackParameters
.
speed
);
// processor chain in this case, so we fall back to scaling using the previous parameters'
}
// target speed instead. Since the processor chain may not have achieved the target speed
// precisely, we scale the duration to the next checkpoint (which will always be small) rather
// than the duration from the previous checkpoint (which may be arbitrarily large). This
// limits the amount of error that can be introduced due to a difference between the target
// and actual speeds.
MediaPositionParameters
nextMediaPositionParameters
=
mediaPositionParametersCheckpoints
.
getFirst
();
long
playoutDurationUntilNextCheckpointUs
=
nextMediaPositionParameters
.
audioTrackPositionUs
-
positionUs
;
long
mediaDurationUntilNextCheckpointUs
=
Util
.
getMediaDurationForPlayoutDuration
(
playoutDurationUntilNextCheckpointUs
,
mediaPositionParameters
.
playbackParameters
.
speed
);
return
nextMediaPositionParameters
.
mediaTimeUs
-
mediaDurationUntilNextCheckpointUs
;
}
}
return
mediaPositionParameters
.
mediaTimeUs
+
playoutDurationSinceLastCheckpoint
;
}
}
private
long
applySkipping
(
long
positionUs
)
{
private
long
applySkipping
(
long
positionUs
)
{
...
...
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