diff options
Diffstat (limited to 'media/video')
-rw-r--r-- | media/video/gpu_memory_buffer_video_frame_pool.cc | 12 | ||||
-rw-r--r-- | media/video/gpu_memory_buffer_video_frame_pool_unittest.cc | 27 |
2 files changed, 25 insertions, 14 deletions
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc index 14910ad..d5d6836 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool.cc @@ -602,7 +602,8 @@ void GpuMemoryBufferVideoFramePool::PoolImpl:: mailbox_holders[VideoFrame::kVPlane], release_mailbox_callback, coded_size, gfx::Rect(visible_size), video_frame->natural_size(), video_frame->timestamp()); - if (video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY)) + if (frame && + video_frame->metadata()->IsTrue(VideoFrameMetadata::ALLOW_OVERLAY)) frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); break; case PIXEL_FORMAT_NV12: @@ -611,12 +612,19 @@ void GpuMemoryBufferVideoFramePool::PoolImpl:: output_format_, mailbox_holders[VideoFrame::kYPlane], release_mailbox_callback, coded_size, gfx::Rect(visible_size), video_frame->natural_size(), video_frame->timestamp()); - frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); + if (frame) + frame->metadata()->SetBoolean(VideoFrameMetadata::ALLOW_OVERLAY, true); break; default: NOTREACHED(); } + if (!frame) { + release_mailbox_callback.Run(gpu::SyncToken()); + frame_ready_cb.Run(video_frame); + return; + } + base::TimeTicks render_time; if (video_frame->metadata()->GetTimeTicks(VideoFrameMetadata::REFERENCE_TIME, &render_time)) { diff --git a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc index 0e6f3ef..55dc969 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool_unittest.cc @@ -101,18 +101,21 @@ class GpuMemoryBufferVideoFramePoolTest : public ::testing::Test { DCHECK_LE(dimension, kDimension); gfx::Size size(dimension, dimension); - return media::VideoFrame::WrapExternalYuvData( - media::PIXEL_FORMAT_YV12, // format - size, // coded_size - gfx::Rect(size), // visible_rect - size, // natural_size - size.width(), // y_stride - size.width() / 2, // u_stride - size.width() / 2, // v_stride - y_data, // y_data - u_data, // u_data - v_data, // v_data - base::TimeDelta()); // timestamp + scoped_refptr<VideoFrame> video_frame = + media::VideoFrame::WrapExternalYuvData( + media::PIXEL_FORMAT_YV12, // format + size, // coded_size + gfx::Rect(size), // visible_rect + size, // natural_size + size.width(), // y_stride + size.width() / 2, // u_stride + size.width() / 2, // v_stride + y_data, // y_data + u_data, // u_data + v_data, // v_data + base::TimeDelta()); // timestamp + EXPECT_TRUE(video_frame); + return video_frame; } protected: |