| 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 |