OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2004 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include "webrtc/media/devices/linuxdevicemanager.h" | 11 #include "webrtc/media/devices/linuxdevicemanager.h" |
12 | 12 |
13 #include <unistd.h> | 13 #include <unistd.h> |
| 14 |
| 15 #include <memory> |
| 16 |
14 #include "webrtc/base/fileutils.h" | 17 #include "webrtc/base/fileutils.h" |
15 #include "webrtc/base/linux.h" | 18 #include "webrtc/base/linux.h" |
16 #include "webrtc/base/logging.h" | 19 #include "webrtc/base/logging.h" |
17 #include "webrtc/base/pathutils.h" | 20 #include "webrtc/base/pathutils.h" |
18 #include "webrtc/base/physicalsocketserver.h" | 21 #include "webrtc/base/physicalsocketserver.h" |
19 #include "webrtc/base/stream.h" | 22 #include "webrtc/base/stream.h" |
20 #include "webrtc/base/stringutils.h" | 23 #include "webrtc/base/stringutils.h" |
21 #include "webrtc/base/thread.h" | 24 #include "webrtc/base/thread.h" |
22 #include "webrtc/media/base/mediacommon.h" | 25 #include "webrtc/media/base/mediacommon.h" |
23 #include "webrtc/media/devices/libudevsymboltable.h" | 26 #include "webrtc/media/devices/libudevsymboltable.h" |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 return FilterDevices(devs, kFilteredAudioDevicesName); | 114 return FilterDevices(devs, kFilteredAudioDevicesName); |
112 } | 115 } |
113 | 116 |
114 static const std::string kVideoMetaPathK2_4("/proc/video/dev/"); | 117 static const std::string kVideoMetaPathK2_4("/proc/video/dev/"); |
115 static const std::string kVideoMetaPathK2_6("/sys/class/video4linux/"); | 118 static const std::string kVideoMetaPathK2_6("/sys/class/video4linux/"); |
116 | 119 |
117 enum MetaType { M2_4, M2_6, NONE }; | 120 enum MetaType { M2_4, M2_6, NONE }; |
118 | 121 |
119 static void ScanDeviceDirectory(const std::string& devdir, | 122 static void ScanDeviceDirectory(const std::string& devdir, |
120 std::vector<Device>* devices) { | 123 std::vector<Device>* devices) { |
121 rtc::scoped_ptr<rtc::DirectoryIterator> directoryIterator( | 124 std::unique_ptr<rtc::DirectoryIterator> directoryIterator( |
122 rtc::Filesystem::IterateDirectory()); | 125 rtc::Filesystem::IterateDirectory()); |
123 | 126 |
124 if (directoryIterator->Iterate(rtc::Pathname(devdir))) { | 127 if (directoryIterator->Iterate(rtc::Pathname(devdir))) { |
125 do { | 128 do { |
126 std::string filename = directoryIterator->Name(); | 129 std::string filename = directoryIterator->Name(); |
127 std::string device_name = devdir + filename; | 130 std::string device_name = devdir + filename; |
128 if (!directoryIterator->IsDots()) { | 131 if (!directoryIterator->IsDots()) { |
129 if (filename.find("video") == 0 && | 132 if (filename.find("video") == 0 && |
130 V4LLookup::IsV4L2Device(device_name)) { | 133 V4LLookup::IsV4L2Device(device_name)) { |
131 devices->push_back(Device(device_name, device_name)); | 134 devices->push_back(Device(device_name, device_name)); |
132 } | 135 } |
133 } | 136 } |
134 } while (directoryIterator->Next()); | 137 } while (directoryIterator->Next()); |
135 } | 138 } |
136 } | 139 } |
137 | 140 |
138 static std::string GetVideoDeviceNameK2_6(const std::string& device_meta_path) { | 141 static std::string GetVideoDeviceNameK2_6(const std::string& device_meta_path) { |
139 std::string device_name; | 142 std::string device_name; |
140 | 143 |
141 rtc::scoped_ptr<rtc::FileStream> device_meta_stream( | 144 std::unique_ptr<rtc::FileStream> device_meta_stream( |
142 rtc::Filesystem::OpenFile(device_meta_path, "r")); | 145 rtc::Filesystem::OpenFile(device_meta_path, "r")); |
143 | 146 |
144 if (device_meta_stream) { | 147 if (device_meta_stream) { |
145 if (device_meta_stream->ReadLine(&device_name) != rtc::SR_SUCCESS) { | 148 if (device_meta_stream->ReadLine(&device_name) != rtc::SR_SUCCESS) { |
146 LOG(LS_ERROR) << "Failed to read V4L2 device meta " << device_meta_path; | 149 LOG(LS_ERROR) << "Failed to read V4L2 device meta " << device_meta_path; |
147 } | 150 } |
148 device_meta_stream->Close(); | 151 device_meta_stream->Close(); |
149 } | 152 } |
150 | 153 |
151 return device_name; | 154 return device_name; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 | 223 |
221 return Trim(device_name); | 224 return Trim(device_name); |
222 } | 225 } |
223 | 226 |
224 static void ScanV4L2Devices(std::vector<Device>* devices) { | 227 static void ScanV4L2Devices(std::vector<Device>* devices) { |
225 LOG(LS_INFO) << ("Enumerating V4L2 devices"); | 228 LOG(LS_INFO) << ("Enumerating V4L2 devices"); |
226 | 229 |
227 MetaType meta; | 230 MetaType meta; |
228 std::string metadata_dir; | 231 std::string metadata_dir; |
229 | 232 |
230 rtc::scoped_ptr<rtc::DirectoryIterator> directoryIterator( | 233 std::unique_ptr<rtc::DirectoryIterator> directoryIterator( |
231 rtc::Filesystem::IterateDirectory()); | 234 rtc::Filesystem::IterateDirectory()); |
232 | 235 |
233 // Try and guess kernel version | 236 // Try and guess kernel version |
234 if (directoryIterator->Iterate(kVideoMetaPathK2_6)) { | 237 if (directoryIterator->Iterate(kVideoMetaPathK2_6)) { |
235 meta = M2_6; | 238 meta = M2_6; |
236 metadata_dir = kVideoMetaPathK2_6; | 239 metadata_dir = kVideoMetaPathK2_6; |
237 } else if (directoryIterator->Iterate(kVideoMetaPathK2_4)) { | 240 } else if (directoryIterator->Iterate(kVideoMetaPathK2_4)) { |
238 meta = M2_4; | 241 meta = M2_4; |
239 metadata_dir = kVideoMetaPathK2_4; | 242 metadata_dir = kVideoMetaPathK2_4; |
240 } else { | 243 } else { |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 } | 387 } |
385 | 388 |
386 bool LinuxDeviceWatcher::IsDescriptorClosed() { | 389 bool LinuxDeviceWatcher::IsDescriptorClosed() { |
387 // If it is closed then we will just get an error in | 390 // If it is closed then we will just get an error in |
388 // udev_monitor_receive_device and unregister, so we don't need to check for | 391 // udev_monitor_receive_device and unregister, so we don't need to check for |
389 // it separately. | 392 // it separately. |
390 return false; | 393 return false; |
391 } | 394 } |
392 | 395 |
393 }; // namespace cricket | 396 }; // namespace cricket |
OLD | NEW |