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

Commit f06b8761 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "codec2: fix HEVC HDR profile conversion"

parents 1d1a57eb bf999d71
Loading
Loading
Loading
Loading
+60 −0
Original line number Diff line number Diff line
@@ -224,6 +224,17 @@ public:
                                Copy<C2StreamBitrateInfo::output, C2StreamBitrateInfo::input>,
                                mInputBitrate)
                            .build());

                    addParameter(
                            DefineParam(mOutputProfileLevel, C2_PARAMKEY_PROFILE_LEVEL)
                            .withDefault(new C2StreamProfileLevelInfo::output(
                                    0u, PROFILE_UNUSED, LEVEL_UNUSED))
                            .withFields({
                                C2F(mOutputProfileLevel, profile).any(),
                                C2F(mOutputProfileLevel, level).any(),
                            })
                            .withSetter(Setter<C2StreamProfileLevelInfo::output>)
                            .build());
                }

                // TODO: more SDK params
@@ -241,6 +252,8 @@ public:
            std::shared_ptr<C2StreamPixelAspectRatioInfo::output> mPixelAspectRatio;
            std::shared_ptr<C2StreamBitrateInfo::input> mInputBitrate;
            std::shared_ptr<C2StreamBitrateInfo::output> mOutputBitrate;
            std::shared_ptr<C2StreamProfileLevelInfo::input> mInputProfileLevel;
            std::shared_ptr<C2StreamProfileLevelInfo::output> mOutputProfileLevel;

            template<typename T>
            static C2R Setter(bool, C2P<T> &) {
@@ -576,4 +589,51 @@ TEST_F(CCodecConfigTest, DataspaceUpdate) {
            << "mOutputFormat = " << mConfig.mOutputFormat->debugString().c_str();
}

typedef std::tuple<std::string, C2Config::profile_t, int32_t> HdrProfilesParams;

class HdrProfilesTest
    : public CCodecConfigTest,
      public ::testing::WithParamInterface<HdrProfilesParams> {
};

TEST_P(HdrProfilesTest, SetFromSdk) {
    HdrProfilesParams params = GetParam();
    std::string mediaType = std::get<0>(params);
    C2Config::profile_t c2Profile = std::get<1>(params);
    int32_t sdkProfile = std::get<2>(params);

    init(C2Component::DOMAIN_VIDEO, C2Component::KIND_ENCODER, mediaType.c_str());

    ASSERT_EQ(OK, mConfig.initialize(mReflector, mConfigurable));

    sp<AMessage> format{new AMessage};
    format->setInt32(KEY_PROFILE, sdkProfile);

    std::vector<std::unique_ptr<C2Param>> configUpdate;
    ASSERT_EQ(OK, mConfig.getConfigUpdateFromSdkParams(
            mConfigurable, format, D::ALL, C2_MAY_BLOCK, &configUpdate));

    ASSERT_EQ(1u, configUpdate.size());
    C2StreamProfileLevelInfo::input *pl =
        FindParam<std::remove_pointer<decltype(pl)>::type>(configUpdate);
    ASSERT_NE(nullptr, pl);
    ASSERT_EQ(c2Profile, pl->profile);
}

HdrProfilesParams kHdrProfilesParams[] = {
    std::make_tuple(MIMETYPE_VIDEO_HEVC, PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10),
    std::make_tuple(MIMETYPE_VIDEO_HEVC, PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10Plus),
    std::make_tuple(MIMETYPE_VIDEO_VP9,  PROFILE_VP9_2,        VP9Profile2HDR),
    std::make_tuple(MIMETYPE_VIDEO_VP9,  PROFILE_VP9_2,        VP9Profile2HDR10Plus),
    std::make_tuple(MIMETYPE_VIDEO_VP9,  PROFILE_VP9_3,        VP9Profile3HDR),
    std::make_tuple(MIMETYPE_VIDEO_VP9,  PROFILE_VP9_3,        VP9Profile3HDR10Plus),
    std::make_tuple(MIMETYPE_VIDEO_AV1,  PROFILE_AV1_0,        AV1ProfileMain10HDR10),
    std::make_tuple(MIMETYPE_VIDEO_AV1,  PROFILE_AV1_0,        AV1ProfileMain10HDR10Plus),
};

INSTANTIATE_TEST_SUITE_P(
        CCodecConfig,
        HdrProfilesTest,
        ::testing::ValuesIn(kHdrProfilesParams));

} // namespace android
+2 −0
Original line number Diff line number Diff line
@@ -255,6 +255,8 @@ ALookup<C2Config::profile_t, int32_t> sHevcProfiles = {
    { C2Config::PROFILE_HEVC_MAIN_STILL, HEVCProfileMainStill },
    { C2Config::PROFILE_HEVC_MAIN_INTRA, HEVCProfileMain },
    { C2Config::PROFILE_HEVC_MAIN_10_INTRA, HEVCProfileMain10 },
    { C2Config::PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10 },
    { C2Config::PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10Plus },
};

ALookup<C2Config::profile_t, int32_t> sHevcHdrProfiles = {