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

Side by Side Diff: media/gpu/tegra_v4l2_device.cc

Issue 2668813002: Remove LazyInstance usage from media/ (Closed)
Patch Set: Created 3 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <dlfcn.h> 5 #include <dlfcn.h>
6 #include <fcntl.h> 6 #include <fcntl.h>
7 #include <linux/videodev2.h> 7 #include <linux/videodev2.h>
8 8
9 #include "base/lazy_instance.h"
10 #include "base/posix/eintr_wrapper.h" 9 #include "base/posix/eintr_wrapper.h"
11 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
12 #include "media/gpu/tegra_v4l2_device.h" 11 #include "media/gpu/tegra_v4l2_device.h"
13 #include "ui/gl/gl_bindings.h" 12 #include "ui/gl/gl_bindings.h"
14 13
15 namespace media { 14 namespace media {
16 15
17 namespace { 16 namespace {
18 const char kDecoderDevice[] = "/dev/tegra_avpchannel"; 17 const char kDecoderDevice[] = "/dev/tegra_avpchannel";
19 const char kEncoderDevice[] = "/dev/nvhost-msenc"; 18 const char kEncoderDevice[] = "/dev/nvhost-msenc";
(...skipping 25 matching lines...) Expand all
45 TEGRAV4L2_SYM(Ioctl); 44 TEGRAV4L2_SYM(Ioctl);
46 TEGRAV4L2_SYM(Poll); 45 TEGRAV4L2_SYM(Poll);
47 TEGRAV4L2_SYM(SetDevicePollInterrupt); 46 TEGRAV4L2_SYM(SetDevicePollInterrupt);
48 TEGRAV4L2_SYM(ClearDevicePollInterrupt); 47 TEGRAV4L2_SYM(ClearDevicePollInterrupt);
49 TEGRAV4L2_SYM(Mmap); 48 TEGRAV4L2_SYM(Mmap);
50 TEGRAV4L2_SYM(Munmap); 49 TEGRAV4L2_SYM(Munmap);
51 TEGRAV4L2_SYM(UseEglImage); 50 TEGRAV4L2_SYM(UseEglImage);
52 51
53 #undef TEGRAV4L2_SYM 52 #undef TEGRAV4L2_SYM
54 53
55 class TegraFunctionSymbolFinder { 54 bool InitializeTegraFunctionSymbolFinder() {
Mark Mentovai 2017/01/31 21:33:56 This should be marked “static”, in an unnamed name
DaleCurtis 2017/01/31 22:04:33 Inlined.
56 public: 55 if (!dlopen("/usr/lib/libtegrav4l2.so",
57 TegraFunctionSymbolFinder() : initialized_(false) { 56 RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE)) {
58 if (!dlopen("/usr/lib/libtegrav4l2.so", 57 return false;
59 RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE)) 58 }
60 return;
61 #define TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(name) \ 59 #define TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(name) \
62 do { \ 60 do { \
63 TegraV4L2_##name = reinterpret_cast<TegraV4L2##name>( \ 61 TegraV4L2_##name = reinterpret_cast<TegraV4L2##name>( \
64 dlsym(RTLD_DEFAULT, "TegraV4L2_" #name)); \ 62 dlsym(RTLD_DEFAULT, "TegraV4L2_" #name)); \
65 if (TegraV4L2_##name == NULL) { \ 63 if (TegraV4L2_##name == NULL) { \
66 LOG(ERROR) << "Failed to dlsym TegraV4L2_" #name; \ 64 LOG(ERROR) << "Failed to dlsym TegraV4L2_" #name; \
67 return; \ 65 return false; \
68 } \ 66 } \
69 } while (0) 67 } while (0)
70 68
71 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Open); 69 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Open);
72 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Close); 70 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Close);
73 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Ioctl); 71 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Ioctl);
74 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Poll); 72 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Poll);
75 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(SetDevicePollInterrupt); 73 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(SetDevicePollInterrupt);
76 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(ClearDevicePollInterrupt); 74 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(ClearDevicePollInterrupt);
77 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Mmap); 75 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Mmap);
78 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Munmap); 76 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(Munmap);
79 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(UseEglImage); 77 TEGRAV4L2_DLSYM_OR_RETURN_ON_ERROR(UseEglImage);
80 #undef TEGRAV4L2_DLSYM 78 #undef TEGRAV4L2_DLSYM
Mark Mentovai 2017/01/31 21:33:56 This was never #defined, I think it means TEGRAV4L
DaleCurtis 2017/01/31 22:04:33 Good catch, fixed.
81 initialized_ = true; 79 return true;
82 } 80 }
83
84 bool initialized() { return initialized_; }
85
86 private:
87 bool initialized_;
88 };
89
90 base::LazyInstance<TegraFunctionSymbolFinder> g_tegra_function_symbol_finder_ =
91 LAZY_INSTANCE_INITIALIZER;
92 81
93 TegraV4L2Device::TegraV4L2Device() {} 82 TegraV4L2Device::TegraV4L2Device() {}
94 83
95 TegraV4L2Device::~TegraV4L2Device() { 84 TegraV4L2Device::~TegraV4L2Device() {
96 Close(); 85 Close();
97 } 86 }
98 87
99 int TegraV4L2Device::Ioctl(int flags, void* arg) { 88 int TegraV4L2Device::Ioctl(int flags, void* arg) {
100 return HANDLE_EINTR(TegraV4L2_Ioctl(device_fd_, flags, arg)); 89 return HANDLE_EINTR(TegraV4L2_Ioctl(device_fd_, flags, arg));
101 } 90 }
(...skipping 29 matching lines...) Expand all
131 120
132 bool TegraV4L2Device::ClearDevicePollInterrupt() { 121 bool TegraV4L2Device::ClearDevicePollInterrupt() {
133 if (HANDLE_EINTR(TegraV4L2_ClearDevicePollInterrupt(device_fd_)) == -1) { 122 if (HANDLE_EINTR(TegraV4L2_ClearDevicePollInterrupt(device_fd_)) == -1) {
134 LOG(ERROR) << "Error in calling TegraV4L2ClearDevicePollInterrupt"; 123 LOG(ERROR) << "Error in calling TegraV4L2ClearDevicePollInterrupt";
135 return false; 124 return false;
136 } 125 }
137 return true; 126 return true;
138 } 127 }
139 128
140 bool TegraV4L2Device::Initialize() { 129 bool TegraV4L2Device::Initialize() {
141 return g_tegra_function_symbol_finder_.Get().initialized(); 130 static bool initialized = InitializeTegraFunctionSymbolFinder();
Mark Mentovai 2017/01/31 21:33:56 …written in-line here in a lambda.
DaleCurtis 2017/01/31 22:04:33 :)
131 return initialized;
142 } 132 }
143 133
144 bool TegraV4L2Device::Open(Type type, uint32_t /* v4l2_pixfmt */) { 134 bool TegraV4L2Device::Open(Type type, uint32_t /* v4l2_pixfmt */) {
145 return OpenInternal(type); 135 return OpenInternal(type);
146 } 136 }
147 137
148 bool TegraV4L2Device::OpenInternal(Type type) { 138 bool TegraV4L2Device::OpenInternal(Type type) {
149 const char* device_path = nullptr; 139 const char* device_path = nullptr;
150 140
151 switch (type) { 141 switch (type) {
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 262
273 bool TegraV4L2Device::IsImageProcessingSupported() { 263 bool TegraV4L2Device::IsImageProcessingSupported() {
274 return false; 264 return false;
275 } 265 }
276 266
277 bool TegraV4L2Device::IsJpegDecodingSupported() { 267 bool TegraV4L2Device::IsJpegDecodingSupported() {
278 return false; 268 return false;
279 } 269 }
280 270
281 } // namespace media 271 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698