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

Side by Side Diff: content/renderer/media/video_track_adapter.cc

Issue 976233002: MediaStreamVideo*/VideoTrackAdapter and RTCVideoRenderer (small) cleanup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tommi@ comments 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/video_track_adapter.h" 5 #include "content/renderer/media/video_track_adapter.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 20 matching lines...) Expand all
31 // Min delta time between two frames allowed without being dropped if a max 31 // Min delta time between two frames allowed without being dropped if a max
32 // frame rate is specified. 32 // frame rate is specified.
33 const double kMinTimeInMsBetweenFrames = 5; 33 const double kMinTimeInMsBetweenFrames = 5;
34 // If the delta between two frames is bigger than this, we will consider it to 34 // If the delta between two frames is bigger than this, we will consider it to
35 // be invalid and reset the fps calculation. 35 // be invalid and reset the fps calculation.
36 const double kMaxTimeInMsBetweenFrames = 1000; 36 const double kMaxTimeInMsBetweenFrames = 1000;
37 37
38 // Empty method used for keeping a reference to the original media::VideoFrame 38 // Empty method used for keeping a reference to the original media::VideoFrame
39 // in VideoFrameResolutionAdapter::DeliverFrame if cropping is needed. 39 // in VideoFrameResolutionAdapter::DeliverFrame if cropping is needed.
40 // The reference to |frame| is kept in the closure that calls this method. 40 // The reference to |frame| is kept in the closure that calls this method.
41 void ReleaseOriginalFrame( 41 void ReleaseOriginalFrame(const scoped_refptr<media::VideoFrame>& frame) {
42 const scoped_refptr<media::VideoFrame>& frame) {
43 } 42 }
44 43
45 void ResetCallbackOnMainRenderThread( 44 void ResetCallbackOnMainRenderThread(
46 scoped_ptr<VideoCaptureDeliverFrameCB> callback) { 45 scoped_ptr<VideoCaptureDeliverFrameCB> callback) {
47 // |callback| will be deleted when this exits. 46 // |callback| will be deleted when this exits.
48 } 47 }
49 48
50 } // anonymous namespace 49 } // anonymous namespace
51 50
52 // VideoFrameResolutionAdapter is created on and lives on the IO-thread. It does 51 // VideoFrameResolutionAdapter is created on and lives on the IO-thread. It does
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 // Returns |true| if the input frame rate is higher that the requested max 94 // Returns |true| if the input frame rate is higher that the requested max
96 // frame rate and |frame| should be dropped. 95 // frame rate and |frame| should be dropped.
97 bool MaybeDropFrame(const scoped_refptr<media::VideoFrame>& frame, 96 bool MaybeDropFrame(const scoped_refptr<media::VideoFrame>& frame,
98 float source_frame_rate); 97 float source_frame_rate);
99 98
100 // Bound to the IO-thread. 99 // Bound to the IO-thread.
101 base::ThreadChecker io_thread_checker_; 100 base::ThreadChecker io_thread_checker_;
102 101
103 // The task runner where we will release VideoCaptureDeliverFrameCB 102 // The task runner where we will release VideoCaptureDeliverFrameCB
104 // registered in AddCallback. 103 // registered in AddCallback.
105 scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_; 104 const scoped_refptr<base::SingleThreadTaskRunner> renderer_task_runner_;
106 105
107 gfx::Size max_frame_size_; 106 const gfx::Size max_frame_size_;
108 double min_aspect_ratio_; 107 const double min_aspect_ratio_;
109 double max_aspect_ratio_; 108 const double max_aspect_ratio_;
110 109
111 double frame_rate_; 110 double frame_rate_;
112 base::TimeDelta last_time_stamp_; 111 base::TimeDelta last_time_stamp_;
113 double max_frame_rate_; 112 double max_frame_rate_;
114 double keep_frame_counter_; 113 double keep_frame_counter_;
115 114
116 typedef std::pair<const void*, VideoCaptureDeliverFrameCB> 115 typedef std::pair<const MediaStreamVideoTrack*, VideoCaptureDeliverFrameCB>
117 VideoIdCallbackPair; 116 VideoIdCallbackPair;
118 std::vector<VideoIdCallbackPair> callbacks_; 117 std::vector<VideoIdCallbackPair> callbacks_;
119 118
120 DISALLOW_COPY_AND_ASSIGN(VideoFrameResolutionAdapter); 119 DISALLOW_COPY_AND_ASSIGN(VideoFrameResolutionAdapter);
121 }; 120 };
122 121
123 VideoTrackAdapter:: 122 VideoTrackAdapter::
124 VideoFrameResolutionAdapter::VideoFrameResolutionAdapter( 123 VideoFrameResolutionAdapter::VideoFrameResolutionAdapter(
125 scoped_refptr<base::SingleThreadTaskRunner> render_message_loop, 124 scoped_refptr<base::SingleThreadTaskRunner> render_message_loop,
126 const gfx::Size& max_size, 125 const gfx::Size& max_size,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 << "{ max_aspect_ratio_ =" << max_aspect_ratio_ << "}" 160 << "{ max_aspect_ratio_ =" << max_aspect_ratio_ << "}"
162 << "{ max_frame_rate_ =" << max_frame_rate_ << "}) "; 161 << "{ max_frame_rate_ =" << max_frame_rate_ << "}) ";
163 } 162 }
164 163
165 VideoTrackAdapter:: 164 VideoTrackAdapter::
166 VideoFrameResolutionAdapter::~VideoFrameResolutionAdapter() { 165 VideoFrameResolutionAdapter::~VideoFrameResolutionAdapter() {
167 DCHECK(io_thread_checker_.CalledOnValidThread()); 166 DCHECK(io_thread_checker_.CalledOnValidThread());
168 DCHECK(callbacks_.empty()); 167 DCHECK(callbacks_.empty());
169 } 168 }
170 169
170 void VideoTrackAdapter::VideoFrameResolutionAdapter::AddCallback(
171 const MediaStreamVideoTrack* track,
172 const VideoCaptureDeliverFrameCB& callback) {
173 DCHECK(io_thread_checker_.CalledOnValidThread());
174 callbacks_.push_back(std::make_pair(track, callback));
175 }
176
177 void VideoTrackAdapter::VideoFrameResolutionAdapter::RemoveCallback(
178 const MediaStreamVideoTrack* track) {
179 DCHECK(io_thread_checker_.CalledOnValidThread());
180 std::vector<VideoIdCallbackPair>::iterator it = callbacks_.begin();
181 for (; it != callbacks_.end(); ++it) {
182 if (it->first == track) {
183 // Make sure the VideoCaptureDeliverFrameCB is released on the main
184 // render thread since it was added on the main render thread in
185 // VideoTrackAdapter::AddTrack.
186 scoped_ptr<VideoCaptureDeliverFrameCB> callback(
187 new VideoCaptureDeliverFrameCB(it->second));
188 callbacks_.erase(it);
189 renderer_task_runner_->PostTask(
190 FROM_HERE, base::Bind(&ResetCallbackOnMainRenderThread,
191 base::Passed(&callback)));
192
193 return;
194 }
195 }
196 }
197
171 void VideoTrackAdapter::VideoFrameResolutionAdapter::DeliverFrame( 198 void VideoTrackAdapter::VideoFrameResolutionAdapter::DeliverFrame(
172 const scoped_refptr<media::VideoFrame>& frame, 199 const scoped_refptr<media::VideoFrame>& frame,
173 const base::TimeTicks& estimated_capture_time) { 200 const base::TimeTicks& estimated_capture_time) {
174 DCHECK(io_thread_checker_.CalledOnValidThread()); 201 DCHECK(io_thread_checker_.CalledOnValidThread());
175 202
176 double frame_rate; 203 double frame_rate;
177 if (!frame->metadata()->GetDouble(media::VideoFrameMetadata::FRAME_RATE, 204 if (!frame->metadata()->GetDouble(media::VideoFrameMetadata::FRAME_RATE,
178 &frame_rate)) { 205 &frame_rate)) {
179 frame_rate = MediaStreamVideoSource::kUnknownFrameRate; 206 frame_rate = MediaStreamVideoSource::kUnknownFrameRate;
180 } 207 }
208
181 if (MaybeDropFrame(frame, frame_rate)) 209 if (MaybeDropFrame(frame, frame_rate))
182 return; 210 return;
183 211
184 // TODO(perkj): Allow cropping / scaling of textures once 212 // TODO(perkj): Allow cropping / scaling of textures once
185 // http://crbug/362521 is fixed. 213 // http://crbug/362521 is fixed.
186 if (frame->format() == media::VideoFrame::NATIVE_TEXTURE) { 214 if (frame->format() == media::VideoFrame::NATIVE_TEXTURE) {
187 DoDeliverFrame(frame, estimated_capture_time); 215 DoDeliverFrame(frame, estimated_capture_time);
188 return; 216 return;
189 } 217 }
190 scoped_refptr<media::VideoFrame> video_frame(frame); 218 scoped_refptr<media::VideoFrame> video_frame(frame);
191 double input_ratio = 219 double input_ratio =
192 static_cast<double>(frame->natural_size().width()) / 220 static_cast<double>(frame->natural_size().width()) /
193 frame->natural_size().height(); 221 frame->natural_size().height();
194 222
195 // If |frame| has larger width or height than requested, or the aspect ratio 223 // If |frame| has larger width or height than requested, or the aspect ratio
196 // does not match the requested, we want to create a wrapped version of this 224 // does not match the requested, we want to create a wrapped version of this
197 // frame with a size that fulfills the constraints. 225 // frame with a size that fulfills the constraints.
198 if (frame->natural_size().width() > max_frame_size_.width() || 226 if (frame->natural_size().width() > max_frame_size_.width() ||
199 frame->natural_size().height() > max_frame_size_.height() || 227 frame->natural_size().height() > max_frame_size_.height() ||
200 input_ratio > max_aspect_ratio_ || 228 input_ratio > max_aspect_ratio_ ||
201 input_ratio < min_aspect_ratio_) { 229 input_ratio < min_aspect_ratio_) {
202 int desired_width = std::min(max_frame_size_.width(), 230 int desired_width = std::min(max_frame_size_.width(),
203 frame->natural_size().width()); 231 frame->natural_size().width());
204 int desired_height = std::min(max_frame_size_.height(), 232 int desired_height = std::min(max_frame_size_.height(),
205 frame->natural_size().height()); 233 frame->natural_size().height());
206 234
207 double resulting_ratio = 235 const double resulting_ratio =
208 static_cast<double>(desired_width) / desired_height; 236 static_cast<double>(desired_width) / desired_height;
209 double requested_ratio = resulting_ratio; 237 // Make sure |min_aspect_ratio_| < |requested_ratio| < |max_aspect_ratio_|.
210 238 const double requested_ratio = std::max(
211 if (requested_ratio > max_aspect_ratio_) 239 std::min(resulting_ratio, max_aspect_ratio_), min_aspect_ratio_);
212 requested_ratio = max_aspect_ratio_;
213 else if (requested_ratio < min_aspect_ratio_)
214 requested_ratio = min_aspect_ratio_;
215 240
216 if (resulting_ratio < requested_ratio) { 241 if (resulting_ratio < requested_ratio) {
217 desired_height = static_cast<int>((desired_height * resulting_ratio) / 242 desired_height = static_cast<int>((desired_height * resulting_ratio) /
218 requested_ratio); 243 requested_ratio);
219 // Make sure we scale to an even height to avoid rounding errors 244 // Make sure we scale to an even height to avoid rounding errors
220 desired_height = (desired_height + 1) & ~1; 245 desired_height = (desired_height + 1) & ~1;
221 } else if (resulting_ratio > requested_ratio) { 246 } else if (resulting_ratio > requested_ratio) {
222 desired_width = static_cast<int>((desired_width * requested_ratio) / 247 desired_width = static_cast<int>((desired_width * requested_ratio) /
223 resulting_ratio); 248 resulting_ratio);
224 // Make sure we scale to an even width to avoid rounding errors. 249 // Make sure we scale to an even width to avoid rounding errors.
225 desired_width = (desired_width + 1) & ~1; 250 desired_width = (desired_width + 1) & ~1;
226 } 251 }
227 252
228 gfx::Size desired_size(desired_width, desired_height); 253 const gfx::Size desired_size(desired_width, desired_height);
229 254
230 // Get the largest centered rectangle with the same aspect ratio of 255 // Get the largest centered rectangle with the same aspect ratio of
231 // |desired_size| that fits entirely inside of |frame->visible_rect()|. 256 // |desired_size| that fits entirely inside of |frame->visible_rect()|.
232 // This will be the rect we need to crop the original frame to. 257 // This will be the rect we need to crop the original frame to.
233 // From this rect, the original frame can be scaled down to |desired_size|. 258 // From this rect, the original frame can be scaled down to |desired_size|.
234 gfx::Rect region_in_frame = 259 const gfx::Rect region_in_frame =
235 media::ComputeLetterboxRegion(frame->visible_rect(), desired_size); 260 media::ComputeLetterboxRegion(frame->visible_rect(), desired_size);
236 261
237 video_frame = media::VideoFrame::WrapVideoFrame( 262 video_frame = media::VideoFrame::WrapVideoFrame(
238 frame, 263 frame,
239 region_in_frame, 264 region_in_frame,
240 desired_size, 265 desired_size,
241 base::Bind(&ReleaseOriginalFrame, frame)); 266 base::Bind(&ReleaseOriginalFrame, frame));
242 267
243 DVLOG(3) << "desired size " << desired_size.ToString() 268 DVLOG(3) << "desired size " << desired_size.ToString()
244 << " output natural size " 269 << " output natural size "
245 << video_frame->natural_size().ToString() 270 << video_frame->natural_size().ToString()
246 << " output visible rect " 271 << " output visible rect "
247 << video_frame->visible_rect().ToString(); 272 << video_frame->visible_rect().ToString();
248 } 273 }
249 DoDeliverFrame(video_frame, estimated_capture_time); 274 DoDeliverFrame(video_frame, estimated_capture_time);
250 } 275 }
251 276
277 bool VideoTrackAdapter::VideoFrameResolutionAdapter::ConstraintsMatch(
278 const gfx::Size& max_size,
279 double min_aspect_ratio,
280 double max_aspect_ratio,
281 double max_frame_rate) const {
282 DCHECK(io_thread_checker_.CalledOnValidThread());
283 return max_frame_size_ == max_size &&
284 min_aspect_ratio_ == min_aspect_ratio &&
285 max_aspect_ratio_ == max_aspect_ratio &&
286 max_frame_rate_ == max_frame_rate;
287 }
288
289 bool VideoTrackAdapter::VideoFrameResolutionAdapter::IsEmpty() const {
290 DCHECK(io_thread_checker_.CalledOnValidThread());
291 return callbacks_.empty();
292 }
293
294 void VideoTrackAdapter::VideoFrameResolutionAdapter::DoDeliverFrame(
295 const scoped_refptr<media::VideoFrame>& frame,
296 const base::TimeTicks& estimated_capture_time) {
297 DCHECK(io_thread_checker_.CalledOnValidThread());
298 for (const auto& callback : callbacks_)
299 callback.second.Run(frame, estimated_capture_time);
300 }
301
252 bool VideoTrackAdapter::VideoFrameResolutionAdapter::MaybeDropFrame( 302 bool VideoTrackAdapter::VideoFrameResolutionAdapter::MaybeDropFrame(
253 const scoped_refptr<media::VideoFrame>& frame, 303 const scoped_refptr<media::VideoFrame>& frame,
254 float source_frame_rate) { 304 float source_frame_rate) {
255 DCHECK(io_thread_checker_.CalledOnValidThread()); 305 DCHECK(io_thread_checker_.CalledOnValidThread());
256 306
257 // Do not drop frames if max frame rate hasn't been specified or the source 307 // Do not drop frames if max frame rate hasn't been specified or the source
258 // frame rate is known and is lower than max. 308 // frame rate is known and is lower than max.
259 if (max_frame_rate_ == 0.0f || 309 if (max_frame_rate_ == 0.0f ||
260 (source_frame_rate > 0 && source_frame_rate <= max_frame_rate_)) { 310 (source_frame_rate > 0 && source_frame_rate <= max_frame_rate_)) {
261 return false; 311 return false;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 keep_frame_counter_ += max_frame_rate_ / frame_rate_; 350 keep_frame_counter_ += max_frame_rate_ / frame_rate_;
301 if (keep_frame_counter_ >= 1) { 351 if (keep_frame_counter_ >= 1) {
302 keep_frame_counter_ -= 1; 352 keep_frame_counter_ -= 1;
303 // Keep the frame. 353 // Keep the frame.
304 return false; 354 return false;
305 } 355 }
306 DVLOG(3) << "Drop frame. Input frame_rate_ " << frame_rate_ << "."; 356 DVLOG(3) << "Drop frame. Input frame_rate_ " << frame_rate_ << ".";
307 return true; 357 return true;
308 } 358 }
309 359
310 void VideoTrackAdapter::VideoFrameResolutionAdapter::DoDeliverFrame(
311 const scoped_refptr<media::VideoFrame>& frame,
312 const base::TimeTicks& estimated_capture_time) {
313 DCHECK(io_thread_checker_.CalledOnValidThread());
314 for (const auto& callback : callbacks_)
315 callback.second.Run(frame, estimated_capture_time);
316 }
317
318 void VideoTrackAdapter::VideoFrameResolutionAdapter::AddCallback(
319 const MediaStreamVideoTrack* track,
320 const VideoCaptureDeliverFrameCB& callback) {
321 DCHECK(io_thread_checker_.CalledOnValidThread());
322 callbacks_.push_back(std::make_pair(track, callback));
323 }
324
325 void VideoTrackAdapter::VideoFrameResolutionAdapter::RemoveCallback(
326 const MediaStreamVideoTrack* track) {
327 DCHECK(io_thread_checker_.CalledOnValidThread());
328 std::vector<VideoIdCallbackPair>::iterator it = callbacks_.begin();
329 for (; it != callbacks_.end(); ++it) {
330 if (it->first == track) {
331 // Make sure the VideoCaptureDeliverFrameCB is released on the main
332 // render thread since it was added on the main render thread in
333 // VideoTrackAdapter::AddTrack.
334 scoped_ptr<VideoCaptureDeliverFrameCB> callback(
335 new VideoCaptureDeliverFrameCB(it->second));
336 callbacks_.erase(it);
337 renderer_task_runner_->PostTask(
338 FROM_HERE, base::Bind(&ResetCallbackOnMainRenderThread,
339 base::Passed(&callback)));
340
341 return;
342 }
343 }
344 }
345
346 bool VideoTrackAdapter::VideoFrameResolutionAdapter::ConstraintsMatch(
347 const gfx::Size& max_size,
348 double min_aspect_ratio,
349 double max_aspect_ratio,
350 double max_frame_rate) const {
351 DCHECK(io_thread_checker_.CalledOnValidThread());
352 return max_frame_size_ == max_size &&
353 min_aspect_ratio_ == min_aspect_ratio &&
354 max_aspect_ratio_ == max_aspect_ratio &&
355 max_frame_rate_ == max_frame_rate;
356 }
357
358 bool VideoTrackAdapter::VideoFrameResolutionAdapter::IsEmpty() const {
359 DCHECK(io_thread_checker_.CalledOnValidThread());
360 return callbacks_.empty();
361 }
362
363 VideoTrackAdapter::VideoTrackAdapter( 360 VideoTrackAdapter::VideoTrackAdapter(
364 const scoped_refptr<base::MessageLoopProxy>& io_message_loop) 361 const scoped_refptr<base::MessageLoopProxy>& io_message_loop)
365 : io_message_loop_(io_message_loop), 362 : io_message_loop_(io_message_loop),
366 renderer_task_runner_(base::MessageLoopProxy::current()), 363 renderer_task_runner_(base::MessageLoopProxy::current()),
367 monitoring_frame_rate_(false), 364 monitoring_frame_rate_(false),
368 muted_state_(false), 365 muted_state_(false),
369 frame_counter_(0), 366 frame_counter_(0),
370 source_frame_rate_(0.0f) { 367 source_frame_rate_(0.0f) {
371 DCHECK(io_message_loop_.get()); 368 DCHECK(io_message_loop_.get());
372 } 369 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 429
433 VideoTrackAdapter::OnMutedCallback bound_on_muted_callback = 430 VideoTrackAdapter::OnMutedCallback bound_on_muted_callback =
434 media::BindToCurrentLoop(on_muted_callback); 431 media::BindToCurrentLoop(on_muted_callback);
435 432
436 io_message_loop_->PostTask( 433 io_message_loop_->PostTask(
437 FROM_HERE, 434 FROM_HERE,
438 base::Bind(&VideoTrackAdapter::StartFrameMonitoringOnIO, 435 base::Bind(&VideoTrackAdapter::StartFrameMonitoringOnIO,
439 this, bound_on_muted_callback, source_frame_rate)); 436 this, bound_on_muted_callback, source_frame_rate));
440 } 437 }
441 438
439 void VideoTrackAdapter::StopFrameMonitoring() {
440 DCHECK(thread_checker_.CalledOnValidThread());
441 io_message_loop_->PostTask(
442 FROM_HERE,
443 base::Bind(&VideoTrackAdapter::StopFrameMonitoringOnIO, this));
444 }
445
442 void VideoTrackAdapter::StartFrameMonitoringOnIO( 446 void VideoTrackAdapter::StartFrameMonitoringOnIO(
443 const OnMutedCallback& on_muted_callback, 447 const OnMutedCallback& on_muted_callback,
444 double source_frame_rate) { 448 double source_frame_rate) {
445 DCHECK(io_message_loop_->BelongsToCurrentThread()); 449 DCHECK(io_message_loop_->BelongsToCurrentThread());
446 DCHECK(!monitoring_frame_rate_); 450 DCHECK(!monitoring_frame_rate_);
447 451
448 monitoring_frame_rate_ = true; 452 monitoring_frame_rate_ = true;
449 453
450 // If the source does not know the frame rate, set one by default. 454 // If the source does not know the frame rate, set one by default.
451 if (source_frame_rate == 0.0f) 455 if (source_frame_rate == 0.0f)
452 source_frame_rate = MediaStreamVideoSource::kDefaultFrameRate; 456 source_frame_rate = MediaStreamVideoSource::kDefaultFrameRate;
453 source_frame_rate_ = source_frame_rate; 457 source_frame_rate_ = source_frame_rate;
454 DVLOG(1) << "Monitoring frame creation, first (large) delay: " 458 DVLOG(1) << "Monitoring frame creation, first (large) delay: "
455 << (kFirstFrameTimeoutInFrameIntervals / source_frame_rate_) << "s"; 459 << (kFirstFrameTimeoutInFrameIntervals / source_frame_rate_) << "s";
456 io_message_loop_->PostDelayedTask(FROM_HERE, 460 io_message_loop_->PostDelayedTask(FROM_HERE,
457 base::Bind(&VideoTrackAdapter::CheckFramesReceivedOnIO, this, 461 base::Bind(&VideoTrackAdapter::CheckFramesReceivedOnIO, this,
458 on_muted_callback, frame_counter_), 462 on_muted_callback, frame_counter_),
459 base::TimeDelta::FromSecondsD(kFirstFrameTimeoutInFrameIntervals / 463 base::TimeDelta::FromSecondsD(kFirstFrameTimeoutInFrameIntervals /
460 source_frame_rate_)); 464 source_frame_rate_));
461 } 465 }
462 466
463 void VideoTrackAdapter::StopFrameMonitoring() {
464 DCHECK(thread_checker_.CalledOnValidThread());
465 io_message_loop_->PostTask(
466 FROM_HERE,
467 base::Bind(&VideoTrackAdapter::StopFrameMonitoringOnIO, this));
468 }
469
470 void VideoTrackAdapter::StopFrameMonitoringOnIO() { 467 void VideoTrackAdapter::StopFrameMonitoringOnIO() {
471 DCHECK(io_message_loop_->BelongsToCurrentThread()); 468 DCHECK(io_message_loop_->BelongsToCurrentThread());
472 monitoring_frame_rate_ = false; 469 monitoring_frame_rate_ = false;
473 } 470 }
474 471
475 void VideoTrackAdapter::RemoveTrackOnIO(const MediaStreamVideoTrack* track) { 472 void VideoTrackAdapter::RemoveTrackOnIO(const MediaStreamVideoTrack* track) {
476 DCHECK(io_message_loop_->BelongsToCurrentThread()); 473 DCHECK(io_message_loop_->BelongsToCurrentThread());
477 for (FrameAdapters::iterator it = adapters_.begin(); 474 for (FrameAdapters::iterator it = adapters_.begin();
478 it != adapters_.end(); ++it) { 475 it != adapters_.end(); ++it) {
479 (*it)->RemoveCallback(track); 476 (*it)->RemoveCallback(track);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 509 }
513 510
514 io_message_loop_->PostDelayedTask(FROM_HERE, 511 io_message_loop_->PostDelayedTask(FROM_HERE,
515 base::Bind(&VideoTrackAdapter::CheckFramesReceivedOnIO, this, 512 base::Bind(&VideoTrackAdapter::CheckFramesReceivedOnIO, this,
516 set_muted_state_callback, frame_counter_), 513 set_muted_state_callback, frame_counter_),
517 base::TimeDelta::FromSecondsD(kNormalFrameTimeoutInFrameIntervals / 514 base::TimeDelta::FromSecondsD(kNormalFrameTimeoutInFrameIntervals /
518 source_frame_rate_)); 515 source_frame_rate_));
519 } 516 }
520 517
521 } // namespace content 518 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/video_track_adapter.h ('k') | content/renderer/media/webrtc_local_audio_track.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698