OLD | NEW |
---|---|
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 Loading... | |
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 = rtc::ScopedToUnique( |
Sergey Ulanov
2016/05/13 19:38:10
Don't need ScopedToUnique() anymore
Hzj_jie
2016/05/16 18:17:28
Done.
| |
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 if (!shared_memory) | |
Sergey Ulanov
2016/05/13 19:38:10
Don't need this - this function is not supposed to
Hzj_jie
2016/05/16 18:17:28
Done.
| |
101 return nullptr; | |
102 | |
103 int stride = size.width() * kBytesPerPixel; | |
91 return std::unique_ptr<DesktopFrame>(new SharedMemoryDesktopFrame( | 104 return std::unique_ptr<DesktopFrame>(new SharedMemoryDesktopFrame( |
92 size, size.width() * DesktopFrame::kBytesPerPixel, | 105 size, stride, shared_memory.release())); |
93 std::move(shared_memory))); | |
94 } | 106 } |
95 | 107 |
96 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(DesktopSize size, | 108 SharedMemoryDesktopFrame::SharedMemoryDesktopFrame(DesktopSize size, |
97 int stride, | 109 int stride, |
98 SharedMemory* shared_memory) | 110 SharedMemory* shared_memory) |
99 : DesktopFrame(size, | 111 : DesktopFrame(size, |
100 stride, | 112 stride, |
101 reinterpret_cast<uint8_t*>(shared_memory->data()), | 113 reinterpret_cast<uint8_t*>(shared_memory->data()), |
102 shared_memory) {} | 114 shared_memory) {} |
103 | 115 |
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() { | 116 SharedMemoryDesktopFrame::~SharedMemoryDesktopFrame() { |
114 delete shared_memory_; | 117 delete shared_memory_; |
115 } | 118 } |
116 | 119 |
117 } // namespace webrtc | 120 } // namespace webrtc |
OLD | NEW |