Chromium Code Reviews| Index: content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc |
| diff --git a/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc b/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc |
| index 6689ddf81f9f025e3d2fd4a151ab804534b4b734..8a5dda1cdcabc76ac410b35d76c4f558c6d38e2b 100644 |
| --- a/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc |
| +++ b/content/renderer/media/webrtc/webrtc_video_capturer_adapter.cc |
| @@ -65,7 +65,9 @@ class VideoFrameWrapper : public webrtc::VideoFrameBuffer { |
| return frame_->stride(WebRtcToMediaPlaneType(type)); |
| } |
| - void* native_handle() const override { return nullptr; } |
| + void* native_handle() const override { |
| + return frame_.get(); |
|
magjed_chromium
2015/06/03 08:40:00
In webrtc, we have some branching on whether nativ
emircan
2015/06/03 20:56:12
Done.
|
| + } |
| ~VideoFrameWrapper() override {} |
| friend class rtc::RefCountedObject<VideoFrameWrapper>; |
| @@ -119,6 +121,17 @@ class WebRtcVideoCapturerAdapter::MediaVideoFrameFactory |
| DCHECK(input_frame == &captured_frame_); |
| DCHECK(frame_.get()); |
| + const int64_t timestamp_ns = frame_->timestamp().InMicroseconds() * |
| + base::Time::kNanosecondsPerMicrosecond; |
| + |
| + // Return |frame_| directly if it is texture backed, because there is no |
| + // cropping support for textures yet. See http://crbug/362521. |
| + if (frame_->storage_type() == media::VideoFrame::STORAGE_TEXTURE) { |
| + return new cricket::WebRtcVideoFrame( |
| + new rtc::RefCountedObject<VideoFrameWrapper>(frame_), |
| + captured_frame_.elapsed_time, timestamp_ns); |
| + } |
| + |
| // Create a centered cropped visible rect that preservers aspect ratio for |
| // cropped natural size. |
| gfx::Rect visible_rect = frame_->visible_rect(); |
| @@ -132,9 +145,6 @@ class WebRtcVideoCapturerAdapter::MediaVideoFrameFactory |
| video_frame->AddDestructionObserver( |
| base::Bind(&ReleaseOriginalFrame, frame_)); |
| - const int64_t timestamp_ns = frame_->timestamp().InMicroseconds() * |
| - base::Time::kNanosecondsPerMicrosecond; |
| - |
| // If no scaling is needed, return a wrapped version of |frame_| directly. |
| if (video_frame->natural_size() == video_frame->visible_rect().size()) { |
| return new cricket::WebRtcVideoFrame( |
| @@ -257,10 +267,10 @@ void WebRtcVideoCapturerAdapter::OnFrameCaptured( |
| DCHECK(thread_checker_.CalledOnValidThread()); |
| TRACE_EVENT0("video", "WebRtcVideoCapturerAdapter::OnFrameCaptured"); |
| if (!(media::VideoFrame::I420 == frame->format() || |
| - media::VideoFrame::YV12 == frame->format())) { |
| - // Some types of sources support textures as output. Since connecting |
| - // sources and sinks do not check the format, we need to just ignore |
| - // formats that we can not handle. |
| + media::VideoFrame::YV12 == frame->format() || |
| + media::VideoFrame::STORAGE_TEXTURE == frame->storage_type())) { |
| + // Since connecting sources and sinks do not check the format, we need to |
| + // just ignore formats that we can not handle. |
| NOTREACHED(); |
| return; |
| } |