diff options
author | Andreas Huber <andih@google.com> | 2013-03-12 15:55:43 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2013-03-13 09:25:52 -0700 |
commit | e2aef54fee88fdeb585a41e1e9834e3d975b263c (patch) | |
tree | f9d6f0943b8c8baaf898db0c7fc263a767d5ac67 /media/libstagefright/wifi-display/ANetworkSession.cpp | |
parent | c93484ab9fdf044fd32f2388a3ce29040d2ba319 (diff) | |
download | frameworks_av-e2aef54fee88fdeb585a41e1e9834e3d975b263c.zip frameworks_av-e2aef54fee88fdeb585a41e1e9834e3d975b263c.tar.gz frameworks_av-e2aef54fee88fdeb585a41e1e9834e3d975b263c.tar.bz2 |
Attempt to recover from network stalls by dropping frames on the source side.
Change-Id: I5f9eb4f5acb624a9e5bc0087801fb5a4a9ade35c
Diffstat (limited to 'media/libstagefright/wifi-display/ANetworkSession.cpp')
-rw-r--r-- | media/libstagefright/wifi-display/ANetworkSession.cpp | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/media/libstagefright/wifi-display/ANetworkSession.cpp b/media/libstagefright/wifi-display/ANetworkSession.cpp index 465f4c4..23bb04e 100644 --- a/media/libstagefright/wifi-display/ANetworkSession.cpp +++ b/media/libstagefright/wifi-display/ANetworkSession.cpp @@ -104,6 +104,8 @@ private: AString mInBuffer; + int64_t mLastStallReportUs; + void notifyError(bool send, status_t err, const char *detail); void notify(NotificationReason reason); @@ -137,7 +139,8 @@ ANetworkSession::Session::Session( mSocket(s), mNotify(notify), mSawReceiveFailure(false), - mSawSendFailure(false) { + mSawSendFailure(false), + mLastStallReportUs(-1ll) { if (mState == CONNECTED) { struct sockaddr_in localAddr; socklen_t localAddrLen = sizeof(localAddr); @@ -508,11 +511,26 @@ status_t ANetworkSession::Session::writeMore() { mSawSendFailure = true; } -#if 0 +#if 1 int numBytesQueued; int res = ioctl(mSocket, SIOCOUTQ, &numBytesQueued); - if (res == 0 && numBytesQueued > 102400) { - ALOGI("numBytesQueued = %d", numBytesQueued); + if (res == 0 && numBytesQueued > 50 * 1024) { + if (numBytesQueued > 409600) { + ALOGW("!!! numBytesQueued = %d", numBytesQueued); + } + + int64_t nowUs = ALooper::GetNowUs(); + + if (mLastStallReportUs < 0ll + || nowUs > mLastStallReportUs + 500000ll) { + sp<AMessage> msg = mNotify->dup(); + msg->setInt32("sessionID", mSessionID); + msg->setInt32("reason", kWhatNetworkStall); + msg->setSize("numBytesQueued", numBytesQueued); + msg->post(); + + mLastStallReportUs = nowUs; + } } #endif |