OLD | NEW |
| (Empty) |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "content/browser/renderer_host/media/shared_memory_buffer_tracker.h" | |
6 | |
7 #include "base/memory/ptr_util.h" | |
8 #include "content/browser/renderer_host/media/shared_memory_buffer_handle.h" | |
9 #include "mojo/public/cpp/system/platform_handle.h" | |
10 | |
11 namespace content { | |
12 | |
13 SharedMemoryBufferTracker::SharedMemoryBufferTracker() | |
14 : VideoCaptureBufferTracker() {} | |
15 | |
16 bool SharedMemoryBufferTracker::Init(const gfx::Size& dimensions, | |
17 media::VideoPixelFormat format, | |
18 media::VideoPixelStorage storage_type, | |
19 base::Lock* lock) { | |
20 DVLOG(2) << __func__ << "allocating ShMem of " << dimensions.ToString(); | |
21 set_dimensions(dimensions); | |
22 // |dimensions| can be 0x0 for trackers that do not require memory backing. | |
23 set_max_pixel_count(dimensions.GetArea()); | |
24 set_pixel_format(format); | |
25 set_storage_type(storage_type); | |
26 mapped_size_ = | |
27 media::VideoCaptureFormat(dimensions, 0.0f, format, storage_type) | |
28 .ImageAllocationSize(); | |
29 if (!mapped_size_) | |
30 return true; | |
31 return shared_memory_.CreateAndMapAnonymous(mapped_size_); | |
32 } | |
33 | |
34 std::unique_ptr<media::VideoCaptureBufferHandle> | |
35 SharedMemoryBufferTracker::GetBufferHandle() { | |
36 return base::MakeUnique<SharedMemoryBufferHandle>(this); | |
37 } | |
38 | |
39 mojo::ScopedSharedBufferHandle | |
40 SharedMemoryBufferTracker::GetHandleForTransit() { | |
41 return mojo::WrapSharedMemoryHandle( | |
42 base::SharedMemory::DuplicateHandle(shared_memory_.handle()), | |
43 mapped_size_, false /* read_only */); | |
44 } | |
45 | |
46 } // namespace content | |
OLD | NEW |