From 869943ab21429b431a432ef6277efbbd885a191f Mon Sep 17 00:00:00 2001 From: ojiajun Date: Thu, 24 Jul 2025 11:40:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8DmediaCodec=E4=B8=ADChange?= =?UTF-8?q?Plugin=E7=9A=84=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86=E5=92=8C?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E5=AE=89=E5=85=A8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: ojiajun --- .../modules/media_codec/media_codec.cpp | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/services/media_engine/modules/media_codec/media_codec.cpp b/services/media_engine/modules/media_codec/media_codec.cpp index aeffc562a..263546ac7 100644 --- a/services/media_engine/modules/media_codec/media_codec.cpp +++ b/services/media_engine/modules/media_codec/media_codec.cpp @@ -853,11 +853,20 @@ Status MediaCodec::ChangePlugin(const std::string &mime, bool isEncoder, const s CHECK_AND_RETURN_RET_LOG(codecPlugin_ != nullptr, Status::ERROR_INVALID_PARAMETER, "createPlugin failed"); ret = codecPlugin_->SetParameter(meta); - MEDIA_LOG_I("codecPlugin SetParameter ret %{public}d", ret); + if (ret != Status::OK) { + MEDIA_LOG_E("codecPlugin SetParameter ret %{public}d", ret); + return ret; + } ret = codecPlugin_->Init(); - MEDIA_LOG_I("codecPlugin Init ret %{public}d", ret); + if (ret != Status::OK) { + MEDIA_LOG_E("codecPlugin Init ret %{public}d", ret); + return ret; + } ret = codecPlugin_->SetDataCallback(this); - MEDIA_LOG_I("codecPlugin SetDataCallback ret %{public}d", ret); + if (ret != Status::OK) { + MEDIA_LOG_E("codecPlugin SetDataCallback ret %{public}d", ret); + return ret; + } } // discard undecoded data and unconsumed decoded data. @@ -866,11 +875,14 @@ Status MediaCodec::ChangePlugin(const std::string &mime, bool isEncoder, const s ClearInputBuffer(); ResetBufferStatusInfo(); + AutoLock lock(stateMutex_); PrepareInputBufferQueue(); PrepareOutputBufferQueue(); if (state_ == CodecState::RUNNING) { ret = codecPlugin_->Start(); - MEDIA_LOG_I("codecPlugin Start ret %{public}d", ret); + if (ret != Status::OK) { + MEDIA_LOG_E("codecPlugin Start ret %{public}d", ret); + } } return ret; -- Gitee From 9472634ed4463e08fe181ce5b82b5d2845ccb155 Mon Sep 17 00:00:00 2001 From: ojiajun Date: Wed, 10 Sep 2025 16:59:59 +0800 Subject: [PATCH 2/2] mediacodec add input/output buffer memory ptr check Signed-off-by: ojiajun --- .../modules/media_codec/media_codec.cpp | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/services/media_engine/modules/media_codec/media_codec.cpp b/services/media_engine/modules/media_codec/media_codec.cpp index 263546ac7..6f3569189 100644 --- a/services/media_engine/modules/media_codec/media_codec.cpp +++ b/services/media_engine/modules/media_codec/media_codec.cpp @@ -782,6 +782,12 @@ void MediaCodec::HandleInputBufferInner(uint32_t &eosStatus, bool &isProcessingN ret = Status::ERROR_INVALID_STATE; return; } + + if (!filledInputBuffer || !filledInputBuffer->memory_ || !filledInputBuffer->memory_->GetAddr()) { + ret = Status::ERROR_NULL_POINTER; + return; + } + uint32_t flag = filledInputBuffer->flag_; int8_t retryCount = 0; do { @@ -853,20 +859,11 @@ Status MediaCodec::ChangePlugin(const std::string &mime, bool isEncoder, const s CHECK_AND_RETURN_RET_LOG(codecPlugin_ != nullptr, Status::ERROR_INVALID_PARAMETER, "createPlugin failed"); ret = codecPlugin_->SetParameter(meta); - if (ret != Status::OK) { - MEDIA_LOG_E("codecPlugin SetParameter ret %{public}d", ret); - return ret; - } + MEDIA_LOG_I("codecPlugin SetParameter ret %{public}d", ret); ret = codecPlugin_->Init(); - if (ret != Status::OK) { - MEDIA_LOG_E("codecPlugin Init ret %{public}d", ret); - return ret; - } + MEDIA_LOG_I("codecPlugin Init ret %{public}d", ret); ret = codecPlugin_->SetDataCallback(this); - if (ret != Status::OK) { - MEDIA_LOG_E("codecPlugin SetDataCallback ret %{public}d", ret); - return ret; - } + MEDIA_LOG_I("codecPlugin SetDataCallback ret %{public}d", ret); } // discard undecoded data and unconsumed decoded data. @@ -875,14 +872,11 @@ Status MediaCodec::ChangePlugin(const std::string &mime, bool isEncoder, const s ClearInputBuffer(); ResetBufferStatusInfo(); - AutoLock lock(stateMutex_); PrepareInputBufferQueue(); PrepareOutputBufferQueue(); if (state_ == CodecState::RUNNING) { ret = codecPlugin_->Start(); - if (ret != Status::OK) { - MEDIA_LOG_E("codecPlugin Start ret %{public}d", ret); - } + MEDIA_LOG_I("codecPlugin Start ret %{public}d", ret); } return ret; @@ -917,7 +911,7 @@ Status MediaCodec::HandleOutputBufferOnce(bool &isBufferAvailable, uint32_t eosS } } - if (emptyOutputBuffer) { + if (emptyOutputBuffer && emptyOutputBuffer->memory_ && emptyOutputBuffer->memory_->GetAddr()) { emptyOutputBuffer->flag_ = eosStatus; isBufferAvailable = true; } else if (state_ != CodecState::RUNNING) { -- Gitee