OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/renderer_host/media/video_capture_buffer_pool.h" | 5 #include "content/browser/renderer_host/media/video_capture_buffer_pool.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 | 10 |
(...skipping 25 matching lines...) Expand all Loading... |
36 | 36 |
37 // Tracker specifics for SharedMemory. | 37 // Tracker specifics for SharedMemory. |
38 class VideoCaptureBufferPool::SharedMemTracker final : public Tracker { | 38 class VideoCaptureBufferPool::SharedMemTracker final : public Tracker { |
39 public: | 39 public: |
40 SharedMemTracker(); | 40 SharedMemTracker(); |
41 | 41 |
42 bool Init(VideoFrame::Format format, const gfx::Size& dimensions) override; | 42 bool Init(VideoFrame::Format format, const gfx::Size& dimensions) override; |
43 void* storage() override { return shared_memory_.memory(); } | 43 void* storage() override { return shared_memory_.memory(); } |
44 size_t requested_size() override { return shared_memory_.requested_size(); } | 44 size_t requested_size() override { return shared_memory_.requested_size(); } |
45 size_t mapped_size() override { return shared_memory_.mapped_size(); } | 45 size_t mapped_size() override { return shared_memory_.mapped_size(); } |
| 46 base::SharedMemoryHandle handle() override { return shared_memory_.handle(); } |
46 | 47 |
47 bool ShareToProcess(base::ProcessHandle process_handle, | 48 bool ShareToProcess(base::ProcessHandle process_handle, |
48 base::SharedMemoryHandle* new_handle) override { | 49 base::SharedMemoryHandle* new_handle) override { |
49 return shared_memory_.ShareToProcess(process_handle, new_handle); | 50 return shared_memory_.ShareToProcess(process_handle, new_handle); |
50 } | 51 } |
51 | 52 |
52 private: | 53 private: |
53 // The memory created to be shared with renderer processes. | 54 // The memory created to be shared with renderer processes. |
54 base::SharedMemory shared_memory_; | 55 base::SharedMemory shared_memory_; |
55 }; | 56 }; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 if (tracker->ShareToProcess(process_handle, &remote_handle)) { | 101 if (tracker->ShareToProcess(process_handle, &remote_handle)) { |
101 *memory_size = tracker->mapped_size(); | 102 *memory_size = tracker->mapped_size(); |
102 return remote_handle; | 103 return remote_handle; |
103 } | 104 } |
104 DPLOG(ERROR) << "Error mapping Shared Memory."; | 105 DPLOG(ERROR) << "Error mapping Shared Memory."; |
105 return base::SharedMemoryHandle(); | 106 return base::SharedMemoryHandle(); |
106 } | 107 } |
107 | 108 |
108 bool VideoCaptureBufferPool::GetBufferInfo(int buffer_id, | 109 bool VideoCaptureBufferPool::GetBufferInfo(int buffer_id, |
109 void** storage, | 110 void** storage, |
110 size_t* size) { | 111 size_t* size, |
| 112 base::SharedMemoryHandle* handle) { |
111 base::AutoLock lock(lock_); | 113 base::AutoLock lock(lock_); |
112 | 114 |
113 Tracker* tracker = GetTracker(buffer_id); | 115 Tracker* tracker = GetTracker(buffer_id); |
114 if (!tracker) { | 116 if (!tracker) { |
115 NOTREACHED() << "Invalid buffer_id."; | 117 NOTREACHED() << "Invalid buffer_id."; |
116 return false; | 118 return false; |
117 } | 119 } |
118 | 120 |
119 DCHECK(tracker->held_by_producer()); | 121 DCHECK(tracker->held_by_producer()); |
120 *storage = tracker->storage(); | 122 *storage = tracker->storage(); |
121 *size = tracker->mapped_size(); | 123 *size = tracker->mapped_size(); |
| 124 *handle = tracker->handle(); |
122 return true; | 125 return true; |
123 } | 126 } |
124 | 127 |
125 int VideoCaptureBufferPool::ReserveForProducer(media::VideoPixelFormat format, | 128 int VideoCaptureBufferPool::ReserveForProducer(media::VideoPixelFormat format, |
126 const gfx::Size& dimensions, | 129 const gfx::Size& dimensions, |
127 int* buffer_id_to_drop) { | 130 int* buffer_id_to_drop) { |
128 base::AutoLock lock(lock_); | 131 base::AutoLock lock(lock_); |
129 return ReserveForProducerInternal(format, dimensions, buffer_id_to_drop); | 132 return ReserveForProducerInternal(format, dimensions, buffer_id_to_drop); |
130 } | 133 } |
131 | 134 |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 return buffer_id; | 232 return buffer_id; |
230 } | 233 } |
231 | 234 |
232 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker( | 235 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker( |
233 int buffer_id) { | 236 int buffer_id) { |
234 TrackerMap::const_iterator it = trackers_.find(buffer_id); | 237 TrackerMap::const_iterator it = trackers_.find(buffer_id); |
235 return (it == trackers_.end()) ? NULL : it->second; | 238 return (it == trackers_.end()) ? NULL : it->second; |
236 } | 239 } |
237 | 240 |
238 } // namespace content | 241 } // namespace content |
OLD | NEW |