Loading media/codec2/sfplugin/Codec2InfoBuilder.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -496,6 +496,23 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) { asString(err), asString(profileQuery[0].status)); if (err == C2_OK && profileQuery[0].status == C2_OK) { if (profileQuery[0].values.type == C2FieldSupportedValues::VALUES) { std::vector<std::shared_ptr<C2ParamDescriptor>> paramDescs; c2_status_t err1 = intf->querySupportedParams(¶mDescs); bool isHdr = false, isHdr10Plus = false; if (err1 == C2_OK) { for (const std::shared_ptr<C2ParamDescriptor> &desc : paramDescs) { if ((uint32_t)desc->index() == C2StreamHdr10PlusInfo::output::PARAM_TYPE) { isHdr10Plus = true; } else if ((uint32_t)desc->index() == C2StreamHdrStaticInfo::output::PARAM_TYPE) { isHdr = true; } } } // For VP9, the static info is always propagated by framework. isHdr |= (mediaType == MIMETYPE_VIDEO_VP9); for (C2Value::Primitive profile : profileQuery[0].values.values) { pl.profile = (C2Config::profile_t)profile.ref<uint32_t>(); std::vector<std::unique_ptr<C2SettingResult>> failures; Loading @@ -519,6 +536,26 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) { caps->addProfileLevel( (uint32_t)sdkProfile, (uint32_t)sdkLevel); gotProfileLevels = true; if (isHdr) { auto hdrMapper = C2Mapper::GetHdrProfileLevelMapper( trait.mediaType); if (hdrMapper && hdrMapper->mapProfile( pl.profile, &sdkProfile)) { caps->addProfileLevel( (uint32_t)sdkProfile, (uint32_t)sdkLevel); } if (isHdr10Plus) { hdrMapper = C2Mapper::GetHdrProfileLevelMapper( trait.mediaType, true /*isHdr10Plus*/); if (hdrMapper && hdrMapper->mapProfile( pl.profile, &sdkProfile)) { caps->addProfileLevel( (uint32_t)sdkProfile, (uint32_t)sdkLevel); } } } } else if (!mapper) { caps->addProfileLevel(pl.profile, pl.level); gotProfileLevels = true; Loading media/codec2/sfplugin/utils/Codec2Mapper.cpp +62 −4 Original line number Diff line number Diff line Loading @@ -253,6 +253,14 @@ ALookup<C2Config::profile_t, int32_t> sHevcProfiles = { { C2Config::PROFILE_HEVC_MAIN_10_INTRA, HEVCProfileMain10 }, }; ALookup<C2Config::profile_t, int32_t> sHevcHdrProfiles = { { C2Config::PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10 }, }; ALookup<C2Config::profile_t, int32_t> sHevcHdr10PlusProfiles = { { C2Config::PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10Plus }, }; ALookup<C2Config::level_t, int32_t> sMpeg2Levels = { { C2Config::LEVEL_MP2V_LOW, MPEG2LevelLL }, { C2Config::LEVEL_MP2V_MAIN, MPEG2LevelML }, Loading Loading @@ -324,6 +332,20 @@ ALookup<C2Config::profile_t, int32_t> sVp9Profiles = { { C2Config::PROFILE_VP9_1, VP9Profile1 }, { C2Config::PROFILE_VP9_2, VP9Profile2 }, { C2Config::PROFILE_VP9_3, VP9Profile3 }, { C2Config::PROFILE_VP9_2, VP9Profile2HDR }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR }, { C2Config::PROFILE_VP9_2, VP9Profile2HDR10Plus }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR10Plus }, }; ALookup<C2Config::profile_t, int32_t> sVp9HdrProfiles = { { C2Config::PROFILE_VP9_2, VP9Profile2HDR }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR }, }; ALookup<C2Config::profile_t, int32_t> sVp9Hdr10PlusProfiles = { { C2Config::PROFILE_VP9_2, VP9Profile2HDR10Plus }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR10Plus }, }; ALookup<C2Config::level_t, int32_t> sAv1Levels = { Loading Loading @@ -461,6 +483,10 @@ struct H263ProfileLevelMapper : ProfileLevelMapperHelper { }; struct HevcProfileLevelMapper : ProfileLevelMapperHelper { HevcProfileLevelMapper(bool isHdr = false, bool isHdr10Plus = false) : ProfileLevelMapperHelper(), mIsHdr(isHdr), mIsHdr10Plus(isHdr10Plus) {} virtual bool simpleMap(C2Config::level_t from, int32_t *to) { return sHevcLevels.map(from, to); } Loading @@ -468,11 +494,19 @@ struct HevcProfileLevelMapper : ProfileLevelMapperHelper { return sHevcLevels.map(from, to); } virtual bool simpleMap(C2Config::profile_t from, int32_t *to) { return sHevcProfiles.map(from, to); return mIsHdr10Plus ? sHevcHdr10PlusProfiles.map(from, to) : mIsHdr ? sHevcHdrProfiles.map(from, to) : sHevcProfiles.map(from, to); } virtual bool simpleMap(int32_t from, C2Config::profile_t *to) { return sHevcProfiles.map(from, to); return mIsHdr10Plus ? sHevcHdr10PlusProfiles.map(from, to) : mIsHdr ? sHevcHdrProfiles.map(from, to) : sHevcProfiles.map(from, to); } private: bool mIsHdr; bool mIsHdr10Plus; }; struct Mpeg2ProfileLevelMapper : ProfileLevelMapperHelper { Loading Loading @@ -527,6 +561,10 @@ struct Vp8ProfileLevelMapper : ProfileLevelMapperHelper { }; struct Vp9ProfileLevelMapper : ProfileLevelMapperHelper { Vp9ProfileLevelMapper(bool isHdr = false, bool isHdr10Plus = false) : ProfileLevelMapperHelper(), mIsHdr(isHdr), mIsHdr10Plus(isHdr10Plus) {} virtual bool simpleMap(C2Config::level_t from, int32_t *to) { return sVp9Levels.map(from, to); } Loading @@ -534,11 +572,19 @@ struct Vp9ProfileLevelMapper : ProfileLevelMapperHelper { return sVp9Levels.map(from, to); } virtual bool simpleMap(C2Config::profile_t from, int32_t *to) { return sVp9Profiles.map(from, to); return mIsHdr10Plus ? sVp9Hdr10PlusProfiles.map(from, to) : mIsHdr ? sVp9HdrProfiles.map(from, to) : sVp9Profiles.map(from, to); } virtual bool simpleMap(int32_t from, C2Config::profile_t *to) { return sVp9Profiles.map(from, to); return mIsHdr10Plus ? sVp9Hdr10PlusProfiles.map(from, to) : mIsHdr ? sVp9HdrProfiles.map(from, to) : sVp9Profiles.map(from, to); } private: bool mIsHdr; bool mIsHdr10Plus; }; } // namespace Loading Loading @@ -569,6 +615,18 @@ C2Mapper::GetProfileLevelMapper(std::string mediaType) { return nullptr; } // static std::shared_ptr<C2Mapper::ProfileLevelMapper> C2Mapper::GetHdrProfileLevelMapper(std::string mediaType, bool isHdr10Plus) { std::transform(mediaType.begin(), mediaType.begin(), mediaType.end(), ::tolower); if (mediaType == MIMETYPE_VIDEO_HEVC) { return std::make_shared<HevcProfileLevelMapper>(true, isHdr10Plus); } else if (mediaType == MIMETYPE_VIDEO_VP9) { return std::make_shared<Vp9ProfileLevelMapper>(true, isHdr10Plus); } return nullptr; } // static bool C2Mapper::map(C2Config::bitrate_mode_t from, int32_t *to) { return sBitrateModes.map(from, to); Loading media/codec2/sfplugin/utils/Codec2Mapper.h +3 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,9 @@ namespace android { static std::shared_ptr<ProfileLevelMapper> GetProfileLevelMapper(std::string mediaType); static std::shared_ptr<ProfileLevelMapper> GetHdrProfileLevelMapper(std::string mediaType, bool isHdr10Plus = false); // convert between bitrates static bool map(C2Config::bitrate_mode_t, int32_t*); static bool map(int32_t, C2Config::bitrate_mode_t*); Loading Loading
media/codec2/sfplugin/Codec2InfoBuilder.cpp +37 −0 Original line number Diff line number Diff line Loading @@ -496,6 +496,23 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) { asString(err), asString(profileQuery[0].status)); if (err == C2_OK && profileQuery[0].status == C2_OK) { if (profileQuery[0].values.type == C2FieldSupportedValues::VALUES) { std::vector<std::shared_ptr<C2ParamDescriptor>> paramDescs; c2_status_t err1 = intf->querySupportedParams(¶mDescs); bool isHdr = false, isHdr10Plus = false; if (err1 == C2_OK) { for (const std::shared_ptr<C2ParamDescriptor> &desc : paramDescs) { if ((uint32_t)desc->index() == C2StreamHdr10PlusInfo::output::PARAM_TYPE) { isHdr10Plus = true; } else if ((uint32_t)desc->index() == C2StreamHdrStaticInfo::output::PARAM_TYPE) { isHdr = true; } } } // For VP9, the static info is always propagated by framework. isHdr |= (mediaType == MIMETYPE_VIDEO_VP9); for (C2Value::Primitive profile : profileQuery[0].values.values) { pl.profile = (C2Config::profile_t)profile.ref<uint32_t>(); std::vector<std::unique_ptr<C2SettingResult>> failures; Loading @@ -519,6 +536,26 @@ status_t Codec2InfoBuilder::buildMediaCodecList(MediaCodecListWriter* writer) { caps->addProfileLevel( (uint32_t)sdkProfile, (uint32_t)sdkLevel); gotProfileLevels = true; if (isHdr) { auto hdrMapper = C2Mapper::GetHdrProfileLevelMapper( trait.mediaType); if (hdrMapper && hdrMapper->mapProfile( pl.profile, &sdkProfile)) { caps->addProfileLevel( (uint32_t)sdkProfile, (uint32_t)sdkLevel); } if (isHdr10Plus) { hdrMapper = C2Mapper::GetHdrProfileLevelMapper( trait.mediaType, true /*isHdr10Plus*/); if (hdrMapper && hdrMapper->mapProfile( pl.profile, &sdkProfile)) { caps->addProfileLevel( (uint32_t)sdkProfile, (uint32_t)sdkLevel); } } } } else if (!mapper) { caps->addProfileLevel(pl.profile, pl.level); gotProfileLevels = true; Loading
media/codec2/sfplugin/utils/Codec2Mapper.cpp +62 −4 Original line number Diff line number Diff line Loading @@ -253,6 +253,14 @@ ALookup<C2Config::profile_t, int32_t> sHevcProfiles = { { C2Config::PROFILE_HEVC_MAIN_10_INTRA, HEVCProfileMain10 }, }; ALookup<C2Config::profile_t, int32_t> sHevcHdrProfiles = { { C2Config::PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10 }, }; ALookup<C2Config::profile_t, int32_t> sHevcHdr10PlusProfiles = { { C2Config::PROFILE_HEVC_MAIN_10, HEVCProfileMain10HDR10Plus }, }; ALookup<C2Config::level_t, int32_t> sMpeg2Levels = { { C2Config::LEVEL_MP2V_LOW, MPEG2LevelLL }, { C2Config::LEVEL_MP2V_MAIN, MPEG2LevelML }, Loading Loading @@ -324,6 +332,20 @@ ALookup<C2Config::profile_t, int32_t> sVp9Profiles = { { C2Config::PROFILE_VP9_1, VP9Profile1 }, { C2Config::PROFILE_VP9_2, VP9Profile2 }, { C2Config::PROFILE_VP9_3, VP9Profile3 }, { C2Config::PROFILE_VP9_2, VP9Profile2HDR }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR }, { C2Config::PROFILE_VP9_2, VP9Profile2HDR10Plus }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR10Plus }, }; ALookup<C2Config::profile_t, int32_t> sVp9HdrProfiles = { { C2Config::PROFILE_VP9_2, VP9Profile2HDR }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR }, }; ALookup<C2Config::profile_t, int32_t> sVp9Hdr10PlusProfiles = { { C2Config::PROFILE_VP9_2, VP9Profile2HDR10Plus }, { C2Config::PROFILE_VP9_3, VP9Profile3HDR10Plus }, }; ALookup<C2Config::level_t, int32_t> sAv1Levels = { Loading Loading @@ -461,6 +483,10 @@ struct H263ProfileLevelMapper : ProfileLevelMapperHelper { }; struct HevcProfileLevelMapper : ProfileLevelMapperHelper { HevcProfileLevelMapper(bool isHdr = false, bool isHdr10Plus = false) : ProfileLevelMapperHelper(), mIsHdr(isHdr), mIsHdr10Plus(isHdr10Plus) {} virtual bool simpleMap(C2Config::level_t from, int32_t *to) { return sHevcLevels.map(from, to); } Loading @@ -468,11 +494,19 @@ struct HevcProfileLevelMapper : ProfileLevelMapperHelper { return sHevcLevels.map(from, to); } virtual bool simpleMap(C2Config::profile_t from, int32_t *to) { return sHevcProfiles.map(from, to); return mIsHdr10Plus ? sHevcHdr10PlusProfiles.map(from, to) : mIsHdr ? sHevcHdrProfiles.map(from, to) : sHevcProfiles.map(from, to); } virtual bool simpleMap(int32_t from, C2Config::profile_t *to) { return sHevcProfiles.map(from, to); return mIsHdr10Plus ? sHevcHdr10PlusProfiles.map(from, to) : mIsHdr ? sHevcHdrProfiles.map(from, to) : sHevcProfiles.map(from, to); } private: bool mIsHdr; bool mIsHdr10Plus; }; struct Mpeg2ProfileLevelMapper : ProfileLevelMapperHelper { Loading Loading @@ -527,6 +561,10 @@ struct Vp8ProfileLevelMapper : ProfileLevelMapperHelper { }; struct Vp9ProfileLevelMapper : ProfileLevelMapperHelper { Vp9ProfileLevelMapper(bool isHdr = false, bool isHdr10Plus = false) : ProfileLevelMapperHelper(), mIsHdr(isHdr), mIsHdr10Plus(isHdr10Plus) {} virtual bool simpleMap(C2Config::level_t from, int32_t *to) { return sVp9Levels.map(from, to); } Loading @@ -534,11 +572,19 @@ struct Vp9ProfileLevelMapper : ProfileLevelMapperHelper { return sVp9Levels.map(from, to); } virtual bool simpleMap(C2Config::profile_t from, int32_t *to) { return sVp9Profiles.map(from, to); return mIsHdr10Plus ? sVp9Hdr10PlusProfiles.map(from, to) : mIsHdr ? sVp9HdrProfiles.map(from, to) : sVp9Profiles.map(from, to); } virtual bool simpleMap(int32_t from, C2Config::profile_t *to) { return sVp9Profiles.map(from, to); return mIsHdr10Plus ? sVp9Hdr10PlusProfiles.map(from, to) : mIsHdr ? sVp9HdrProfiles.map(from, to) : sVp9Profiles.map(from, to); } private: bool mIsHdr; bool mIsHdr10Plus; }; } // namespace Loading Loading @@ -569,6 +615,18 @@ C2Mapper::GetProfileLevelMapper(std::string mediaType) { return nullptr; } // static std::shared_ptr<C2Mapper::ProfileLevelMapper> C2Mapper::GetHdrProfileLevelMapper(std::string mediaType, bool isHdr10Plus) { std::transform(mediaType.begin(), mediaType.begin(), mediaType.end(), ::tolower); if (mediaType == MIMETYPE_VIDEO_HEVC) { return std::make_shared<HevcProfileLevelMapper>(true, isHdr10Plus); } else if (mediaType == MIMETYPE_VIDEO_VP9) { return std::make_shared<Vp9ProfileLevelMapper>(true, isHdr10Plus); } return nullptr; } // static bool C2Mapper::map(C2Config::bitrate_mode_t from, int32_t *to) { return sBitrateModes.map(from, to); Loading
media/codec2/sfplugin/utils/Codec2Mapper.h +3 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,9 @@ namespace android { static std::shared_ptr<ProfileLevelMapper> GetProfileLevelMapper(std::string mediaType); static std::shared_ptr<ProfileLevelMapper> GetHdrProfileLevelMapper(std::string mediaType, bool isHdr10Plus = false); // convert between bitrates static bool map(C2Config::bitrate_mode_t, int32_t*); static bool map(int32_t, C2Config::bitrate_mode_t*); Loading