From 847bbbb987973548258ed1717e75f4467303a3c4 Mon Sep 17 00:00:00 2001 From: Dong Yu Date: Sat, 18 May 2024 12:57:41 +0800 Subject: [PATCH] optimize player dfx Signed-off-by: Dong Yu --- interfaces/inner_api/native/media_demuxer.h | 3 +- .../filters/audio_decoder_filter.cpp | 8 ++++-- .../filters/decoder_surface_filter.cpp | 4 ++- .../media_engine/filters/demuxer_filter.cpp | 28 +++++++++++-------- .../modules/demuxer/media_demuxer.cpp | 25 ++++++++++------- .../modules/media_codec/media_codec.cpp | 17 +++++++---- .../modules/media_codec/media_codec.h | 3 +- 7 files changed, 55 insertions(+), 33 deletions(-) diff --git a/interfaces/inner_api/native/media_demuxer.h b/interfaces/inner_api/native/media_demuxer.h index 82e46c509..0f870e26c 100755 --- a/interfaces/inner_api/native/media_demuxer.h +++ b/interfaces/inner_api/native/media_demuxer.h @@ -88,7 +88,7 @@ public: void SetEventReceiver(const std::shared_ptr &receiver); bool GetDuration(int64_t& durationMs); void SetPlayerId(std::string playerId); - void SetDumpFlag(bool isDump); + void SetDumpInfo(bool isDump, uint64_t instanceId); Status OptimizeDecodeSlow(bool useDecodeSlowOptimization); Status SetDecodeFramerateUpperLimit(int32_t decodeFramerateUpperLimit, uint32_t trackId); @@ -190,6 +190,7 @@ private: std::atomic decodeFramerateUpperLimit_ {DEFAULT_DECODE_FRAMERATE_UPPER_LIMIT}; bool isDump_ = false; + std::string dumpPrefix_ = ""; }; } // namespace Media } // namespace OHOS diff --git a/services/media_engine/filters/audio_decoder_filter.cpp b/services/media_engine/filters/audio_decoder_filter.cpp index bb4d40686..dd5c24285 100644 --- a/services/media_engine/filters/audio_decoder_filter.cpp +++ b/services/media_engine/filters/audio_decoder_filter.cpp @@ -313,7 +313,9 @@ Status AudioDecoderFilter::SetDecryptionConfig(const sptrSetDumpFlag(isDump_); + if (mediaCodec_ != nullptr) { + mediaCodec_->SetDumpInfo(isDump_, instanceId_); + } } void AudioDecoderFilter::OnLinkedResult(const sptr &outputBufferQueue, @@ -353,7 +355,9 @@ void AudioDecoderFilter::OnBufferFilled(std::shared_ptr &inputBuffer) void AudioDecoderFilter::OnDumpInfo(int32_t fd) { MEDIA_LOG_D("AudioDecoderFilter::OnDumpInfo called."); - mediaCodec_->OnDumpInfo(fd); + if (mediaCodec_ != nullptr) { + mediaCodec_->OnDumpInfo(fd); + } } void AudioDecoderFilter::SetCallerInfo(uint64_t instanceId, const std::string& appName) diff --git a/services/media_engine/filters/decoder_surface_filter.cpp b/services/media_engine/filters/decoder_surface_filter.cpp index f5c227a9e..dacc758dc 100644 --- a/services/media_engine/filters/decoder_surface_filter.cpp +++ b/services/media_engine/filters/decoder_surface_filter.cpp @@ -702,7 +702,9 @@ void DecoderSurfaceFilter::ParseDecodeRateLimit() void DecoderSurfaceFilter::OnDumpInfo(int32_t fd) { MEDIA_LOG_D("DecoderSurfaceFilter::OnDumpInfo called."); - videoDecoder_->OnDumpInfo(fd); + if (videoDecoder_ != nullptr) { + videoDecoder_->OnDumpInfo(fd); + } } } // namespace Pipeline } // namespace MEDIA diff --git a/services/media_engine/filters/demuxer_filter.cpp b/services/media_engine/filters/demuxer_filter.cpp index 747cbdf44..58306b18b 100644 --- a/services/media_engine/filters/demuxer_filter.cpp +++ b/services/media_engine/filters/demuxer_filter.cpp @@ -213,14 +213,14 @@ void DemuxerFilter::FaultDemuxerEventInfoWrite(StreamType& streamType) { MEDIA_LOG_I("FaultDemuxerEventInfoWrite enter."); struct DemuxerFaultInfo demuxerInfo; - demuxerInfo.appName = bundleName_; - demuxerInfo.instanceId = std::to_string(instanceId_); - demuxerInfo.callerType = "player_framework"; - demuxerInfo.sourceType = static_cast(mediaSource_->GetSourceType()); - demuxerInfo.containerFormat = CollectVideoAndAudioMime(); - demuxerInfo.streamType = std::to_string(static_cast(streamType)); - demuxerInfo.errMsg = "OnCallback Link Filter Fail."; - FaultDemuxerEventWrite(demuxerInfo); + demuxerInfo.appName = bundleName_; + demuxerInfo.instanceId = std::to_string(instanceId_); + demuxerInfo.callerType = "player_framework"; + demuxerInfo.sourceType = static_cast(mediaSource_->GetSourceType()); + demuxerInfo.containerFormat = CollectVideoAndAudioMime(); + demuxerInfo.streamType = std::to_string(static_cast(streamType)); + demuxerInfo.errMsg = "OnCallback Link Filter Fail."; + FaultDemuxerEventWrite(demuxerInfo); } std::string DemuxerFilter::CollectVideoAndAudioMime() @@ -236,9 +236,9 @@ std::string DemuxerFilter::CollectVideoAndAudioMime() continue; } if (IsVideoMime(mime)) { - videoMime = mime; + videoMime += (mime + ","); } else if (IsAudioMime(mime)) { - audioMime = mime; + audioMime += (mime + ","); } } return videoMime + " : " + audioMime; @@ -391,7 +391,9 @@ void DemuxerFilter::GetParameter(std::shared_ptr ¶meter) void DemuxerFilter::SetDumpFlag(bool isDump) { isDump_ = isDump; - demuxer_->SetDumpFlag(isDump_); + if (demuxer_ != nullptr) { + demuxer_->SetDumpInfo(isDump_, instanceId_); + } } std::map> DemuxerFilter::GetBufferQueueProducerMap() @@ -617,7 +619,9 @@ Status DemuxerFilter::SetSpeed(float speed) void DemuxerFilter::OnDumpInfo(int32_t fd) { MEDIA_LOG_D("DemuxerFilter::OnDumpInfo called."); - demuxer_->OnDumpInfo(fd); + if (demuxer_ != nullptr) { + demuxer_->OnDumpInfo(fd); + } } } // namespace Pipeline } // namespace Media diff --git a/services/media_engine/modules/demuxer/media_demuxer.cpp b/services/media_engine/modules/demuxer/media_demuxer.cpp index 42001427d..7e93589b3 100755 --- a/services/media_engine/modules/demuxer/media_demuxer.cpp +++ b/services/media_engine/modules/demuxer/media_demuxer.cpp @@ -42,7 +42,7 @@ #include "osal/utils/dump_buffer.h" namespace { -const std::string DUMP_PARAM = "w"; +const std::string DUMP_PARAM = "a"; const std::string DUMP_DEMUXER_AUDIO_FILE_NAME = "player_demuxer_audio_output.es"; const std::string DUMP_DEMUXER_VIDEO_FILE_NAME = "player_demuxer_video_output.es"; } // namespace @@ -193,8 +193,13 @@ void MediaDemuxer::SetPlayerId(std::string playerId) playerId_ = playerId; } -void MediaDemuxer::SetDumpFlag(bool isDump) +void MediaDemuxer::SetDumpInfo(bool isDump, uint64_t instanceId) { + if (isDump && instanceId == 0) { + MEDIA_LOG_W("Cannot dump with instanceId 0."); + return; + } + dumpPrefix_ = std::to_string(instanceId); isDump_ = isDump; } @@ -389,14 +394,14 @@ Status MediaDemuxer::SetOutputBufferQueue(int32_t trackId, const sptr { std::string mimeType; if (isDump_) { - if (mediaMetaData_.trackMetas[trackId]->Get(mimeType) && mimeType.find("audio") != 0) { - DumpAVBufferToFile(DUMP_PARAM, DUMP_DEMUXER_AUDIO_FILE_NAME, buffer); + if (mediaMetaData_.trackMetas[trackId]->Get(mimeType) && mimeType.find("audio") == 0) { + DumpAVBufferToFile(DUMP_PARAM, dumpPrefix_ + DUMP_DEMUXER_AUDIO_FILE_NAME, buffer); } - if (mediaMetaData_.trackMetas[trackId]->Get(mimeType) && mimeType.find("video") != 0) { - DumpAVBufferToFile(DUMP_PARAM, DUMP_DEMUXER_VIDEO_FILE_NAME, buffer); + if (mediaMetaData_.trackMetas[trackId]->Get(mimeType) && mimeType.find("video") == 0) { + DumpAVBufferToFile(DUMP_PARAM, dumpPrefix_ + DUMP_DEMUXER_VIDEO_FILE_NAME, buffer); } } } diff --git a/services/media_engine/modules/media_codec/media_codec.cpp b/services/media_engine/modules/media_codec/media_codec.cpp index 5830e4d9b..f2da8c24a 100644 --- a/services/media_engine/modules/media_codec/media_codec.cpp +++ b/services/media_engine/modules/media_codec/media_codec.cpp @@ -24,7 +24,7 @@ namespace { const std::string INPUT_BUFFER_QUEUE_NAME = "MediaCodecInputBufferQueue"; constexpr int32_t DEFAULT_BUFFER_NUM = 8; constexpr int32_t TIME_OUT_MS = 500; -const std::string DUMP_PARAM = "w"; +const std::string DUMP_PARAM = "a"; const std::string DUMP_FILE_NAME = "player_audio_decoder_output.pcm"; } // namespace @@ -383,8 +383,13 @@ int32_t MediaCodec::SetParameter(const std::shared_ptr ¶meter) return (int32_t)ret; } -void MediaCodec::SetDumpFlag(bool isDump) +void MediaCodec::SetDumpInfo(bool isDump, uint64_t instanceId) { + if (isDump && instanceId == 0) { + MEDIA_LOG_W("Cannot dump with instanceId 0."); + return; + } + dumpPrefix_ = std::to_string(instanceId); isDump_ = isDump; } @@ -747,7 +752,7 @@ void MediaCodec::OnOutputBufferDone(const std::shared_ptr &outputBuffe { MediaAVCodec::AVCodecTrace trace("MediaCodec::OnOutputBufferDone"); if (isDump_) { - DumpAVBufferToFile(DUMP_PARAM, DUMP_FILE_NAME, outputBuffer); + DumpAVBufferToFile(DUMP_PARAM, dumpPrefix_ + DUMP_FILE_NAME, outputBuffer); } Status ret = outputBufferQueueProducer_->PushBuffer(outputBuffer, true); if (mediaCodecCallback_) { @@ -780,13 +785,13 @@ std::string MediaCodec::StateToString(CodecState state) void MediaCodec::OnDumpInfo(int32_t fd) { MEDIA_LOG_D("MediaCodec::OnDumpInfo called."); - std::string dumpString; - dumpString += "MediaCodec plugin name: " + codecPluginName_ + "\n"; - dumpString += "MediaCodec buffer size is:" + std::to_string(inputBufferQueue_->GetQueueSize()) + "\n"; if (fd < 0) { MEDIA_LOG_E("MediaCodec::OnDumpInfo fd is invalid."); return; } + std::string dumpString; + dumpString += "MediaCodec plugin name: " + codecPluginName_ + "\n"; + dumpString += "MediaCodec buffer size is:" + std::to_string(inputBufferQueue_->GetQueueSize()) + "\n"; int ret = write(fd, dumpString.c_str(), dumpString.size()); if (ret < 0) { MEDIA_LOG_E("MediaCodec::OnDumpInfo write failed."); diff --git a/services/media_engine/modules/media_codec/media_codec.h b/services/media_engine/modules/media_codec/media_codec.h index 598c4aea6..542b87149 100644 --- a/services/media_engine/modules/media_codec/media_codec.h +++ b/services/media_engine/modules/media_codec/media_codec.h @@ -118,7 +118,7 @@ public: void ProcessInputBuffer(); - void SetDumpFlag(bool isDump); + void SetDumpInfo(bool isDump, uint64_t instanceId); int32_t SetAudioDecryptionConfig(const sptr &keySession, const bool svpFlag); @@ -163,6 +163,7 @@ private: bool isSurfaceMode_; bool isBufferMode_; bool isDump_ = false; + std::string dumpPrefix_ = ""; int32_t outputBufferCapacity_; std::string codecPluginName_; -- Gitee