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
765d1659
authored
Sep 18, 2015
by
Oliver Woodman
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Return "seeked to" position immediately after seek.
parent
c1b8352e
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
22 deletions
library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java
library/src/main/java/com/google/android/exoplayer/ExoPlayerImplInternal.java
View file @
765d1659
...
...
@@ -33,6 +33,7 @@ import android.util.Pair;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.concurrent.atomic.AtomicInteger
;
/**
* Implements the internal behavior of {@link ExoPlayerImpl}.
...
...
@@ -66,6 +67,7 @@ import java.util.List;
private
final
HandlerThread
internalPlaybackThread
;
private
final
Handler
eventHandler
;
private
final
StandaloneMediaClock
standaloneMediaClock
;
private
final
AtomicInteger
pendingSeekCount
;
private
final
List
<
TrackRenderer
>
enabledRenderers
;
private
final
MediaFormat
[][]
trackFormats
;
private
final
int
[]
selectedTrackIndices
;
...
...
@@ -82,6 +84,7 @@ import java.util.List;
private
int
state
;
private
int
customMessagesSent
=
0
;
private
int
customMessagesProcessed
=
0
;
private
long
lastSeekPositionMs
;
private
long
elapsedRealtimeUs
;
private
volatile
long
durationUs
;
...
...
@@ -100,6 +103,7 @@ import java.util.List;
this
.
bufferedPositionUs
=
TrackRenderer
.
UNKNOWN_TIME_US
;
standaloneMediaClock
=
new
StandaloneMediaClock
();
pendingSeekCount
=
new
AtomicInteger
();
enabledRenderers
=
new
ArrayList
<>(
selectedTrackIndices
.
length
);
trackFormats
=
new
MediaFormat
[
selectedTrackIndices
.
length
][];
// Note: The documentation for Process.THREAD_PRIORITY_AUDIO that states "Applications can
...
...
@@ -115,7 +119,7 @@ import java.util.List;
}
public
long
getCurrentPosition
()
{
return
p
ositionUs
/
1000
;
return
p
endingSeekCount
.
get
()
>
0
?
lastSeekPositionMs
:
(
positionUs
/
1000
)
;
}
public
long
getBufferedPosition
()
{
...
...
@@ -137,6 +141,8 @@ import java.util.List;
}
public
void
seekTo
(
long
positionMs
)
{
lastSeekPositionMs
=
positionMs
;
pendingSeekCount
.
incrementAndGet
();
handler
.
obtainMessage
(
MSG_SEEK_TO
,
Util
.
getTopInt
(
positionMs
),
Util
.
getBottomInt
(
positionMs
)).
sendToTarget
();
}
...
...
@@ -490,25 +496,29 @@ import java.util.List;
}
private
void
seekToInternal
(
long
positionMs
)
throws
ExoPlaybackException
{
if
(
positionMs
==
(
positionUs
/
1000
))
{
// Seek is to the current position. Do nothing.
return
;
}
try
{
if
(
positionMs
==
(
positionUs
/
1000
))
{
// Seek is to the current position. Do nothing.
return
;
}
rebuffering
=
false
;
positionUs
=
positionMs
*
1000
;
standaloneMediaClock
.
stop
();
standaloneMediaClock
.
setPositionUs
(
positionUs
);
if
(
state
==
ExoPlayer
.
STATE_IDLE
||
state
==
ExoPlayer
.
STATE_PREPARING
)
{
return
;
}
for
(
int
i
=
0
;
i
<
enabledRenderers
.
size
();
i
++)
{
TrackRenderer
renderer
=
enabledRenderers
.
get
(
i
);
ensureStopped
(
renderer
);
renderer
.
seekTo
(
positionUs
);
rebuffering
=
false
;
positionUs
=
positionMs
*
1000
;
standaloneMediaClock
.
stop
();
standaloneMediaClock
.
setPositionUs
(
positionUs
);
if
(
state
==
ExoPlayer
.
STATE_IDLE
||
state
==
ExoPlayer
.
STATE_PREPARING
)
{
return
;
}
for
(
int
i
=
0
;
i
<
enabledRenderers
.
size
();
i
++)
{
TrackRenderer
renderer
=
enabledRenderers
.
get
(
i
);
ensureStopped
(
renderer
);
renderer
.
seekTo
(
positionUs
);
}
setState
(
ExoPlayer
.
STATE_BUFFERING
);
handler
.
sendEmptyMessage
(
MSG_DO_SOME_WORK
);
}
finally
{
pendingSeekCount
.
decrementAndGet
();
}
setState
(
ExoPlayer
.
STATE_BUFFERING
);
handler
.
sendEmptyMessage
(
MSG_DO_SOME_WORK
);
}
private
void
stopInternal
()
{
...
...
@@ -577,16 +587,16 @@ import java.util.List;
@SuppressWarnings
(
"unchecked"
)
Pair
<
ExoPlayerComponent
,
Object
>
targetAndMessage
=
(
Pair
<
ExoPlayerComponent
,
Object
>)
obj
;
targetAndMessage
.
first
.
handleMessage
(
what
,
targetAndMessage
.
second
);
if
(
state
!=
ExoPlayer
.
STATE_IDLE
&&
state
!=
ExoPlayer
.
STATE_PREPARING
)
{
// The message may have caused something to change that now requires us to do work.
handler
.
sendEmptyMessage
(
MSG_DO_SOME_WORK
);
}
}
finally
{
synchronized
(
this
)
{
customMessagesProcessed
++;
notifyAll
();
}
}
if
(
state
!=
ExoPlayer
.
STATE_IDLE
&&
state
!=
ExoPlayer
.
STATE_PREPARING
)
{
// The message may have caused something to change that now requires us to do work.
handler
.
sendEmptyMessage
(
MSG_DO_SOME_WORK
);
}
}
private
void
setRendererSelectedTrackInternal
(
int
rendererIndex
,
int
trackIndex
)
...
...
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