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

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

Issue 2523673004: [NOT FOR COMMIT] Fully replace SkCanvas uses.
Patch Set: Support Android build. Created 4 years 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
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/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
12 #include "content/common/gpu/client/context_provider_command_buffer.h" 12 #include "content/common/gpu/client/context_provider_command_buffer.h"
13 #include "content/renderer/media/webrtc/webrtc_video_frame_adapter.h" 13 #include "content/renderer/media/webrtc/webrtc_video_frame_adapter.h"
14 #include "content/renderer/render_thread_impl.h" 14 #include "content/renderer/render_thread_impl.h"
15 #include "media/base/timestamp_constants.h" 15 #include "media/base/timestamp_constants.h"
16 #include "media/base/video_util.h" 16 #include "media/base/video_util.h"
17 #include "media/renderers/skcanvas_video_renderer.h" 17 #include "media/renderers/skcanvas_video_renderer.h"
18 #include "skia/ext/cdl_surface.h"
18 #include "skia/ext/platform_canvas.h" 19 #include "skia/ext/platform_canvas.h"
19 #include "third_party/libyuv/include/libyuv/convert.h" 20 #include "third_party/libyuv/include/libyuv/convert.h"
20 #include "third_party/libyuv/include/libyuv/convert_from.h" 21 #include "third_party/libyuv/include/libyuv/convert_from.h"
21 #include "third_party/libyuv/include/libyuv/scale.h" 22 #include "third_party/libyuv/include/libyuv/scale.h"
22 #include "third_party/skia/include/core/SkSurface.h" 23 #include "third_party/skia/include/core/SkSurface.h"
23 #include "third_party/webrtc/common_video/rotation.h" 24 #include "third_party/webrtc/common_video/rotation.h"
24 25
25 namespace content { 26 namespace content {
26 27
27 namespace { 28 namespace {
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 const scoped_refptr<media::VideoFrame>& frame, 94 const scoped_refptr<media::VideoFrame>& frame,
94 scoped_refptr<media::VideoFrame>* new_frame, 95 scoped_refptr<media::VideoFrame>* new_frame,
95 base::WaitableEvent* waiter) { 96 base::WaitableEvent* waiter) {
96 DCHECK(main_thread_task_runner_->BelongsToCurrentThread()); 97 DCHECK(main_thread_task_runner_->BelongsToCurrentThread());
97 DCHECK(frame->format() == media::PIXEL_FORMAT_ARGB || 98 DCHECK(frame->format() == media::PIXEL_FORMAT_ARGB ||
98 frame->format() == media::PIXEL_FORMAT_XRGB || 99 frame->format() == media::PIXEL_FORMAT_XRGB ||
99 frame->format() == media::PIXEL_FORMAT_I420 || 100 frame->format() == media::PIXEL_FORMAT_I420 ||
100 frame->format() == media::PIXEL_FORMAT_UYVY || 101 frame->format() == media::PIXEL_FORMAT_UYVY ||
101 frame->format() == media::PIXEL_FORMAT_NV12); 102 frame->format() == media::PIXEL_FORMAT_NV12);
102 ScopedWaitableEvent event(waiter); 103 ScopedWaitableEvent event(waiter);
103 sk_sp<SkSurface> surface = SkSurface::MakeRasterN32Premul( 104 sk_sp<CdlSurface> surface = CdlSurface::MakeRasterN32Premul(
104 frame->visible_rect().width(), frame->visible_rect().height()); 105 frame->visible_rect().width(), frame->visible_rect().height());
105 106
106 if (!surface || !provider_) { 107 if (!surface || !provider_) {
107 // Return a black frame (yuv = {0, 0x80, 0x80}). 108 // Return a black frame (yuv = {0, 0x80, 0x80}).
108 *new_frame = media::VideoFrame::CreateColorFrame( 109 *new_frame = media::VideoFrame::CreateColorFrame(
109 frame->visible_rect().size(), 0u, 0x80, 0x80, frame->timestamp()); 110 frame->visible_rect().size(), 0u, 0x80, 0x80, frame->timestamp());
110 return; 111 return;
111 } 112 }
112 113
113 *new_frame = media::VideoFrame::CreateFrame( 114 *new_frame = media::VideoFrame::CreateFrame(
114 media::PIXEL_FORMAT_I420, frame->coded_size(), frame->visible_rect(), 115 media::PIXEL_FORMAT_I420, frame->coded_size(), frame->visible_rect(),
115 frame->natural_size(), frame->timestamp()); 116 frame->natural_size(), frame->timestamp());
116 DCHECK(provider_->ContextGL()); 117 DCHECK(provider_->ContextGL());
117 canvas_video_renderer_->Copy( 118 canvas_video_renderer_->Copy(
118 frame.get(), surface->getCanvas(), 119 frame.get(), surface->getCanvas(),
119 media::Context3D(provider_->ContextGL(), provider_->GrContext())); 120 media::Context3D(provider_->ContextGL(), provider_->GrContext()));
120 121
121 SkPixmap pixmap; 122 SkPixmap pixmap;
122 const bool result = surface->getCanvas()->peekPixels(&pixmap); 123 const bool result = GetSkCanvas(surface->getCanvas())->peekPixels(&pixmap);
123 DCHECK(result) << "Error trying to access SkSurface's pixels"; 124 DCHECK(result) << "Error trying to access SkSurface's pixels";
124 const uint32 source_pixel_format = 125 const uint32 source_pixel_format =
125 (kN32_SkColorType == kRGBA_8888_SkColorType) ? cricket::FOURCC_ABGR 126 (kN32_SkColorType == kRGBA_8888_SkColorType) ? cricket::FOURCC_ABGR
126 : cricket::FOURCC_ARGB; 127 : cricket::FOURCC_ARGB;
127 libyuv::ConvertToI420( 128 libyuv::ConvertToI420(
128 static_cast<const uint8*>(pixmap.addr(0, 0)), pixmap.getSafeSize64(), 129 static_cast<const uint8*>(pixmap.addr(0, 0)), pixmap.getSafeSize64(),
129 (*new_frame)->visible_data(media::VideoFrame::kYPlane), 130 (*new_frame)->visible_data(media::VideoFrame::kYPlane),
130 (*new_frame)->stride(media::VideoFrame::kYPlane), 131 (*new_frame)->stride(media::VideoFrame::kYPlane),
131 (*new_frame)->visible_data(media::VideoFrame::kUPlane), 132 (*new_frame)->visible_data(media::VideoFrame::kUPlane),
132 (*new_frame)->stride(media::VideoFrame::kUPlane), 133 (*new_frame)->stride(media::VideoFrame::kUPlane),
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 // just use what is provided. 315 // just use what is provided.
315 // Use the desired format as the best format. 316 // Use the desired format as the best format.
316 best_format->width = desired.width; 317 best_format->width = desired.width;
317 best_format->height = desired.height; 318 best_format->height = desired.height;
318 best_format->fourcc = cricket::FOURCC_I420; 319 best_format->fourcc = cricket::FOURCC_I420;
319 best_format->interval = desired.interval; 320 best_format->interval = desired.interval;
320 return true; 321 return true;
321 } 322 }
322 323
323 } // namespace content 324 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/webmediaplayer_ms_compositor.cc ('k') | content/renderer/pepper/pepper_graphics_2d_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698