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

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: reuse VASurface 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 ClientBuffer AsClientBuffer() override { return nullptr; } 50 ClientBuffer AsClientBuffer() override { return nullptr; }
51 base::SharedMemoryHandle AsPlatformHandle() override { return handle_; }
50 52
51 private: 53 private:
52 void* const data_; 54 void* const data_;
53 const size_t size_; 55 const size_t size_;
56 base::SharedMemoryHandle handle_;
54 }; 57 };
55 58
56 // A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on 59 // A holder of a GpuMemoryBuffer-backed buffer, Map()ed on ctor and Unmap()ed on
57 // dtor. Holds a weak reference to its GpuMemoryBuffer. 60 // dtor. Holds a weak reference to its GpuMemoryBuffer.
58 // TODO(mcasas) Map()ed on ctor, or on first use? 61 // TODO(mcasas) Map()ed on ctor, or on first use?
59 class GpuMemoryBufferBufferHandle 62 class GpuMemoryBufferBufferHandle
60 final : public VideoCaptureBufferPool::BufferHandle { 63 final : public VideoCaptureBufferPool::BufferHandle {
61 public: 64 public:
62 GpuMemoryBufferBufferHandle(gfx::GpuMemoryBuffer* gmb, size_t size) 65 GpuMemoryBufferBufferHandle(gfx::GpuMemoryBuffer* gmb, size_t size)
63 : gmb_(gmb), 66 : gmb_(gmb),
64 data_(new void* [GpuMemoryBufferImpl:: 67 data_(new void* [GpuMemoryBufferImpl::
65 NumberOfPlanesForGpuMemoryBufferFormat( 68 NumberOfPlanesForGpuMemoryBufferFormat(
66 gmb_->GetFormat())]), 69 gmb_->GetFormat())]),
67 size_(size) { 70 size_(size) {
68 DCHECK(gmb && !gmb_->IsMapped()); 71 DCHECK(gmb && !gmb_->IsMapped());
69 gmb_->Map(data_.get()); 72 gmb_->Map(data_.get());
70 } 73 }
71 ~GpuMemoryBufferBufferHandle() override { gmb_->Unmap(); } 74 ~GpuMemoryBufferBufferHandle() override { gmb_->Unmap(); }
72 75
73 size_t size() const override { return size_; } 76 size_t size() const override { return size_; }
74 void* data() override { return data_[0]; } 77 void* data() override { return data_[0]; }
75 ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); } 78 ClientBuffer AsClientBuffer() override { return gmb_->AsClientBuffer(); }
79 base::SharedMemoryHandle AsPlatformHandle() override {
80 return gmb_->GetHandle().handle;
81 }
76 82
77 private: 83 private:
78 gfx::GpuMemoryBuffer* const gmb_; 84 gfx::GpuMemoryBuffer* const gmb_;
79 scoped_ptr<void*[]> data_; 85 scoped_ptr<void*[]> data_;
80 const size_t size_; 86 const size_t size_;
81 }; 87 };
82 88
83 // Tracker specifics for SharedMemory. 89 // Tracker specifics for SharedMemory.
84 class VideoCaptureBufferPool::SharedMemTracker final : public Tracker { 90 class VideoCaptureBufferPool::SharedMemTracker final : public Tracker {
85 public: 91 public:
86 SharedMemTracker(); 92 SharedMemTracker();
87 bool Init(VideoFrame::Format format, const gfx::Size& dimensions) override; 93 bool Init(VideoFrame::Format format, const gfx::Size& dimensions) override;
88 94
89 size_t mapped_size() const override { return shared_memory_.mapped_size(); } 95 size_t mapped_size() const override { return shared_memory_.mapped_size(); }
90 96
91 scoped_ptr<BufferHandle> GetBufferHandle() override { 97 scoped_ptr<BufferHandle> GetBufferHandle() override {
92 return make_scoped_ptr( 98 return make_scoped_ptr(new SimpleBufferHandle(
93 new SimpleBufferHandle(shared_memory_.memory(), mapped_size())); 99 shared_memory_.memory(), mapped_size(), shared_memory_.handle()));
94 } 100 }
95 101
96 bool ShareToProcess(base::ProcessHandle process_handle, 102 bool ShareToProcess(base::ProcessHandle process_handle,
97 base::SharedMemoryHandle* new_handle) override { 103 base::SharedMemoryHandle* new_handle) override {
98 return shared_memory_.ShareToProcess(process_handle, new_handle); 104 return shared_memory_.ShareToProcess(process_handle, new_handle);
99 } 105 }
100 106
101 private: 107 private:
102 // The memory created to be shared with renderer processes. 108 // The memory created to be shared with renderer processes.
103 base::SharedMemory shared_memory_; 109 base::SharedMemory shared_memory_;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 return buffer_id; 344 return buffer_id;
339 } 345 }
340 346
341 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker( 347 VideoCaptureBufferPool::Tracker* VideoCaptureBufferPool::GetTracker(
342 int buffer_id) { 348 int buffer_id) {
343 TrackerMap::const_iterator it = trackers_.find(buffer_id); 349 TrackerMap::const_iterator it = trackers_.find(buffer_id);
344 return (it == trackers_.end()) ? NULL : it->second; 350 return (it == trackers_.end()) ? NULL : it->second;
345 } 351 }
346 352
347 } // namespace content 353 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698