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 "content/renderer/media/mock_media_stream_video_source.h"
6
7#include "base/bind.h"
8#include "base/callback_helpers.h"
9#include "base/location.h"
10
11namespace content {
12
13MockMediaStreamVideoSource::MockMediaStreamVideoSource(
14    bool manual_get_supported_formats)
15    : manual_get_supported_formats_(manual_get_supported_formats),
16      max_requested_height_(0),
17      max_requested_width_(0),
18      max_requested_frame_rate_(0.0),
19      attempted_to_start_(false) {
20  supported_formats_.push_back(
21      media::VideoCaptureFormat(
22          gfx::Size(MediaStreamVideoSource::kDefaultWidth,
23                    MediaStreamVideoSource::kDefaultHeight),
24          MediaStreamVideoSource::kDefaultFrameRate,
25          media::PIXEL_FORMAT_I420));
26}
27
28MockMediaStreamVideoSource::~MockMediaStreamVideoSource() {}
29
30void MockMediaStreamVideoSource::StartMockedSource() {
31  DCHECK(attempted_to_start_);
32  attempted_to_start_ = false;
33  OnStartDone(MEDIA_DEVICE_OK);
34}
35
36void MockMediaStreamVideoSource::FailToStartMockedSource() {
37  DCHECK(attempted_to_start_);
38  attempted_to_start_ = false;
39  OnStartDone(MEDIA_DEVICE_TRACK_START_FAILURE);
40}
41
42void MockMediaStreamVideoSource::CompleteGetSupportedFormats() {
43  DCHECK(!formats_callback_.is_null());
44  base::ResetAndReturn(&formats_callback_).Run(supported_formats_);
45}
46
47void MockMediaStreamVideoSource::GetCurrentSupportedFormats(
48    int max_requested_height,
49    int max_requested_width,
50    double max_requested_frame_rate,
51    const VideoCaptureDeviceFormatsCB& callback) {
52  DCHECK(formats_callback_.is_null());
53  max_requested_height_ = max_requested_height;
54  max_requested_width_ = max_requested_width;
55  max_requested_frame_rate_ = max_requested_frame_rate;
56
57  if (manual_get_supported_formats_) {
58    formats_callback_ = callback;
59    return;
60  }
61  callback.Run(supported_formats_);
62}
63
64void MockMediaStreamVideoSource::StartSourceImpl(
65    const media::VideoCaptureFormat& format,
66    const VideoCaptureDeliverFrameCB& frame_callback) {
67  DCHECK(frame_callback_.is_null());
68  format_ = format;
69  attempted_to_start_ = true;
70  frame_callback_ = frame_callback;
71}
72
73void MockMediaStreamVideoSource::StopSourceImpl() {
74}
75
76void MockMediaStreamVideoSource::DeliverVideoFrame(
77    const scoped_refptr<media::VideoFrame>& frame) {
78  DCHECK(!frame_callback_.is_null());
79  io_message_loop()->PostTask(
80      FROM_HERE,
81      base::Bind(&MockMediaStreamVideoSource::DeliverVideoFrameOnIO,
82                 base::Unretained(this), frame, format_,
83                 base::TimeTicks(), frame_callback_));
84}
85
86void MockMediaStreamVideoSource::DeliverVideoFrameOnIO(
87    const scoped_refptr<media::VideoFrame>& frame,
88    media::VideoCaptureFormat format,
89    const base::TimeTicks& estimated_capture_time,
90    const VideoCaptureDeliverFrameCB& frame_callback) {
91  frame_callback.Run(frame, format, estimated_capture_time);
92}
93
94}  // namespace content
95