Add 'SkipNextFrame' to the FrameGeneratorInterface.
Also fix PRESUBMIT.py following https://webrtc-review.googlesource.com/c/src/+/358160. Change-Id: I00682209607a184448255cf5ad8fd213fda7f4af Bug: b/355120692 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/358320 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Jeremy Leconte <jleconte@google.com> Cr-Commit-Position: refs/heads/main@{#42711}
This commit is contained in:
parent
d02a216026
commit
53291d49b2
@ -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(
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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<double>(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_)
|
||||
|
||||
@ -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<EncodedImage> 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;
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user