diff --git a/talk/app/webrtc/objc/RTCI420Frame.mm b/talk/app/webrtc/objc/RTCI420Frame.mm
index 1646510..6c6c564 100644
--- a/talk/app/webrtc/objc/RTCI420Frame.mm
+++ b/talk/app/webrtc/objc/RTCI420Frame.mm
@@ -29,7 +29,7 @@
 
 #include <memory>
 
-#include "webrtc/media/engine/webrtcvideoframe.h"
+#include "webrtc/media/base/videoframe.h"
 
 @implementation RTCI420Frame {
   std::unique_ptr<cricket::VideoFrame> _videoFrame;
@@ -98,10 +98,7 @@
   if (self = [super init]) {
     // Keep a shallow copy of the video frame. The underlying frame buffer is
     // not copied.
-    _videoFrame.reset(new cricket::WebRtcVideoFrame(
-        videoFrame->video_frame_buffer(),
-        videoFrame->rotation(),
-        videoFrame->timestamp_us()));
+    _videoFrame.reset(videoFrame->Copy());
   }
   return self;
 }
diff --git a/webrtc/api/java/jni/peerconnection_jni.cc b/webrtc/api/java/jni/peerconnection_jni.cc
index 2b08f75..a5ba254 100644
--- a/webrtc/api/java/jni/peerconnection_jni.cc
+++ b/webrtc/api/java/jni/peerconnection_jni.cc
@@ -768,8 +768,7 @@
   // ownership of the frame, and the frame should be released with
   // VideoRenderer.releaseNativeFrame().
   static jlong javaShallowCopy(const cricket::VideoFrame* frame) {
-    return jlongFromPointer(new cricket::WebRtcVideoFrame(
-        frame->video_frame_buffer(), frame->rotation(), frame->timestamp_us()));
+    return jlongFromPointer(frame->Copy());
   }
 
   // Return a VideoRenderer.I420Frame referring to the data in |frame|.
diff --git a/webrtc/media/base/videoframe.h b/webrtc/media/base/videoframe.h
index 10dc1bd..4015f90 100644
--- a/webrtc/media/base/videoframe.h
+++ b/webrtc/media/base/videoframe.h
@@ -51,6 +51,11 @@
   // Indicates the rotation angle in degrees.
   virtual webrtc::VideoRotation rotation() const = 0;
 
+  // Make a shallow copy of the frame. The frame buffer itself is not copied.
+  // Both the current and new VideoFrame will share a single reference-counted
+  // frame buffer.
+  virtual VideoFrame *Copy() const = 0;
+
   // Return a copy of frame which has its pending rotation applied. The
   // ownership of the returned frame is held by this frame.
   virtual const VideoFrame* GetCopyWithRotationApplied() const = 0;
diff --git a/webrtc/media/base/videoframe_unittest.h b/webrtc/media/base/videoframe_unittest.h
index 38c3f85..3998561 100644
--- a/webrtc/media/base/videoframe_unittest.h
+++ b/webrtc/media/base/videoframe_unittest.h
@@ -1808,6 +1808,31 @@
     EXPECT_TRUE(IsEqual(frame1, frame2, 1));
   }
 
+  ///////////////////
+  // General tests //
+  ///////////////////
+
+  void Copy() {
+    std::unique_ptr<T> source(new T);
+    std::unique_ptr<cricket::VideoFrame> target;
+    ASSERT_TRUE(LoadFrameNoRepeat(source.get()));
+    target.reset(source->Copy());
+    EXPECT_TRUE(IsEqual(*source, *target, 0));
+    source.reset();
+    ASSERT_TRUE(target->video_frame_buffer() != NULL);
+    EXPECT_TRUE(target->video_frame_buffer()->DataY() != NULL);
+  }
+
+  void CopyIsRef() {
+    std::unique_ptr<T> source(new T);
+    std::unique_ptr<const cricket::VideoFrame> target;
+    ASSERT_TRUE(LoadFrameNoRepeat(source.get()));
+    target.reset(source->Copy());
+    EXPECT_TRUE(IsEqual(*source, *target, 0));
+    const T* const_source = source.get();
+    EXPECT_EQ(const_source->video_frame_buffer(), target->video_frame_buffer());
+  }
+
   int repeat_;
 };
 
