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

Side by Side Diff: content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc

Issue 2686173003: Remove uses of skia::GetWritablePixels(PaintCanvas) (Closed)
Patch Set: Add more deps Created 3 years, 10 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 unified diff | Download patch
« no previous file with comments | « content/renderer/media/webmediaplayer_ms_compositor.cc ('k') | media/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h" 5 #include "content/renderer/media/webrtc/webrtc_video_capturer_adapter.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/aligned_memory.h" 8 #include "base/memory/aligned_memory.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/synchronization/waitable_event.h" 10 #include "base/synchronization/waitable_event.h"
11 #include "base/threading/thread_task_runner_handle.h" 11 #include "base/threading/thread_task_runner_handle.h"
12 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
13 #include "cc/paint/paint_surface.h"
13 #include "content/renderer/media/webrtc/webrtc_video_frame_adapter.h" 14 #include "content/renderer/media/webrtc/webrtc_video_frame_adapter.h"
14 #include "content/renderer/render_thread_impl.h" 15 #include "content/renderer/render_thread_impl.h"
15 #include "media/base/timestamp_constants.h" 16 #include "media/base/timestamp_constants.h"
16 #include "media/base/video_util.h" 17 #include "media/base/video_util.h"
17 #include "media/renderers/skcanvas_video_renderer.h" 18 #include "media/renderers/skcanvas_video_renderer.h"
18 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h" 19 #include "services/ui/public/cpp/gpu/context_provider_command_buffer.h"
19 #include "skia/ext/platform_canvas.h" 20 #include "skia/ext/platform_canvas.h"
20 #include "third_party/libyuv/include/libyuv/convert.h" 21 #include "third_party/libyuv/include/libyuv/convert.h"
21 #include "third_party/libyuv/include/libyuv/convert_from.h" 22 #include "third_party/libyuv/include/libyuv/convert_from.h"
22 #include "third_party/libyuv/include/libyuv/scale.h" 23 #include "third_party/libyuv/include/libyuv/scale.h"
23 #include "third_party/skia/include/core/SkSurface.h"
24 #include "third_party/webrtc/api/video/video_rotation.h" 24 #include "third_party/webrtc/api/video/video_rotation.h"
25 25
26 namespace content { 26 namespace content {
27 27
28 namespace { 28 namespace {
29 29
30 // Empty method used for keeping a reference to the original media::VideoFrame. 30 // Empty method used for keeping a reference to the original media::VideoFrame.
31 // The reference to |frame| is kept in the closure that calls this method. 31 // The reference to |frame| is kept in the closure that calls this method.
32 void ReleaseOriginalFrame(const scoped_refptr<media::VideoFrame>& frame) { 32 void ReleaseOriginalFrame(const scoped_refptr<media::VideoFrame>& frame) {
33 } 33 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 const scoped_refptr<media::VideoFrame>& frame, 94 const scoped_refptr<media::VideoFrame>& frame,
95 scoped_refptr<media::VideoFrame>* new_frame, 95 scoped_refptr<media::VideoFrame>* new_frame,
96 base::WaitableEvent* waiter) { 96 base::WaitableEvent* waiter) {
97 DCHECK(main_thread_task_runner_->BelongsToCurrentThread()); 97 DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
98 DCHECK(frame->format() == media::PIXEL_FORMAT_ARGB || 98 DCHECK(frame->format() == media::PIXEL_FORMAT_ARGB ||
99 frame->format() == media::PIXEL_FORMAT_XRGB || 99 frame->format() == media::PIXEL_FORMAT_XRGB ||
100 frame->format() == media::PIXEL_FORMAT_I420 || 100 frame->format() == media::PIXEL_FORMAT_I420 ||
101 frame->format() == media::PIXEL_FORMAT_UYVY || 101 frame->format() == media::PIXEL_FORMAT_UYVY ||
102 frame->format() == media::PIXEL_FORMAT_NV12); 102 frame->format() == media::PIXEL_FORMAT_NV12);
103 ScopedWaitableEvent event(waiter); 103 ScopedWaitableEvent event(waiter);
104 sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul( 104 sk_sp<cc::PaintSurface> surface = cc::PaintSurface::MakeRasterN32Premul(
105 frame->visible_rect().width(), frame->visible_rect().height()); 105 frame->visible_rect().width(), frame->visible_rect().height());
106 106
107 if (!surface || !provider_) { 107 if (!surface || !provider_) {
108 // Return a black frame (yuv = {0, 0x80, 0x80}). 108 // Return a black frame (yuv = {0, 0x80, 0x80}).
109 *new_frame = media::VideoFrame::CreateColorFrame( 109 *new_frame = media::VideoFrame::CreateColorFrame(
110 frame->visible_rect().size(), 0u, 0x80, 0x80, frame->timestamp()); 110 frame->visible_rect().size(), 0u, 0x80, 0x80, frame->timestamp());
111 return; 111 return;
112 } 112 }
113 113
114 *new_frame = media::VideoFrame::CreateFrame( 114 *new_frame = media::VideoFrame::CreateFrame(
115 media::PIXEL_FORMAT_I420, frame->coded_size(), frame->visible_rect(), 115 media::PIXEL_FORMAT_I420, frame->coded_size(), frame->visible_rect(),
116 frame->natural_size(), frame->timestamp()); 116 frame->natural_size(), frame->timestamp());
117 DCHECK(provider_->ContextGL()); 117 DCHECK(provider_->ContextGL());
118 canvas_video_renderer_->Copy( 118 canvas_video_renderer_->Copy(
119 frame.get(), surface->getCanvas(), 119 frame.get(), surface->getCanvas(),
120 media::Context3D(provider_->ContextGL(), provider_->GrContext())); 120 media::Context3D(provider_->ContextGL(), provider_->GrContext()));
121 121
122 SkPixmap pixmap; 122 SkPixmap pixmap;
123 const bool result = surface->getCanvas()->peekPixels(&pixmap); 123 const bool result = surface->getCanvas()->peekPixels(&pixmap);
124 DCHECK(result) << "Error trying to access SkSurface's pixels"; 124 DCHECK(result) << "Error trying to access PaintSurface's pixels";
125 const uint32 source_pixel_format = 125 const uint32 source_pixel_format =
126 (kN32_SkColorType == kRGBA_8888_SkColorType) ? cricket::FOURCC_ABGR 126 (kN32_SkColorType == kRGBA_8888_SkColorType) ? cricket::FOURCC_ABGR
127 : cricket::FOURCC_ARGB; 127 : cricket::FOURCC_ARGB;
128 libyuv::ConvertToI420( 128 libyuv::ConvertToI420(
129 static_cast<const uint8*>(pixmap.addr(0, 0)), pixmap.getSafeSize64(), 129 static_cast<const uint8*>(pixmap.addr(0, 0)), pixmap.getSafeSize64(),
130 (*new_frame)->visible_data(media::VideoFrame::kYPlane), 130 (*new_frame)->visible_data(media::VideoFrame::kYPlane),
131 (*new_frame)->stride(media::VideoFrame::kYPlane), 131 (*new_frame)->stride(media::VideoFrame::kYPlane),
132 (*new_frame)->visible_data(media::VideoFrame::kUPlane), 132 (*new_frame)->visible_data(media::VideoFrame::kUPlane),
133 (*new_frame)->stride(media::VideoFrame::kUPlane), 133 (*new_frame)->stride(media::VideoFrame::kUPlane),
134 (*new_frame)->visible_data(media::VideoFrame::kVPlane), 134 (*new_frame)->visible_data(media::VideoFrame::kVPlane),
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 // just use what is provided. 343 // just use what is provided.
344 // Use the desired format as the best format. 344 // Use the desired format as the best format.
345 best_format->width = desired.width; 345 best_format->width = desired.width;
346 best_format->height = desired.height; 346 best_format->height = desired.height;
347 best_format->fourcc = cricket::FOURCC_I420; 347 best_format->fourcc = cricket::FOURCC_I420;
348 best_format->interval = desired.interval; 348 best_format->interval = desired.interval;
349 return true; 349 return true;
350 } 350 }
351 351
352 } // namespace content 352 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webmediaplayer_ms_compositor.cc ('k') | media/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698