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

Commit c63f8b85 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6961433 from 071fce57 to rvc-qpr2-release

Change-Id: I0b2d52c456e0c75eead0bff2afb4df1648426d7c
parents ec288636 071fce57
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -618,25 +618,26 @@ void CCodecBufferChannel::feedInputBufferIfAvailable() {
}

void CCodecBufferChannel::feedInputBufferIfAvailableInternal() {
    if (mInputMetEos || mPipelineWatcher.lock()->pipelineFull()) {
    if (mInputMetEos) {
        return;
    }
    {
        Mutexed<Output>::Locked output(mOutput);
        if (!output->buffers ||
                output->buffers->hasPending() ||
                output->buffers->numClientBuffers() >= output->numSlots) {
                output->buffers->numActiveSlots() >= output->numSlots) {
            return;
        }
    }
    size_t numInputSlots = mInput.lock()->numSlots;
    for (size_t i = 0; i < numInputSlots; ++i) {
    size_t numActiveSlots = 0;
    while (!mPipelineWatcher.lock()->pipelineFull()) {
        sp<MediaCodecBuffer> inBuffer;
        size_t index;
        {
            Mutexed<Input>::Locked input(mInput);
            if (input->buffers->numClientBuffers() >= input->numSlots) {
                return;
            numActiveSlots = input->buffers->numActiveSlots();
            if (numActiveSlots >= input->numSlots) {
                break;
            }
            if (!input->buffers->requestNewBuffer(&index, &inBuffer)) {
                ALOGV("[%s] no new buffer available", mName);
@@ -646,6 +647,7 @@ void CCodecBufferChannel::feedInputBufferIfAvailableInternal() {
        ALOGV("[%s] new input index = %zu [%p]", mName, index, inBuffer.get());
        mCallback->onInputBufferAvailable(index, inBuffer);
    }
    ALOGV("[%s] # active slots after feedInputBufferIfAvailable = %zu", mName, numActiveSlots);
}

status_t CCodecBufferChannel::renderOutputBuffer(
+19 −18
Original line number Diff line number Diff line
@@ -493,11 +493,12 @@ void FlexBuffersImpl::flush() {
    mBuffers.clear();
}

size_t FlexBuffersImpl::numClientBuffers() const {
size_t FlexBuffersImpl::numActiveSlots() const {
    return std::count_if(
            mBuffers.begin(), mBuffers.end(),
            [](const Entry &entry) {
                return (entry.clientBuffer != nullptr);
                return (entry.clientBuffer != nullptr
                        || !entry.compBuffer.expired());
            });
}

@@ -643,11 +644,11 @@ void BuffersArrayImpl::grow(
    }
}

size_t BuffersArrayImpl::numClientBuffers() const {
size_t BuffersArrayImpl::numActiveSlots() const {
    return std::count_if(
            mBuffers.begin(), mBuffers.end(),
            [](const Entry &entry) {
                return entry.ownedByClient;
                return entry.ownedByClient || !entry.compBuffer.expired();
            });
}

@@ -697,8 +698,8 @@ void InputBuffersArray::flush() {
    mImpl.flush();
}

size_t InputBuffersArray::numClientBuffers() const {
    return mImpl.numClientBuffers();
size_t InputBuffersArray::numActiveSlots() const {
    return mImpl.numActiveSlots();
}

sp<Codec2Buffer> InputBuffersArray::createNewBuffer() {
@@ -735,8 +736,8 @@ std::unique_ptr<InputBuffers> SlotInputBuffers::toArrayMode(size_t) {
    return nullptr;
}

size_t SlotInputBuffers::numClientBuffers() const {
    return mImpl.numClientBuffers();
size_t SlotInputBuffers::numActiveSlots() const {
    return mImpl.numActiveSlots();
}

sp<Codec2Buffer> SlotInputBuffers::createNewBuffer() {
@@ -787,8 +788,8 @@ std::unique_ptr<InputBuffers> LinearInputBuffers::toArrayMode(size_t size) {
    return std::move(array);
}

size_t LinearInputBuffers::numClientBuffers() const {
    return mImpl.numClientBuffers();
size_t LinearInputBuffers::numActiveSlots() const {
    return mImpl.numActiveSlots();
}

// static
@@ -964,8 +965,8 @@ std::unique_ptr<InputBuffers> GraphicMetadataInputBuffers::toArrayMode(
    return std::move(array);
}

size_t GraphicMetadataInputBuffers::numClientBuffers() const {
    return mImpl.numClientBuffers();
size_t GraphicMetadataInputBuffers::numActiveSlots() const {
    return mImpl.numActiveSlots();
}

sp<Codec2Buffer> GraphicMetadataInputBuffers::createNewBuffer() {
@@ -1029,8 +1030,8 @@ std::unique_ptr<InputBuffers> GraphicInputBuffers::toArrayMode(size_t size) {
    return std::move(array);
}

size_t GraphicInputBuffers::numClientBuffers() const {
    return mImpl.numClientBuffers();
size_t GraphicInputBuffers::numActiveSlots() const {
    return mImpl.numActiveSlots();
}

sp<Codec2Buffer> GraphicInputBuffers::createNewBuffer() {
@@ -1119,8 +1120,8 @@ void OutputBuffersArray::getArray(Vector<sp<MediaCodecBuffer>> *array) const {
    mImpl.getArray(array);
}

size_t OutputBuffersArray::numClientBuffers() const {
    return mImpl.numClientBuffers();
size_t OutputBuffersArray::numActiveSlots() const {
    return mImpl.numActiveSlots();
}

void OutputBuffersArray::realloc(const std::shared_ptr<C2Buffer> &c2buffer) {
@@ -1230,8 +1231,8 @@ std::unique_ptr<OutputBuffersArray> FlexOutputBuffers::toArrayMode(size_t size)
    return array;
}

size_t FlexOutputBuffers::numClientBuffers() const {
    return mImpl.numClientBuffers();
size_t FlexOutputBuffers::numActiveSlots() const {
    return mImpl.numActiveSlots();
}

// LinearOutputBuffers
+11 −11
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ public:
    /**
     * Return number of buffers the client owns.
     */
    virtual size_t numClientBuffers() const = 0;
    virtual size_t numActiveSlots() const = 0;

    /**
     * Examine image data from the buffer and update the format if necessary.
@@ -584,7 +584,7 @@ public:
     * Return the number of buffers that are sent to the client but not released
     * yet.
     */
    size_t numClientBuffers() const;
    size_t numActiveSlots() const;

    /**
     * Return the number of buffers that are sent to the component but not
@@ -705,7 +705,7 @@ public:
     * Return the number of buffers that are sent to the client but not released
     * yet.
     */
    size_t numClientBuffers() const;
    size_t numActiveSlots() const;

    /**
     * Return the size of the array.
@@ -765,7 +765,7 @@ public:

    void flush() override;

    size_t numClientBuffers() const final;
    size_t numActiveSlots() const final;

protected:
    sp<Codec2Buffer> createNewBuffer() override;
@@ -796,7 +796,7 @@ public:

    std::unique_ptr<InputBuffers> toArrayMode(size_t size) final;

    size_t numClientBuffers() const final;
    size_t numActiveSlots() const final;

protected:
    sp<Codec2Buffer> createNewBuffer() final;
@@ -826,7 +826,7 @@ public:

    std::unique_ptr<InputBuffers> toArrayMode(size_t size) override;

    size_t numClientBuffers() const final;
    size_t numActiveSlots() const final;

protected:
    sp<Codec2Buffer> createNewBuffer() override;
@@ -894,7 +894,7 @@ public:

    std::unique_ptr<InputBuffers> toArrayMode(size_t size) final;

    size_t numClientBuffers() const final;
    size_t numActiveSlots() const final;

protected:
    sp<Codec2Buffer> createNewBuffer() override;
@@ -924,7 +924,7 @@ public:
    std::unique_ptr<InputBuffers> toArrayMode(
            size_t size) final;

    size_t numClientBuffers() const final;
    size_t numActiveSlots() const final;

protected:
    sp<Codec2Buffer> createNewBuffer() override;
@@ -965,7 +965,7 @@ public:
        array->clear();
    }

    size_t numClientBuffers() const final {
    size_t numActiveSlots() const final {
        return 0u;
    }

@@ -1019,7 +1019,7 @@ public:

    void getArray(Vector<sp<MediaCodecBuffer>> *array) const final;

    size_t numClientBuffers() const final;
    size_t numActiveSlots() const final;

    /**
     * Reallocate the array, filled with buffers with the same size as given
@@ -1073,7 +1073,7 @@ public:

    std::unique_ptr<OutputBuffersArray> toArrayMode(size_t size) override;

    size_t numClientBuffers() const final;
    size_t numActiveSlots() const final;

    /**
     * Return an appropriate Codec2Buffer object for the type of buffers.
+7 −0
Original line number Diff line number Diff line
@@ -102,4 +102,11 @@ interface IResourceManagerService {
     * @param clientId clientId within the pid that will be removed.
     */
    void markClientForPendingRemoval(int pid, long clientId);

    /**
     * Reclaim resources from clients pending removal, if any.
     *
     * @param pid pid from which resources will be reclaimed.
     */
    void reclaimResourcesFromClientsPendingRemoval(int pid);
}
+3 −0
Original line number Diff line number Diff line
@@ -241,6 +241,9 @@ void MediaCodec::ResourceManagerServiceProxy::init() {
    }

    AIBinder_linkToDeath(mService->asBinder().get(), mDeathRecipient.get(), this);

    // Kill clients pending removal.
    mService->reclaimResourcesFromClientsPendingRemoval(mPid);
}

//static
Loading