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 3// found in the LICENSE file. 4 5#include "media/video/capture/file_video_capture_device_factory.h" 6 7#include "base/command_line.h" 8#include "base/files/file_path.h" 9#include "base/strings/sys_string_conversions.h" 10#include "media/base/media_switches.h" 11#include "media/video/capture/file_video_capture_device.h" 12 13namespace media { 14 15const char kFileVideoCaptureDeviceName[] = 16 "/dev/placeholder-for-file-backed-fake-capture-device"; 17 18// Inspects the command line and retrieves the file path parameter. 19base::FilePath GetFilePathFromCommandLine() { 20 base::FilePath command_line_file_path = 21 CommandLine::ForCurrentProcess()->GetSwitchValuePath( 22 switches::kUseFileForFakeVideoCapture); 23 CHECK(!command_line_file_path.empty()); 24 return command_line_file_path; 25} 26 27scoped_ptr<VideoCaptureDevice> FileVideoCaptureDeviceFactory::Create( 28 const VideoCaptureDevice::Name& device_name) { 29 DCHECK(thread_checker_.CalledOnValidThread()); 30#if defined(OS_WIN) 31 return scoped_ptr<VideoCaptureDevice>(new FileVideoCaptureDevice( 32 base::FilePath(base::SysUTF8ToWide(device_name.name())))); 33#else 34 return scoped_ptr<VideoCaptureDevice>(new FileVideoCaptureDevice( 35 base::FilePath(device_name.name()))); 36#endif 37} 38 39void FileVideoCaptureDeviceFactory::GetDeviceNames( 40 VideoCaptureDevice::Names* const device_names) { 41 DCHECK(thread_checker_.CalledOnValidThread()); 42 DCHECK(device_names->empty()); 43 base::FilePath command_line_file_path = GetFilePathFromCommandLine(); 44#if defined(OS_WIN) 45 device_names->push_back(VideoCaptureDevice::Name( 46 base::SysWideToUTF8(command_line_file_path.value()), 47 kFileVideoCaptureDeviceName)); 48#elif defined(OS_MACOSX) 49 device_names->push_back(VideoCaptureDevice::Name( 50 command_line_file_path.value(), 51 kFileVideoCaptureDeviceName, 52 VideoCaptureDevice::Name::AVFOUNDATION)); 53#else 54 device_names->push_back(VideoCaptureDevice::Name( 55 command_line_file_path.value(), 56 kFileVideoCaptureDeviceName)); 57#endif 58} 59 60void FileVideoCaptureDeviceFactory::GetDeviceSupportedFormats( 61 const VideoCaptureDevice::Name& device, 62 VideoCaptureFormats* supported_formats) { 63 DCHECK(thread_checker_.CalledOnValidThread()); 64 base::File file = 65 FileVideoCaptureDevice::OpenFileForRead(GetFilePathFromCommandLine()); 66 VideoCaptureFormat capture_format; 67 FileVideoCaptureDevice::ParseFileAndExtractVideoFormat(&file, 68 &capture_format); 69 supported_formats->push_back(capture_format); 70} 71 72} // namespace media 73