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

Side by Side Diff: webrtc/modules/desktop_capture/desktop_frame.cc

Issue 1845113002: DirectX based screen capturer logic (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Remove width change in Texture::Capture Created 4 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "webrtc/modules/desktop_capture/desktop_frame.h" 11 #include "webrtc/modules/desktop_capture/desktop_frame.h"
12 12
13 #include <assert.h>
14 #include <string.h> 13 #include <string.h>
15 14
15 #include "webrtc/base/checks.h"
16
16 namespace webrtc { 17 namespace webrtc {
17 18
18 DesktopFrame::DesktopFrame(DesktopSize size, 19 DesktopFrame::DesktopFrame(DesktopSize size,
19 int stride, 20 int stride,
20 uint8_t* data, 21 uint8_t* data,
21 SharedMemory* shared_memory) 22 SharedMemory* shared_memory)
22 : size_(size), 23 : data_(data),
24 shared_memory_(shared_memory),
25 size_(size),
23 stride_(stride), 26 stride_(stride),
24 data_(data),
25 shared_memory_(shared_memory),
26 capture_time_ms_(0) { 27 capture_time_ms_(0) {
27 } 28 }
28 29
29 DesktopFrame::~DesktopFrame() {} 30 DesktopFrame::~DesktopFrame() {}
30 31
31 void DesktopFrame::CopyPixelsFrom(uint8_t* src_buffer, int src_stride, 32 void DesktopFrame::CopyPixelsFrom(uint8_t* src_buffer, int src_stride,
32 const DesktopRect& dest_rect) { 33 const DesktopRect& dest_rect) {
33 assert(DesktopRect::MakeSize(size()).ContainsRect(dest_rect)); 34 RTC_CHECK(DesktopRect::MakeSize(size()).ContainsRect(dest_rect));
34 35
35 uint8_t* dest = GetFrameDataAtPos(dest_rect.top_left()); 36 uint8_t* dest = GetFrameDataAtPos(dest_rect.top_left());
36 for (int y = 0; y < dest_rect.height(); ++y) { 37 for (int y = 0; y < dest_rect.height(); ++y) {
37 memcpy(dest, src_buffer, DesktopFrame::kBytesPerPixel * dest_rect.width()); 38 memcpy(dest, src_buffer, DesktopFrame::kBytesPerPixel * dest_rect.width());
38 src_buffer += src_stride; 39 src_buffer += src_stride;
39 dest += stride(); 40 dest += stride();
40 } 41 }
41 } 42 }
42 43
43 void DesktopFrame::CopyPixelsFrom(const DesktopFrame& src_frame, 44 void DesktopFrame::CopyPixelsFrom(const DesktopFrame& src_frame,
44 const DesktopVector& src_pos, 45 const DesktopVector& src_pos,
45 const DesktopRect& dest_rect) { 46 const DesktopRect& dest_rect) {
46 assert(DesktopRect::MakeSize(src_frame.size()).ContainsRect( 47 RTC_CHECK(DesktopRect::MakeSize(src_frame.size()).ContainsRect(
47 DesktopRect::MakeOriginSize(src_pos, dest_rect.size()))); 48 DesktopRect::MakeOriginSize(src_pos, dest_rect.size())));
48 49
49 CopyPixelsFrom(src_frame.GetFrameDataAtPos(src_pos), 50 CopyPixelsFrom(src_frame.GetFrameDataAtPos(src_pos),
50 src_frame.stride(), dest_rect); 51 src_frame.stride(), dest_rect);
51 } 52 }
52 53
53 uint8_t* DesktopFrame::GetFrameDataAtPos(const DesktopVector& pos) const { 54 uint8_t* DesktopFrame::GetFrameDataAtPos(const DesktopVector& pos) const {
54 return data() + stride() * pos.y() + DesktopFrame::kBytesPerPixel * pos.x(); 55 return data() + stride() * pos.y() + DesktopFrame::kBytesPerPixel * pos.x();
55 } 56 }
56 57
(...skipping 17 matching lines...) Expand all
74 result->set_dpi(frame.dpi()); 75 result->set_dpi(frame.dpi());
75 result->set_capture_time_ms(frame.capture_time_ms()); 76 result->set_capture_time_ms(frame.capture_time_ms());
76 *result->mutable_updated_region() = frame.updated_region(); 77 *result->mutable_updated_region() = frame.updated_region();
77 return result; 78 return result;
78 } 79 }
79 80
80 // static 81 // static
81 std::unique_ptr<DesktopFrame> SharedMemoryDesktopFrame::Create( 82 std::unique_ptr<DesktopFrame> SharedMemoryDesktopFrame::Create(
82 DesktopSize size, 83 DesktopSize size,
83 SharedMemoryFactory* shared_memory_factory) { 84 SharedMemoryFactory* shared_memory_factory) {
84 size_t buffer_size = 85 return Create(size,
85 size.width() * size.height() * DesktopFrame::kBytesPerPixel; 86 size.width() * DesktopFrame::kBytesPerPixel,
87 shared_memory_factory);
88 }
89
90 // static
91 std::unique_ptr<DesktopFrame> SharedMemoryDesktopFrame::Create(
92 DesktopSize size, int stride, SharedMemoryFactory* shared_memory_factory) {
Sergey Ulanov 2016/04/14 23:10:42 one argument per line in function definition pleas
Hzj_jie 2016/04/15 19:42:17 Done.
93 size_t buffer_size = size.height() * stride;
86 std::unique_ptr<SharedMemory> shared_memory; 94 std::unique_ptr<SharedMemory> shared_memory;
87 shared_memory = rtc::ScopedToUnique( 95 shared_memory = rtc::ScopedToUnique(
88 shared_memory_factory->CreateSharedMemory(buffer_size)); 96 shared_memory_factory->CreateSharedMemory(buffer_size));
89 if (!shared_memory) 97 if (!shared_memory)
90 return nullptr; 98 return nullptr;
91 99
92 return std::unique_ptr<DesktopFrame>(new SharedMemoryDesktopFrame( 100 return std::unique_ptr<DesktopFrame>(new SharedMemoryDesktopFrame(
93 size, size.width() * DesktopFrame::kBytesPerPixel, 101 size, stride, shared_memory.release()));
94 std::move(shared_memory)));
95 } 102 }
96 103
97 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(DesktopSize size, 104 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(DesktopSize size,
98 int stride, 105 int stride,
99 SharedMemory* shared_memory) 106 SharedMemory* shared_memory)
100 : DesktopFrame(size, 107 : DesktopFrame(size,
101 stride, 108 stride,
102 reinterpret_cast<uint8_t*>(shared_memory->data()), 109 reinterpret_cast<uint8_t*>(shared_memory->data()),
103 shared_memory) {} 110 shared_memory) {}
104 111
105 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(
106 DesktopSize size,
107 int stride,
108 std::unique_ptr<SharedMemory> shared_memory)
109 : DesktopFrame(size,
110 stride,
111 reinterpret_cast<uint8_t*>(shared_memory->data()),
112 shared_memory.release()) {}
113
114 SharedMemoryDesktopFrame::~SharedMemoryDesktopFrame() { 112 SharedMemoryDesktopFrame::~SharedMemoryDesktopFrame() {
115 delete shared_memory_; 113 delete shared_memory_;
116 } 114 }
117 115
118 } // namespace webrtc 116 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698