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, |