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

Commit 325445a5 authored by Sungtak Lee's avatar Sungtak Lee
Browse files

media.c2 VTS: modify video tests for AIDL

Bug: 254050314
Test: atest VtsHalMediaC2V1_0TargetVideoDecTest
Test: atest VtsHalMediaC2V1_0TargetVideoEncTest
Change-Id: I95d21ee15ed59a80f6c376c084736012d4b18dad
parent 574bbe46
Loading
Loading
Loading
Loading
+22 −6
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@
#include <C2BufferPriv.h>
#include <C2Config.h>
#include <C2Debug.h>
#include <codec2/common/HalSelection.h>
#include <codec2/hidl/client.h>
#include <gui/BufferQueue.h>
#include <gui/IConsumerListener.h>
@@ -407,30 +408,45 @@ void setOutputSurface(const std::shared_ptr<android::Codec2Client::Component>& c
                      surfaceMode_t surfMode) {
    using namespace android;
    sp<IGraphicBufferProducer> producer = nullptr;
    sp<IGraphicBufferConsumer> consumer = nullptr;
    sp<GLConsumer> texture = nullptr;
    sp<ANativeWindow> surface = nullptr;
    static std::atomic_uint32_t surfaceGeneration{0};
    uint32_t generation =
            (getpid() << 10) |
            ((surfaceGeneration.fetch_add(1, std::memory_order_relaxed) + 1) & ((1 << 10) - 1));
    int32_t maxDequeueBuffers = kSmoothnessFactor + kRenderingDepth;
    C2BlockPool::local_id_t poolId = C2BlockPool::BASIC_GRAPHIC;
    std::shared_ptr<Codec2Client::Configurable> configurable;
    bool aidl = ::android::IsCodec2AidlHalSelected();
    if (aidl) {
        // AIDL does not support blockpool-less mode.
        c2_status_t poolRet = component->createBlockPool(
                C2PlatformAllocatorStore::IGBA, &poolId, &configurable);
        ASSERT_EQ(poolRet, C2_OK) << "setOutputSurface failed";
    }

    if (surfMode == SURFACE) {
        sp<IGraphicBufferConsumer> consumer = nullptr;
        BufferQueue::createBufferQueue(&producer, &consumer);
        ASSERT_NE(producer, nullptr) << "createBufferQueue returned invalid producer";
        ASSERT_NE(consumer, nullptr) << "createBufferQueue returned invalid consumer";

        sp<GLConsumer> texture =
        texture =
                new GLConsumer(consumer, 0 /* tex */, GLConsumer::TEXTURE_EXTERNAL,
                               true /* useFenceSync */, false /* isControlledByApp */);

        sp<ANativeWindow> gSurface = new Surface(producer);
        ASSERT_NE(gSurface, nullptr) << "getSurface failed";
        surface = new Surface(producer);
        ASSERT_NE(surface, nullptr) << "failed to create Surface object";

        producer->setGenerationNumber(generation);
    }

    c2_status_t err = component->setOutputSurface(C2BlockPool::BASIC_GRAPHIC, producer, generation,
    c2_status_t err = component->setOutputSurface(poolId, producer, generation,
                                                  maxDequeueBuffers);
    ASSERT_EQ(err, C2_OK) << "setOutputSurface failed";
    std::string surfStr = surfMode == NO_SURFACE ? "NO_SURFACE" :
            (surfMode == NULL_SURFACE ? "NULL_SURFACE" : "WITH_SURFACE");

    ASSERT_EQ(err, C2_OK) << "setOutputSurface failed, surfMode: " << surfStr;
}

void decodeNFrames(const std::shared_ptr<android::Codec2Client::Component>& component,
+4 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include <android-base/logging.h>
#include <android/binder_process.h>
#include <codec2/common/HalSelection.h>
#include <gtest/gtest.h>
#include <hidl/GtestPrinter.h>
#include <stdio.h>
@@ -71,7 +72,9 @@ class Codec2VideoEncHidlTestBase : public ::testing::Test {
        std::shared_ptr<C2AllocatorStore> store = android::GetCodec2PlatformAllocatorStore();
        CHECK_EQ(store->fetchAllocator(C2AllocatorStore::DEFAULT_GRAPHIC, &mGraphicAllocator),
                 C2_OK);
        mGraphicPool = std::make_shared<C2PooledBlockPool>(mGraphicAllocator, mBlockPoolId++);
        C2PooledBlockPool::BufferPoolVer ver = ::android::IsCodec2AidlHalSelected() ?
                C2PooledBlockPool::VER_AIDL2 : C2PooledBlockPool::VER_HIDL;
        mGraphicPool = std::make_shared<C2PooledBlockPool>(mGraphicAllocator, mBlockPoolId++, ver);
        ASSERT_NE(mGraphicPool, nullptr);

        std::vector<std::unique_ptr<C2Param>> queried;