OLD | NEW |
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 "media/capture/video/file_video_capture_device_factory.h" | 5 #include "media/capture/video/file_video_capture_device_factory.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
9 #include "base/strings/sys_string_conversions.h" | 9 #include "base/strings/sys_string_conversions.h" |
| 10 #include "base/threading/thread_restrictions.h" |
10 #include "build/build_config.h" | 11 #include "build/build_config.h" |
11 #include "media/base/media_switches.h" | 12 #include "media/base/media_switches.h" |
12 #include "media/capture/video/file_video_capture_device.h" | 13 #include "media/capture/video/file_video_capture_device.h" |
13 | 14 |
14 namespace media { | 15 namespace media { |
15 | 16 |
16 const char kFileVideoCaptureDeviceName[] = | 17 const char kFileVideoCaptureDeviceName[] = |
17 "/dev/placeholder-for-file-backed-fake-capture-device"; | 18 "/dev/placeholder-for-file-backed-fake-capture-device"; |
18 | 19 |
19 // Inspects the command line and retrieves the file path parameter. | 20 // Inspects the command line and retrieves the file path parameter. |
20 base::FilePath GetFilePathFromCommandLine() { | 21 base::FilePath GetFilePathFromCommandLine() { |
21 base::FilePath command_line_file_path = | 22 base::FilePath command_line_file_path = |
22 base::CommandLine::ForCurrentProcess()->GetSwitchValuePath( | 23 base::CommandLine::ForCurrentProcess()->GetSwitchValuePath( |
23 switches::kUseFileForFakeVideoCapture); | 24 switches::kUseFileForFakeVideoCapture); |
24 CHECK(!command_line_file_path.empty()); | 25 CHECK(!command_line_file_path.empty()); |
25 return command_line_file_path; | 26 return command_line_file_path; |
26 } | 27 } |
27 | 28 |
28 std::unique_ptr<VideoCaptureDevice> FileVideoCaptureDeviceFactory::CreateDevice( | 29 std::unique_ptr<VideoCaptureDevice> FileVideoCaptureDeviceFactory::CreateDevice( |
29 const VideoCaptureDeviceDescriptor& device_descriptor) { | 30 const VideoCaptureDeviceDescriptor& device_descriptor) { |
30 DCHECK(thread_checker_.CalledOnValidThread()); | 31 DCHECK(thread_checker_.CalledOnValidThread()); |
| 32 base::ThreadRestrictions::AssertIOAllowed(); |
31 #if defined(OS_WIN) | 33 #if defined(OS_WIN) |
32 return std::unique_ptr<VideoCaptureDevice>(new FileVideoCaptureDevice( | 34 return std::unique_ptr<VideoCaptureDevice>(new FileVideoCaptureDevice( |
33 base::FilePath(base::SysUTF8ToWide(device_descriptor.display_name)))); | 35 base::FilePath(base::SysUTF8ToWide(device_descriptor.display_name)))); |
34 #else | 36 #else |
35 return std::unique_ptr<VideoCaptureDevice>(new FileVideoCaptureDevice( | 37 return std::unique_ptr<VideoCaptureDevice>(new FileVideoCaptureDevice( |
36 base::FilePath(device_descriptor.display_name))); | 38 base::FilePath(device_descriptor.display_name))); |
37 #endif | 39 #endif |
38 } | 40 } |
39 | 41 |
40 void FileVideoCaptureDeviceFactory::GetDeviceDescriptors( | 42 void FileVideoCaptureDeviceFactory::GetDeviceDescriptors( |
41 VideoCaptureDeviceDescriptors* device_descriptors) { | 43 VideoCaptureDeviceDescriptors* device_descriptors) { |
42 DCHECK(thread_checker_.CalledOnValidThread()); | 44 DCHECK(thread_checker_.CalledOnValidThread()); |
43 DCHECK(device_descriptors->empty()); | 45 DCHECK(device_descriptors->empty()); |
| 46 base::ThreadRestrictions::SetIOAllowed(true); |
| 47 |
44 const base::FilePath command_line_file_path = GetFilePathFromCommandLine(); | 48 const base::FilePath command_line_file_path = GetFilePathFromCommandLine(); |
45 device_descriptors->emplace_back( | 49 device_descriptors->emplace_back( |
46 #if defined(OS_WIN) | 50 #if defined(OS_WIN) |
47 base::SysWideToUTF8(command_line_file_path.value()), | 51 base::SysWideToUTF8(command_line_file_path.value()), |
48 kFileVideoCaptureDeviceName, VideoCaptureApi::WIN_DIRECT_SHOW | 52 kFileVideoCaptureDeviceName, VideoCaptureApi::WIN_DIRECT_SHOW |
49 #elif defined(OS_MACOSX) | 53 #elif defined(OS_MACOSX) |
50 command_line_file_path.value(), kFileVideoCaptureDeviceName, | 54 command_line_file_path.value(), kFileVideoCaptureDeviceName, |
51 VideoCaptureApi::MACOSX_AVFOUNDATION | 55 VideoCaptureApi::MACOSX_AVFOUNDATION |
52 #elif defined(OS_LINUX) | 56 #elif defined(OS_LINUX) |
53 command_line_file_path.value(), kFileVideoCaptureDeviceName, | 57 command_line_file_path.value(), kFileVideoCaptureDeviceName, |
54 VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE | 58 VideoCaptureApi::LINUX_V4L2_SINGLE_PLANE |
55 #else | 59 #else |
56 command_line_file_path.value(), kFileVideoCaptureDeviceName, | 60 command_line_file_path.value(), kFileVideoCaptureDeviceName, |
57 VideoCaptureApi::UNKNOWN | 61 VideoCaptureApi::UNKNOWN |
58 #endif | 62 #endif |
59 ); | 63 ); |
60 } | 64 } |
61 | 65 |
62 void FileVideoCaptureDeviceFactory::GetSupportedFormats( | 66 void FileVideoCaptureDeviceFactory::GetSupportedFormats( |
63 const VideoCaptureDeviceDescriptor& device_descriptor, | 67 const VideoCaptureDeviceDescriptor& device_descriptor, |
64 VideoCaptureFormats* supported_formats) { | 68 VideoCaptureFormats* supported_formats) { |
65 DCHECK(thread_checker_.CalledOnValidThread()); | 69 DCHECK(thread_checker_.CalledOnValidThread()); |
| 70 base::ThreadRestrictions::AssertIOAllowed(); |
66 | 71 |
67 VideoCaptureFormat capture_format; | 72 VideoCaptureFormat capture_format; |
68 if (!FileVideoCaptureDevice::GetVideoCaptureFormat( | 73 if (!FileVideoCaptureDevice::GetVideoCaptureFormat( |
69 GetFilePathFromCommandLine(), &capture_format)) { | 74 GetFilePathFromCommandLine(), &capture_format)) { |
70 return; | 75 return; |
71 } | 76 } |
72 | 77 |
73 supported_formats->push_back(capture_format); | 78 supported_formats->push_back(capture_format); |
74 } | 79 } |
75 | 80 |
76 } // namespace media | 81 } // namespace media |
OLD | NEW |