Index: media/capture/video/fake_video_capture_device_factory.h |
diff --git a/media/capture/video/fake_video_capture_device_factory.h b/media/capture/video/fake_video_capture_device_factory.h |
index 7fb0597fe7e99f61ae5def6f4ce500a1b4b738a3..06ed42ed1ee1c2a05f787df27b8c1ae4a6688c0f 100644 |
--- a/media/capture/video/fake_video_capture_device_factory.h |
+++ b/media/capture/video/fake_video_capture_device_factory.h |
@@ -10,20 +10,56 @@ |
namespace media { |
+struct CAPTURE_EXPORT FakeVideoCaptureDeviceSettings { |
+ FakeVideoCaptureDeviceSettings(); |
+ ~FakeVideoCaptureDeviceSettings(); |
+ FakeVideoCaptureDeviceSettings(const FakeVideoCaptureDeviceSettings& other); |
+ |
+ std::string device_id; |
+ FakeVideoCaptureDevice::DeliveryMode delivery_mode; |
+ VideoCaptureFormats supported_formats; |
+}; |
+ |
// Implementation of VideoCaptureDeviceFactory that creates fake devices |
// that generate test output frames. |
-// By default, the factory has one device outputting I420. |
-// When increasing the number of devices using set_number_of_devices(), the |
-// second device will use Y16, and any devices beyond that will use I420. |
-// By default, the delivery mode of all devices is USE_OWN_BUFFERS. |
-// This, as well as other parameters, can be changed using command-line flags. |
-// See implementation of method ParseCommandLine() for details. |
+// By default, the factory has one device outputting I420 with |
+// USE_DEVICE_INTERNAL_BUFFERS. It supports a default set of resolutions. |
+// When a resolution is requested that is not part of the default set, it snaps |
+// to the resolution with the next larger width. It supports all frame rates |
+// within a default allowed range. |
class CAPTURE_EXPORT FakeVideoCaptureDeviceFactory |
: public VideoCaptureDeviceFactory { |
public: |
FakeVideoCaptureDeviceFactory(); |
- ~FakeVideoCaptureDeviceFactory() override {} |
+ ~FakeVideoCaptureDeviceFactory() override; |
+ |
+ static std::unique_ptr<VideoCaptureDevice> CreateDeviceWithSupportedFormats( |
+ FakeVideoCaptureDevice::DeliveryMode delivery_mode, |
+ const VideoCaptureFormats& formats); |
+ |
+ static std::unique_ptr<VideoCaptureDevice> CreateDeviceWithDefaultResolutions( |
+ VideoPixelFormat pixel_format, |
+ FakeVideoCaptureDevice::DeliveryMode delivery_mode, |
+ float frame_rate); |
+ |
+ // Creates a device that reports OnError() when AllocateAndStart() is called. |
+ static std::unique_ptr<VideoCaptureDevice> CreateErrorDevice(); |
+ static void ParseFakeDevicesConfigFromOptionsString( |
+ const std::string options_string, |
+ std::vector<FakeVideoCaptureDeviceSettings>* config); |
+ |
+ // All devices use the default set of resolution, the default range for |
+ // allowed frame rates, as well as USE_DEVICE_INTERNAL_BUFFERS. |
+ // Device 0 outputs I420. |
+ // Device 1 outputs Y16. |
+ // Device 2 outputs MJPEG. |
+ // All additional devices output I420. |
+ void SetToDefaultDevicesConfig(int device_count); |
+ void SetToCustomDevicesConfig( |
+ const std::vector<FakeVideoCaptureDeviceSettings>& config); |
+ |
+ // VideoCaptureDeviceFactory implementation: |
std::unique_ptr<VideoCaptureDevice> CreateDevice( |
const VideoCaptureDeviceDescriptor& device_descriptor) override; |
void GetDeviceDescriptors( |
@@ -32,22 +68,13 @@ class CAPTURE_EXPORT FakeVideoCaptureDeviceFactory |
const VideoCaptureDeviceDescriptor& device_descriptor, |
VideoCaptureFormats* supported_formats) override; |
- void set_number_of_devices(int number_of_devices) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- number_of_devices_ = number_of_devices; |
- } |
int number_of_devices() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- return number_of_devices_; |
+ return static_cast<int>(devices_config_.size()); |
} |
private: |
- void ParseCommandLine(); |
- |
- int number_of_devices_; |
- FakeVideoCaptureDeviceMaker::DeliveryMode delivery_mode_; |
- float frame_rate_; |
- bool command_line_parsed_ = false; |
+ std::vector<FakeVideoCaptureDeviceSettings> devices_config_; |
}; |
} // namespace media |