diff options
-rw-r--r-- | media/libstagefright/wifi-display/sink/WifiDisplaySink.cpp | 21 | ||||
-rw-r--r-- | media/libstagefright/wifi-display/sink/WifiDisplaySink.h | 4 |
2 files changed, 20 insertions, 5 deletions
diff --git a/media/libstagefright/wifi-display/sink/WifiDisplaySink.cpp b/media/libstagefright/wifi-display/sink/WifiDisplaySink.cpp index 1a08bf5..5db2099 100644 --- a/media/libstagefright/wifi-display/sink/WifiDisplaySink.cpp +++ b/media/libstagefright/wifi-display/sink/WifiDisplaySink.cpp @@ -57,7 +57,8 @@ WifiDisplaySink::WifiDisplaySink( mSetupDeferred(false), mLatencyCount(0), mLatencySumUs(0ll), - mLatencyMaxUs(0ll) { + mLatencyMaxUs(0ll), + mMaxDelayMs(-1ll) { // We support any and all resolutions, but prefer 720p30 mSinkSupportedVideoFormats.setNativeResolution( VideoFormats::RESOLUTION_CEA, 5); // 1280 x 720 p30 @@ -296,9 +297,13 @@ void WifiDisplaySink::onMessageReceived(const sp<AMessage> &msg) { } } -static void dumpDelay(size_t trackIndex, int64_t timeUs) { +void WifiDisplaySink::dumpDelay(size_t trackIndex, int64_t timeUs) { int64_t delayMs = (ALooper::GetNowUs() - timeUs) / 1000ll; + if (delayMs > mMaxDelayMs) { + mMaxDelayMs = delayMs; + } + static const int64_t kMinDelayMs = 0; static const int64_t kMaxDelayMs = 300; @@ -314,9 +319,10 @@ static void dumpDelay(size_t trackIndex, int64_t timeUs) { n = kPatternSize; } - ALOGI("[%lld]: (%4lld ms) %s", + ALOGI("[%lld]: (%4lld ms / %4lld ms) %s", timeUs / 1000, delayMs, + mMaxDelayMs, kPattern + kPatternSize - n); } @@ -350,14 +356,19 @@ void WifiDisplaySink::onMediaReceiverNotify(const sp<AMessage> &msg) { looper()->registerHandler(mRenderer); } - CHECK(mTimeOffsetValid); - sp<ABuffer> accessUnit; CHECK(msg->findBuffer("accessUnit", &accessUnit)); int64_t timeUs; CHECK(accessUnit->meta()->findInt64("timeUs", &timeUs)); + if (!mTimeOffsetValid && !(mFlags & FLAG_SPECIAL_MODE)) { + mTimeOffsetUs = timeUs - ALooper::GetNowUs(); + mTimeOffsetValid = true; + } + + CHECK(mTimeOffsetValid); + // We are the timesync _client_, // client time = server time - time offset. timeUs -= mTimeOffsetUs; diff --git a/media/libstagefright/wifi-display/sink/WifiDisplaySink.h b/media/libstagefright/wifi-display/sink/WifiDisplaySink.h index 7c62057..adb9d89 100644 --- a/media/libstagefright/wifi-display/sink/WifiDisplaySink.h +++ b/media/libstagefright/wifi-display/sink/WifiDisplaySink.h @@ -132,6 +132,8 @@ private: int64_t mLatencySumUs; int64_t mLatencyMaxUs; + int64_t mMaxDelayMs; + status_t sendM2(int32_t sessionID); status_t sendSetup(int32_t sessionID, const char *uri); status_t sendPlay(int32_t sessionID, const char *uri); @@ -184,6 +186,8 @@ private: const char *url, AString *host, int32_t *port, AString *path, AString *user, AString *pass); + void dumpDelay(size_t trackIndex, int64_t timeUs); + DISALLOW_EVIL_CONSTRUCTORS(WifiDisplaySink); }; |