2 * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
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.
11 #include "api/test/create_frame_generator.h"
16 #include "rtc_base/checks.h"
17 #include "test/frame_generator.h"
18 #include "test/testsupport/ivf_video_frame_generator.h"
23 std::unique_ptr
<FrameGeneratorInterface
> CreateSquareFrameGenerator(
26 absl::optional
<FrameGeneratorInterface::OutputType
> type
,
27 absl::optional
<int> num_squares
) {
28 return std::make_unique
<SquareGenerator
>(
29 width
, height
, type
.value_or(FrameGeneratorInterface::OutputType::kI420
),
30 num_squares
.value_or(10));
33 std::unique_ptr
<FrameGeneratorInterface
> CreateFromYuvFileFrameGenerator(
34 std::vector
<std::string
> filenames
,
37 int frame_repeat_count
) {
38 RTC_DCHECK(!filenames
.empty());
39 std::vector
<FILE*> files
;
40 for (const std::string
& filename
: filenames
) {
41 FILE* file
= fopen(filename
.c_str(), "rb");
42 RTC_DCHECK(file
!= nullptr) << "Failed to open: '" << filename
<< "'\n";
43 files
.push_back(file
);
46 return std::make_unique
<YuvFileGenerator
>(files
, width
, height
,
50 std::unique_ptr
<FrameGeneratorInterface
> CreateFromNV12FileFrameGenerator(
51 std::vector
<std::string
> filenames
,
54 int frame_repeat_count
) {
55 RTC_DCHECK(!filenames
.empty());
56 std::vector
<FILE*> files
;
57 for (const std::string
& filename
: filenames
) {
58 FILE* file
= fopen(filename
.c_str(), "rb");
59 RTC_DCHECK(file
!= nullptr) << "Failed to open: '" << filename
<< "'\n";
60 files
.push_back(file
);
63 return std::make_unique
<NV12FileGenerator
>(files
, width
, height
,
67 std::unique_ptr
<FrameGeneratorInterface
> CreateFromIvfFileFrameGenerator(
68 std::string filename
) {
69 return std::make_unique
<IvfVideoFrameGenerator
>(std::move(filename
));
72 std::unique_ptr
<FrameGeneratorInterface
>
73 CreateScrollingInputFromYuvFilesFrameGenerator(
75 std::vector
<std::string
> filenames
,
80 int64_t scroll_time_ms
,
81 int64_t pause_time_ms
) {
82 RTC_DCHECK(!filenames
.empty());
83 std::vector
<FILE*> files
;
84 for (const std::string
& filename
: filenames
) {
85 FILE* file
= fopen(filename
.c_str(), "rb");
86 RTC_DCHECK(file
!= nullptr);
87 files
.push_back(file
);
90 return std::make_unique
<ScrollingImageFrameGenerator
>(
91 clock
, files
, source_width
, source_height
, target_width
, target_height
,
92 scroll_time_ms
, pause_time_ms
);
95 std::unique_ptr
<FrameGeneratorInterface
>
96 CreateSlideFrameGenerator(int width
, int height
, int frame_repeat_count
) {
97 return std::make_unique
<SlideGenerator
>(width
, height
, frame_repeat_count
);
101 } // namespace webrtc