blob: 7f20c749e8eea9b920ce8b0afde26445eaa10499 [file] [log] [blame]
andresp@webrtc.orgab654952013-09-19 12:14:03 +00001/*
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_COMMON_VIDEO_TEST_FRAME_GENERATOR_H_
11#define WEBRTC_COMMON_VIDEO_TEST_FRAME_GENERATOR_H_
12
sprang@webrtc.org131bea82015-02-18 12:46:06 +000013#include <string>
14#include <vector>
15
andresp@webrtc.orgab654952013-09-19 12:14:03 +000016#include "webrtc/typedefs.h"
Thiago Farina9bfe3da2015-04-10 12:52:13 +020017#include "webrtc/video_frame.h"
andresp@webrtc.orgab654952013-09-19 12:14:03 +000018
19namespace webrtc {
sprangd6358952015-07-29 07:58:13 -070020class Clock;
andresp@webrtc.orgab654952013-09-19 12:14:03 +000021namespace test {
22
23class FrameGenerator {
24 public:
25 FrameGenerator() {}
26 virtual ~FrameGenerator() {}
27
28 // Returns video frame that remains valid until next call.
Miguel Casas-Sanchez47650702015-05-29 17:21:40 -070029 virtual VideoFrame* NextFrame() = 0;
andresp@webrtc.orgab654952013-09-19 12:14:03 +000030
sprang@webrtc.org131bea82015-02-18 12:46:06 +000031 // Creates a test frame generator that creates fully saturated frames with
32 // varying U, V values over time.
33 static FrameGenerator* CreateChromaGenerator(size_t width, size_t height);
34
35 // Creates a frame generator that repeatedly plays a set of yuv files.
36 // The frame_repeat_count determines how many times each frame is shown,
sprang@webrtc.org25dd1db2015-03-02 11:55:45 +000037 // with 1 = show each frame once, etc.
sprang@webrtc.org131bea82015-02-18 12:46:06 +000038 static FrameGenerator* CreateFromYuvFile(std::vector<std::string> files,
andresp@webrtc.orgab654952013-09-19 12:14:03 +000039 size_t width,
sprang@webrtc.org131bea82015-02-18 12:46:06 +000040 size_t height,
41 int frame_repeat_count);
sprangd6358952015-07-29 07:58:13 -070042
43 // Creates a frame generator which takes a set of yuv files (wrapping a
44 // frame generator created by CreateFromYuvFile() above), but outputs frames
45 // that have been cropped to specified resolution: source_width/source_height
46 // is the size of the source images, target_width/target_height is the size of
47 // the cropped output. For each source image read, the cropped viewport will
48 // be scrolled top to bottom/left to right for scroll_tim_ms milliseconds.
49 // After that the image will stay in place for pause_time_ms milliseconds,
50 // and then this will be repeated with the next file from the input set.
51 static FrameGenerator* CreateScrollingInputFromYuvFiles(
52 Clock* clock,
53 std::vector<std::string> filenames,
54 size_t source_width,
55 size_t source_height,
56 size_t target_width,
57 size_t target_height,
58 int64_t scroll_time_ms,
59 int64_t pause_time_ms);
andresp@webrtc.orgab654952013-09-19 12:14:03 +000060};
61} // namespace test
62} // namespace webrtc
63
64#endif // WEBRTC_COMMON_VIDEO_TEST_FRAME_GENERATOR_H_