From f7ce2ea96f7eef3c7569306521afadce70c57ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E6=98=A5=E4=B8=BD?= Date: Fri, 26 Jul 2024 07:59:48 +0000 Subject: [PATCH 1/4] update services/media_engine/modules/media_codec/media_codec.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 姜春丽 --- services/media_engine/modules/media_codec/media_codec.h | 1 + 1 file changed, 1 insertion(+) diff --git a/services/media_engine/modules/media_codec/media_codec.h b/services/media_engine/modules/media_codec/media_codec.h index 7f71ac0fe..22b63b785 100644 --- a/services/media_engine/modules/media_codec/media_codec.h +++ b/services/media_engine/modules/media_codec/media_codec.h @@ -54,6 +54,7 @@ enum class CodecState : int32_t { enum class CodecErrorType : int32_t { CODEC_ERROR_INTERNAL, + CODEC_DRM_DECRYTION_FAILED, CODEC_ERROR_EXTEND_START = 0X10000, }; -- Gitee From 81d18a11a3e98828a9da7a76ef57e529f5f649bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E6=98=A5=E4=B8=BD?= Date: Fri, 26 Jul 2024 08:00:50 +0000 Subject: [PATCH 2/4] update services/media_engine/modules/media_codec/media_codec.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 姜春丽 --- services/media_engine/modules/media_codec/media_codec.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/services/media_engine/modules/media_codec/media_codec.cpp b/services/media_engine/modules/media_codec/media_codec.cpp index 8b8cf09a9..5438aedaf 100644 --- a/services/media_engine/modules/media_codec/media_codec.cpp +++ b/services/media_engine/modules/media_codec/media_codec.cpp @@ -602,6 +602,8 @@ void MediaCodec::ProcessInputBuffer() ret = DrmAudioCencDecrypt(filledInputBuffer); if (ret != Status::OK) { MEDIA_LOG_E("MediaCodec DrmAudioCencDecrypt failed."); + mediaCodecCallback_->OnError(CodecErrorType::CODEC_DRM_DECRYTION_FAILED, + static_cast(ret)); break; } } -- Gitee From f1d0fa5b0068c0da82efc18b5b755d94adc7138c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E6=98=A5=E4=B8=BD?= Date: Fri, 26 Jul 2024 08:01:59 +0000 Subject: [PATCH 3/4] update interfaces/inner_api/native/audio_decoder_filter.h. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 姜春丽 --- .../inner_api/native/audio_decoder_filter.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/interfaces/inner_api/native/audio_decoder_filter.h b/interfaces/inner_api/native/audio_decoder_filter.h index 5153d89b2..b7a246b75 100644 --- a/interfaces/inner_api/native/audio_decoder_filter.h +++ b/interfaces/inner_api/native/audio_decoder_filter.h @@ -79,6 +79,10 @@ public: void OnDumpInfo(int32_t fd); void SetCallerInfo(uint64_t instanceId, const std::string& appName); + + void OnError(CodecErrorType errorType, int32_t errorCode); + + void OnOutputBufferDone(const std::shared_ptr &outputBuffer); protected: Status OnLinked(StreamType inType, const std::shared_ptr &meta, const std::shared_ptr &callback) override; @@ -115,6 +119,20 @@ private: uint64_t instanceId_ = 0; std::string appName_; }; + +class AudioDecoderCallback : public AudioBaseCodecCallback { +public: + explicit AudioDecoderCallback(std::shared_ptr audioDecoderFilter); + virtual ~AudioDecoderCallback(); + + void OnError(CodecErrorType errorType, int32_t errorCode) override; + + void OnOutputBufferDone(const std::shared_ptr &outputBuffer) override; + +private: + std::weak_ptr audioDecoderFilter_; +}; + } // namespace Pipeline } // namespace MEDIA } // namespace OHOS -- Gitee From 8e7606846646f56501d1ecd1b6fb91482ca7a607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E6=98=A5=E4=B8=BD?= Date: Fri, 26 Jul 2024 08:05:47 +0000 Subject: [PATCH 4/4] update services/media_engine/filters/audio_decoder_filter.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 姜春丽 --- .../filters/audio_decoder_filter.cpp | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/services/media_engine/filters/audio_decoder_filter.cpp b/services/media_engine/filters/audio_decoder_filter.cpp index a8d52560e..09c04d3c3 100644 --- a/services/media_engine/filters/audio_decoder_filter.cpp +++ b/services/media_engine/filters/audio_decoder_filter.cpp @@ -263,6 +263,11 @@ Status AudioDecoderFilter::OnLinked(StreamType inType, const std::shared_ptrSetData(Tag::AUDIO_SAMPLE_FORMAT, Plugins::SAMPLE_S16LE); SetParameter(meta); mediaCodec_->Init(mime, false); + + std::shared_ptr mediaCodecCallback + = std::make_shared(shared_from_this()); + mediaCodec_->SetCodecCallback(mediaCodecCallback); + auto ret = mediaCodec_->Configure(meta); if (ret != (int32_t)Status::OK && ret != (int32_t)Status::ERROR_INVALID_STATE) { MEDIA_LOG_I_SHORT("AudioDecoderFilter unsupport format"); @@ -370,6 +375,54 @@ void AudioDecoderFilter::SetCallerInfo(uint64_t instanceId, const std::string& a instanceId_ = instanceId; appName_ = appName; } + +void AudioDecoderFilter::OnError(CodecErrorType errorType, int32_t errorCode) +{ + MEDIA_LOG_E("Audio Decoder error happened. ErrorType: %{public}d, errorCode: %{public}d", + static_cast(errorType), errorCode); + if (eventReceiver_ == nullptr) { + MEDIA_LOG_E("Audio Decoder OnError failed due to eventReceiver is nullptr."); + return; + } + switch (errorType) { + case CodecErrorType::CODEC_DRM_DECRYTION_FAILED: + eventReceiver_->OnEvent({"audioDecoder", EventType::EVENT_ERROR, MSERR_DRM_VERIFICATION_FAILED}); + break; + default: + break; + } +} + +void AudioDecoderFilter::OnOutputBufferDone(const std::shared_ptr &outputBuffer) +{ + (void)outputBuffer; +} + +AudioDecoderCallback::AudioDecoderCallback(std::shared_ptr audioDecoderFilter) : + audioDecoderFilter_(audioDecoderFilter) +{ + MEDIA_LOG_I("AudioDecoderCallback"); +} + +AudioDecoderCallback::~AudioDecoderCallback() +{ + MEDIA_LOG_I("~AudioDecoderCallback"); +} + +void AudioDecoderCallback::OnError(CodecErrorType errorType, int32_t errorCode) +{ + MEDIA_LOG_I("AudioDecoderCallback OnError"); + if (auto codecFilter = audioDecoderFilter_.lock()) { + codecFilter->OnError(errorType, errorCode); + } else { + MEDIA_LOG_I("invalid codecFilter"); + } +} + +void AudioDecoderCallback::OnOutputBufferDone(const std::shared_ptr &outputBuffer) +{ + (void)outputBuffer; +} } // namespace Pipeline } // namespace MEDIA } // namespace OHOS -- Gitee