From 3d02d698dd6a6bda9d64331c7c0f91c088a6d985 Mon Sep 17 00:00:00 2001 From: yuanjinghua Date: Thu, 11 Jan 2024 21:00:44 +0800 Subject: [PATCH] Bugfix for peegrange fail Signed-off-by: yuanjinghua --- .../media_engine/modules/demuxer/media_demuxer.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/services/media_engine/modules/demuxer/media_demuxer.cpp b/services/media_engine/modules/demuxer/media_demuxer.cpp index 8fea16648..148433c26 100644 --- a/services/media_engine/modules/demuxer/media_demuxer.cpp +++ b/services/media_engine/modules/demuxer/media_demuxer.cpp @@ -529,15 +529,23 @@ bool MediaDemuxer::PullDataWithCache(uint64_t offset, size_t size, std::shared_p uint64_t remainOffset = cacheData_.offset + memory->GetSize(); uint64_t remainSize = size - (memory->GetSize() - offsetInCache); std::shared_ptr tempBuffer = Buffer::CreateDefaultBuffer(remainSize); + if (tempBuffer == nullptr || tempBuffer->GetMemory() == nullptr) { + MEDIA_LOG_W("PullMode, Read data from cache data. only get partial data."); + return true; + } Status ret = source_->PullData(remainOffset, lastSeekTime_, remainSize, tempBuffer); if (ret == Status::OK) { + bufferPtr->GetMemory()->Write(tempBuffer->GetMemory()->GetReadOnlyData(), + tempBuffer->GetMemory()->GetSize(), memory->GetSize() - offsetInCache); std::shared_ptr mergedBuffer = Buffer::CreateDefaultBuffer( tempBuffer->GetMemory()->GetSize() + memory->GetSize()); + if (mergedBuffer == nullptr || mergedBuffer->GetMemory() == nullptr) { + MEDIA_LOG_W("PullMode, Read data from cache data success. update cache data fail."); + return true; + } mergedBuffer->GetMemory()->Write(memory->GetReadOnlyData(), memory->GetSize(), 0); mergedBuffer->GetMemory()->Write(tempBuffer->GetMemory()->GetReadOnlyData(), tempBuffer->GetMemory()->GetSize(), memory->GetSize()); - bufferPtr->GetMemory()->Write(tempBuffer->GetMemory()->GetReadOnlyData(), - tempBuffer->GetMemory()->GetSize(), memory->GetSize() - offsetInCache); cacheData_.data = mergedBuffer; MEDIA_LOG_I("PullMode, offset: " PUBLIC_LOG_U64 ", cache offset: " PUBLIC_LOG_U64 ", cache size: " PUBLIC_LOG_ZU, offset, cacheData_.offset, @@ -591,7 +599,7 @@ void MediaDemuxer::ActivatePullMode() return PullDataWithCache(offset, size, bufferPtr); } } - return PullDataWithCache(offset, size, bufferPtr); + return PullDataWithoutCache(offset, size, bufferPtr); }; getRange_ = peekRange_; typeFinder_->Init(uri_, mediaDataSize_, checkRange_, peekRange_); -- Gitee