Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1767)

Unified Diff: content/renderer/media/webrtc/media_stream_remote_video_source.cc

Issue 2068703002: Delete only call to cricket::VideoFrame::Copy. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Avoid allocating a place-holder object for AddDestructionObserver, Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 928b1804c68b10b67600d1f18e9533b867f2db87..78ac79672cf1d70b841131a631380774e37387cd 100644
--- a/content/renderer/media/webrtc/media_stream_remote_video_source.cc
+++ b/content/renderer/media/webrtc/media_stream_remote_video_source.cc
@@ -72,6 +72,10 @@ MediaStreamRemoteVideoSource::
RemoteVideoSourceDelegate::~RemoteVideoSourceDelegate() {
}
+namespace {
+void DoNothing(const scoped_refptr<rtc::RefCountInterface>& ref) {}
+} // anonymous
+
void MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::OnFrame(
const cricket::VideoFrame& incoming_frame) {
const base::TimeDelta incoming_timestamp = base::TimeDelta::FromMicroseconds(
@@ -89,16 +93,19 @@ void MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::OnFrame(
incoming_timestamp - start_timestamp_;
scoped_refptr<media::VideoFrame> video_frame;
- if (incoming_frame.video_frame_buffer()->native_handle() != NULL) {
+ scoped_refptr<webrtc::VideoFrameBuffer> buffer(
+ incoming_frame.video_frame_buffer());
+
+ if (buffer->native_handle() != NULL) {
video_frame =
- static_cast<media::VideoFrame*>(
- incoming_frame.video_frame_buffer()->native_handle());
+ static_cast<media::VideoFrame*>(buffer->native_handle());
video_frame->set_timestamp(elapsed_timestamp);
} else {
- const cricket::VideoFrame* frame =
- incoming_frame.GetCopyWithRotationApplied();
-
- gfx::Size size(frame->width(), frame->height());
+ // Note that the GetCopyWithRotationApplied returns a pointer to a
+ // frame owned by incoming_frame.
+ buffer =
+ incoming_frame.GetCopyWithRotationApplied()->video_frame_buffer();
+ gfx::Size size(buffer->width(), buffer->height());
// 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
@@ -107,17 +114,17 @@ void MediaStreamRemoteVideoSource::RemoteVideoSourceDelegate::OnFrame(
// need to const cast here.
video_frame = media::VideoFrame::WrapExternalYuvData(
media::PIXEL_FORMAT_YV12, size, gfx::Rect(size), size,
- frame->video_frame_buffer()->StrideY(),
- frame->video_frame_buffer()->StrideU(),
- frame->video_frame_buffer()->StrideV(),
- const_cast<uint8_t*>(frame->video_frame_buffer()->DataY()),
- const_cast<uint8_t*>(frame->video_frame_buffer()->DataU()),
- const_cast<uint8_t*>(frame->video_frame_buffer()->DataV()),
+ buffer->StrideY(),
+ buffer->StrideU(),
+ buffer->StrideV(),
+ const_cast<uint8_t*>(buffer->DataY()),
+ const_cast<uint8_t*>(buffer->DataU()),
+ const_cast<uint8_t*>(buffer->DataV()),
elapsed_timestamp);
if (!video_frame)
return;
- video_frame->AddDestructionObserver(
- base::Bind(&base::DeletePointer<cricket::VideoFrame>, frame->Copy()));
+ // The bind ensures that we keep a reference to the underlying buffer.
+ video_frame->AddDestructionObserver(base::Bind(&DoNothing, buffer));
}
video_frame->metadata()->SetTimeTicks(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698