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> | |
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 Loading... | |
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 |
OLD | NEW |