blob: afb423d1a741af897d5b1a833298837ef9ecee4d [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/mirroring/service/fake_video_capture_host.h"
#include "base/memory/read_only_shared_memory_region.h"
#include "media/base/video_frame.h"
#include "media/capture/mojom/video_capture_types.mojom.h"
#include "mojo/public/cpp/base/shared_memory_utils.h"
namespace mirroring {
FakeVideoCaptureHost::FakeVideoCaptureHost(
media::mojom::VideoCaptureHostRequest request)
: binding_(this, std::move(request)) {}
FakeVideoCaptureHost::~FakeVideoCaptureHost() {}
void FakeVideoCaptureHost::Start(
int32_t device_id,
int32_t session_id,
const media::VideoCaptureParams& params,
media::mojom::VideoCaptureObserverPtr observer) {
ASSERT_TRUE(observer);
observer_ = std::move(observer);
observer_->OnStateChanged(media::mojom::VideoCaptureState::STARTED);
}
void FakeVideoCaptureHost::Stop(int32_t device_id) {
if (!observer_)
return;
observer_->OnStateChanged(media::mojom::VideoCaptureState::ENDED);
observer_.reset();
OnStopped();
}
void FakeVideoCaptureHost::SendOneFrame(const gfx::Size& size,
base::TimeTicks capture_time) {
if (!observer_)
return;
auto shmem = mojo::CreateReadOnlySharedMemoryRegion(5000);
memset(shmem.mapping.memory(), 125, 5000);
observer_->OnNewBuffer(
0, media::mojom::VideoBufferHandle::NewReadOnlyShmemRegion(
std::move(shmem.region)));
media::VideoFrameMetadata metadata;
metadata.SetDouble(media::VideoFrameMetadata::FRAME_RATE, 30);
metadata.SetTimeTicks(media::VideoFrameMetadata::REFERENCE_TIME,
capture_time);
observer_->OnBufferReady(
0, media::mojom::VideoFrameInfo::New(
base::TimeDelta(), metadata.GetInternalValues().Clone(),
media::PIXEL_FORMAT_I420, size, gfx::Rect(size),
gfx::ColorSpace::CreateREC709(), nullptr));
}
} // namespace mirroring