9ed082e69ec05a38675c154cde314bd0b18618ca
[platform/framework/web/crosswalk.git] / src / media / filters / test_video_frame_scheduler.h
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 #ifndef MEDIA_FILTERS_TEST_VIDEO_FRAME_SCHEDULER_H_
6 #define MEDIA_FILTERS_TEST_VIDEO_FRAME_SCHEDULER_H_
7
8 #include <vector>
9
10 #include "media/filters/video_frame_scheduler.h"
11
12 namespace media {
13
14 // A scheduler that queues frames until told otherwise.
15 class TestVideoFrameScheduler : public VideoFrameScheduler {
16  public:
17   struct ScheduledFrame {
18     ScheduledFrame(const scoped_refptr<VideoFrame> frame,
19                    base::TimeTicks wall_ticks,
20                    const DoneCB& done_cb);
21     ~ScheduledFrame();
22
23     scoped_refptr<VideoFrame> frame;
24     base::TimeTicks wall_ticks;
25     DoneCB done_cb;
26   };
27
28   TestVideoFrameScheduler();
29   ~TestVideoFrameScheduler() override;
30
31   // VideoFrameScheduler implementation.
32   void ScheduleVideoFrame(const scoped_refptr<VideoFrame>& frame,
33                           base::TimeTicks wall_ticks,
34                           const DoneCB& done_cb) override;
35   void Reset() override;
36
37   // Displays all frames with scheduled times <= |wall_ticks|.
38   void DisplayFramesUpTo(base::TimeTicks wall_ticks);
39
40   // Drops all frames with scheduled times <= |wall_ticks|.
41   void DropFramesUpTo(base::TimeTicks wall_ticks);
42
43   const std::vector<ScheduledFrame>& scheduled_frames() const {
44     return scheduled_frames_;
45   }
46
47  private:
48   void RunDoneCBForFramesUpTo(base::TimeTicks wall_ticks, Reason reason);
49
50   std::vector<ScheduledFrame> scheduled_frames_;
51
52   DISALLOW_COPY_AND_ASSIGN(TestVideoFrameScheduler);
53 };
54
55 }  // namespace media
56
57 #endif  // MEDIA_FILTERS_TEST_VIDEO_FRAME_SCHEDULER_H_