Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Unified Diff: content/renderer/media/webmediaplayer_ms.cc

Issue 1394783004: Change paused frame of WebMediaPlayerMS from YV12 to I420 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/BUILD.gn ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
}
« no previous file with comments | « content/renderer/BUILD.gn ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698