| Index: media/video/capture/fake_video_capture_device.cc
|
| diff --git a/media/video/capture/fake_video_capture_device.cc b/media/video/capture/fake_video_capture_device.cc
|
| index c36670c70e784563c3fa9b677540ae2bab22dd25..ef44d86488497ef9d7d452f38bc2a8521d6c0863 100644
|
| --- a/media/video/capture/fake_video_capture_device.cc
|
| +++ b/media/video/capture/fake_video_capture_device.cc
|
| @@ -37,12 +37,13 @@ void FakeVideoCaptureDevice::GetDeviceNames(Names* const device_names) {
|
| void FakeVideoCaptureDevice::GetDeviceSupportedFormats(
|
| const Name& device,
|
| VideoCaptureCapabilities* formats) {
|
| - VideoCaptureCapability capture_format;
|
| - capture_format.color = media::PIXEL_FORMAT_I420;
|
| - capture_format.width = 640;
|
| - capture_format.height = 480;
|
| - capture_format.frame_rate = 1000 / kFakeCaptureTimeoutMs;
|
| - formats->push_back(capture_format);
|
| + VideoCaptureCapability capture_format_640x480;
|
| + capture_format_640x480.supported_format.frame_size.SetSize(640, 480);
|
| + capture_format_640x480.supported_format.frame_rate =
|
| + 1000 / kFakeCaptureTimeoutMs;
|
| + capture_format_640x480.supported_format.pixel_format =
|
| + media::PIXEL_FORMAT_I420;
|
| + formats->push_back(capture_format_640x480);
|
| }
|
|
|
| VideoCaptureDevice* FakeVideoCaptureDevice::Create(const Name& device_name) {
|
| @@ -67,8 +68,7 @@ FakeVideoCaptureDevice::FakeVideoCaptureDevice()
|
| : state_(kIdle),
|
| capture_thread_("CaptureThread"),
|
| frame_count_(0),
|
| - capabilities_roster_index_(0) {
|
| -}
|
| + format_roster_index_(0) {}
|
|
|
| FakeVideoCaptureDevice::~FakeVideoCaptureDevice() {
|
| // Check if the thread is running.
|
| @@ -77,31 +77,27 @@ FakeVideoCaptureDevice::~FakeVideoCaptureDevice() {
|
| }
|
|
|
| void FakeVideoCaptureDevice::AllocateAndStart(
|
| - const VideoCaptureCapability& capture_format,
|
| + const VideoCaptureParams& params,
|
| scoped_ptr<VideoCaptureDevice::Client> client) {
|
| - capture_format_.frame_size_type = capture_format.frame_size_type;
|
| - if (capture_format.frame_size_type == VariableResolutionVideoCaptureDevice)
|
| - PopulateCapabilitiesRoster();
|
| + if (params.allow_resolution_change)
|
| + PopulateFormatRoster();
|
|
|
| if (state_ != kIdle) {
|
| return; // Wrong state.
|
| }
|
|
|
| client_ = client.Pass();
|
| - capture_format_.color = PIXEL_FORMAT_I420;
|
| - if (capture_format.width > 320) { // VGA
|
| - capture_format_.width = 640;
|
| - capture_format_.height = 480;
|
| + capture_format_.pixel_format = PIXEL_FORMAT_I420;
|
| + if (params.requested_format.frame_size.width() > 320) { // VGA
|
| + capture_format_.frame_size.SetSize(640, 480);
|
| capture_format_.frame_rate = 30;
|
| } else { // QVGA
|
| - capture_format_.width = 320;
|
| - capture_format_.height = 240;
|
| + capture_format_.frame_size.SetSize(320, 240);
|
| capture_format_.frame_rate = 30;
|
| }
|
|
|
| - const size_t fake_frame_size = VideoFrame::AllocationSize(
|
| - VideoFrame::I420,
|
| - gfx::Size(capture_format_.width, capture_format_.height));
|
| + const size_t fake_frame_size =
|
| + VideoFrame::AllocationSize(VideoFrame::I420, capture_format_.frame_size);
|
| fake_frame_.reset(new uint8[fake_frame_size]);
|
|
|
| state_ = kCapturing;
|
| @@ -114,15 +110,14 @@ void FakeVideoCaptureDevice::AllocateAndStart(
|
|
|
| void FakeVideoCaptureDevice::Reallocate() {
|
| DCHECK_EQ(state_, kCapturing);
|
| - capture_format_ = capabilities_roster_.at(++capabilities_roster_index_ %
|
| - capabilities_roster_.size());
|
| - DCHECK_EQ(capture_format_.color, PIXEL_FORMAT_I420);
|
| - DVLOG(3) << "Reallocating FakeVideoCaptureDevice, new capture resolution ("
|
| - << capture_format_.width << "x" << capture_format_.height << ")";
|
| -
|
| - const size_t fake_frame_size = VideoFrame::AllocationSize(
|
| - VideoFrame::I420,
|
| - gfx::Size(capture_format_.width, capture_format_.height));
|
| + capture_format_ =
|
| + format_roster_.at(++format_roster_index_ % format_roster_.size());
|
| + DCHECK_EQ(capture_format_.pixel_format, PIXEL_FORMAT_I420);
|
| + DVLOG(3) << "Reallocating FakeVideoCaptureDevice, new capture resolution "
|
| + << capture_format_.frame_size.ToString();
|
| +
|
| + const size_t fake_frame_size =
|
| + VideoFrame::AllocationSize(VideoFrame::I420, capture_format_.frame_size);
|
| fake_frame_.reset(new uint8[fake_frame_size]);
|
| }
|
|
|
| @@ -139,25 +134,28 @@ void FakeVideoCaptureDevice::OnCaptureTask() {
|
| return;
|
| }
|
|
|
| - const size_t frame_size = VideoFrame::AllocationSize(
|
| - VideoFrame::I420,
|
| - gfx::Size(capture_format_.width, capture_format_.height));
|
| + const size_t frame_size =
|
| + VideoFrame::AllocationSize(VideoFrame::I420, capture_format_.frame_size);
|
| memset(fake_frame_.get(), 0, frame_size);
|
|
|
| SkBitmap bitmap;
|
| bitmap.setConfig(SkBitmap::kA8_Config,
|
| - capture_format_.width,
|
| - capture_format_.height,
|
| - capture_format_.width);
|
| - bitmap.setPixels(fake_frame_.get());
|
| + capture_format_.frame_size.width(),
|
| + capture_format_.frame_size.height(),
|
| + capture_format_.frame_size.width()),
|
| + bitmap.setPixels(fake_frame_.get());
|
|
|
| SkCanvas canvas(bitmap);
|
|
|
| // Draw a sweeping circle to show an animation.
|
| - int radius = std::min(capture_format_.width, capture_format_.height) / 4;
|
| - SkRect rect = SkRect::MakeXYWH(
|
| - capture_format_.width / 2 - radius, capture_format_.height / 2 - radius,
|
| - 2 * radius, 2 * radius);
|
| + int radius = std::min(capture_format_.frame_size.width(),
|
| + capture_format_.frame_size.height()) /
|
| + 4;
|
| + SkRect rect =
|
| + SkRect::MakeXYWH(capture_format_.frame_size.width() / 2 - radius,
|
| + capture_format_.frame_size.height() / 2 - radius,
|
| + 2 * radius,
|
| + 2 * radius);
|
|
|
| SkPaint paint;
|
| paint.setStyle(SkPaint::kFill_Style);
|
| @@ -203,8 +201,7 @@ void FakeVideoCaptureDevice::OnCaptureTask() {
|
| false,
|
| capture_format_);
|
| if (!(frame_count_ % kFakeCaptureCapabilityChangePeriod) &&
|
| - (capture_format_.frame_size_type ==
|
| - VariableResolutionVideoCaptureDevice)) {
|
| + format_roster_.size() > 0U) {
|
| Reallocate();
|
| }
|
| // Reschedule next CaptureTask.
|
| @@ -215,27 +212,15 @@ void FakeVideoCaptureDevice::OnCaptureTask() {
|
| base::TimeDelta::FromMilliseconds(kFakeCaptureTimeoutMs));
|
| }
|
|
|
| -void FakeVideoCaptureDevice::PopulateCapabilitiesRoster() {
|
| - capabilities_roster_.push_back(
|
| - media::VideoCaptureCapability(320,
|
| - 240,
|
| - 30,
|
| - PIXEL_FORMAT_I420,
|
| - VariableResolutionVideoCaptureDevice));
|
| - capabilities_roster_.push_back(
|
| - media::VideoCaptureCapability(640,
|
| - 480,
|
| - 30,
|
| - PIXEL_FORMAT_I420,
|
| - VariableResolutionVideoCaptureDevice));
|
| - capabilities_roster_.push_back(
|
| - media::VideoCaptureCapability(800,
|
| - 600,
|
| - 30,
|
| - PIXEL_FORMAT_I420,
|
| - VariableResolutionVideoCaptureDevice));
|
| -
|
| - capabilities_roster_index_ = 0;
|
| +void FakeVideoCaptureDevice::PopulateFormatRoster() {
|
| + format_roster_.push_back(
|
| + media::VideoCaptureFormat(gfx::Size(320, 240), 30, PIXEL_FORMAT_I420));
|
| + format_roster_.push_back(
|
| + media::VideoCaptureFormat(gfx::Size(640, 480), 30, PIXEL_FORMAT_I420));
|
| + format_roster_.push_back(
|
| + media::VideoCaptureFormat(gfx::Size(800, 600), 30, PIXEL_FORMAT_I420));
|
| +
|
| + format_roster_index_ = 0;
|
| }
|
|
|
| } // namespace media
|
|
|