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

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: Recreate DXGIDuplicateOutput if AcquireNextFrame does not return a known error code. Created 4 years, 7 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> 13 #include <utility>
14
14 #include <string.h> 15 #include <string.h>
15 16
17 #include "webrtc/base/checks.h"
18
16 namespace webrtc { 19 namespace webrtc {
17 20
18 DesktopFrame::DesktopFrame(DesktopSize size, 21 DesktopFrame::DesktopFrame(DesktopSize size,
19 int stride, 22 int stride,
20 uint8_t* data, 23 uint8_t* data,
21 SharedMemory* shared_memory) 24 SharedMemory* shared_memory)
22 : size_(size), 25 : data_(data),
26 shared_memory_(shared_memory),
27 size_(size),
23 stride_(stride), 28 stride_(stride),
24 data_(data),
25 shared_memory_(shared_memory),
26 capture_time_ms_(0) { 29 capture_time_ms_(0) {
27 } 30 }
28 31
29 DesktopFrame::~DesktopFrame() {} 32 DesktopFrame::~DesktopFrame() {}
30 33
31 void DesktopFrame::CopyPixelsFrom(uint8_t* src_buffer, int src_stride, 34 void DesktopFrame::CopyPixelsFrom(uint8_t* src_buffer, int src_stride,
32 const DesktopRect& dest_rect) { 35 const DesktopRect& dest_rect) {
33 assert(DesktopRect::MakeSize(size()).ContainsRect(dest_rect)); 36 RTC_CHECK(DesktopRect::MakeSize(size()).ContainsRect(dest_rect));
34 37
35 uint8_t* dest = GetFrameDataAtPos(dest_rect.top_left()); 38 uint8_t* dest = GetFrameDataAtPos(dest_rect.top_left());
36 for (int y = 0; y < dest_rect.height(); ++y) { 39 for (int y = 0; y < dest_rect.height(); ++y) {
37 memcpy(dest, src_buffer, DesktopFrame::kBytesPerPixel * dest_rect.width()); 40 memcpy(dest, src_buffer, DesktopFrame::kBytesPerPixel * dest_rect.width());
38 src_buffer += src_stride; 41 src_buffer += src_stride;
39 dest += stride(); 42 dest += stride();
40 } 43 }
41 } 44 }
42 45
43 void DesktopFrame::CopyPixelsFrom(const DesktopFrame& src_frame, 46 void DesktopFrame::CopyPixelsFrom(const DesktopFrame& src_frame,
44 const DesktopVector& src_pos, 47 const DesktopVector& src_pos,
45 const DesktopRect& dest_rect) { 48 const DesktopRect& dest_rect) {
46 assert(DesktopRect::MakeSize(src_frame.size()).ContainsRect( 49 RTC_CHECK(DesktopRect::MakeSize(src_frame.size()).ContainsRect(
47 DesktopRect::MakeOriginSize(src_pos, dest_rect.size()))); 50 DesktopRect::MakeOriginSize(src_pos, dest_rect.size())));
48 51
49 CopyPixelsFrom(src_frame.GetFrameDataAtPos(src_pos), 52 CopyPixelsFrom(src_frame.GetFrameDataAtPos(src_pos),
50 src_frame.stride(), dest_rect); 53 src_frame.stride(), dest_rect);
51 } 54 }
52 55
53 uint8_t* DesktopFrame::GetFrameDataAtPos(const DesktopVector& pos) const { 56 uint8_t* DesktopFrame::GetFrameDataAtPos(const DesktopVector& pos) const {
54 return data() + stride() * pos.y() + DesktopFrame::kBytesPerPixel * pos.x(); 57 return data() + stride() * pos.y() + DesktopFrame::kBytesPerPixel * pos.x();
55 } 58 }
56 59
(...skipping 17 matching lines...) Expand all
74 result->set_dpi(frame.dpi()); 77 result->set_dpi(frame.dpi());
75 result->set_capture_time_ms(frame.capture_time_ms()); 78 result->set_capture_time_ms(frame.capture_time_ms());
76 *result->mutable_updated_region() = frame.updated_region(); 79 *result->mutable_updated_region() = frame.updated_region();
77 return result; 80 return result;
78 } 81 }
79 82
80 // static 83 // static
81 std::unique_ptr<DesktopFrame> SharedMemoryDesktopFrame::Create( 84 std::unique_ptr<DesktopFrame> SharedMemoryDesktopFrame::Create(
82 DesktopSize size, 85 DesktopSize size,
83 SharedMemoryFactory* shared_memory_factory) { 86 SharedMemoryFactory* shared_memory_factory) {
84 size_t buffer_size = 87 size_t buffer_size = size.height() * size.width() * kBytesPerPixel;
85 size.width() * size.height() * DesktopFrame::kBytesPerPixel; 88 std::unique_ptr<SharedMemory> shared_memory =
86 std::unique_ptr<SharedMemory> shared_memory; 89 shared_memory_factory->CreateSharedMemory(buffer_size);
87 shared_memory = shared_memory_factory->CreateSharedMemory(buffer_size);
88 if (!shared_memory) 90 if (!shared_memory)
89 return nullptr; 91 return nullptr;
90 92
93 return Create(size, std::move(shared_memory));
94 }
95
96 // static
97 std::unique_ptr<DesktopFrame> SharedMemoryDesktopFrame::Create(
98 DesktopSize size,
99 std::unique_ptr<SharedMemory> shared_memory) {
100 RTC_DCHECK(shared_memory);
101 int stride = size.width() * kBytesPerPixel;
91 return std::unique_ptr<DesktopFrame>(new SharedMemoryDesktopFrame( 102 return std::unique_ptr<DesktopFrame>(new SharedMemoryDesktopFrame(
92 size, size.width() * DesktopFrame::kBytesPerPixel, 103 size, stride, shared_memory.release()));
93 std::move(shared_memory)));
94 } 104 }
95 105
96 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(DesktopSize size, 106 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(DesktopSize size,
97 int stride, 107 int stride,
98 SharedMemory* shared_memory) 108 SharedMemory* shared_memory)
99 : DesktopFrame(size, 109 : DesktopFrame(size,
100 stride, 110 stride,
101 reinterpret_cast<uint8_t*>(shared_memory->data()), 111 reinterpret_cast<uint8_t*>(shared_memory->data()),
102 shared_memory) {} 112 shared_memory) {}
103 113
104 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(
105 DesktopSize size,
106 int stride,
107 std::unique_ptr<SharedMemory> shared_memory)
108 : DesktopFrame(size,
109 stride,
110 reinterpret_cast<uint8_t*>(shared_memory->data()),
111 shared_memory.release()) {}
112
113 SharedMemoryDesktopFrame::~SharedMemoryDesktopFrame() { 114 SharedMemoryDesktopFrame::~SharedMemoryDesktopFrame() {
114 delete shared_memory_; 115 delete shared_memory_;
115 } 116 }
116 117
117 } // namespace webrtc 118 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/desktop_capture/desktop_frame.h ('k') | webrtc/modules/desktop_capture/screen_capturer_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698