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

Commit 9694a996 authored by Praveen Chavan's avatar Praveen Chavan Committed by Pawin Vongmasa
Browse files

codec2: vts-video: align input buffer size for decoders

Hardware decoders expect minimum PAGE_SIZE alignment.

Test:
   VtsHalMediaC2V1_0TargetVideoDecTest -C c2.qti.hevc.decoder -P /sdcard/res/ -I default

Bug: 135427312

Change-Id: I14ee2f93d644450679500d507e775ad16afead6d
parent ff52d12a
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -46,6 +46,10 @@ class LinearBuffer : public C2Buffer {
    explicit LinearBuffer(const std::shared_ptr<C2LinearBlock>& block)
        : C2Buffer(
              {block->share(block->offset(), block->size(), ::C2Fence())}) {}

    explicit LinearBuffer(const std::shared_ptr<C2LinearBlock>& block, size_t size)
        : C2Buffer(
              {block->share(block->offset(), size, ::C2Fence())}) {}
};

static ComponentTestEnvironment* gEnv = nullptr;
@@ -371,11 +375,12 @@ void decodeNFrames(const std::shared_ptr<android::Codec2Client::Component>& comp
        ASSERT_EQ(eleStream.gcount(), size);

        work->input.buffers.clear();
        auto alignedSize = ALIGN(size, PAGE_SIZE);
        if (size) {
            std::shared_ptr<C2LinearBlock> block;
            ASSERT_EQ(C2_OK,
                    linearPool->fetchLinearBlock(
                        size, {C2MemoryUsage::CPU_READ, C2MemoryUsage::CPU_WRITE},
                        alignedSize, {C2MemoryUsage::CPU_READ, C2MemoryUsage::CPU_WRITE},
                        &block));
            ASSERT_TRUE(block);

@@ -385,13 +390,13 @@ void decodeNFrames(const std::shared_ptr<android::Codec2Client::Component>& comp
                fprintf(stderr, "C2LinearBlock::map() failed : %d", view.error());
                break;
            }
            ASSERT_EQ((size_t)size, view.capacity());
            ASSERT_EQ((size_t)alignedSize, view.capacity());
            ASSERT_EQ(0u, view.offset());
            ASSERT_EQ((size_t)size, view.size());
            ASSERT_EQ((size_t)alignedSize, view.size());

            memcpy(view.base(), data, size);

            work->input.buffers.emplace_back(new LinearBuffer(block));
            work->input.buffers.emplace_back(new LinearBuffer(block, size));
            free(data);
        }
        work->worklets.clear();
+2 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@
#define ENC_DEFAULT_FRAME_HEIGHT 288
#define MAX_ITERATIONS 128

#define ALIGN(_sz, _align) ((_sz + (_align - 1)) & ~(_align - 1))

/*
 * Common video utils
 */