Commit 47a8e1b8 authored by Zhaoliang Ma's avatar Zhaoliang Ma Committed by Chromium LUCI CQ

WebRtcVideoFrameAdapter: cleanup mapping GMB frame with ConvertToMemoryMappedFrame

Bug: 1126811
Test: apprtc on atlas
Change-Id: I903dac22f3504f2cc142e3fcad1feb93b12ed58f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2574069Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Auto-Submit: Zhaoliang Ma <zhaoliang.ma@intel.com>
Cr-Commit-Position: refs/heads/master@{#833757}
parent c89ee2db
......@@ -200,19 +200,7 @@ scoped_refptr<media::VideoFrame> MakeScaledI420VideoFrame(
scoped_refptr<media::VideoFrame> source_frame,
scoped_refptr<blink::WebRtcVideoFrameAdapter::BufferPoolOwner>
scaled_frame_pool) {
gfx::GpuMemoryBuffer* gmb = source_frame->GetGpuMemoryBuffer();
if (!gmb || !gmb->Map()) {
return nullptr;
}
// Crop to the visible rectangle specified in |source_frame|.
const uint8_t* src_y = (reinterpret_cast<const uint8_t*>(gmb->memory(0)) +
source_frame->visible_rect().x() +
(source_frame->visible_rect().y() * gmb->stride(0)));
const uint8_t* src_uv =
(reinterpret_cast<const uint8_t*>(gmb->memory(1)) +
((source_frame->visible_rect().x() / 2) * 2) +
((source_frame->visible_rect().y() / 2) * gmb->stride(1)));
auto mapped_frame = media::ConvertToMemoryMappedFrame(source_frame);
// Convert to I420 and scale to the natural size specified in
// |source_frame|.
auto dst_frame = scaled_frame_pool->CreateFrame(
......@@ -220,25 +208,26 @@ scoped_refptr<media::VideoFrame> MakeScaledI420VideoFrame(
gfx::Rect(source_frame->natural_size()), source_frame->natural_size(),
source_frame->timestamp());
if (!dst_frame) {
gmb->Unmap();
LOG(ERROR) << "Failed to create I420 frame from pool.";
return nullptr;
}
dst_frame->metadata()->MergeMetadataFrom(source_frame->metadata());
const auto& i420_planes = dst_frame->layout().planes();
webrtc::NV12ToI420Scaler scaler;
scaler.NV12ToI420Scale(src_y, gmb->stride(0), src_uv, gmb->stride(1),
source_frame->visible_rect().width(),
source_frame->visible_rect().height(),
dst_frame->data(media::VideoFrame::kYPlane),
i420_planes[media::VideoFrame::kYPlane].stride,
dst_frame->data(media::VideoFrame::kUPlane),
i420_planes[media::VideoFrame::kUPlane].stride,
dst_frame->data(media::VideoFrame::kVPlane),
i420_planes[media::VideoFrame::kVPlane].stride,
dst_frame->coded_size().width(),
dst_frame->coded_size().height());
gmb->Unmap();
scaler.NV12ToI420Scale(
mapped_frame->visible_data(media::VideoFrame::kYPlane),
mapped_frame->stride(media::VideoFrame::kYPlane),
mapped_frame->visible_data(media::VideoFrame::kUVPlane),
mapped_frame->stride(media::VideoFrame::kUVPlane),
source_frame->visible_rect().width(),
source_frame->visible_rect().height(),
dst_frame->data(media::VideoFrame::kYPlane),
i420_planes[media::VideoFrame::kYPlane].stride,
dst_frame->data(media::VideoFrame::kUPlane),
i420_planes[media::VideoFrame::kUPlane].stride,
dst_frame->data(media::VideoFrame::kVPlane),
i420_planes[media::VideoFrame::kVPlane].stride,
dst_frame->coded_size().width(), dst_frame->coded_size().height());
return dst_frame;
}
......@@ -246,26 +235,17 @@ scoped_refptr<media::VideoFrame> MakeScaledNV12VideoFrame(
scoped_refptr<media::VideoFrame> source_frame,
scoped_refptr<blink::WebRtcVideoFrameAdapter::BufferPoolOwner>
scaled_frame_pool) {
gfx::GpuMemoryBuffer* gmb = source_frame->GetGpuMemoryBuffer();
if (!gmb || !gmb->Map()) {
return nullptr;
}
// Crop to the visible rectangle specified in |source_frame|.
const uint8_t* src_y = (reinterpret_cast<const uint8_t*>(gmb->memory(0)) +
source_frame->visible_rect().x() +
(source_frame->visible_rect().y() * gmb->stride(0)));
const uint8_t* src_uv =
(reinterpret_cast<const uint8_t*>(gmb->memory(1)) +
((source_frame->visible_rect().x() / 2) * 2) +
((source_frame->visible_rect().y() / 2) * gmb->stride(1)));
auto mapped_frame = media::ConvertToMemoryMappedFrame(source_frame);
auto dst_frame = scaled_frame_pool->CreateFrame(
media::PIXEL_FORMAT_NV12, source_frame->natural_size(),
gfx::Rect(source_frame->natural_size()), source_frame->natural_size(),
source_frame->timestamp());
dst_frame->metadata()->MergeMetadataFrom(source_frame->metadata());
const auto& nv12_planes = dst_frame->layout().planes();
libyuv::NV12Scale(src_y, gmb->stride(0), src_uv, gmb->stride(1),
libyuv::NV12Scale(mapped_frame->visible_data(media::VideoFrame::kYPlane),
mapped_frame->stride(media::VideoFrame::kYPlane),
mapped_frame->visible_data(media::VideoFrame::kUVPlane),
mapped_frame->stride(media::VideoFrame::kUVPlane),
source_frame->visible_rect().width(),
source_frame->visible_rect().height(),
dst_frame->data(media::VideoFrame::kYPlane),
......@@ -274,7 +254,6 @@ scoped_refptr<media::VideoFrame> MakeScaledNV12VideoFrame(
nv12_planes[media::VideoFrame::kUVPlane].stride,
dst_frame->coded_size().width(),
dst_frame->coded_size().height(), libyuv::kFilterBox);
gmb->Unmap();
return dst_frame;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment