Loading media/codec2/sfplugin/CCodec.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -2137,7 +2137,7 @@ void CCodec::signalResume() { } std::map<size_t, sp<MediaCodecBuffer>> clientInputBuffers; status_t err = mChannel->prepareInitialInputBuffers(&clientInputBuffers); status_t err = mChannel->prepareInitialInputBuffers(&clientInputBuffers, true); if (err != OK) { if (err == NO_MEMORY) { // NO_MEMORY happens here when all the buffers are still Loading @@ -2160,7 +2160,6 @@ void CCodec::signalResume() { const std::unique_ptr<Config> &config = *configLocked; return config->mBuffersBoundToCodec; }()); { Mutexed<State>::Locked state(mState); if (state->get() != RESUMING) { Loading media/codec2/sfplugin/CCodecBufferChannel.cpp +21 −10 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ #include <atomic> #include <list> #include <numeric> #include <thread> #include <chrono> #include <C2AllocatorGralloc.h> #include <C2PlatformSupport.h> Loading Loading @@ -1614,13 +1616,14 @@ status_t CCodecBufferChannel::start( } status_t CCodecBufferChannel::prepareInitialInputBuffers( std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers) { std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers, bool retry) { if (mInputSurface) { return OK; } size_t numInputSlots = mInput.lock()->numSlots; int retryCount = 1; for (; clientInputBuffers->empty() && retryCount >= 0; retryCount--) { { Mutexed<Input>::Locked input(mInput); while (clientInputBuffers->size() < numInputSlots) { Loading @@ -1632,6 +1635,14 @@ status_t CCodecBufferChannel::prepareInitialInputBuffers( clientInputBuffers->emplace(index, buffer); } } if (!retry || (retryCount <= 0)) { break; } if (clientInputBuffers->empty()) { // wait: buffer may be in transit from component. std::this_thread::sleep_for(std::chrono::milliseconds(4)); } } if (clientInputBuffers->empty()) { ALOGW("[%s] start: cannot allocate memory at all", mName); return NO_MEMORY; Loading media/codec2/sfplugin/CCodecBufferChannel.h +2 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,8 @@ public: * initial input buffers. */ status_t prepareInitialInputBuffers( std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers); std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers, bool retry = false); /** * Request initial input buffers as prepared in clientInputBuffers. Loading Loading
media/codec2/sfplugin/CCodec.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -2137,7 +2137,7 @@ void CCodec::signalResume() { } std::map<size_t, sp<MediaCodecBuffer>> clientInputBuffers; status_t err = mChannel->prepareInitialInputBuffers(&clientInputBuffers); status_t err = mChannel->prepareInitialInputBuffers(&clientInputBuffers, true); if (err != OK) { if (err == NO_MEMORY) { // NO_MEMORY happens here when all the buffers are still Loading @@ -2160,7 +2160,6 @@ void CCodec::signalResume() { const std::unique_ptr<Config> &config = *configLocked; return config->mBuffersBoundToCodec; }()); { Mutexed<State>::Locked state(mState); if (state->get() != RESUMING) { Loading
media/codec2/sfplugin/CCodecBufferChannel.cpp +21 −10 Original line number Diff line number Diff line Loading @@ -25,6 +25,8 @@ #include <atomic> #include <list> #include <numeric> #include <thread> #include <chrono> #include <C2AllocatorGralloc.h> #include <C2PlatformSupport.h> Loading Loading @@ -1614,13 +1616,14 @@ status_t CCodecBufferChannel::start( } status_t CCodecBufferChannel::prepareInitialInputBuffers( std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers) { std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers, bool retry) { if (mInputSurface) { return OK; } size_t numInputSlots = mInput.lock()->numSlots; int retryCount = 1; for (; clientInputBuffers->empty() && retryCount >= 0; retryCount--) { { Mutexed<Input>::Locked input(mInput); while (clientInputBuffers->size() < numInputSlots) { Loading @@ -1632,6 +1635,14 @@ status_t CCodecBufferChannel::prepareInitialInputBuffers( clientInputBuffers->emplace(index, buffer); } } if (!retry || (retryCount <= 0)) { break; } if (clientInputBuffers->empty()) { // wait: buffer may be in transit from component. std::this_thread::sleep_for(std::chrono::milliseconds(4)); } } if (clientInputBuffers->empty()) { ALOGW("[%s] start: cannot allocate memory at all", mName); return NO_MEMORY; Loading
media/codec2/sfplugin/CCodecBufferChannel.h +2 −1 Original line number Diff line number Diff line Loading @@ -140,7 +140,8 @@ public: * initial input buffers. */ status_t prepareInitialInputBuffers( std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers); std::map<size_t, sp<MediaCodecBuffer>> *clientInputBuffers, bool retry = false); /** * Request initial input buffers as prepared in clientInputBuffers. Loading