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

Unified Diff: content/renderer/media/webmediaplayer_ms_compositor.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_compositor.cc
diff --git a/content/renderer/media/webmediaplayer_ms_compositor.cc b/content/renderer/media/webmediaplayer_ms_compositor.cc
index 6b8f546c848308ff718baa4757b8de5d9cec730c..8ca82285de3ba50966d58dfdbdad575710e0263e 100644
--- a/content/renderer/media/webmediaplayer_ms_compositor.cc
+++ b/content/renderer/media/webmediaplayer_ms_compositor.cc
@@ -20,20 +20,22 @@
#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
#include "third_party/WebKit/public/platform/WebURL.h"
#include "third_party/WebKit/public/web/WebMediaStreamRegistry.h"
+#include "third_party/libyuv/include/libyuv/convert.h"
+#include "third_party/libyuv/include/libyuv/video_common.h"
namespace content {
namespace {
-// This function copies |frame| to a new YV12 media::VideoFrame.
-// TODO: Consider using libyuv for better performance. see http://crbug/541728
-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 ||
@@ -56,18 +58,32 @@ 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::ARGBToI420(reinterpret_cast<uint8*>(bitmap.getPixels()),
+ bitmap.rowBytes(),
+ 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());
} else {
DCHECK(frame->IsMappable());
DCHECK(frame->format() == media::PIXEL_FORMAT_YV12 ||
frame->format() == media::PIXEL_FORMAT_I420);
- const size_t num_planes = media::VideoFrame::NumPlanes(frame->format());
- for (size_t i = 0; i < num_planes; ++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;
}
@@ -292,7 +308,7 @@ void WebMediaPlayerMSCompositor::ReplaceCurrentFrameWithACopy(
// The original frame must not be referenced when the player is paused since
// there might be a finite number of available buffers. E.g, video that
// originates from a video camera.
- current_frame_ = CopyFrameToYV12(current_frame_, renderer);
+ current_frame_ = CopyFrameToI420(current_frame_, renderer);
}
bool WebMediaPlayerMSCompositor::MapTimestampsToRenderTimeTicks(
« 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