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

Side by Side Diff: content/renderer/media/webrtc/media_stream_remote_video_source.cc

Issue 955253002: Add metadata to media::VideoFrame and plumb it through IPC/MediaStream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tommi's nits addressed Created 5 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/media/webrtc/media_stream_remote_video_source.h" 5 #include "content/renderer/media/webrtc/media_stream_remote_video_source.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/message_loop/message_loop_proxy.h" 10 #include "base/message_loop/message_loop_proxy.h"
(...skipping 22 matching lines...) Expand all
33 protected: 33 protected:
34 friend class base::RefCountedThreadSafe<RemoteVideoSourceDelegate>; 34 friend class base::RefCountedThreadSafe<RemoteVideoSourceDelegate>;
35 ~RemoteVideoSourceDelegate() override; 35 ~RemoteVideoSourceDelegate() override;
36 36
37 // Implements webrtc::VideoRendererInterface used for receiving video frames 37 // Implements webrtc::VideoRendererInterface used for receiving video frames
38 // from the PeerConnection video track. May be called on a libjingle internal 38 // from the PeerConnection video track. May be called on a libjingle internal
39 // thread. 39 // thread.
40 void SetSize(int width, int height) override; 40 void SetSize(int width, int height) override;
41 void RenderFrame(const cricket::VideoFrame* frame) override; 41 void RenderFrame(const cricket::VideoFrame* frame) override;
42 42
43 void DoRenderFrameOnIOThread(scoped_refptr<media::VideoFrame> video_frame, 43 void DoRenderFrameOnIOThread(
44 const media::VideoCaptureFormat& format); 44 const scoped_refptr<media::VideoFrame>& video_frame);
45
45 private: 46 private:
46 // Bound to the render thread. 47 // Bound to the render thread.
47 base::ThreadChecker thread_checker_; 48 base::ThreadChecker thread_checker_;
48 49
49 scoped_refptr<base::MessageLoopProxy> io_message_loop_; 50 scoped_refptr<base::MessageLoopProxy> io_message_loop_;
50 // |frame_pool_| is only accessed on whatever 51 // |frame_pool_| is only accessed on whatever
51 // thread webrtc::VideoRendererInterface::RenderFrame is called on. 52 // thread webrtc::VideoRendererInterface::RenderFrame is called on.
52 media::VideoFramePool frame_pool_; 53 media::VideoFramePool frame_pool_;
53 54
54 // |frame_callback_| is accessed on the IO thread. 55 // |frame_callback_| is accessed on the IO thread.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 int y_rows = frame->GetHeight(); 97 int y_rows = frame->GetHeight();
97 int uv_rows = frame->GetChromaHeight(); 98 int uv_rows = frame->GetChromaHeight();
98 CopyYPlane( 99 CopyYPlane(
99 frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame.get()); 100 frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame.get());
100 CopyUPlane( 101 CopyUPlane(
101 frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame.get()); 102 frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame.get());
102 CopyVPlane( 103 CopyVPlane(
103 frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame.get()); 104 frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame.get());
104 } 105 }
105 106
106 media::VideoPixelFormat pixel_format =
107 (video_frame->format() == media::VideoFrame::YV12) ?
108 media::PIXEL_FORMAT_YV12 : media::PIXEL_FORMAT_TEXTURE;
109
110 media::VideoCaptureFormat format(
111 gfx::Size(video_frame->natural_size().width(),
112 video_frame->natural_size().height()),
113 MediaStreamVideoSource::kUnknownFrameRate,
114 pixel_format);
115
116 io_message_loop_->PostTask( 107 io_message_loop_->PostTask(
117 FROM_HERE, 108 FROM_HERE,
118 base::Bind(&RemoteVideoSourceDelegate::DoRenderFrameOnIOThread, 109 base::Bind(&RemoteVideoSourceDelegate::DoRenderFrameOnIOThread,
119 this, video_frame, format)); 110 this, video_frame));
120 } 111 }
121 112
122 void MediaStreamRemoteVideoSource:: 113 void MediaStreamRemoteVideoSource::
123 RemoteVideoSourceDelegate::DoRenderFrameOnIOThread( 114 RemoteVideoSourceDelegate::DoRenderFrameOnIOThread(
124 scoped_refptr<media::VideoFrame> video_frame, 115 const scoped_refptr<media::VideoFrame>& video_frame) {
125 const media::VideoCaptureFormat& format) {
126 DCHECK(io_message_loop_->BelongsToCurrentThread()); 116 DCHECK(io_message_loop_->BelongsToCurrentThread());
127 TRACE_EVENT0("webrtc", "RemoteVideoSourceDelegate::DoRenderFrameOnIOThread"); 117 TRACE_EVENT0("webrtc", "RemoteVideoSourceDelegate::DoRenderFrameOnIOThread");
128 // TODO(hclam): Give the estimated capture time. 118 // TODO(hclam): Give the estimated capture time.
129 frame_callback_.Run(video_frame, format, base::TimeTicks()); 119 frame_callback_.Run(video_frame, base::TimeTicks());
130 } 120 }
131 121
132 MediaStreamRemoteVideoSource::MediaStreamRemoteVideoSource( 122 MediaStreamRemoteVideoSource::MediaStreamRemoteVideoSource(
133 scoped_ptr<TrackObserver> observer) 123 scoped_ptr<TrackObserver> observer)
134 : observer_(observer.Pass()) { 124 : observer_(observer.Pass()) {
135 // The callback will be automatically cleared when 'observer_' goes out of 125 // The callback will be automatically cleared when 'observer_' goes out of
136 // scope and no further callbacks will occur. 126 // scope and no further callbacks will occur.
137 observer_->SetCallback(base::Bind(&MediaStreamRemoteVideoSource::OnChanged, 127 observer_->SetCallback(base::Bind(&MediaStreamRemoteVideoSource::OnChanged,
138 base::Unretained(this))); 128 base::Unretained(this)));
139 } 129 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 case webrtc::MediaStreamTrackInterface::kEnded: 183 case webrtc::MediaStreamTrackInterface::kEnded:
194 SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded); 184 SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
195 break; 185 break;
196 default: 186 default:
197 NOTREACHED(); 187 NOTREACHED();
198 break; 188 break;
199 } 189 }
200 } 190 }
201 191
202 } // namespace content 192 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/video_track_adapter.cc ('k') | content/renderer/media/webrtc/video_destination_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698