Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84f5278a authored by Lajos Molnar's avatar Lajos Molnar
Browse files

avoid kWhatReadBuffer message spam in GenericSource

When playig WVM video, an extra readBuffer is posted for each
dequeueAccessUnit, resulting in an unbounded number of messages.

Bug: 17472979
Change-Id: Ice92ccf2454bf7a70856a4a8b535cefffc9e61ac
parent 7c12b035
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -54,7 +54,8 @@ NuPlayer::GenericSource::GenericSource(
      mDrmManagerClient(NULL),
      mMetaDataSize(-1ll),
      mBitrate(-1ll),
      mPollBufferingGeneration(0) {
      mPollBufferingGeneration(0),
      mPendingReadBufferTypes(0) {
    resetDataSource();
    DataSource::RegisterDefaultSniffers();
}
@@ -1148,15 +1149,27 @@ sp<ABuffer> NuPlayer::GenericSource::mediaBufferToABuffer(
}

void NuPlayer::GenericSource::postReadBuffer(media_track_type trackType) {
    Mutex::Autolock _l(mReadBufferLock);

    if ((mPendingReadBufferTypes & (1 << trackType)) == 0) {
        mPendingReadBufferTypes |= (1 << trackType);
        sp<AMessage> msg = new AMessage(kWhatReadBuffer, id());
        msg->setInt32("trackType", trackType);
        msg->post();
    }
}

void NuPlayer::GenericSource::onReadBuffer(sp<AMessage> msg) {
    int32_t tmpType;
    CHECK(msg->findInt32("trackType", &tmpType));
    media_track_type trackType = (media_track_type)tmpType;
    {
        // only protect the variable change, as readBuffer may
        // take considerable time.  This may result in one extra
        // read being processed, but that is benign.
        Mutex::Autolock _l(mReadBufferLock);
        mPendingReadBufferTypes &= ~(1 << trackType);
    }
    readBuffer(trackType);
}

+2 −0
Original line number Diff line number Diff line
@@ -131,6 +131,8 @@ private:
    off64_t mMetaDataSize;
    int64_t mBitrate;
    int32_t mPollBufferingGeneration;
    uint32_t mPendingReadBufferTypes;
    mutable Mutex mReadBufferLock;

    sp<ALooper> mLooper;