From 06cde897a7efd17a264c54ebba8d06e85d8e346b Mon Sep 17 00:00:00 2001 From: Andreas Pehrson Date: Fri, 28 Apr 2017 13:58:22 +0200 Subject: [PATCH] Bug 1348381 - Handle VideoFrame::CreateBlackImage returning nullptr. r=jesup MozReview-Commit-ID: LWon0cx5hAK --HG-- extra : rebase_source : 76db5d68bbfd5ec207ee72fd357f08bcc564fab0 --- dom/media/VideoSegment.cpp | 2 -- dom/media/encoder/VP8TrackEncoder.cpp | 6 +++++- dom/media/imagecapture/CaptureTask.cpp | 13 ++++++------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/dom/media/VideoSegment.cpp b/dom/media/VideoSegment.cpp index 48e4760ba304..915a569e06e9 100644 --- a/dom/media/VideoSegment.cpp +++ b/dom/media/VideoSegment.cpp @@ -50,7 +50,6 @@ VideoFrame::CreateBlackImage(const gfx::IntSize& aSize) LayerManager::CreateImageContainer(ImageContainer::ASYNCHRONOUS); RefPtr image = container->CreatePlanarYCbCrImage(); if (!image) { - MOZ_ASSERT(false); return nullptr; } @@ -82,7 +81,6 @@ VideoFrame::CreateBlackImage(const gfx::IntSize& aSize) // Copies data, so we can free data. if (!image->CopyData(data)) { - MOZ_ASSERT(false); return nullptr; } diff --git a/dom/media/encoder/VP8TrackEncoder.cpp b/dom/media/encoder/VP8TrackEncoder.cpp index 54ba324caf94..74ddd8b994b3 100644 --- a/dom/media/encoder/VP8TrackEncoder.cpp +++ b/dom/media/encoder/VP8TrackEncoder.cpp @@ -347,7 +347,11 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk) if (aChunk.mFrame.GetForceBlack() || aChunk.IsNull()) { if (!mMuteFrame) { mMuteFrame = VideoFrame::CreateBlackImage(gfx::IntSize(mFrameWidth, mFrameHeight)); - MOZ_ASSERT(mMuteFrame); + } + if (!mMuteFrame) { + VP8LOG(LogLevel::Warning, "Failed to allocate black image of size %dx%d", + mFrameWidth, mFrameHeight); + return NS_OK; } img = mMuteFrame; } else { diff --git a/dom/media/imagecapture/CaptureTask.cpp b/dom/media/imagecapture/CaptureTask.cpp index 33c4e556e70e..95aeb8478f24 100644 --- a/dom/media/imagecapture/CaptureTask.cpp +++ b/dom/media/imagecapture/CaptureTask.cpp @@ -128,11 +128,8 @@ CaptureTask::SetCurrentFrames(const VideoSegment& aSegment) RefPtr mTask; }; - VideoSegment::ConstChunkIterator iter(aSegment); - - - - while (!iter.IsEnded()) { + for (VideoSegment::ConstChunkIterator iter(aSegment); + !iter.IsEnded(); iter.Next()) { VideoChunk chunk = *iter; // Extract the first valid video frame. @@ -145,7 +142,10 @@ CaptureTask::SetCurrentFrames(const VideoSegment& aSegment) } else { image = chunk.mFrame.GetImage(); } - MOZ_ASSERT(image); + if (!image) { + MOZ_ASSERT(image); + continue; + } mImageGrabbedOrTrackEnd = true; // Encode image. @@ -163,7 +163,6 @@ CaptureTask::SetCurrentFrames(const VideoSegment& aSegment) } return; } - iter.Next(); } }