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

Side by Side Diff: content/renderer/media/media_stream_video_track.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/media_stream_video_track.h" 5 #include "content/renderer/media/media_stream_video_track.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" 10 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
(...skipping 27 matching lines...) Expand all
38 38
39 // Removes |callback| associated with |id| from receiving video frames if |id| 39 // Removes |callback| associated with |id| from receiving video frames if |id|
40 // has been added. It is ok to call RemoveCallback even if the |id| has not 40 // has been added. It is ok to call RemoveCallback even if the |id| has not
41 // been added. Note that the added callback will be reset on the main thread. 41 // been added. Note that the added callback will be reset on the main thread.
42 // Must be called on the main render thread. 42 // Must be called on the main render thread.
43 void RemoveCallback(void* id); 43 void RemoveCallback(void* id);
44 44
45 // Triggers all registered callbacks with |frame|, |format| and 45 // Triggers all registered callbacks with |frame|, |format| and
46 // |estimated_capture_time| as parameters. Must be called on the IO-thread. 46 // |estimated_capture_time| as parameters. Must be called on the IO-thread.
47 void DeliverFrameOnIO(const scoped_refptr<media::VideoFrame>& frame, 47 void DeliverFrameOnIO(const scoped_refptr<media::VideoFrame>& frame,
48 const media::VideoCaptureFormat& format,
49 const base::TimeTicks& estimated_capture_time); 48 const base::TimeTicks& estimated_capture_time);
50 49
51 private: 50 private:
52 friend class base::RefCountedThreadSafe<FrameDeliverer>; 51 friend class base::RefCountedThreadSafe<FrameDeliverer>;
53 virtual ~FrameDeliverer(); 52 virtual ~FrameDeliverer();
54 void AddCallbackOnIO(void* id, const VideoCaptureDeliverFrameCB& callback); 53 void AddCallbackOnIO(void* id, const VideoCaptureDeliverFrameCB& callback);
55 void RemoveCallbackOnIO( 54 void RemoveCallbackOnIO(
56 void* id, const scoped_refptr<base::MessageLoopProxy>& message_loop); 55 void* id, const scoped_refptr<base::MessageLoopProxy>& message_loop);
57 56
58 void SetEnabledOnIO(bool enabled); 57 void SetEnabledOnIO(bool enabled);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 137
139 void MediaStreamVideoTrack::FrameDeliverer::SetEnabledOnIO(bool enabled) { 138 void MediaStreamVideoTrack::FrameDeliverer::SetEnabledOnIO(bool enabled) {
140 DCHECK(io_message_loop_->BelongsToCurrentThread()); 139 DCHECK(io_message_loop_->BelongsToCurrentThread());
141 enabled_ = enabled; 140 enabled_ = enabled;
142 if (enabled_) 141 if (enabled_)
143 black_frame_ = NULL; 142 black_frame_ = NULL;
144 } 143 }
145 144
146 void MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO( 145 void MediaStreamVideoTrack::FrameDeliverer::DeliverFrameOnIO(
147 const scoped_refptr<media::VideoFrame>& frame, 146 const scoped_refptr<media::VideoFrame>& frame,
148 const media::VideoCaptureFormat& format,
149 const base::TimeTicks& estimated_capture_time) { 147 const base::TimeTicks& estimated_capture_time) {
150 DCHECK(io_message_loop_->BelongsToCurrentThread()); 148 DCHECK(io_message_loop_->BelongsToCurrentThread());
151 const scoped_refptr<media::VideoFrame>& video_frame = 149 const scoped_refptr<media::VideoFrame>& video_frame =
152 enabled_ ? frame : GetBlackFrame(frame); 150 enabled_ ? frame : GetBlackFrame(frame);
153 151 for (const auto& entry : callbacks_)
154 for (std::vector<VideoIdCallbackPair>::iterator it = callbacks_.begin(); 152 entry.second.Run(video_frame, estimated_capture_time);
155 it != callbacks_.end(); ++it) {
156 it->second.Run(video_frame, format, estimated_capture_time);
157 }
158 } 153 }
159 154
160 const scoped_refptr<media::VideoFrame>& 155 const scoped_refptr<media::VideoFrame>&
161 MediaStreamVideoTrack::FrameDeliverer::GetBlackFrame( 156 MediaStreamVideoTrack::FrameDeliverer::GetBlackFrame(
162 const scoped_refptr<media::VideoFrame>& reference_frame) { 157 const scoped_refptr<media::VideoFrame>& reference_frame) {
163 DCHECK(io_message_loop_->BelongsToCurrentThread()); 158 DCHECK(io_message_loop_->BelongsToCurrentThread());
164 if (!black_frame_.get() || 159 if (!black_frame_.get() ||
165 black_frame_->natural_size() != reference_frame->natural_size()) 160 black_frame_->natural_size() != reference_frame->natural_size())
166 black_frame_ = 161 black_frame_ =
167 media::VideoFrame::CreateBlackFrame(reference_frame->natural_size()); 162 media::VideoFrame::CreateBlackFrame(reference_frame->natural_size());
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 void MediaStreamVideoTrack::OnReadyStateChanged( 250 void MediaStreamVideoTrack::OnReadyStateChanged(
256 blink::WebMediaStreamSource::ReadyState state) { 251 blink::WebMediaStreamSource::ReadyState state) {
257 DCHECK(thread_checker_.CalledOnValidThread()); 252 DCHECK(thread_checker_.CalledOnValidThread());
258 for (std::vector<MediaStreamVideoSink*>::const_iterator it = sinks_.begin(); 253 for (std::vector<MediaStreamVideoSink*>::const_iterator it = sinks_.begin();
259 it != sinks_.end(); ++it) { 254 it != sinks_.end(); ++it) {
260 (*it)->OnReadyStateChanged(state); 255 (*it)->OnReadyStateChanged(state);
261 } 256 }
262 } 257 }
263 258
264 } // namespace content 259 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698