Revert "Partial frame capture API part 2"
This reverts commit 5054f544575b1a0471b241266c6fc8c2ccf93af0.
Reason for revert: Partial Capture API is not needed, according to new info from the Chrome team.
Original change's description:
> Partial frame capture API part 2
>
> Implement test utility for extracting changed part of video frames.
>
> Bug: webrtc:10152
> Change-Id: Iead052d2a18384aaa828cd7821be961b8614568e
> Reviewed-on: https://webrtc-review.googlesource.com/c/120407
> Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#26496}
TBR=ilnik@webrtc.org,sprang@webrtc.org
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: webrtc:10152
Change-Id: I80cae8a7d352b4ee67b42f5388fd8c1883ab2e7c
Reviewed-on: https://webrtc-review.googlesource.com/c/122091
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26632}
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 254b165..77306b9 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -41,8 +41,6 @@
sources = [
"fake_texture_frame.cc",
"fake_texture_frame.h",
- "frame_change_extractor.cc",
- "frame_change_extractor.h",
"frame_generator.cc",
"frame_generator.h",
"frame_generator_capturer.cc",
diff --git a/test/frame_change_extractor.cc b/test/frame_change_extractor.cc
deleted file mode 100644
index 3a51963..0000000
--- a/test/frame_change_extractor.cc
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "test/frame_change_extractor.h"
-
-#include <algorithm>
-
-#include "api/video/i420_buffer.h"
-#include "rtc_base/checks.h"
-
-namespace webrtc {
-
-FrameChangeExtractor::FrameChangeExtractor() = default;
-FrameChangeExtractor::~FrameChangeExtractor() = default;
-
-void FrameChangeExtractor::SetSource(
- rtc::VideoSourceInterface<VideoFrame>* video_source) {
- rtc::CritScope lock(&source_crit_);
-
- rtc::VideoSourceInterface<VideoFrame>* old_source = nullptr;
- old_source = source_;
- source_ = video_source;
- if (old_source != video_source && old_source != nullptr) {
- old_source->RemoveSink(this);
- }
- if (video_source) {
- source_->AddOrUpdateSink(this, rtc::VideoSinkWants());
- }
-}
-
-void FrameChangeExtractor::OnFrame(const VideoFrame& frame) {
- // Currently only supports I420 buffers.
- RTC_CHECK(frame.video_frame_buffer()->type() ==
- VideoFrameBuffer::Type::kI420);
-
- rtc::CritScope lock(&sink_crit_);
-
- if (!sink_)
- return;
-
- webrtc::I420BufferInterface* current_buffer =
- frame.video_frame_buffer()->ToI420();
- int min_row, min_col, max_row, max_col;
- if (!last_frame_buffer_ ||
- current_buffer->width() != last_frame_buffer_->width() ||
- current_buffer->height() != last_frame_buffer_->height()) {
- // New resolution - fully new picture.
- min_row = min_col = 0;
- max_row = current_buffer->height() - 1;
- max_col = current_buffer->width() - 1;
- } else {
- min_row = frame.width();
- min_col = frame.height();
- max_row = 0;
- max_col = 0;
- // Detect changed rect.
- for (int row = 0; row < frame.height(); ++row) {
- for (int col = 0; col < frame.width(); ++col) {
- int uv_row = row / 2;
- int uv_col = col / 2;
- if (current_buffer
- ->DataU()[uv_row * current_buffer->StrideU() + uv_col] !=
- last_frame_buffer_
- ->DataU()[uv_row * last_frame_buffer_->StrideU() +
- uv_col] ||
- current_buffer
- ->DataV()[uv_row * current_buffer->StrideV() + uv_col] !=
- last_frame_buffer_
- ->DataV()[uv_row * last_frame_buffer_->StrideV() +
- uv_col] ||
- current_buffer->DataY()[row * current_buffer->StrideY() + col] !=
- last_frame_buffer_
- ->DataY()[row * last_frame_buffer_->StrideY() + col]) {
- min_row = std::min(min_row, row);
- max_row = std::max(max_row, row);
- min_col = std::min(min_col, col);
- max_col = std::max(max_col, col);
- }
- }
- }
- }
- if (max_row < min_row || max_col < min_col) {
- min_col = min_row = 0;
- max_col = max_row = -1;
- }
- // Expand changed rect to accommodate subsampled UV plane.
- if (min_row % 2)
- --min_row;
- if (min_col % 2)
- --min_row;
- if (max_row < frame.width() && max_row % 2 == 0)
- ++max_row;
- if (max_col < frame.height() && max_col % 2 == 0)
- ++max_col;
- VideoFrame::PartialFrameDescription part_desc;
- part_desc.offset_x = min_col;
- part_desc.offset_y = min_row;
- int changed_width = max_col - min_col + 1;
- int changed_height = max_row - min_row + 1;
- last_frame_buffer_ = current_buffer;
- VideoFrame copy = frame;
- if (changed_width > 0 && changed_height > 0) {
- rtc::scoped_refptr<I420Buffer> changed_buffer =
- I420Buffer::Create(changed_width, changed_height);
- changed_buffer->CropAndScaleFrom(*current_buffer, part_desc.offset_x,
- part_desc.offset_y, changed_width,
- changed_height);
- copy.set_video_frame_buffer(changed_buffer);
- } else {
- copy.set_video_frame_buffer(nullptr);
- }
- if (changed_width < frame.width() || changed_height < frame.height()) {
- copy.set_partial_frame_description(part_desc);
- }
- copy.set_cache_buffer_for_partial_updates(true);
- sink_->OnFrame(copy);
-}
-
-void FrameChangeExtractor::AddOrUpdateSink(
- rtc::VideoSinkInterface<VideoFrame>* sink,
- const rtc::VideoSinkWants& wants) {
- RTC_CHECK(wants.partial_frames);
- {
- rtc::CritScope lock(&source_crit_);
- if (source_) {
- source_->AddOrUpdateSink(this, wants);
- }
- }
- {
- rtc::CritScope lock(&sink_crit_);
- // Several sinks are unsupported.
- RTC_CHECK(sink_ == nullptr || sink_ == sink);
- sink_ = sink;
- }
-}
-
-void FrameChangeExtractor::RemoveSink(
- rtc::VideoSinkInterface<VideoFrame>* sink) {
- {
- rtc::CritScope lock(&source_crit_);
- if (source_) {
- source_->RemoveSink(this);
- }
- }
- {
- rtc::CritScope lock(&sink_crit_);
- sink_ = nullptr;
- }
-}
-
-} // namespace webrtc
diff --git a/test/frame_change_extractor.h b/test/frame_change_extractor.h
deleted file mode 100644
index ea24da6..0000000
--- a/test/frame_change_extractor.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef TEST_FRAME_CHANGE_EXTRACTOR_H_
-#define TEST_FRAME_CHANGE_EXTRACTOR_H_
-
-#include "api/video/video_frame.h"
-#include "api/video/video_sink_interface.h"
-#include "api/video/video_source_interface.h"
-#include "rtc_base/critical_section.h"
-
-namespace webrtc {
-
-// This class is used to test partial video frame interface.
-// It receives a full frame, detects changed region, and passes forward only
-// the changed part with correct PartialDescription struct set.
-// Currently only works with I420 buffers.
-class FrameChangeExtractor : public rtc::VideoSinkInterface<VideoFrame>,
- public rtc::VideoSourceInterface<VideoFrame> {
- public:
- FrameChangeExtractor();
- ~FrameChangeExtractor();
- void SetSource(rtc::VideoSourceInterface<VideoFrame>* video_source);
-
- // Implements rtc::VideoSinkInterface<VideoFrame>.
- void OnFrame(const VideoFrame& frame) override;
-
- // Implements rtc::VideoSourceInterface<VideoFrame>.
- void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
- const rtc::VideoSinkWants& wants) override;
- void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) override;
-
- private:
- rtc::CriticalSection source_crit_;
- rtc::VideoSourceInterface<VideoFrame>* source_ RTC_GUARDED_BY(source_crit_);
- rtc::CriticalSection sink_crit_;
- rtc::VideoSinkInterface<VideoFrame>* sink_ RTC_GUARDED_BY(sink_crit_);
- rtc::scoped_refptr<webrtc::I420BufferInterface> last_frame_buffer_
- RTC_GUARDED_BY(sink_crit_);
-};
-
-} // namespace webrtc
-#endif // TEST_FRAME_CHANGE_EXTRACTOR_H_