Loading media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +28 −7 Original line number Diff line number Diff line Loading @@ -189,6 +189,8 @@ void NuPlayer::Decoder::releaseAndResetMediaBuffers() { for (size_t i = 0; i < mInputBufferIsDequeued.size(); i++) { mInputBufferIsDequeued.editItemAt(i) = false; } mPendingInputMessages.clear(); } void NuPlayer::Decoder::requestCodecNotification() { Loading Loading @@ -274,7 +276,19 @@ bool NuPlayer::Decoder::handleAnInputBuffer() { ALOGI("[%s] resubmitting CSD", mComponentName.c_str()); reply->setBuffer("buffer", buffer); mCSDsToSubmit.removeAt(0); reply->post(); CHECK(onInputBufferFilled(reply)); return true; } while (!mPendingInputMessages.empty()) { sp<AMessage> msg = *mPendingInputMessages.begin(); if (!onInputBufferFilled(msg)) { break; } mPendingInputMessages.erase(mPendingInputMessages.begin()); } if (!mInputBufferIsDequeued.editItemAt(bufferIx)) { return true; } Loading @@ -286,7 +300,7 @@ bool NuPlayer::Decoder::handleAnInputBuffer() { return true; } void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { bool android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { size_t bufferIx; CHECK(msg->findSize("buffer-ix", &bufferIx)); CHECK_LT(bufferIx, mInputBuffers.size()); Loading @@ -306,9 +320,12 @@ void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { const sp<ABuffer> &buf = mInputBuffers[ix]; if (buf->data() == mediaBuffer->data()) { // all input buffers are dequeued on start, hence the check CHECK(mInputBufferIsDequeued[ix]); if (!mInputBufferIsDequeued[ix]) { ALOGV("[%s] received MediaBuffer for #%zu instead of #%zu", mComponentName.c_str(), ix, bufferIx); mediaBuffer->release(); return false; } // TRICKY: need buffer for the metadata, so instead, set // codecBuffer to the same (though incorrect) buffer to Loading @@ -333,7 +350,7 @@ void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { if (streamErr == OK) { /* buffers are returned to hold on to */ return; return true; } // attempt to queue EOS Loading Loading @@ -398,6 +415,7 @@ void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { } } } return true; } bool NuPlayer::Decoder::handleAnOutputBuffer() { Loading Loading @@ -620,7 +638,10 @@ void NuPlayer::Decoder::onMessageReceived(const sp<AMessage> &msg) { case kWhatInputBufferFilled: { if (!isStaleReply(msg)) { onInputBufferFilled(msg); if (!mPendingInputMessages.empty() || !onInputBufferFilled(msg)) { mPendingInputMessages.push_back(msg); } } break; Loading media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h +3 −1 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ private: sp<ALooper> mCodecLooper; sp<ALooper> mDecoderLooper; List<sp<AMessage> > mPendingInputMessages; Vector<sp<ABuffer> > mInputBuffers; Vector<sp<ABuffer> > mOutputBuffers; Vector<sp<ABuffer> > mCSDsForCurrentFormat; Loading @@ -98,7 +100,7 @@ private: void onConfigure(const sp<AMessage> &format); void onFlush(); void onResume(); void onInputBufferFilled(const sp<AMessage> &msg); bool onInputBufferFilled(const sp<AMessage> &msg); void onRenderBuffer(const sp<AMessage> &msg); void onShutdown(); Loading Loading
media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp +28 −7 Original line number Diff line number Diff line Loading @@ -189,6 +189,8 @@ void NuPlayer::Decoder::releaseAndResetMediaBuffers() { for (size_t i = 0; i < mInputBufferIsDequeued.size(); i++) { mInputBufferIsDequeued.editItemAt(i) = false; } mPendingInputMessages.clear(); } void NuPlayer::Decoder::requestCodecNotification() { Loading Loading @@ -274,7 +276,19 @@ bool NuPlayer::Decoder::handleAnInputBuffer() { ALOGI("[%s] resubmitting CSD", mComponentName.c_str()); reply->setBuffer("buffer", buffer); mCSDsToSubmit.removeAt(0); reply->post(); CHECK(onInputBufferFilled(reply)); return true; } while (!mPendingInputMessages.empty()) { sp<AMessage> msg = *mPendingInputMessages.begin(); if (!onInputBufferFilled(msg)) { break; } mPendingInputMessages.erase(mPendingInputMessages.begin()); } if (!mInputBufferIsDequeued.editItemAt(bufferIx)) { return true; } Loading @@ -286,7 +300,7 @@ bool NuPlayer::Decoder::handleAnInputBuffer() { return true; } void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { bool android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { size_t bufferIx; CHECK(msg->findSize("buffer-ix", &bufferIx)); CHECK_LT(bufferIx, mInputBuffers.size()); Loading @@ -306,9 +320,12 @@ void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { const sp<ABuffer> &buf = mInputBuffers[ix]; if (buf->data() == mediaBuffer->data()) { // all input buffers are dequeued on start, hence the check CHECK(mInputBufferIsDequeued[ix]); if (!mInputBufferIsDequeued[ix]) { ALOGV("[%s] received MediaBuffer for #%zu instead of #%zu", mComponentName.c_str(), ix, bufferIx); mediaBuffer->release(); return false; } // TRICKY: need buffer for the metadata, so instead, set // codecBuffer to the same (though incorrect) buffer to Loading @@ -333,7 +350,7 @@ void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { if (streamErr == OK) { /* buffers are returned to hold on to */ return; return true; } // attempt to queue EOS Loading Loading @@ -398,6 +415,7 @@ void android::NuPlayer::Decoder::onInputBufferFilled(const sp<AMessage> &msg) { } } } return true; } bool NuPlayer::Decoder::handleAnOutputBuffer() { Loading Loading @@ -620,7 +638,10 @@ void NuPlayer::Decoder::onMessageReceived(const sp<AMessage> &msg) { case kWhatInputBufferFilled: { if (!isStaleReply(msg)) { onInputBufferFilled(msg); if (!mPendingInputMessages.empty() || !onInputBufferFilled(msg)) { mPendingInputMessages.push_back(msg); } } break; Loading
media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h +3 −1 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ private: sp<ALooper> mCodecLooper; sp<ALooper> mDecoderLooper; List<sp<AMessage> > mPendingInputMessages; Vector<sp<ABuffer> > mInputBuffers; Vector<sp<ABuffer> > mOutputBuffers; Vector<sp<ABuffer> > mCSDsForCurrentFormat; Loading @@ -98,7 +100,7 @@ private: void onConfigure(const sp<AMessage> &format); void onFlush(); void onResume(); void onInputBufferFilled(const sp<AMessage> &msg); bool onInputBufferFilled(const sp<AMessage> &msg); void onRenderBuffer(const sp<AMessage> &msg); void onShutdown(); Loading