diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 7ae343e45d..bd3bbc3913 100755 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -650,8 +650,8 @@ def CheckGnGen(input_api, output_api): with _AddToPath( input_api.os_path.join(input_api.PresubmitLocalPath(), 'tools_webrtc', 'presubmit_checks_lib')): - from build_helpers import RunGnCheck - errors = RunGnCheck(input_api.change.RepositoryRoot())[:5] + from build_helpers import run_gn_check + errors = run_gn_check(input_api.change.RepositoryRoot())[:5] if errors: return [ output_api.PresubmitPromptWarning( diff --git a/api/test/frame_generator_interface.h b/api/test/frame_generator_interface.h index a8a88a8a04..e963467e95 100644 --- a/api/test/frame_generator_interface.h +++ b/api/test/frame_generator_interface.h @@ -44,6 +44,9 @@ class FrameGeneratorInterface { // Returns VideoFrameBuffer and area where most of update was done to set them // on the VideoFrame object. virtual VideoFrameData NextFrame() = 0; + // Skips the next frame in case it doesn't need to be encoded. + // Default implementation is to call NextFrame and ignore the returned value. + virtual void SkipNextFrame() { NextFrame(); } // Change the capture resolution. virtual void ChangeResolution(size_t width, size_t height) = 0; diff --git a/test/frame_generator_capturer.cc b/test/frame_generator_capturer.cc index b53085b7c4..4641f4e2f6 100644 --- a/test/frame_generator_capturer.cc +++ b/test/frame_generator_capturer.cc @@ -92,15 +92,15 @@ bool FrameGeneratorCapturer::Init() { void FrameGeneratorCapturer::InsertFrame() { MutexLock lock(&lock_); if (sending_) { - FrameGeneratorInterface::VideoFrameData frame_data = - frame_generator_->NextFrame(); // TODO(srte): Use more advanced frame rate control to allow arbitrary // fractions. int decimation = std::round(static_cast(source_fps_) / target_capture_fps_); for (int i = 1; i < decimation; ++i) - frame_data = frame_generator_->NextFrame(); + frame_generator_->SkipNextFrame(); + FrameGeneratorInterface::VideoFrameData frame_data = + frame_generator_->NextFrame(); VideoFrame frame = VideoFrame::Builder() .set_video_frame_buffer(frame_data.buffer) .set_rotation(fake_rotation_) diff --git a/test/testsupport/ivf_video_frame_generator.cc b/test/testsupport/ivf_video_frame_generator.cc index d951a208f7..42b9c1926f 100644 --- a/test/testsupport/ivf_video_frame_generator.cc +++ b/test/testsupport/ivf_video_frame_generator.cc @@ -120,6 +120,21 @@ FrameGeneratorInterface::VideoFrameData IvfVideoFrameGenerator::NextFrame() { return VideoFrameData(buffer, next_frame_->update_rect()); } +void IvfVideoFrameGenerator::SkipNextFrame() { + MutexLock lock(&lock_); + next_frame_decoded_.Reset(); + RTC_CHECK(file_reader_); + if (!file_reader_->HasMoreFrames()) { + file_reader_->Reset(); + } + absl::optional image = file_reader_->NextFrame(); + RTC_CHECK(image); + // Last parameter is undocumented and there is no usage of it found. + // Frame has to be decoded in case it is a key frame. + RTC_CHECK_EQ(WEBRTC_VIDEO_CODEC_OK, + video_decoder_->Decode(*image, /*render_time_ms=*/0)); +} + void IvfVideoFrameGenerator::ChangeResolution(size_t width, size_t height) { MutexLock lock(&lock_); width_ = width; diff --git a/test/testsupport/ivf_video_frame_generator.h b/test/testsupport/ivf_video_frame_generator.h index 7f2d13d048..41cf2d97dd 100644 --- a/test/testsupport/ivf_video_frame_generator.h +++ b/test/testsupport/ivf_video_frame_generator.h @@ -36,6 +36,7 @@ class IvfVideoFrameGenerator : public FrameGeneratorInterface { ~IvfVideoFrameGenerator() override; VideoFrameData NextFrame() override; + void SkipNextFrame() override; void ChangeResolution(size_t width, size_t height) override; Resolution GetResolution() const override; diff --git a/test/testsupport/y4m_frame_generator.cc b/test/testsupport/y4m_frame_generator.cc index f1ecbf9b41..65b338e9e4 100644 --- a/test/testsupport/y4m_frame_generator.cc +++ b/test/testsupport/y4m_frame_generator.cc @@ -74,6 +74,10 @@ Y4mFrameGenerator::VideoFrameData Y4mFrameGenerator::NextFrame() { return VideoFrameData(scaled_buffer, update_rect); } +void Y4mFrameGenerator::SkipNextFrame() { + frame_reader_->PullFrame(); +} + void Y4mFrameGenerator::ChangeResolution(size_t width, size_t height) { width_ = width; height_ = height; diff --git a/test/testsupport/y4m_frame_generator.h b/test/testsupport/y4m_frame_generator.h index 4ff64be7dc..16d848524a 100644 --- a/test/testsupport/y4m_frame_generator.h +++ b/test/testsupport/y4m_frame_generator.h @@ -45,6 +45,8 @@ class Y4mFrameGenerator : public FrameGeneratorInterface { VideoFrameData NextFrame() override; + void SkipNextFrame() override; + void ChangeResolution(size_t width, size_t height) override; Resolution GetResolution() const override;