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

Side by Side Diff: content/browser/renderer_host/media/video_capture_buffer_pool.cc

Issue 1106563002: FakeVideoCaptureDevice: add support for capturing into Dma-Bufs using VGEM in CrOs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ermircan@ comments; removed GpuMemoryBuffer modifications (go in other CL) Created 5 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 // 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 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h" 10 #include "content/browser/gpu/browser_gpu_memory_buffer_manager.h"
(...skipping 23 matching lines...) Expand all
34 return format_pair.frame_format; 34 return format_pair.frame_format;
35 } 35 }
36 LOG(ERROR) << "Unsupported VideoPixelFormat " 36 LOG(ERROR) << "Unsupported VideoPixelFormat "
37 << media::VideoCaptureFormat::PixelFormatToString(pixel_format); 37 << media::VideoCaptureFormat::PixelFormatToString(pixel_format);
38 return VideoFrame::UNKNOWN; 38 return VideoFrame::UNKNOWN;
39 } 39 }
40 40
41 // A simple holder of a memory-backed buffer and accesors to it. 41 // A simple holder of a memory-backed buffer and accesors to it.
42 class SimpleBufferHandle final : public VideoCaptureBufferPool::BufferHandle { 42 class SimpleBufferHandle final : public VideoCaptureBufferPool::BufferHandle {
43 public: 43 public:
44 SimpleBufferHandle(void* data, size_t size) : data_(data), size_(size) {} 44 SimpleBufferHandle(const base::SharedMemory& shared_memory)
45 : shared_memory_(shared_memory),
46 data_(shared_memory.memory()),
47 size_(shared_memory.mapped_size()) {}
45 ~SimpleBufferHandle() override {} 48 ~SimpleBufferHandle() override {}
46 49
47 size_t size() const override { return size_; } 50 size_t size() const override { return size_; }
48 void* data() override { return data_; } 51 void* data() override { return data_; }
49 gfx::GpuMemoryBufferType GetType() override { 52 gfx::GpuMemoryBufferType GetType() override {
50 return gfx::SHARED_MEMORY_BUFFER; 53 return gfx::SHARED_MEMORY_BUFFER;
51 } 54 }
52 ClientBuffer AsClientBuffer() override { return nullptr; } 55 ClientBuffer AsClientBuffer() override { return nullptr; }
56 base::PlatformFile AsPlatformFile() override {
57 #if defined(OS_POSIX)
58 return shared_memory_.handle().fd;
59 #else
60 return shared_memory_.handle();
61 #endif
62 }
53 63
54 private: 64 private:
65 const base::SharedMemory& shared_memory_;
55 void* const data_; 66 void* const data_;
56 const size_t size_; 67 const size_t size_;
57 }; 68 };
58 69
59 // A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on 70 // A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on
60 // dtor. Holds a weak reference to its GpuMemoryBuffer. 71 // dtor. Holds a weak reference to its GpuMemoryBuffer.
61 // TODO(mcasas) Map()ed on ctor, or on first use? 72 // TODO(mcasas) Map()ed on ctor, or on first use?
62 class GpuMemoryBufferBufferHandle 73 class GpuMemoryBufferBufferHandle
63 final : public VideoCaptureBufferPool::BufferHandle { 74 final : public VideoCaptureBufferPool::BufferHandle {
64 public: 75 public:
65 GpuMemoryBufferBufferHandle(gfx::GpuMemoryBuffer* gmb, size_t size) 76 GpuMemoryBufferBufferHandle(gfx::GpuMemoryBuffer* gmb, size_t size)
66 : gmb_(gmb), 77 : gmb_(gmb),
67 data_(new void* [GpuMemoryBufferImpl:: 78 data_(new void* [GpuMemoryBufferImpl::
68 NumberOfPlanesForGpuMemoryBufferFormat( 79 NumberOfPlanesForGpuMemoryBufferFormat(
69 gmb_->GetFormat())]), 80 gmb_->GetFormat())]),
70 size_(size) { 81 size_(size) {
71 DCHECK(gmb && !gmb_->IsMapped()); 82 DCHECK(gmb && !gmb_->IsMapped());
72 gmb_->Map(data_.get()); 83 if (gmb_->GetHandle().type == gfx::SHARED_MEMORY_BUFFER)
84 gmb_->Map(data_.get());
73 } 85 }
74 ~GpuMemoryBufferBufferHandle() override { gmb_->Unmap(); } 86 ~GpuMemoryBufferBufferHandle() override { gmb_->Unmap(); }
75 87
76 size_t size() const override { return size_; } 88 size_t size() const override { return size_; }
77 void* data() override { return data_[0]; } 89 void* data() override { return data_[0]; }
78 gfx::GpuMemoryBufferType GetType() override { 90 gfx::GpuMemoryBufferType GetType() override {
79 return gmb_->GetHandle().type; 91 return gmb_->GetHandle().type;
80 } 92 }
81 ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); } 93 ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); }
94 base::PlatformFile AsPlatformFile() override {
95 NOTIMPLEMENTED();
96 return base::PlatformFile();
97 }
82 98
83 private: 99 private:
84 gfx::GpuMemoryBuffer* const gmb_; 100 gfx::GpuMemoryBuffer* const gmb_;
85 scoped_ptr<void*[]> data_; 101 scoped_ptr<void*[]> data_;
86 const size_t size_; 102 const size_t size_;
87 }; 103 };
88 104
89 // Tracker specifics for SharedMemory. 105 // Tracker specifics for SharedMemory.
90 class VideoCaptureBufferPool::SharedMemTracker final : public Tracker { 106 class VideoCaptureBufferPool::SharedMemTracker final : public Tracker {
91 public: 107 public:
92 SharedMemTracker(); 108 SharedMemTracker();
93 bool Init(VideoFrame::Format format, const gfx::Size& dimensions) override; 109 bool Init(VideoFrame::Format format, const gfx::Size& dimensions) override;
94 110
95 size_t mapped_size() const override { return shared_memory_.mapped_size(); } 111 size_t mapped_size() const override { return shared_memory_.mapped_size(); }
96 112
97 scoped_ptr<BufferHandle> GetBufferHandle() override { 113 scoped_ptr<BufferHandle> GetBufferHandle() override {
98 return make_scoped_ptr( 114 return make_scoped_ptr(new SimpleBufferHandle(shared_memory_));
99 new SimpleBufferHandle(shared_memory_.memory(), mapped_size()));
100 } 115 }
101 116
102 bool ShareToProcess(base::ProcessHandle process_handle, 117 bool ShareToProcess(base::ProcessHandle process_handle,
103 base::SharedMemoryHandle* new_handle) override { 118 base::SharedMemoryHandle* new_handle) override {
104 return shared_memory_.ShareToProcess(process_handle, new_handle); 119 return shared_memory_.ShareToProcess(process_handle, new_handle);
105 } 120 }
106 121
107 private: 122 private:
108 // The memory created to be shared with renderer processes. 123 // The memory created to be shared with renderer processes.
109 base::SharedMemory shared_memory_; 124 base::SharedMemory shared_memory_;
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 return buffer_id; 363 return buffer_id;
349 } 364 }
350 365
351 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker( 366 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker(
352 int buffer_id) { 367 int buffer_id) {
353 TrackerMap::const_iterator it = trackers_.find(buffer_id); 368 TrackerMap::const_iterator it = trackers_.find(buffer_id);
354 return (it == trackers_.end()) ? NULL : it->second; 369 return (it == trackers_.end()) ? NULL : it->second;
355 } 370 }
356 371
357 } // namespace content 372 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698