am 68f592a8: Merge "Don\'t perform RTSP seeks right away but queue them for 200ms" into ics-mr1
* commit '68f592a8210af27df4339089bbee47fb602cae6a': Don't perform RTSP seeks right away but queue them for 200ms
This commit is contained in:
@@ -38,7 +38,8 @@ NuPlayer::RTSPSource::RTSPSource(
|
||||
mFlags(0),
|
||||
mState(DISCONNECTED),
|
||||
mFinalResult(OK),
|
||||
mDisconnectReplyID(0) {
|
||||
mDisconnectReplyID(0),
|
||||
mSeekGeneration(0) {
|
||||
if (headers) {
|
||||
mExtraHeaders = *headers;
|
||||
|
||||
@@ -146,14 +147,21 @@ status_t NuPlayer::RTSPSource::getDuration(int64_t *durationUs) {
|
||||
}
|
||||
|
||||
status_t NuPlayer::RTSPSource::seekTo(int64_t seekTimeUs) {
|
||||
sp<AMessage> msg = new AMessage(kWhatPerformSeek, mReflector->id());
|
||||
msg->setInt32("generation", ++mSeekGeneration);
|
||||
msg->setInt64("timeUs", seekTimeUs);
|
||||
msg->post(200000ll);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
void NuPlayer::RTSPSource::performSeek(int64_t seekTimeUs) {
|
||||
if (mState != CONNECTED) {
|
||||
return UNKNOWN_ERROR;
|
||||
return;
|
||||
}
|
||||
|
||||
mState = SEEKING;
|
||||
mHandler->seek(seekTimeUs);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
bool NuPlayer::RTSPSource::isSeekable() {
|
||||
@@ -168,6 +176,20 @@ void NuPlayer::RTSPSource::onMessageReceived(const sp<AMessage> &msg) {
|
||||
mDisconnectReplyID = replyID;
|
||||
finishDisconnectIfPossible();
|
||||
return;
|
||||
} else if (msg->what() == kWhatPerformSeek) {
|
||||
int32_t generation;
|
||||
CHECK(msg->findInt32("generation", &generation));
|
||||
|
||||
if (generation != mSeekGeneration) {
|
||||
// obsolete.
|
||||
return;
|
||||
}
|
||||
|
||||
int64_t seekTimeUs;
|
||||
CHECK(msg->findInt64("timeUs", &seekTimeUs));
|
||||
|
||||
performSeek(seekTimeUs);
|
||||
return;
|
||||
}
|
||||
|
||||
CHECK_EQ(msg->what(), (int)kWhatNotify);
|
||||
|
||||
@@ -56,6 +56,7 @@ private:
|
||||
enum {
|
||||
kWhatNotify = 'noti',
|
||||
kWhatDisconnect = 'disc',
|
||||
kWhatPerformSeek = 'seek',
|
||||
};
|
||||
|
||||
enum State {
|
||||
@@ -96,12 +97,16 @@ private:
|
||||
sp<AnotherPacketSource> mAudioTrack;
|
||||
sp<AnotherPacketSource> mVideoTrack;
|
||||
|
||||
int32_t mSeekGeneration;
|
||||
|
||||
sp<AnotherPacketSource> getSource(bool audio);
|
||||
|
||||
void onConnected();
|
||||
void onDisconnected(const sp<AMessage> &msg);
|
||||
void finishDisconnectIfPossible();
|
||||
|
||||
void performSeek(int64_t seekTimeUs);
|
||||
|
||||
DISALLOW_EVIL_CONSTRUCTORS(RTSPSource);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user