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

Commit b1063680 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "prepareInitialInputBuffer : retry buffers" into udc-qpr-dev am: 91bae53b

parents 6e1f6b6a 91bae53b
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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
@@ -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) {
+21 −10
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@
#include <atomic>
#include <list>
#include <numeric>
#include <thread>
#include <chrono>

#include <C2AllocatorGralloc.h>
#include <C2PlatformSupport.h>
@@ -1615,13 +1617,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) {
@@ -1633,6 +1636,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;
+2 −1
Original line number Diff line number Diff line
@@ -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.