From 8102a1a8ea497a20fe89dfe480f199023063b18c Mon Sep 17 00:00:00 2001 From: Ilya Nikolaevskiy Date: Thu, 31 Jan 2019 11:57:20 +0000 Subject: [PATCH] Revert "Partial frame capture API part 1" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 8a21e1c9c95c9b9b570c84bdfeda0315ede9dc29. Reason for revert: breaks buildbots Original change's description: > Partial frame capture API part 1 > > Define new optional struct in VideoFrame to signal that the frame is a > changed part of a whole picture and add a flag to signal that partial > update may be issued by the VideoFrame source. > > Also, fix too strict assumptions in FrameBuffers PasteFrom methods. > Also, add ability to set a new buffer in video frame. > > > Bug: webrtc:10152 > Change-Id: Ie0da418fd60bc7a34334329292e0b860ec388788 > Reviewed-on: https://webrtc-review.googlesource.com/c/120405 > Commit-Queue: Ilya Nikolaevskiy > Reviewed-by: Erik Språng > Reviewed-by: Niels Moller > Cr-Commit-Position: refs/heads/master@{#26489} TBR=ilnik@webrtc.org,nisse@webrtc.org,sprang@webrtc.org Change-Id: Ibf61f28e529a444882962b984474d4849bb44e4b No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:10152 Reviewed-on: https://webrtc-review.googlesource.com/c/120760 Reviewed-by: Ilya Nikolaevskiy Commit-Queue: Ilya Nikolaevskiy Cr-Commit-Position: refs/heads/master@{#26490} --- api/video/i010_buffer.cc | 6 ++-- api/video/i420_buffer.cc | 6 ++-- api/video/video_frame.cc | 43 +++++------------------ api/video/video_frame.h | 56 +++++------------------------- api/video/video_source_interface.h | 3 -- 5 files changed, 22 insertions(+), 92 deletions(-) diff --git a/api/video/i010_buffer.cc b/api/video/i010_buffer.cc index 7286676ded..8f4541f2ec 100644 --- a/api/video/i010_buffer.cc +++ b/api/video/i010_buffer.cc @@ -243,10 +243,8 @@ void I010Buffer::PasteFrom(const I010BufferInterface& picture, // Pasted picture has to be aligned so subsumpled UV plane isn't corrupted. RTC_CHECK(offset_col % 2 == 0); RTC_CHECK(offset_row % 2 == 0); - RTC_CHECK(picture.width() % 2 == 0 || - picture.width() + offset_col == width()); - RTC_CHECK(picture.height() % 2 == 0 || - picture.height() + offset_row == height()); + RTC_CHECK(picture.width() % 2 == 0); + RTC_CHECK(picture.height() % 2 == 0); libyuv::CopyPlane_16(picture.DataY(), picture.StrideY(), MutableDataY() + StrideY() * offset_row + offset_col, diff --git a/api/video/i420_buffer.cc b/api/video/i420_buffer.cc index 46de581e84..ed45b98ae2 100644 --- a/api/video/i420_buffer.cc +++ b/api/video/i420_buffer.cc @@ -237,10 +237,8 @@ void I420Buffer::PasteFrom(const I420BufferInterface& picture, // Pasted picture has to be aligned so subsumpled UV plane isn't corrupted. RTC_CHECK(offset_col % 2 == 0); RTC_CHECK(offset_row % 2 == 0); - RTC_CHECK(picture.width() % 2 == 0 || - picture.width() + offset_col == width()); - RTC_CHECK(picture.height() % 2 == 0 || - picture.height() + offset_row == height()); + RTC_CHECK(picture.width() % 2 == 0); + RTC_CHECK(picture.height() % 2 == 0); libyuv::CopyPlane(picture.DataY(), picture.StrideY(), MutableDataY() + StrideY() * offset_row + offset_col, diff --git a/api/video/video_frame.cc b/api/video/video_frame.cc index 03bbd71c42..75a30b28a9 100644 --- a/api/video/video_frame.cc +++ b/api/video/video_frame.cc @@ -21,9 +21,7 @@ VideoFrame::Builder::~Builder() = default; VideoFrame VideoFrame::Builder::build() { return VideoFrame(id_, video_frame_buffer_, timestamp_us_, timestamp_rtp_, - ntp_time_ms_, rotation_, color_space_, - partial_frame_description_, - cache_buffer_for_partial_updates_); + ntp_time_ms_, rotation_, color_space_); } VideoFrame::Builder& VideoFrame::Builder::set_video_frame_buffer( @@ -78,18 +76,6 @@ VideoFrame::Builder& VideoFrame::Builder::set_id(uint16_t id) { return *this; } -VideoFrame::Builder& VideoFrame::Builder::set_partial_frame_description( - const absl::optional& description) { - partial_frame_description_ = description; - return *this; -} - -VideoFrame::Builder& VideoFrame::Builder::set_cache_buffer_for_partial_updates( - bool cache_buffer_for_partial_updates) { - cache_buffer_for_partial_updates_ = cache_buffer_for_partial_updates; - return *this; -} - VideoFrame::VideoFrame(const rtc::scoped_refptr& buffer, webrtc::VideoRotation rotation, int64_t timestamp_us) @@ -111,25 +97,20 @@ VideoFrame::VideoFrame(const rtc::scoped_refptr& buffer, RTC_DCHECK(buffer); } -VideoFrame::VideoFrame( - uint16_t id, - const rtc::scoped_refptr& buffer, - int64_t timestamp_us, - uint32_t timestamp_rtp, - int64_t ntp_time_ms, - VideoRotation rotation, - const absl::optional& color_space, - const absl::optional partial_frame_description, - bool cache_buffer_for_partial_updates) +VideoFrame::VideoFrame(uint16_t id, + const rtc::scoped_refptr& buffer, + int64_t timestamp_us, + uint32_t timestamp_rtp, + int64_t ntp_time_ms, + VideoRotation rotation, + const absl::optional& color_space) : id_(id), video_frame_buffer_(buffer), timestamp_rtp_(timestamp_rtp), ntp_time_ms_(ntp_time_ms), timestamp_us_(timestamp_us), rotation_(rotation), - color_space_(color_space), - partial_frame_description_(partial_frame_description), - cache_buffer_for_partial_updates_(cache_buffer_for_partial_updates) {} + color_space_(color_space) {} VideoFrame::~VideoFrame() = default; @@ -154,12 +135,6 @@ rtc::scoped_refptr VideoFrame::video_frame_buffer() const { return video_frame_buffer_; } -void VideoFrame::set_video_frame_buffer( - rtc::scoped_refptr buffer) { - RTC_CHECK(buffer.get()); - video_frame_buffer_ = buffer; -} - int64_t VideoFrame::render_time_ms() const { return timestamp_us() / rtc::kNumMicrosecsPerMillisec; } diff --git a/api/video/video_frame.h b/api/video/video_frame.h index de03d917ad..de3f0efdc5 100644 --- a/api/video/video_frame.h +++ b/api/video/video_frame.h @@ -25,14 +25,6 @@ namespace webrtc { class RTC_EXPORT VideoFrame { public: - // Describes a partial frame, which contains only a changed region compared - // to a previous frame. Shouldn't be set on the fully updated picture. - struct PartialFrameDescription { - // Coordinates of top-left corner of the changed region in the full picture. - int offset_x; - int offset_y; - }; - // Preferred way of building VideoFrame objects. class Builder { public: @@ -50,10 +42,6 @@ class RTC_EXPORT VideoFrame { Builder& set_color_space(const ColorSpace& color_space); Builder& set_color_space(const ColorSpace* color_space); Builder& set_id(uint16_t id); - Builder& set_partial_frame_description( - const absl::optional& description); - Builder& set_cache_buffer_for_partial_updates( - bool cache_buffer_for_partial_updates); private: uint16_t id_ = 0; @@ -63,8 +51,6 @@ class RTC_EXPORT VideoFrame { int64_t ntp_time_ms_ = 0; VideoRotation rotation_ = kVideoRotation_0; absl::optional color_space_; - absl::optional partial_frame_description_; - bool cache_buffer_for_partial_updates_; }; // To be deprecated. Migrate all use to Builder. @@ -148,31 +134,13 @@ class RTC_EXPORT VideoFrame { color_space ? absl::make_optional(*color_space) : absl::nullopt; } - const PartialFrameDescription* partial_frame_description() const { - return partial_frame_description_ ? &partial_frame_description_.value() - : nullptr; - } - void set_partial_frame_description( - const absl::optional& description) { - partial_frame_description_ = description; - } - - void set_cache_buffer_for_partial_updates( - bool cache_buffer_for_partial_updates) { - cache_buffer_for_partial_updates_ = cache_buffer_for_partial_updates; - } - bool cache_buffer_for_partial_updates() const { - return cache_buffer_for_partial_updates_; - } - // Get render time in milliseconds. // TODO(nisse): Deprecated. Migrate all users to timestamp_us(). int64_t render_time_ms() const; - // Return the underlying buffer. This can only be a nullptr for a partial - // update VideoFrame with no changed pixels. + // Return the underlying buffer. Never nullptr for a properly + // initialized VideoFrame. rtc::scoped_refptr video_frame_buffer() const; - void set_video_frame_buffer(rtc::scoped_refptr buffer); // TODO(nisse): Deprecated. // Return true if the frame is stored in a texture. @@ -181,16 +149,13 @@ class RTC_EXPORT VideoFrame { } private: - VideoFrame( - uint16_t id, - const rtc::scoped_refptr& buffer, - int64_t timestamp_us, - uint32_t timestamp_rtp, - int64_t ntp_time_ms, - VideoRotation rotation, - const absl::optional& color_space, - const absl::optional partial_frame_description, - bool cache_buffer_for_partial_updates_); + VideoFrame(uint16_t id, + const rtc::scoped_refptr& buffer, + int64_t timestamp_us, + uint32_t timestamp_rtp, + int64_t ntp_time_ms, + VideoRotation rotation, + const absl::optional& color_space); uint16_t id_; // An opaque reference counted handle that stores the pixel data. @@ -200,9 +165,6 @@ class RTC_EXPORT VideoFrame { int64_t timestamp_us_; VideoRotation rotation_; absl::optional color_space_; - absl::optional partial_frame_description_; - // Should be set on all frames, if the source may produce partial updates. - bool cache_buffer_for_partial_updates_; }; } // namespace webrtc diff --git a/api/video/video_source_interface.h b/api/video/video_source_interface.h index e589b7f36d..9d1641cd0d 100644 --- a/api/video/video_source_interface.h +++ b/api/video/video_source_interface.h @@ -42,9 +42,6 @@ struct RTC_EXPORT VideoSinkWants { absl::optional target_pixel_count; // Tells the source the maximum framerate the sink wants. int max_framerate_fps = std::numeric_limits::max(); - - // Tells the source that the sink supports partial frame updates. - bool partial_frames = false; }; template