| 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 725a7785b127a93974cd4aece1189b553c94e730..f64ed02fed2df768476d3090b1e9a32de346405d 100644
|
| --- a/content/renderer/media/rtc_video_renderer.cc
|
| +++ b/content/renderer/media/rtc_video_renderer.cc
|
| @@ -9,6 +9,7 @@
|
| #include "base/location.h"
|
| #include "base/logging.h"
|
| #include "base/message_loop/message_loop_proxy.h"
|
| +#include "content/renderer/media/native_handle_impl.h"
|
| #include "media/base/video_frame.h"
|
| #include "media/base/video_util.h"
|
| #include "third_party/libjingle/source/talk/media/base/videoframe.h"
|
| @@ -84,25 +85,30 @@ void RTCVideoRenderer::RenderFrame(const cricket::VideoFrame* frame) {
|
| "timestamp_ms",
|
| timestamp.InMilliseconds());
|
|
|
| - gfx::Size size(frame->GetWidth(), frame->GetHeight());
|
| - scoped_refptr<media::VideoFrame> video_frame =
|
| - media::VideoFrame::CreateFrame(media::VideoFrame::YV12,
|
| - size,
|
| - gfx::Rect(size),
|
| - size,
|
| - timestamp);
|
| -
|
| - // 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.get());
|
| - CopyUPlane(
|
| - frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame.get());
|
| - CopyVPlane(
|
| - frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame.get());
|
| + scoped_refptr<media::VideoFrame> video_frame;
|
| + if (frame->GetNativeHandle() != NULL) {
|
| + NativeHandleImpl* handle =
|
| + static_cast<NativeHandleImpl*>(frame->GetNativeHandle());
|
| + video_frame = static_cast<media::VideoFrame*>(handle->GetHandle());
|
| + 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, timestamp);
|
| +
|
| + // 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.get());
|
| + CopyUPlane(
|
| + frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame.get());
|
| + CopyVPlane(
|
| + frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame.get());
|
| + }
|
|
|
| message_loop_proxy_->PostTask(
|
| FROM_HERE, base::Bind(&RTCVideoRenderer::DoRenderFrameOnMainThread,
|
|
|