1/*
2 *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10#ifndef WEBRTC_TEST_FRAME_GENERATOR_CAPTURER_H_
11#define WEBRTC_TEST_FRAME_GENERATOR_CAPTURER_H_
12
13#include <string>
14
15#include "webrtc/base/criticalsection.h"
16#include "webrtc/base/platform_thread.h"
17#include "webrtc/base/scoped_ptr.h"
18#include "webrtc/test/video_capturer.h"
19#include "webrtc/typedefs.h"
20
21namespace webrtc {
22
23class CriticalSectionWrapper;
24class EventTimerWrapper;
25
26namespace test {
27
28class FrameGenerator;
29
30class FrameGeneratorCapturer : public VideoCapturer {
31 public:
32  static FrameGeneratorCapturer* Create(VideoCaptureInput* input,
33                                        size_t width,
34                                        size_t height,
35                                        int target_fps,
36                                        Clock* clock);
37
38  static FrameGeneratorCapturer* CreateFromYuvFile(VideoCaptureInput* input,
39                                                   const std::string& file_name,
40                                                   size_t width,
41                                                   size_t height,
42                                                   int target_fps,
43                                                   Clock* clock);
44  virtual ~FrameGeneratorCapturer();
45
46  void Start() override;
47  void Stop() override;
48  void ForceFrame();
49
50  int64_t first_frame_capture_time() const { return first_frame_capture_time_; }
51
52  FrameGeneratorCapturer(Clock* clock,
53                         VideoCaptureInput* input,
54                         FrameGenerator* frame_generator,
55                         int target_fps);
56  bool Init();
57
58 private:
59  void InsertFrame();
60  static bool Run(void* obj);
61
62  Clock* const clock_;
63  bool sending_;
64
65  rtc::scoped_ptr<EventTimerWrapper> tick_;
66  rtc::CriticalSection lock_;
67  rtc::PlatformThread thread_;
68  rtc::scoped_ptr<FrameGenerator> frame_generator_;
69
70  int target_fps_;
71
72  int64_t first_frame_capture_time_;
73};
74}  // test
75}  // webrtc
76
77#endif  // WEBRTC_TEST_FRAME_GENERATOR_CAPTURER_H_
78