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

Commit 7a04aab8 authored by Manisha Jajoo's avatar Manisha Jajoo Committed by Sungtak Lee
Browse files

Codec2: Fix config-start order

Test: VtsHidlC2V1_0TargetVideoEncTest -I software -C c2.android.hevc.encoder -P /sdcard/res/
      VtsHidlC2V1_0TargetAudioEncTest -I software -C c2.android.aac.encoder -P /sdcard/res/
Bug: 80272610

Change-Id: I808cf1d65b14d22250a3d90a46e043efa30d4629
parent aa2e78da
Loading
Loading
Loading
Loading
+31 −11
Original line number Diff line number Diff line
@@ -272,7 +272,7 @@ void validateComponent(
}

// Set Default config param.
void setupConfigParam(
bool setupConfigParam(
    const std::shared_ptr<android::Codec2Client::Component>& component,
    int32_t* bitStreamInfo) {
    std::vector<std::unique_ptr<C2SettingResult>> failures;
@@ -282,8 +282,8 @@ void setupConfigParam(
    std::vector<C2Param*> configParam{&sampleRateInfo, &channelCountInfo};
    c2_status_t status =
        component->config(configParam, C2_DONT_BLOCK, &failures);
    ASSERT_EQ(failures.size(), 0u);
    ASSERT_EQ(status, C2_OK);
    if (status == C2_OK && failures.size() == 0u) return true;
    return false;
}

// In decoder components, often the input parameters get updated upon
@@ -557,7 +557,11 @@ TEST_P(Codec2AudioDecDecodeTest, DecodeTest) {
        ASSERT_NO_FATAL_FAILURE(
            getInputChannelInfo(mComponent, mCompName, bitStreamInfo));
    }
    setupConfigParam(mComponent, bitStreamInfo);
    if (!setupConfigParam(mComponent, bitStreamInfo)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);
    ALOGV("mURL : %s", mURL);
    eleStream.open(mURL, std::ifstream::binary);
    ASSERT_EQ(eleStream.is_open(), true);
@@ -613,7 +617,6 @@ TEST_F(Codec2AudioDecHidlTest, ThumbnailTest) {
    description("Test Request for thumbnail");
    if (mDisableTest) return;

    ASSERT_EQ(mComponent->start(), C2_OK);
    char mURL[512], info[512];
    std::ifstream eleStream, eleInfo;

@@ -642,7 +645,11 @@ TEST_F(Codec2AudioDecHidlTest, ThumbnailTest) {
        ASSERT_NO_FATAL_FAILURE(
            getInputChannelInfo(mComponent, mCompName, bitStreamInfo));
    }
    setupConfigParam(mComponent, bitStreamInfo);
    if (!setupConfigParam(mComponent, bitStreamInfo)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);
    ALOGV("mURL : %s", mURL);

    // request EOS for thumbnail
@@ -711,7 +718,6 @@ TEST_F(Codec2AudioDecHidlTest, FlushTest) {
    description("Tests Flush calls");
    if (mDisableTest) return;
    typedef std::unique_lock<std::mutex> ULock;
    ASSERT_EQ(mComponent->start(), C2_OK);
    char mURL[512], info[512];
    std::ifstream eleStream, eleInfo;

@@ -741,7 +747,11 @@ TEST_F(Codec2AudioDecHidlTest, FlushTest) {
        ASSERT_NO_FATAL_FAILURE(
            getInputChannelInfo(mComponent, mCompName, bitStreamInfo));
    }
    setupConfigParam(mComponent, bitStreamInfo);
    if (!setupConfigParam(mComponent, bitStreamInfo)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);
    ALOGV("mURL : %s", mURL);
    eleStream.open(mURL, std::ifstream::binary);
    ASSERT_EQ(eleStream.is_open(), true);
@@ -833,8 +843,6 @@ TEST_F(Codec2AudioDecHidlTest, DecodeTestEmptyBuffersInserted) {
    description("Decode with multiple empty input frames");
    if (mDisableTest) return;

    ASSERT_EQ(mComponent->start(), C2_OK);

    char mURL[512], info[512];
    std::ifstream eleStream, eleInfo;

@@ -868,7 +876,19 @@ TEST_F(Codec2AudioDecHidlTest, DecodeTestEmptyBuffersInserted) {
        frameId++;
    }
    eleInfo.close();

    int32_t bitStreamInfo[2] = {0};
    if (mCompName == raw) {
        bitStreamInfo[0] = 8000;
        bitStreamInfo[1] = 1;
    } else {
        ASSERT_NO_FATAL_FAILURE(
            getInputChannelInfo(mComponent, mCompName, bitStreamInfo));
    }
    if (!setupConfigParam(mComponent, bitStreamInfo)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);
    ALOGV("mURL : %s", mURL);
    eleStream.open(mURL, std::ifstream::binary);
    ASSERT_EQ(eleStream.is_open(), true);
+15 −7
Original line number Diff line number Diff line
@@ -219,7 +219,7 @@ void validateComponent(
}

// Set Default config param.
void setupConfigParam(
bool setupConfigParam(
    const std::shared_ptr<android::Codec2Client::Component>& component,
    int32_t nChannels, int32_t nSampleRate) {
    std::vector<std::unique_ptr<C2SettingResult>> failures;
@@ -229,8 +229,8 @@ void setupConfigParam(
    std::vector<C2Param*> configParam{&sampleRateInfo, &channelCountInfo};
    c2_status_t status =
        component->config(configParam, C2_DONT_BLOCK, &failures);
    ASSERT_EQ(failures.size(), 0u);
    ASSERT_EQ(status, C2_OK);
    if (status == C2_OK && failures.size() == 0u) return true;
    return false;
}

// LookUpTable of clips and metadata for component testing
@@ -358,7 +358,6 @@ TEST_F(Codec2AudioEncHidlTest, validateCompName) {
TEST_F(Codec2AudioEncHidlTest, EncodeTest) {
    ALOGV("EncodeTest");
    if (mDisableTest) return;
    ASSERT_EQ(mComponent->start(), C2_OK);
    char mURL[512];
    strcpy(mURL, gEnv->getRes().c_str());
    GetURLForComponent(mCompName, mURL);
@@ -396,7 +395,11 @@ TEST_F(Codec2AudioEncHidlTest, EncodeTest) {
        default:
            ASSERT_TRUE(false);
    }
    setupConfigParam(mComponent, nChannels, nSampleRate);
    if (!setupConfigParam(mComponent, nChannels, nSampleRate)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);
    std::ifstream eleStream;
    uint32_t numFrames = 128;
    eleStream.open(mURL, std::ifstream::binary);
@@ -469,7 +472,6 @@ TEST_F(Codec2AudioEncHidlTest, EOSTest) {
TEST_F(Codec2AudioEncHidlTest, FlushTest) {
    description("Test Request for flush");
    if (mDisableTest) return;
    ASSERT_EQ(mComponent->start(), C2_OK);

    typedef std::unique_lock<std::mutex> ULock;
    char mURL[512];
@@ -510,7 +512,13 @@ TEST_F(Codec2AudioEncHidlTest, FlushTest) {
        default:
            ASSERT_TRUE(false);
    }
    setupConfigParam(mComponent, nChannels, nSampleRate);

    if (!setupConfigParam(mComponent, nChannels, nSampleRate)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);

    std::ifstream eleStream;
    uint32_t numFramesFlushed = 30;
    uint32_t numFrames = 128;
+22 −14
Original line number Diff line number Diff line
@@ -118,7 +118,6 @@ class Codec2VideoEncHidlTest : public ::testing::VtsHalHidlTargetTestBase {
        }
        mEos = false;
        mCsd = false;
        mConfig = false;
        mFramesReceived = 0;
        mFailedWorkReceived = 0;
        if (mCompName == unknown_comp) mDisableTest = true;
@@ -134,7 +133,7 @@ class Codec2VideoEncHidlTest : public ::testing::VtsHalHidlTargetTestBase {
        Super::TearDown();
    }

    void setupConfigParam(int32_t nWidth, int32_t nHeight);
    bool setupConfigParam(int32_t nWidth, int32_t nHeight);

    // callback function to process onWorkDone received by Listener
    void handleWorkDone(std::list<std::unique_ptr<C2Work>>& workItems) {
@@ -228,14 +227,14 @@ void validateComponent(
}

// Set Default config param.
void Codec2VideoEncHidlTest::setupConfigParam(int32_t nWidth, int32_t nHeight) {
bool Codec2VideoEncHidlTest::setupConfigParam(int32_t nWidth, int32_t nHeight) {
    std::vector<std::unique_ptr<C2SettingResult>> failures;
    C2VideoSizeStreamTuning::input inputSize(0u, nWidth, nHeight);
    std::vector<C2Param*> configParam{&inputSize};
    c2_status_t status =
        mComponent->config(configParam, C2_DONT_BLOCK, &failures);
    if (failures.size() == 0u ) mConfig = true;
    ASSERT_EQ(status, C2_OK);
    if (status == C2_OK && failures.size() == 0u) return true;
    return false;
}

// LookUpTable of clips for component testing
@@ -360,8 +359,7 @@ TEST_F(Codec2VideoEncHidlTest, EncodeTest) {
    ASSERT_EQ(eleStream.is_open(), true) << mURL << " file not found";
    ALOGV("mURL : %s", mURL);

    setupConfigParam(nWidth, nHeight);
    if (!mConfig) {
    if (!setupConfigParam(nWidth, nHeight)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
@@ -439,7 +437,6 @@ TEST_F(Codec2VideoEncHidlTest, EOSTest) {
TEST_F(Codec2VideoEncHidlTest, FlushTest) {
    description("Test Request for flush");
    if (mDisableTest) return;
    ASSERT_EQ(mComponent->start(), C2_OK);

    typedef std::unique_lock<std::mutex> ULock;
    char mURL[512];
@@ -447,7 +444,12 @@ TEST_F(Codec2VideoEncHidlTest, FlushTest) {
    int32_t nHeight = ENC_DEFAULT_FRAME_HEIGHT;
    strcpy(mURL, gEnv->getRes().c_str());
    GetURLForComponent(mURL);
    setupConfigParam(nWidth, nHeight);

    if (!setupConfigParam(nWidth, nHeight)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);

    // Setting default configuration
    mFlushedIndices.clear();
@@ -522,12 +524,16 @@ TEST_F(Codec2VideoEncHidlTest, FlushTest) {
TEST_F(Codec2VideoEncHidlTest, InvalidBufferTest) {
    description("Tests feeding larger/smaller input buffer");
    if (mDisableTest) return;
    ASSERT_EQ(mComponent->start(), C2_OK);

    std::ifstream eleStream;
    int32_t nWidth = ENC_DEFAULT_FRAME_WIDTH / 2;
    int32_t nHeight = ENC_DEFAULT_FRAME_HEIGHT / 2;
    setupConfigParam(nWidth, nHeight);

    if (!setupConfigParam(nWidth, nHeight)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);

    ASSERT_NO_FATAL_FAILURE(
        encodeNFrames(mComponent, mQueueLock, mQueueCondition, mWorkQueue,
@@ -579,10 +585,12 @@ TEST_P(Codec2VideoEncResolutionTest, ResolutionTest) {
    int32_t nWidth = GetParam().first;
    int32_t nHeight = GetParam().second;
    ALOGD("Trying encode for width %d height %d", nWidth, nHeight);
    mConfig = false;
    mEos = false;
    setupConfigParam(nWidth, nHeight);
    if (!mConfig) return;

    if (!setupConfigParam(nWidth, nHeight)) {
        std::cout << "[   WARN   ] Test Skipped \n";
        return;
    }
    ASSERT_EQ(mComponent->start(), C2_OK);

    ASSERT_NO_FATAL_FAILURE(