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

Side by Side Diff: content/renderer/media/webrtc/webrtc_video_track_adapter.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/webrtc_video_track_adapter.h" 5 #include "content/renderer/media/webrtc/webrtc_video_track_adapter.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "base/synchronization/lock.h" 8 #include "base/synchronization/lock.h"
9 #include "content/common/media/media_stream_options.h" 9 #include "content/common/media/media_stream_options.h"
10 #include "content/renderer/media/media_stream_video_source.h" 10 #include "content/renderer/media/media_stream_video_source.h"
(...skipping 26 matching lines...) Expand all
37 37
38 // WebRtcVideoTrackAdapter can be destroyed on the main render thread or 38 // WebRtcVideoTrackAdapter can be destroyed on the main render thread or
39 // libjingles worker thread since it posts video frames on that thread. But 39 // libjingles worker thread since it posts video frames on that thread. But
40 // |video_source_| must be released on the main render thread before the 40 // |video_source_| must be released on the main render thread before the
41 // PeerConnectionFactory has been destroyed. The only way to ensure that is 41 // PeerConnectionFactory has been destroyed. The only way to ensure that is
42 // to make sure |video_source_| is released when WebRtcVideoTrackAdapter() is 42 // to make sure |video_source_| is released when WebRtcVideoTrackAdapter() is
43 // destroyed. 43 // destroyed.
44 void ReleaseSourceOnMainThread(); 44 void ReleaseSourceOnMainThread();
45 45
46 void OnVideoFrameOnIO(const scoped_refptr<media::VideoFrame>& frame, 46 void OnVideoFrameOnIO(const scoped_refptr<media::VideoFrame>& frame,
47 const media::VideoCaptureFormat& format,
48 const base::TimeTicks& estimated_capture_time); 47 const base::TimeTicks& estimated_capture_time);
49 48
50 private: 49 private:
51 void OnVideoFrameOnWorkerThread( 50 void OnVideoFrameOnWorkerThread(
52 const scoped_refptr<media::VideoFrame>& frame, 51 const scoped_refptr<media::VideoFrame>& frame);
53 const media::VideoCaptureFormat& format,
54 const base::TimeTicks& estimated_capture_time);
55 friend class base::RefCountedThreadSafe<WebRtcVideoSourceAdapter>; 52 friend class base::RefCountedThreadSafe<WebRtcVideoSourceAdapter>;
56 virtual ~WebRtcVideoSourceAdapter(); 53 virtual ~WebRtcVideoSourceAdapter();
57 54
58 scoped_refptr<base::MessageLoopProxy> render_thread_message_loop_; 55 scoped_refptr<base::MessageLoopProxy> render_thread_message_loop_;
59 56
60 // |render_thread_checker_| is bound to the main render thread. 57 // |render_thread_checker_| is bound to the main render thread.
61 base::ThreadChecker render_thread_checker_; 58 base::ThreadChecker render_thread_checker_;
62 // Used to DCHECK that frames are called on the IO-thread. 59 // Used to DCHECK that frames are called on the IO-thread.
63 base::ThreadChecker io_thread_checker_; 60 base::ThreadChecker io_thread_checker_;
64 61
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 // on that thread. However, since |video_source_| was created on the render 103 // on that thread. However, since |video_source_| was created on the render
107 // thread, it should be released on the render thread. 104 // thread, it should be released on the render thread.
108 base::AutoLock auto_lock(capture_adapter_stop_lock_); 105 base::AutoLock auto_lock(capture_adapter_stop_lock_);
109 // |video_source| owns |capture_adapter_|. 106 // |video_source| owns |capture_adapter_|.
110 capture_adapter_ = NULL; 107 capture_adapter_ = NULL;
111 video_source_ = NULL; 108 video_source_ = NULL;
112 } 109 }
113 110
114 void WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::OnVideoFrameOnIO( 111 void WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::OnVideoFrameOnIO(
115 const scoped_refptr<media::VideoFrame>& frame, 112 const scoped_refptr<media::VideoFrame>& frame,
116 const media::VideoCaptureFormat& format,
117 const base::TimeTicks& estimated_capture_time) { 113 const base::TimeTicks& estimated_capture_time) {
118 DCHECK(io_thread_checker_.CalledOnValidThread()); 114 DCHECK(io_thread_checker_.CalledOnValidThread());
119 libjingle_worker_thread_->PostTask( 115 libjingle_worker_thread_->PostTask(
120 FROM_HERE, 116 FROM_HERE,
121 base::Bind(&WebRtcVideoSourceAdapter::OnVideoFrameOnWorkerThread, 117 base::Bind(&WebRtcVideoSourceAdapter::OnVideoFrameOnWorkerThread,
122 this, frame, format, estimated_capture_time)); 118 this,
119 frame));
123 } 120 }
124 121
125 void 122 void
126 WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::OnVideoFrameOnWorkerThread( 123 WebRtcVideoTrackAdapter::WebRtcVideoSourceAdapter::OnVideoFrameOnWorkerThread(
127 const scoped_refptr<media::VideoFrame>& frame, 124 const scoped_refptr<media::VideoFrame>& frame) {
128 const media::VideoCaptureFormat& format,
129 const base::TimeTicks& estimated_capture_time) {
130 DCHECK(libjingle_worker_thread_->BelongsToCurrentThread()); 125 DCHECK(libjingle_worker_thread_->BelongsToCurrentThread());
131 base::AutoLock auto_lock(capture_adapter_stop_lock_); 126 base::AutoLock auto_lock(capture_adapter_stop_lock_);
132 if (capture_adapter_) 127 if (capture_adapter_)
133 capture_adapter_->OnFrameCaptured(frame); 128 capture_adapter_->OnFrameCaptured(frame);
134 } 129 }
135 130
136 WebRtcVideoTrackAdapter::WebRtcVideoTrackAdapter( 131 WebRtcVideoTrackAdapter::WebRtcVideoTrackAdapter(
137 const blink::WebMediaStreamTrack& track, 132 const blink::WebMediaStreamTrack& track,
138 PeerConnectionDependencyFactory* factory) 133 PeerConnectionDependencyFactory* factory)
139 : web_track_(track) { 134 : web_track_(track) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 RemoveFromVideoTrack(this, web_track_); 171 RemoveFromVideoTrack(this, web_track_);
177 source_adapter_->ReleaseSourceOnMainThread(); 172 source_adapter_->ReleaseSourceOnMainThread();
178 } 173 }
179 174
180 void WebRtcVideoTrackAdapter::OnEnabledChanged(bool enabled) { 175 void WebRtcVideoTrackAdapter::OnEnabledChanged(bool enabled) {
181 DCHECK(thread_checker_.CalledOnValidThread()); 176 DCHECK(thread_checker_.CalledOnValidThread());
182 video_track_->set_enabled(enabled); 177 video_track_->set_enabled(enabled);
183 } 178 }
184 179
185 } // namespace content 180 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698