OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/browser/media/capture/aura_window_capture_machine.h" | 5 #include "content/browser/media/capture/aura_window_capture_machine.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
12 #include "cc/output/copy_output_request.h" | 12 #include "cc/output/copy_output_request.h" |
13 #include "cc/output/copy_output_result.h" | 13 #include "cc/output/copy_output_result.h" |
14 #include "components/display_compositor/gl_helper.h" | 14 #include "content/browser/compositor/gl_helper.h" |
15 #include "content/browser/compositor/image_transport_factory.h" | 15 #include "content/browser/compositor/image_transport_factory.h" |
16 #include "content/browser/media/capture/desktop_capture_device_uma_types.h" | 16 #include "content/browser/media/capture/desktop_capture_device_uma_types.h" |
17 #include "content/public/browser/browser_thread.h" | 17 #include "content/public/browser/browser_thread.h" |
18 #include "content/public/browser/power_save_blocker.h" | 18 #include "content/public/browser/power_save_blocker.h" |
19 #include "media/base/video_capture_types.h" | 19 #include "media/base/video_capture_types.h" |
20 #include "media/base/video_util.h" | 20 #include "media/base/video_util.h" |
21 #include "media/capture/content/thread_safe_capture_oracle.h" | 21 #include "media/capture/content/thread_safe_capture_oracle.h" |
22 #include "media/capture/content/video_capture_oracle.h" | 22 #include "media/capture/content/video_capture_oracle.h" |
23 #include "skia/ext/image_operations.h" | 23 #include "skia/ext/image_operations.h" |
24 #include "third_party/skia/include/core/SkBitmap.h" | 24 #include "third_party/skia/include/core/SkBitmap.h" |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 gfx::Rect region_in_frame = media::ComputeLetterboxRegion( | 245 gfx::Rect region_in_frame = media::ComputeLetterboxRegion( |
246 video_frame->visible_rect(), result->size()); | 246 video_frame->visible_rect(), result->size()); |
247 region_in_frame = gfx::Rect(region_in_frame.x() & ~1, | 247 region_in_frame = gfx::Rect(region_in_frame.x() & ~1, |
248 region_in_frame.y() & ~1, | 248 region_in_frame.y() & ~1, |
249 region_in_frame.width() & ~1, | 249 region_in_frame.width() & ~1, |
250 region_in_frame.height() & ~1); | 250 region_in_frame.height() & ~1); |
251 if (region_in_frame.IsEmpty()) | 251 if (region_in_frame.IsEmpty()) |
252 return false; | 252 return false; |
253 | 253 |
254 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); | 254 ImageTransportFactory* factory = ImageTransportFactory::GetInstance(); |
255 display_compositor::GLHelper* gl_helper = factory->GetGLHelper(); | 255 GLHelper* gl_helper = factory->GetGLHelper(); |
256 if (!gl_helper) | 256 if (!gl_helper) |
257 return false; | 257 return false; |
258 | 258 |
259 cc::TextureMailbox texture_mailbox; | 259 cc::TextureMailbox texture_mailbox; |
260 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 260 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
261 result->TakeTexture(&texture_mailbox, &release_callback); | 261 result->TakeTexture(&texture_mailbox, &release_callback); |
262 DCHECK(texture_mailbox.IsTexture()); | 262 DCHECK(texture_mailbox.IsTexture()); |
263 if (!texture_mailbox.IsTexture()) | 263 if (!texture_mailbox.IsTexture()) |
264 return false; | 264 return false; |
265 | 265 |
266 gfx::Rect result_rect(result->size()); | 266 gfx::Rect result_rect(result->size()); |
267 if (!yuv_readback_pipeline_ || | 267 if (!yuv_readback_pipeline_ || |
268 yuv_readback_pipeline_->scaler()->SrcSize() != result_rect.size() || | 268 yuv_readback_pipeline_->scaler()->SrcSize() != result_rect.size() || |
269 yuv_readback_pipeline_->scaler()->SrcSubrect() != result_rect || | 269 yuv_readback_pipeline_->scaler()->SrcSubrect() != result_rect || |
270 yuv_readback_pipeline_->scaler()->DstSize() != region_in_frame.size()) { | 270 yuv_readback_pipeline_->scaler()->DstSize() != region_in_frame.size()) { |
271 yuv_readback_pipeline_.reset(gl_helper->CreateReadbackPipelineYUV( | 271 yuv_readback_pipeline_.reset( |
272 display_compositor::GLHelper::SCALER_QUALITY_FAST, result_rect.size(), | 272 gl_helper->CreateReadbackPipelineYUV(GLHelper::SCALER_QUALITY_FAST, |
273 result_rect, region_in_frame.size(), true, true)); | 273 result_rect.size(), |
| 274 result_rect, |
| 275 region_in_frame.size(), |
| 276 true, |
| 277 true)); |
274 } | 278 } |
275 | 279 |
276 cursor_renderer_->SnapshotCursorState(region_in_frame); | 280 cursor_renderer_->SnapshotCursorState(region_in_frame); |
277 yuv_readback_pipeline_->ReadbackYUV( | 281 yuv_readback_pipeline_->ReadbackYUV( |
278 texture_mailbox.mailbox(), texture_mailbox.sync_token(), | 282 texture_mailbox.mailbox(), texture_mailbox.sync_token(), |
279 video_frame->visible_rect(), | 283 video_frame->visible_rect(), |
280 video_frame->stride(media::VideoFrame::kYPlane), | 284 video_frame->stride(media::VideoFrame::kYPlane), |
281 video_frame->data(media::VideoFrame::kYPlane), | 285 video_frame->data(media::VideoFrame::kYPlane), |
282 video_frame->stride(media::VideoFrame::kUPlane), | 286 video_frame->stride(media::VideoFrame::kUPlane), |
283 video_frame->data(media::VideoFrame::kUPlane), | 287 video_frame->data(media::VideoFrame::kUPlane), |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
359 // TODO(miu): The CopyOutputRequest should be made earlier, at WillCommit(). | 363 // TODO(miu): The CopyOutputRequest should be made earlier, at WillCommit(). |
360 // http://crbug.com/492839 | 364 // http://crbug.com/492839 |
361 BrowserThread::PostTask( | 365 BrowserThread::PostTask( |
362 BrowserThread::UI, | 366 BrowserThread::UI, |
363 FROM_HERE, | 367 FROM_HERE, |
364 base::Bind(&AuraWindowCaptureMachine::Capture, weak_factory_.GetWeakPtr(), | 368 base::Bind(&AuraWindowCaptureMachine::Capture, weak_factory_.GetWeakPtr(), |
365 true)); | 369 true)); |
366 } | 370 } |
367 | 371 |
368 } // namespace content | 372 } // namespace content |
OLD | NEW |