diff --git a/frameworks/native/avcodeclist/avcodec_info.cpp b/frameworks/native/avcodeclist/avcodec_info.cpp index c7a762c2e0cc16c02ae4fde482f8326728dda1fe..ada883341bb971b6c1007bd1691ad98abe3ddddd 100644 --- a/frameworks/native/avcodeclist/avcodec_info.cpp +++ b/frameworks/native/avcodeclist/avcodec_info.cpp @@ -703,5 +703,12 @@ int32_t AVCodecInfo::GetFeatureProperties(AVCapabilityFeature feature, Format &f format = itr->second; return AVCS_ERR_OK; } + +int32_t AVCodecInfo::GetMaxSupportedVersion() +{ + CHECK_AND_RETURN_RET_LOG(data_ != nullptr, AVCS_ERR_INVALID_VAL, "data is null"); + return data_->maxVersion; +} + } // namespace MediaAVCodec } // namespace OHOS \ No newline at end of file diff --git a/frameworks/native/avcodeclist/avcodeclist_impl.cpp b/frameworks/native/avcodeclist/avcodeclist_impl.cpp index eb7dd7d745b2f26dd506b39de089b2ab35f64fd3..525d1fb93fbebbb839c558c13ce7c99ba72f1550 100644 --- a/frameworks/native/avcodeclist/avcodeclist_impl.cpp +++ b/frameworks/native/avcodeclist/avcodeclist_impl.cpp @@ -46,6 +46,7 @@ const std::vector AUDIO_MIME_VEC = { std::string(OHOS::MediaAVCodec::CodecMimeType::AUDIO_AVS3DA), std::string(OHOS::MediaAVCodec::CodecMimeType::AUDIO_LBVC), std::string(OHOS::MediaAVCodec::CodecMimeType::AUDIO_APE), + std::string(OHOS::MediaAVCodec::CodecMimeType::AUDIO_MIMETYPE_L2HC), std::string(OHOS::MediaAVCodec::CodecMimeType::AUDIO_VIVID)}; } namespace OHOS { diff --git a/interfaces/inner_api/native/avcodec_codec_name.h b/interfaces/inner_api/native/avcodec_codec_name.h index addc1102b8bcb5697b615076703ff23430d2e68b..d6a1d8c2152ed64cc98a903be3e85f39359b45e7 100644 --- a/interfaces/inner_api/native/avcodec_codec_name.h +++ b/interfaces/inner_api/native/avcodec_codec_name.h @@ -32,6 +32,7 @@ public: static constexpr std::string_view AUDIO_DECODER_VIVID_NAME = "OH.Media.Codec.Decoder.Audio.Vivid"; static constexpr std::string_view AUDIO_DECODER_G711MU_NAME = "OH.Media.Codec.Decoder.Audio.G711mu"; static constexpr std::string_view AUDIO_DECODER_APE_NAME = "OH.Media.Codec.Decoder.Audio.Ape"; + static constexpr std::string_view AUDIO_DECODER_L2HC_NAME = "OH.Media.Codec.Decoder.Audio.L2HC"; static constexpr std::string_view AUDIO_DECODER_LBVC_NAME = "OH.Media.Codec.Decoder.Audio.LBVC"; static constexpr std::string_view AUDIO_DECODER_COOK_NAME = "OH.Media.Codec.Decoder.Audio.COOK"; static constexpr std::string_view AUDIO_DECODER_AC3_NAME = "OH.Media.Codec.Decoder.Audio.AC3"; @@ -42,6 +43,7 @@ public: static constexpr std::string_view AUDIO_ENCODER_G711MU_NAME = "OH.Media.Codec.Encoder.Audio.G711mu"; static constexpr std::string_view AUDIO_ENCODER_AAC_NAME = "OH.Media.Codec.Encoder.Audio.AAC"; static constexpr std::string_view AUDIO_ENCODER_VENDOR_AAC_NAME = "OH.Media.Codec.Encoder.Audio.Vendor.AAC"; + static constexpr std::string_view AUDIO_ENCODER_L2HC_NAME = "OH.Media.Codec.Encoder.Audio.L2HC"; static constexpr std::string_view AUDIO_ENCODER_LBVC_NAME = "OH.Media.Codec.Encoder.Audio.LBVC"; static constexpr std::string_view AUDIO_ENCODER_AMRNB_NAME = "OH.Media.Codec.Encoder.Audio.Amrnb"; static constexpr std::string_view AUDIO_ENCODER_AMRWB_NAME = "OH.Media.Codec.Encoder.Audio.Amrwb"; diff --git a/interfaces/inner_api/native/avcodec_info.h b/interfaces/inner_api/native/avcodec_info.h index 2f180130ad462cba74e4fc336d58fadbc3800346..2cfb9e515f1bb7d1a9cca7a27dc716b4e4391243 100644 --- a/interfaces/inner_api/native/avcodec_info.h +++ b/interfaces/inner_api/native/avcodec_info.h @@ -180,6 +180,7 @@ struct CapabilityData { int32_t rank = 0; Range maxBitrate; Range sqrFactor; + int32_t maxVersion = 0; }; struct LevelParams { @@ -295,6 +296,12 @@ public: */ int32_t GetFeatureProperties(AVCapabilityFeature feature, Format &format); + /** + * @brief Get codec max supported version + * @return Returns codec max supported version. + */ + int32_t GetMaxSupportedVersion(); + private: bool IsFeatureValid(AVCapabilityFeature feature); CapabilityData *data_; @@ -595,6 +602,7 @@ public: static constexpr std::string_view VIDEO_RV30 = "video/rv30"; static constexpr std::string_view VIDEO_RV40 = "video/rv40"; static constexpr std::string_view VIDEO_VVC = "video/vvc"; + static constexpr std::string_view AUDIO_MIMETYPE_L2HC = "audio/l2hc"; static constexpr std::string_view AUDIO_AMR_NB = "audio/3gpp"; static constexpr std::string_view AUDIO_AMR_WB = "audio/amr-wb"; static constexpr std::string_view AUDIO_MPEG = "audio/mpeg"; diff --git a/interfaces/inner_api/native/avcodec_mime_type.h b/interfaces/inner_api/native/avcodec_mime_type.h index 8e67b6840312379c99c7ca7bb12d67f27b55dcd7..03d58852925630e24fc83cef6d49be4af0819517 100644 --- a/interfaces/inner_api/native/avcodec_mime_type.h +++ b/interfaces/inner_api/native/avcodec_mime_type.h @@ -35,6 +35,7 @@ public: static constexpr std::string_view MEDIA_MIMETYPE_AUDIO_AMRWB = "audio/amr-wb"; static constexpr std::string_view MEDIA_MIMETYPE_AUDIO_VIVID = "audio/av3a"; static constexpr std::string_view MEDIA_MIMETYPE_AUDIO_G711MU = "audio/g711mu"; + static constexpr std::string_view MEDIA_MIMETYPE_AUDIO_L2HC = "audio/l2hc"; static constexpr std::string_view MEDIA_MIMETYPE_AUDIO_LBVC = "audio/lbvc"; static constexpr std::string_view MEDIA_MIMETYPE_AUDIO_APE = "audio/x-ape"; static constexpr std::string_view MEDIA_MIMETYPE_AUDIO_COOK = "audio/cook"; diff --git a/services/engine/codeclist/audio_codeclist_info.cpp b/services/engine/codeclist/audio_codeclist_info.cpp index 3a0a89d06fe02f98d188c4dab7b8fa6d44c677a1..4ccd175e7b88b5cabe932d9cb6adae792b9ce91e 100644 --- a/services/engine/codeclist/audio_codeclist_info.cpp +++ b/services/engine/codeclist/audio_codeclist_info.cpp @@ -85,6 +85,11 @@ const std::vector AUDIO_VIVID_SAMPLE_RATE = {32000, 44100, 48000, 96000 constexpr int MIN_BIT_RATE_VIVID_DECODER = 16000; constexpr int MAX_BIT_RATE_VIVID_DECODER = 3075000; constexpr int MAX_CHANNEL_COUNT_VIVID = 16; +const std::vector AUDIO_L2HC_SAMPLE_RATE = {44100, 48000, 88200, 96000, 176400, 192000}; +constexpr int MIN_BITRATE_L2HC = 40000; +constexpr int MAX_BITRATE_L2HC = 60000000; +constexpr int MAX_CHANNEL_COUNT_L2HC = 12; +constexpr int MAX_SUPPORT_L2HC_VERSION = 4; #endif #ifdef SUPPORT_CODEC_COOK constexpr int MAX_BIT_RATE_COOK = 510000; @@ -331,6 +336,36 @@ CapabilityData AudioCodeclistInfo::GetLbvcEncoderCapability() return audioLbvcCapability; } +CapabilityData AudioCodeclistInfo::GetL2hcEncoderCapability() +{ + CapabilityData l2hcEncodeCapability; + l2hcEncodeCapability.codecName = AVCodecCodecName::AUDIO_ENCODER_L2HC_NAME; + l2hcEncodeCapability.codecType = AVCODEC_TYPE_AUDIO_ENCODER; + l2hcEncodeCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_L2HC; + l2hcEncodeCapability.isVendor = false; + l2hcEncodeCapability.bitrate = Range(MIN_BITRATE_L2HC, MAX_BITRATE_L2HC); + l2hcEncodeCapability.channels = Range(1, MAX_CHANNEL_COUNT_L2HC); + l2hcEncodeCapability.sampleRate = AUDIO_L2HC_SAMPLE_RATE; + l2hcEncodeCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE; + l2hcEncodeCapability.maxVersion = MAX_SUPPORT_L2HC_VERSION; + return l2hcEncodeCapability; +} + +CapabilityData AudioCodeclistInfo::GetL2hcDecoderCapability() +{ + CapabilityData l2hcDecodeCapability; + l2hcDecodeCapability.codecName = AVCodecCodecName::AUDIO_DECODER_L2HC_NAME; + l2hcDecodeCapability.codecType = AVCODEC_TYPE_AUDIO_DECODER; + l2hcDecodeCapability.mimeType = AVCodecMimeType::MEDIA_MIMETYPE_AUDIO_L2HC; + l2hcDecodeCapability.isVendor = false; + l2hcDecodeCapability.bitrate = Range(0, 0); + l2hcDecodeCapability.channels = Range(1, MAX_CHANNEL_COUNT_L2HC); + l2hcDecodeCapability.sampleRate = AUDIO_L2HC_SAMPLE_RATE; + l2hcDecodeCapability.maxInstance = MAX_SUPPORT_AUDIO_INSTANCE; + l2hcDecodeCapability.maxVersion = MAX_SUPPORT_L2HC_VERSION; + return l2hcDecodeCapability; +} + CapabilityData AudioCodeclistInfo::GetVendorAacEncoderCapability() { std::unique_ptr libFile = std::make_unique(VENDOR_AAC_LIB_PATH, std::ios::binary); @@ -480,7 +515,8 @@ AudioCodeclistInfo::AudioCodeclistInfo() GetG711muEncoderCapability(), GetAPEDecoderCapability(), GetMP3EncoderCapability(), #ifdef AV_CODEC_AUDIO_VIVID_CAPACITY GetVividDecoderCapability(), GetAmrnbEncoderCapability(), GetAmrwbEncoderCapability(), - GetLbvcDecoderCapability(), GetLbvcEncoderCapability(), + GetLbvcDecoderCapability(), GetLbvcEncoderCapability(), GetL2hcEncoderCapability(), + GetL2hcDecoderCapability(), #endif #ifdef SUPPORT_CODEC_COOK GetCookDecoderCapability(), diff --git a/services/engine/codeclist/audio_codeclist_info.h b/services/engine/codeclist/audio_codeclist_info.h index b2b196a1f00751f4be05a76b993c2d59958d9e62..6e1aea0a54f2d7a85f7d444822be315de1c59314 100644 --- a/services/engine/codeclist/audio_codeclist_info.h +++ b/services/engine/codeclist/audio_codeclist_info.h @@ -46,6 +46,8 @@ public: CapabilityData GetVividDecoderCapability(); CapabilityData GetAmrnbEncoderCapability(); CapabilityData GetAmrwbEncoderCapability(); + CapabilityData GetL2hcEncoderCapability(); + CapabilityData GetL2hcDecoderCapability(); #endif #ifdef SUPPORT_CODEC_COOK CapabilityData GetCookDecoderCapability(); diff --git a/services/services/sa_avcodec/ipc/codeclist_parcel.cpp b/services/services/sa_avcodec/ipc/codeclist_parcel.cpp index f22e2fe3b37f623100b4911996fb3425e158d340..f05962dac601b720f7e868bb0dd2c8e4614d809b 100644 --- a/services/services/sa_avcodec/ipc/codeclist_parcel.cpp +++ b/services/services/sa_avcodec/ipc/codeclist_parcel.cpp @@ -67,6 +67,7 @@ bool CodecListParcel::Marshalling(MessageParcel &parcel, CapabilityData &capabil (void)parcel.WriteInt32(capabilityData.maxBitrate.maxVal); (void)parcel.WriteInt32(capabilityData.sqrFactor.minVal); (void)parcel.WriteInt32(capabilityData.sqrFactor.maxVal); + (void)parcel.WriteInt32(capabilityData.maxVersion); AVCODEC_LOGD("success to Marshalling capabilityDataArray"); return true; @@ -151,6 +152,7 @@ bool CodecListParcel::Unmarshalling(MessageParcel &parcel, CapabilityData &capab capabilityData.maxBitrate.maxVal = parcel.ReadInt32(); capabilityData.sqrFactor.minVal = parcel.ReadInt32(); capabilityData.sqrFactor.maxVal = parcel.ReadInt32(); + capabilityData.maxVersion = parcel.ReadInt32(); AVCODEC_LOGD("success to Unmarshalling capabilityDataArray"); return true; }