Loading media/libmediaplayerservice/nuplayer/RTSPSource.cpp +26 −4 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ NuPlayer::RTSPSource::RTSPSource( mFlags(0), mState(DISCONNECTED), mFinalResult(OK), mDisconnectReplyID(0) { mDisconnectReplyID(0), mSeekGeneration(0) { if (headers) { mExtraHeaders = *headers; Loading Loading @@ -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() { Loading @@ -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); Loading media/libmediaplayerservice/nuplayer/RTSPSource.h +5 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ private: enum { kWhatNotify = 'noti', kWhatDisconnect = 'disc', kWhatPerformSeek = 'seek', }; enum State { Loading Loading @@ -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); }; Loading Loading
media/libmediaplayerservice/nuplayer/RTSPSource.cpp +26 −4 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ NuPlayer::RTSPSource::RTSPSource( mFlags(0), mState(DISCONNECTED), mFinalResult(OK), mDisconnectReplyID(0) { mDisconnectReplyID(0), mSeekGeneration(0) { if (headers) { mExtraHeaders = *headers; Loading Loading @@ -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() { Loading @@ -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); Loading
media/libmediaplayerservice/nuplayer/RTSPSource.h +5 −0 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ private: enum { kWhatNotify = 'noti', kWhatDisconnect = 'disc', kWhatPerformSeek = 'seek', }; enum State { Loading Loading @@ -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); }; Loading