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

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

Issue 1016773002: MJPEG acceleration for video capture using VAAPI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase 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(void* data, size_t size, base::SharedMemoryHandle handle)
45 : data_(data), size_(size), handle_(handle) {}
45 ~SimpleBufferHandle() override {} 46 ~SimpleBufferHandle() override {}
46 47
47 size_t size() const override { return size_; } 48 size_t size() const override { return size_; }
48 void* data() override { return data_; } 49 void* data() override { return data_; }
49 gfx::GpuMemoryBufferType GetType() override { 50 gfx::GpuMemoryBufferType GetType() override {
50 return gfx::SHARED_MEMORY_BUFFER; 51 return gfx::SHARED_MEMORY_BUFFER;
51 } 52 }
52 ClientBuffer AsClientBuffer() override { return nullptr; } 53 ClientBuffer AsClientBuffer() override { return nullptr; }
54 base::PlatformFile AsPlatformHandle() override {
55 #if defined(OS_POSIX)
56 return handle_.fd;
57 #else
58 return handle_;
59 #endif
60 }
53 61
54 private: 62 private:
55 void* const data_; 63 void* const data_;
56 const size_t size_; 64 const size_t size_;
65 base::SharedMemoryHandle handle_;
57 }; 66 };
58 67
59 // A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on 68 // A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on
60 // dtor. Holds a weak reference to its GpuMemoryBuffer. 69 // dtor. Holds a weak reference to its GpuMemoryBuffer.
61 // TODO(mcasas) Map()ed on ctor, or on first use? 70 // TODO(mcasas) Map()ed on ctor, or on first use?
62 class GpuMemoryBufferBufferHandle 71 class GpuMemoryBufferBufferHandle
63 final : public VideoCaptureBufferPool::BufferHandle { 72 final : public VideoCaptureBufferPool::BufferHandle {
64 public: 73 public:
65 GpuMemoryBufferBufferHandle(gfx::GpuMemoryBuffer* gmb, size_t size) 74 GpuMemoryBufferBufferHandle(gfx::GpuMemoryBuffer* gmb, size_t size)
66 : gmb_(gmb), 75 : gmb_(gmb),
67 data_(new void* [GpuMemoryBufferImpl:: 76 data_(new void* [GpuMemoryBufferImpl::
68 NumberOfPlanesForGpuMemoryBufferFormat( 77 NumberOfPlanesForGpuMemoryBufferFormat(
69 gmb_->GetFormat())]), 78 gmb_->GetFormat())]),
70 size_(size) { 79 size_(size) {
71 DCHECK(gmb && !gmb_->IsMapped()); 80 DCHECK(gmb && !gmb_->IsMapped());
72 gmb_->Map(data_.get()); 81 gmb_->Map(data_.get());
73 } 82 }
74 ~GpuMemoryBufferBufferHandle() override { gmb_->Unmap(); } 83 ~GpuMemoryBufferBufferHandle() override { gmb_->Unmap(); }
75 84
76 size_t size() const override { return size_; } 85 size_t size() const override { return size_; }
77 void* data() override { return data_[0]; } 86 void* data() override { return data_[0]; }
78 gfx::GpuMemoryBufferType GetType() override { 87 gfx::GpuMemoryBufferType GetType() override {
79 return gmb_->GetHandle().type; 88 return gmb_->GetHandle().type;
80 } 89 }
81 ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); } 90 ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); }
91 base::PlatformFile AsPlatformHandle() override {
92 #if defined(OS_POSIX)
93 return gmb_->GetHandle().handle.fd;
94 #else
95 return gmb_->GetHandle().handle;
96 #endif
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(
99 new SimpleBufferHandle(shared_memory_.memory(), mapped_size())); 115 shared_memory_.memory(), mapped_size(), shared_memory_.handle()));
100 } 116 }
101 117
102 bool ShareToProcess(base::ProcessHandle process_handle, 118 bool ShareToProcess(base::ProcessHandle process_handle,
103 base::SharedMemoryHandle* new_handle) override { 119 base::SharedMemoryHandle* new_handle) override {
104 return shared_memory_.ShareToProcess(process_handle, new_handle); 120 return shared_memory_.ShareToProcess(process_handle, new_handle);
105 } 121 }
106 122
107 private: 123 private:
108 // The memory created to be shared with renderer processes. 124 // The memory created to be shared with renderer processes.
109 base::SharedMemory shared_memory_; 125 base::SharedMemory shared_memory_;
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 return buffer_id; 364 return buffer_id;
349 } 365 }
350 366
351 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker( 367 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker(
352 int buffer_id) { 368 int buffer_id) {
353 TrackerMap::const_iterator it = trackers_.find(buffer_id); 369 TrackerMap::const_iterator it = trackers_.find(buffer_id);
354 return (it == trackers_.end()) ? NULL : it->second; 370 return (it == trackers_.end()) ? NULL : it->second;
355 } 371 }
356 372
357 } // namespace content 373 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698