blob: 390a59a366a9fcab926089756d0ff5aa2b18c989 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/gfx/native_pixmap_handle.h"
#if defined(OS_LINUX) && !defined(TOOLKIT_QT)
#include <drm_fourcc.h>
#include "base/posix/eintr_wrapper.h"
#endif
namespace gfx {
#if defined(OS_LINUX) && !defined(TOOLKIT_QT)
static_assert(NativePixmapPlane::kNoModifier == DRM_FORMAT_MOD_INVALID,
"gfx::NativePixmapPlane::kNoModifier should be an alias for"
"DRM_FORMAT_MOD_INVALID");
#endif
NativePixmapPlane::NativePixmapPlane()
: stride(0), offset(0), size(0), modifier(0) {}
NativePixmapPlane::NativePixmapPlane(int stride,
int offset,
uint64_t size,
uint64_t modifier)
: stride(stride), offset(offset), size(size), modifier(modifier) {}
NativePixmapPlane::NativePixmapPlane(const NativePixmapPlane& other) = default;
NativePixmapPlane::~NativePixmapPlane() {}
NativePixmapHandle::NativePixmapHandle() {}
NativePixmapHandle::NativePixmapHandle(const NativePixmapHandle& other) =
default;
NativePixmapHandle::~NativePixmapHandle() {}
#if defined(OS_LINUX) && !defined(TOOLKIT_QT)
NativePixmapHandle CloneHandleForIPC(const NativePixmapHandle& handle) {
NativePixmapHandle clone;
std::vector<base::ScopedFD> scoped_fds;
for (auto& fd : handle.fds) {
base::ScopedFD scoped_fd(HANDLE_EINTR(dup(fd.fd)));
if (!scoped_fd.is_valid()) {
PLOG(ERROR) << "dup";
return NativePixmapHandle();
}
scoped_fds.emplace_back(std::move(scoped_fd));
}
for (auto& scoped_fd : scoped_fds)
clone.fds.emplace_back(scoped_fd.release(), true /* auto_close */);
clone.planes = handle.planes;
return clone;
}
#endif // defined(OS_LINUX)
} // namespace gfx
|