1// Copyright 2013 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#ifndef CONTENT_TEST_TEST_VIDEO_FRAME_PROVIDER_H_
6#define CONTENT_TEST_TEST_VIDEO_FRAME_PROVIDER_H_
7
8#include "base/time/time.h"
9#include "content/renderer/media/video_frame_provider.h"
10#include "ui/gfx/size.h"
11
12namespace base {
13class MessageLoopProxy;
14}
15
16namespace content {
17
18// A simple implementation of VideoFrameProvider generates raw frames and
19// passes them to webmediaplayer.
20// Since non-black pixel values are required in the layout test, e.g.,
21// media/video-capture-canvas.html, this class should generate frame with
22// only non-black pixels.
23class TestVideoFrameProvider : public VideoFrameProvider {
24 public:
25  TestVideoFrameProvider(
26      const gfx::Size& size,
27      const base::TimeDelta& frame_duration,
28      const base::Closure& error_cb,
29      const RepaintCB& repaint_cb);
30
31  // VideoFrameProvider implementation.
32  virtual void Start() OVERRIDE;
33  virtual void Stop() OVERRIDE;
34  virtual void Play() OVERRIDE;
35  virtual void Pause() OVERRIDE;
36
37 protected:
38  virtual ~TestVideoFrameProvider();
39
40 private:
41  enum State {
42    kStarted,
43    kPaused,
44    kStopped,
45  };
46
47  void GenerateFrame();
48
49  scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
50  gfx::Size size_;
51  State state_;
52
53  base::TimeDelta current_time_;
54  base::TimeDelta frame_duration_;
55  base::Closure error_cb_;
56  RepaintCB repaint_cb_;
57
58  DISALLOW_COPY_AND_ASSIGN(TestVideoFrameProvider);
59};
60
61}  // namespace content
62
63#endif  // CONTENT_TEST_TEST_VIDEO_FRAME_PROVIDER_H_
64