Chromium Code Reviews| Index: content/renderer/media/webmediaplayer_ms.cc |
| diff --git a/content/renderer/media/webmediaplayer_ms.cc b/content/renderer/media/webmediaplayer_ms.cc |
| index 49bdf42e5493976dc1b0cc249356c6bad6883e84..0940ab02cc9727559fb2345ddb15bcacbd679489 100644 |
| --- a/content/renderer/media/webmediaplayer_ms.cc |
| +++ b/content/renderer/media/webmediaplayer_ms.cc |
| @@ -28,7 +28,6 @@ |
| #include "media/base/media_switches.h" |
| #include "media/base/video_frame.h" |
| #include "media/base/video_rotation.h" |
| -#include "media/base/video_util.h" |
| #include "media/blink/webmediaplayer_delegate.h" |
| #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" |
| #include "third_party/WebKit/public/platform/WebMediaStream.h" |
| @@ -40,6 +39,8 @@ |
| #include "third_party/WebKit/public/web/WebFrame.h" |
| #include "third_party/WebKit/public/web/WebMediaStreamRegistry.h" |
| #include "third_party/WebKit/public/web/WebView.h" |
| +#include "third_party/libyuv/include/libyuv/convert.h" |
| +#include "third_party/libyuv/include/libyuv/video_common.h" |
| #include "third_party/skia/include/core/SkBitmap.h" |
| using blink::WebCanvas; |
| @@ -51,18 +52,17 @@ namespace content { |
| namespace { |
| -// This function copies |frame| to a new YV12 media::VideoFrame. |
| -scoped_refptr<media::VideoFrame> CopyFrameToYV12( |
| +// This function copies |frame| to a new I420 media::VideoFrame. |
| +scoped_refptr<media::VideoFrame> CopyFrameToI420( |
| const scoped_refptr<media::VideoFrame>& frame, |
| media::SkCanvasVideoRenderer* video_renderer) { |
| const scoped_refptr<media::VideoFrame> new_frame = |
| media::VideoFrame::CreateFrame(media::PIXEL_FORMAT_YV12, |
| frame->coded_size(), frame->visible_rect(), |
| frame->natural_size(), frame->timestamp()); |
| + const gfx::Size& size = frame->coded_size(); |
| if (frame->HasTextures()) { |
| - DCHECK(frame->format() == media::PIXEL_FORMAT_ARGB || |
| - frame->format() == media::PIXEL_FORMAT_XRGB); |
| SkBitmap bitmap; |
| bitmap.allocN32Pixels(frame->visible_rect().width(), |
| frame->visible_rect().height()); |
| @@ -79,18 +79,37 @@ scoped_refptr<media::VideoFrame> CopyFrameToYV12( |
| // GPU Process crashed. |
| bitmap.eraseColor(SK_ColorTRANSPARENT); |
| } |
| - media::CopyRGBToVideoFrame(reinterpret_cast<uint8*>(bitmap.getPixels()), |
| - bitmap.rowBytes(), |
| - frame->visible_rect(), |
| - new_frame.get()); |
| + libyuv::ConvertToI420(reinterpret_cast<uint8*>(bitmap.getPixels()), |
|
fbarchard
2015/10/14 06:47:36
Consider calling ARGBToI420.
ConvertToI420 expect
emircan
2015/10/14 21:02:32
Done.
|
| + bitmap.getSize(), |
| + new_frame->data(media::VideoFrame::kYPlane), |
| + new_frame->stride(media::VideoFrame::kYPlane), |
| + new_frame->data(media::VideoFrame::kUPlane), |
| + new_frame->stride(media::VideoFrame::kUPlane), |
| + new_frame->data(media::VideoFrame::kVPlane), |
| + new_frame->stride(media::VideoFrame::kVPlane), |
| + 0 /* crop_x */, |
| + 0 /* crop_y */, |
| + bitmap.dimensions().fWidth, |
| + bitmap.dimensions().fHeight, |
| + size.width(), size.height(), |
| + libyuv::kRotate0, libyuv::FOURCC_ARGB); |
|
fbarchard
2015/10/14 06:47:36
Most code in media expects ABGR for Android. Can
emircan
2015/10/14 21:02:32
Sorry, I couldn't understand what you mean there.
fbarchard
2015/10/15 17:43:26
In media/blink/skcanvas_video_renderer.cc there ar
|
| } else { |
| DCHECK(frame->IsMappable()); |
| DCHECK(frame->format() == media::PIXEL_FORMAT_YV12 || |
| frame->format() == media::PIXEL_FORMAT_I420); |
| - for (size_t i = 0; i < media::VideoFrame::NumPlanes(frame->format()); ++i) { |
| - media::CopyPlane(i, frame->data(i), frame->stride(i), |
| - frame->rows(i), new_frame.get()); |
| - } |
| + libyuv::I420Copy(frame->data(media::VideoFrame::kYPlane), |
| + frame->stride(media::VideoFrame::kYPlane), |
| + frame->data(media::VideoFrame::kUPlane), |
| + frame->stride(media::VideoFrame::kUPlane), |
| + frame->data(media::VideoFrame::kVPlane), |
| + frame->stride(media::VideoFrame::kVPlane), |
| + new_frame->data(media::VideoFrame::kYPlane), |
| + new_frame->stride(media::VideoFrame::kYPlane), |
| + new_frame->data(media::VideoFrame::kUPlane), |
| + new_frame->stride(media::VideoFrame::kUPlane), |
| + new_frame->data(media::VideoFrame::kVPlane), |
| + new_frame->stride(media::VideoFrame::kVPlane), |
| + size.width(), size.height()); |
| } |
| return new_frame; |
| } |
| @@ -732,7 +751,7 @@ void WebMediaPlayerMS::Compositor::ReplaceCurrentFrameWithACopy( |
| // there might be a finite number of available buffers. E.g, video that |
| // originates from a video camera. |
| scoped_refptr<media::VideoFrame> new_frame = |
| - CopyFrameToYV12(current_frame_, renderer); |
| + CopyFrameToI420(current_frame_, renderer); |
| current_frame_ = new_frame; |
| } |