Chromium Code Reviews| Index: content/renderer/media/rtc_video_renderer.cc |
| diff --git a/content/renderer/media/rtc_video_renderer.cc b/content/renderer/media/rtc_video_renderer.cc |
| index 5087711a82071bd0dc99d5a45777b2e60334fc84..4734d239c1fac4f98441c0de34e7a7bdf0351871 100644 |
| --- a/content/renderer/media/rtc_video_renderer.cc |
| +++ b/content/renderer/media/rtc_video_renderer.cc |
| @@ -12,6 +12,7 @@ |
| #include "media/base/video_frame.h" |
| #include "media/base/video_util.h" |
| #include "third_party/libjingle/source/talk/media/base/videoframe.h" |
| +#include "third_party/webrtc/common_video/interface/native_handle.h" |
| using media::CopyYPlane; |
| using media::CopyUPlane; |
| @@ -81,24 +82,30 @@ void RTCVideoRenderer::RenderFrame(const cricket::VideoFrame* frame) { |
| "timestamp", |
| frame->GetTimeStamp()); |
| - gfx::Size size(frame->GetWidth(), frame->GetHeight()); |
| - scoped_refptr<media::VideoFrame> video_frame = |
| - media::VideoFrame::CreateFrame(media::VideoFrame::YV12, |
| - size, |
| - gfx::Rect(size), |
| - size, |
| - base::TimeDelta::FromMilliseconds( |
| - frame->GetTimeStamp())); |
| - |
| - // Aspect ratio unsupported; DCHECK when there are non-square pixels. |
| - DCHECK_EQ(frame->GetPixelWidth(), 1u); |
| - DCHECK_EQ(frame->GetPixelHeight(), 1u); |
| - |
| - int y_rows = frame->GetHeight(); |
| - int uv_rows = frame->GetHeight() / 2; // YV12 format. |
| - CopyYPlane(frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame); |
| - CopyUPlane(frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame); |
| - CopyVPlane(frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame); |
| + scoped_refptr<media::VideoFrame> video_frame; |
| + if (frame->GetNativeHandle() != NULL) { |
| + webrtc::NativeHandle *handle = |
| + (webrtc::NativeHandle *)frame->GetNativeHandle(); |
|
Ami GONE FROM CHROMIUM
2013/04/26 00:42:05
if you cast this to the Impl version then you can
wuchengli
2013/05/08 15:58:56
I don't understand. The Impl version signature als
|
| + video_frame = (media::VideoFrame *)handle->GetHandle(); |
| + base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds( |
|
Ami GONE FROM CHROMIUM
2013/04/26 00:42:05
this is common to both if/else clauses so could be
wuchengli
2013/05/08 15:58:56
Done. Someone else extracted this.
On 2013/04/26 0
|
| + frame->GetTimeStamp()); |
| + video_frame->SetTimestamp(timestamp); |
| + } else { |
| + gfx::Size size(frame->GetWidth(), frame->GetHeight()); |
| + video_frame = media::VideoFrame::CreateFrame( |
| + media::VideoFrame::YV12, size, gfx::Rect(size), size, |
| + base::TimeDelta::FromMilliseconds(frame->GetTimeStamp())); |
| + |
| + // Aspect ratio unsupported; DCHECK when there are non-square pixels. |
| + DCHECK_EQ(frame->GetPixelWidth(), 1u); |
| + DCHECK_EQ(frame->GetPixelHeight(), 1u); |
| + |
| + int y_rows = frame->GetHeight(); |
| + int uv_rows = frame->GetHeight() / 2; // YV12 format. |
| + CopyYPlane(frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame); |
| + CopyUPlane(frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame); |
| + CopyVPlane(frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame); |
| + } |
| message_loop_proxy_->PostTask( |
| FROM_HERE, base::Bind(&RTCVideoRenderer::DoRenderFrameOnMainThread, |