diff --git a/api/video/video_frame.cc b/api/video/video_frame.cc
index 5cd909c..6a9e3f7 100644
--- a/api/video/video_frame.cc
+++ b/api/video/video_frame.cc
@@ -21,9 +21,7 @@
 
 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 @@
   return *this;
 }
 
-VideoFrame::Builder& VideoFrame::Builder::set_partial_frame_description(
-    const absl::optional<PartialFrameDescription>& 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<VideoFrameBuffer>& buffer,
                        webrtc::VideoRotation rotation,
                        int64_t timestamp_us)
@@ -111,25 +97,20 @@
   RTC_DCHECK(buffer);
 }
 
-VideoFrame::VideoFrame(
-    uint16_t id,
-    const rtc::scoped_refptr<VideoFrameBuffer>& buffer,
-    int64_t timestamp_us,
-    uint32_t timestamp_rtp,
-    int64_t ntp_time_ms,
-    VideoRotation rotation,
-    const absl::optional<ColorSpace>& color_space,
-    const absl::optional<PartialFrameDescription> partial_frame_description,
-    bool cache_buffer_for_partial_updates)
+VideoFrame::VideoFrame(uint16_t id,
+                       const rtc::scoped_refptr<VideoFrameBuffer>& buffer,
+                       int64_t timestamp_us,
+                       uint32_t timestamp_rtp,
+                       int64_t ntp_time_ms,
+                       VideoRotation rotation,
+                       const absl::optional<ColorSpace>& 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 @@
   return video_frame_buffer_;
 }
 
-void VideoFrame::set_video_frame_buffer(
-    rtc::scoped_refptr<VideoFrameBuffer> 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 aa377c2..e03057b 100644
--- a/api/video/video_frame.h
+++ b/api/video/video_frame.h
@@ -25,14 +25,6 @@
 
 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 @@
     Builder& set_color_space(const absl::optional<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<PartialFrameDescription>& description);
-    Builder& set_cache_buffer_for_partial_updates(
-        bool cache_buffer_for_partial_updates);
 
    private:
     uint16_t id_ = 0;
@@ -63,8 +51,6 @@
     int64_t ntp_time_ms_ = 0;
     VideoRotation rotation_ = kVideoRotation_0;
     absl::optional<ColorSpace> color_space_;
-    absl::optional<PartialFrameDescription> partial_frame_description_;
-    bool cache_buffer_for_partial_updates_ = false;
   };
 
   // To be deprecated. Migrate all use to Builder.
@@ -145,31 +131,13 @@
     color_space_ = color_space;
   }
 
-  const PartialFrameDescription* partial_frame_description() const {
-    return partial_frame_description_ ? &partial_frame_description_.value()
-                                      : nullptr;
-  }
-  void set_partial_frame_description(
-      const absl::optional<PartialFrameDescription>& 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<webrtc::VideoFrameBuffer> video_frame_buffer() const;
-  void set_video_frame_buffer(rtc::scoped_refptr<VideoFrameBuffer> buffer);
 
   // TODO(nisse): Deprecated.
   // Return true if the frame is stored in a texture.
@@ -178,16 +146,13 @@
   }
 
  private:
-  VideoFrame(
-      uint16_t id,
-      const rtc::scoped_refptr<VideoFrameBuffer>& buffer,
-      int64_t timestamp_us,
-      uint32_t timestamp_rtp,
-      int64_t ntp_time_ms,
-      VideoRotation rotation,
-      const absl::optional<ColorSpace>& color_space,
-      const absl::optional<PartialFrameDescription> partial_frame_description,
-      bool cache_buffer_for_partial_updates_);
+  VideoFrame(uint16_t id,
+             const rtc::scoped_refptr<VideoFrameBuffer>& buffer,
+             int64_t timestamp_us,
+             uint32_t timestamp_rtp,
+             int64_t ntp_time_ms,
+             VideoRotation rotation,
+             const absl::optional<ColorSpace>& color_space);
 
   uint16_t id_;
   // An opaque reference counted handle that stores the pixel data.
@@ -197,9 +162,6 @@
   int64_t timestamp_us_;
   VideoRotation rotation_;
   absl::optional<ColorSpace> color_space_;
-  absl::optional<PartialFrameDescription> 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 e589b7f..9d1641c 100644
--- a/api/video/video_source_interface.h
+++ b/api/video/video_source_interface.h
@@ -42,9 +42,6 @@
   absl::optional<int> target_pixel_count;
   // Tells the source the maximum framerate the sink wants.
   int max_framerate_fps = std::numeric_limits<int>::max();
-
-  // Tells the source that the sink supports partial frame updates.
-  bool partial_frames = false;
 };
 
 template <typename VideoFrameT>
