| Index: content/renderer/media/webrtc/media_stream_remote_video_source.cc
 | 
| diff --git a/content/renderer/media/webrtc/media_stream_remote_video_source.cc b/content/renderer/media/webrtc/media_stream_remote_video_source.cc
 | 
| index 786ed84fa39d43c3ec0fb6b6231270b73d8b73e7..ed238059a8f1a782dd7da50a33355eb5c113dd37 100644
 | 
| --- a/content/renderer/media/webrtc/media_stream_remote_video_source.cc
 | 
| +++ b/content/renderer/media/webrtc/media_stream_remote_video_source.cc
 | 
| @@ -14,7 +14,6 @@
 | 
|  #include "content/renderer/media/webrtc/track_observer.h"
 | 
|  #include "media/base/bind_to_current_loop.h"
 | 
|  #include "media/base/video_frame.h"
 | 
| -#include "media/base/video_frame_pool.h"
 | 
|  #include "media/base/video_util.h"
 | 
|  #include "third_party/libjingle/source/talk/media/base/videoframe.h"
 | 
|  
 | 
| @@ -48,9 +47,6 @@ class MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate
 | 
|    base::ThreadChecker thread_checker_;
 | 
|  
 | 
|    scoped_refptr<base::MessageLoopProxy> io_message_loop_;
 | 
| -  // |frame_pool_| is only accessed on whatever
 | 
| -  // thread webrtc::VideoRendererInterface::RenderFrame is called on.
 | 
| -  media::VideoFramePool frame_pool_;
 | 
|  
 | 
|    // |frame_callback_| is accessed on the IO thread.
 | 
|    VideoCaptureDeliverFrameCB frame_callback_;
 | 
| @@ -87,21 +83,23 @@ RemoteVideoSourceDelegate::RenderFrame(
 | 
|      video_frame->set_timestamp(timestamp);
 | 
|    } else {
 | 
|      gfx::Size size(frame->GetWidth(), frame->GetHeight());
 | 
| -    video_frame = frame_pool_.CreateFrame(
 | 
| -        media::VideoFrame::YV12, size, gfx::Rect(size), size, timestamp);
 | 
|  
 | 
|      // Non-square pixels are unsupported.
 | 
|      DCHECK_EQ(frame->GetPixelWidth(), 1u);
 | 
|      DCHECK_EQ(frame->GetPixelHeight(), 1u);
 | 
|  
 | 
| -    int y_rows = frame->GetHeight();
 | 
| -    int uv_rows = frame->GetChromaHeight();
 | 
| -    CopyYPlane(
 | 
| -        frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame.get());
 | 
| -    CopyUPlane(
 | 
| -        frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame.get());
 | 
| -    CopyVPlane(
 | 
| -        frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame.get());
 | 
| +    // Make a shallow copy. Both |frame| and |video_frame| will share a single
 | 
| +    // reference counted frame buffer. Const cast and hope no one will overwrite
 | 
| +    // the data.
 | 
| +    // TODO(magjed): Update media::VideoFrame to support const data so we don't
 | 
| +    // need to const cast here.
 | 
| +    video_frame = media::VideoFrame::WrapExternalYuvData(
 | 
| +        media::VideoFrame::YV12, size, gfx::Rect(size), size,
 | 
| +        frame->GetYPitch(), frame->GetUPitch(), frame->GetVPitch(),
 | 
| +        const_cast<uint8_t*>(frame->GetYPlane()),
 | 
| +        const_cast<uint8_t*>(frame->GetUPlane()),
 | 
| +        const_cast<uint8_t*>(frame->GetVPlane()), timestamp,
 | 
| +        base::Bind(&base::DeletePointer<cricket::VideoFrame>, frame->Copy()));
 | 
|    }
 | 
|  
 | 
|    io_message_loop_->PostTask(
 | 
| 
 |