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

Commit 44b4130b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Codec2: Simplify ClientBlockHelper"

parents af67fa9c 586b1982
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ cc_library {
    defaults: ["hidl_defaults"],

    srcs: [
        "ClientBlockHelper.cpp",
        "OutputBufferQueue.cpp",
        "types.cpp",
    ],

+335 −0
Original line number Diff line number Diff line
@@ -15,11 +15,11 @@
 */

//#define LOG_NDEBUG 0
#define LOG_TAG "Codec2-block_helper"
#define LOG_TAG "Codec2-OutputBufferQueue"
#include <android-base/logging.h>

#include <android/hardware/graphics/bufferqueue/2.0/IGraphicBufferProducer.h>
#include <codec2/hidl/1.0/ClientBlockHelper.h>
#include <codec2/hidl/1.0/OutputBufferQueue.h>
#include <gui/bufferqueue/2.0/B2HGraphicBufferProducer.h>

#include <C2AllocatorGralloc.h>
@@ -145,23 +145,17 @@ bool getBufferQueueAssignment(const C2ConstGraphicBlock& block,
            _C2BlockFactory::GetGraphicBlockPoolData(block),
            generation, bqId, bqSlot);
}

} // unnamed namespace

class OutputBufferQueue::Impl {
    std::mutex mMutex;
    sp<IGraphicBufferProducer> mIgbp;
    uint32_t mGeneration;
    uint64_t mBqId;
    std::shared_ptr<int> mOwner;
    // To migrate existing buffers
    sp<GraphicBuffer> mBuffers[BufferQueueDefs::NUM_BUFFER_SLOTS]; // find a better way
    std::weak_ptr<_C2BlockPoolData>
                    mPoolDatas[BufferQueueDefs::NUM_BUFFER_SLOTS];
OutputBufferQueue::OutputBufferQueue()
      : mGeneration{0}, mBqId{0} {
}

public:
    Impl(): mGeneration(0), mBqId(0) {}
OutputBufferQueue::~OutputBufferQueue() {
}

    bool configure(const sp<IGraphicBufferProducer>& igbp,
bool OutputBufferQueue::configure(const sp<IGraphicBufferProducer>& igbp,
                                  uint32_t generation,
                                  uint64_t bqId) {
    size_t tryNum = 0;
@@ -215,7 +209,7 @@ public:
    return true;
}

    bool registerBuffer(const C2ConstGraphicBlock& block) {
bool OutputBufferQueue::registerBuffer(const C2ConstGraphicBlock& block) {
    std::shared_ptr<_C2BlockPoolData> data =
            _C2BlockFactory::GetGraphicBlockPoolData(block);
    if (!data) {
@@ -255,7 +249,7 @@ public:
    return false;
}

    status_t outputBuffer(
status_t OutputBufferQueue::outputBuffer(
        const C2ConstGraphicBlock& block,
        const BnGraphicBufferProducer::QueueBufferInput& input,
        BnGraphicBufferProducer::QueueBufferOutput* output) {
@@ -325,41 +319,11 @@ public:
    return OK;
}

    Impl *getPtr() {
        return this;
    }

    ~Impl() {}
};

OutputBufferQueue::OutputBufferQueue(): mImpl(new Impl()) {}

OutputBufferQueue::~OutputBufferQueue() {}

bool OutputBufferQueue::configure(const sp<IGraphicBufferProducer>& igbp,
                                  uint32_t generation,
                                  uint64_t bqId) {
    return mImpl && mImpl->configure(igbp, generation, bqId);
}

status_t OutputBufferQueue::outputBuffer(
    const C2ConstGraphicBlock& block,
    const BnGraphicBufferProducer::QueueBufferInput& input,
    BnGraphicBufferProducer::QueueBufferOutput* output) {
    if (mImpl) {
        return mImpl->outputBuffer(block, input, output);
    }
    return DEAD_OBJECT;
}

void OutputBufferQueue::holdBufferQueueBlocks(
        const std::list<std::unique_ptr<C2Work>>& workList) {
    if (!mImpl) {
        return;
    }
    forEachBlock(workList,
                 std::bind(&OutputBufferQueue::Impl::registerBuffer,
                           mImpl->getPtr(), std::placeholders::_1));
                 std::bind(&OutputBufferQueue::registerBuffer,
                           this, std::placeholders::_1));
}

}  // namespace utils
+15 −5
Original line number Diff line number Diff line
@@ -14,13 +14,15 @@
 * limitations under the License.
 */

#ifndef CLIENT_BLOCK_HELPER_H
#define CLIENT_BLOCK_HELPER_H
#ifndef CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE
#define CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE

#include <gui/IGraphicBufferProducer.h>
#include <codec2/hidl/1.0/types.h>
#include <C2Work.h>

struct C2_HIDE _C2BlockPoolData;

namespace android {
namespace hardware {
namespace media {
@@ -61,8 +63,16 @@ struct OutputBufferQueue {

private:

    class Impl;
    std::unique_ptr<Impl> mImpl;
    std::mutex mMutex;
    sp<IGraphicBufferProducer> mIgbp;
    uint32_t mGeneration;
    uint64_t mBqId;
    std::shared_ptr<int> mOwner;
    // To migrate existing buffers
    sp<GraphicBuffer> mBuffers[BufferQueueDefs::NUM_BUFFER_SLOTS]; // find a better way
    std::weak_ptr<_C2BlockPoolData> mPoolDatas[BufferQueueDefs::NUM_BUFFER_SLOTS];

    bool registerBuffer(const C2ConstGraphicBlock& block);
};

}  // namespace utils
@@ -72,4 +82,4 @@ private:
}  // namespace hardware
}  // namespace android

#endif  // CLIENT_BLOCK_HELPER_H
#endif  // CODEC2_HIDL_V1_0_UTILS_OUTPUT_BUFFER_QUEUE
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
#define CODEC2_HIDL_CLIENT_H

#include <gui/IGraphicBufferProducer.h>
#include <codec2/hidl/1.0/ClientBlockHelper.h>
#include <codec2/hidl/1.0/OutputBufferQueue.h>
#include <C2PlatformSupport.h>
#include <C2Component.h>
#include <C2Buffer.h>