diff --git a/webrtc/media/engine/webrtcvideoframe.cc b/webrtc/media/engine/webrtcvideoframe.cc
index 067c80f..4f89c8b 100644
--- a/webrtc/media/engine/webrtcvideoframe.cc
+++ b/webrtc/media/engine/webrtcvideoframe.cc
@@ -78,6 +78,10 @@
   return video_frame_buffer_;
 }
 
+VideoFrame* WebRtcVideoFrame::Copy() const {
+  return new WebRtcVideoFrame(video_frame_buffer_, rotation_, timestamp_us_);
+}
+
 size_t WebRtcVideoFrame::ConvertToRgbBuffer(uint32_t to_fourcc,
                                             uint8_t* buffer,
                                             size_t size,
diff --git a/webrtc/media/engine/webrtcvideoframe.h b/webrtc/media/engine/webrtcvideoframe.h
index cec2f83..487e32e 100644
--- a/webrtc/media/engine/webrtcvideoframe.h
+++ b/webrtc/media/engine/webrtcvideoframe.h
@@ -75,6 +75,8 @@
 
   webrtc::VideoRotation rotation() const override { return rotation_; }
 
+  VideoFrame* Copy() const override;
+
   size_t ConvertToRgbBuffer(uint32_t to_fourcc,
                             uint8_t* buffer,
                             size_t size,
diff --git a/webrtc/media/engine/webrtcvideoframe_unittest.cc b/webrtc/media/engine/webrtcvideoframe_unittest.cc
index a725246..abfd0ae 100644
--- a/webrtc/media/engine/webrtcvideoframe_unittest.cc
+++ b/webrtc/media/engine/webrtcvideoframe_unittest.cc
@@ -245,6 +245,9 @@
 // TEST_WEBRTCVIDEOFRAME(ConvertToI422Buffer)
 // TEST_WEBRTCVIDEOFRAME(ConstructARGBBlackWhitePixel)
 
+TEST_WEBRTCVIDEOFRAME(Copy)
+TEST_WEBRTCVIDEOFRAME(CopyIsRef)
+
 // These functions test implementation-specific details.
 // Tests the Init function with different cropped size.
 TEST_F(WebRtcVideoFrameTest, InitEvenSize) {
@@ -289,6 +292,24 @@
   EXPECT_EQ(40, frame.timestamp_us());
 }
 
+TEST_F(WebRtcVideoFrameTest, CopyTextureFrame) {
+  webrtc::test::FakeNativeHandle* dummy_handle =
+      new webrtc::test::FakeNativeHandle();
+  webrtc::NativeHandleBuffer* buffer =
+      new rtc::RefCountedObject<webrtc::test::FakeNativeHandleBuffer>(
+          dummy_handle, 640, 480);
+  // Timestamp is converted from ns to us, so last three digits are lost.
+  cricket::WebRtcVideoFrame frame1(buffer, 20000, webrtc::kVideoRotation_0);
+  cricket::VideoFrame* frame2 = frame1.Copy();
+  EXPECT_EQ(frame1.video_frame_buffer()->native_handle(),
+            frame2->video_frame_buffer()->native_handle());
+  EXPECT_EQ(frame1.width(), frame2->width());
+  EXPECT_EQ(frame1.height(), frame2->height());
+  EXPECT_EQ(frame1.GetTimeStamp(), frame2->GetTimeStamp());
+  EXPECT_EQ(frame1.timestamp_us(), frame2->timestamp_us());
+  delete frame2;
+}
+
 TEST_F(WebRtcVideoFrameTest, ApplyRotationToFrame) {
   WebRtcVideoTestFrame applied0;
   EXPECT_TRUE(IsNull(applied0));
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm b/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm
index dcce32d..5b2d258 100644
--- a/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm
+++ b/webrtc/sdk/objc/Framework/Classes/RTCVideoFrame.mm
@@ -12,8 +12,6 @@
 
 #include <memory>
 
-#include "webrtc/media/engine/webrtcvideoframe.h"
-
 @implementation RTCVideoFrame {
   std::unique_ptr<cricket::VideoFrame> _videoFrame;
   rtc::scoped_refptr<webrtc::VideoFrameBuffer> _i420Buffer;
@@ -107,10 +105,7 @@
   if (self = [super init]) {
     // Keep a shallow copy of the video frame. The underlying frame buffer is
     // not copied.
-    _videoFrame.reset(new cricket::WebRtcVideoFrame(
-        nativeFrame->video_frame_buffer(),
-        nativeFrame->rotation(),
-        nativeFrame->timestamp_us()));
+    _videoFrame.reset(nativeFrame->Copy());
   }
   return self;
 }
