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

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

Issue 1128213005: Passing Native Texture backed Video Frame from Renderer to GPU process (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
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;
}
« content/renderer/media/rtc_video_encoder.cc ('K') | « content/renderer/media/rtc_video_encoder.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698