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

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

Issue 509873002: Refactor MediaStreamTrack video onmute event. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed nits. Created 6 years, 3 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/media_stream_video_source.h" 5 #include "content/renderer/media/media_stream_video_source.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
11 #include "base/debug/trace_event.h" 11 #include "base/debug/trace_event.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "content/child/child_process.h" 14 #include "content/child/child_process.h"
15 #include "content/renderer/media/media_stream_constraints_util.h" 15 #include "content/renderer/media/media_stream_constraints_util.h"
16 #include "content/renderer/media/media_stream_video_track.h" 16 #include "content/renderer/media/media_stream_video_track.h"
17 #include "content/renderer/media/video_track_adapter.h" 17 #include "content/renderer/media/video_track_adapter.h"
18 #include "media/base/bind_to_current_loop.h"
19 18
20 namespace content { 19 namespace content {
21 20
22 // Constraint keys. Specified by draft-alvestrand-constraints-resolution-00b 21 // Constraint keys. Specified by draft-alvestrand-constraints-resolution-00b
23 const char MediaStreamVideoSource::kMinAspectRatio[] = "minAspectRatio"; 22 const char MediaStreamVideoSource::kMinAspectRatio[] = "minAspectRatio";
24 const char MediaStreamVideoSource::kMaxAspectRatio[] = "maxAspectRatio"; 23 const char MediaStreamVideoSource::kMaxAspectRatio[] = "maxAspectRatio";
25 const char MediaStreamVideoSource::kMaxWidth[] = "maxWidth"; 24 const char MediaStreamVideoSource::kMaxWidth[] = "maxWidth";
26 const char MediaStreamVideoSource::kMinWidth[] = "minWidth"; 25 const char MediaStreamVideoSource::kMinWidth[] = "minWidth";
27 const char MediaStreamVideoSource::kMaxHeight[] = "maxHeight"; 26 const char MediaStreamVideoSource::kMaxHeight[] = "maxHeight";
28 const char MediaStreamVideoSource::kMinHeight[] = "minHeight"; 27 const char MediaStreamVideoSource::kMinHeight[] = "minHeight";
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 bool MediaStreamVideoSource::IsConstraintSupported(const std::string& name) { 350 bool MediaStreamVideoSource::IsConstraintSupported(const std::string& name) {
352 for (size_t i = 0; i < arraysize(kSupportedConstraints); ++i) { 351 for (size_t i = 0; i < arraysize(kSupportedConstraints); ++i) {
353 if (kSupportedConstraints[i] == name) 352 if (kSupportedConstraints[i] == name)
354 return true; 353 return true;
355 } 354 }
356 return false; 355 return false;
357 } 356 }
358 357
359 MediaStreamVideoSource::MediaStreamVideoSource() 358 MediaStreamVideoSource::MediaStreamVideoSource()
360 : state_(NEW), 359 : state_(NEW),
361 muted_state_(false),
362 track_adapter_(new VideoTrackAdapter( 360 track_adapter_(new VideoTrackAdapter(
363 ChildProcess::current()->io_message_loop_proxy())), 361 ChildProcess::current()->io_message_loop_proxy())),
364 weak_factory_(this) { 362 weak_factory_(this) {
365 } 363 }
366 364
367 MediaStreamVideoSource::~MediaStreamVideoSource() { 365 MediaStreamVideoSource::~MediaStreamVideoSource() {
368 DCHECK(CalledOnValidThread()); 366 DCHECK(CalledOnValidThread());
369 } 367 }
370 368
371 void MediaStreamVideoSource::AddTrack( 369 void MediaStreamVideoSource::AddTrack(
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 MediaStreamVideoSource::io_message_loop() const { 451 MediaStreamVideoSource::io_message_loop() const {
454 DCHECK(CalledOnValidThread()); 452 DCHECK(CalledOnValidThread());
455 return track_adapter_->io_message_loop(); 453 return track_adapter_->io_message_loop();
456 } 454 }
457 455
458 void MediaStreamVideoSource::DoStopSource() { 456 void MediaStreamVideoSource::DoStopSource() {
459 DCHECK(CalledOnValidThread()); 457 DCHECK(CalledOnValidThread());
460 DVLOG(3) << "DoStopSource()"; 458 DVLOG(3) << "DoStopSource()";
461 if (state_ == ENDED) 459 if (state_ == ENDED)
462 return; 460 return;
461 track_adapter_->StopFrameMonitoring();
463 StopSourceImpl(); 462 StopSourceImpl();
464 state_ = ENDED; 463 state_ = ENDED;
465 SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded); 464 SetReadyState(blink::WebMediaStreamSource::ReadyStateEnded);
466 } 465 }
467 466
468 void MediaStreamVideoSource::OnSupportedFormats( 467 void MediaStreamVideoSource::OnSupportedFormats(
469 const media::VideoCaptureFormats& formats) { 468 const media::VideoCaptureFormats& formats) {
470 DCHECK(CalledOnValidThread()); 469 DCHECK(CalledOnValidThread());
471 DCHECK_EQ(RETRIEVING_CAPABILITIES, state_); 470 DCHECK_EQ(RETRIEVING_CAPABILITIES, state_);
472 471
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 return false; 527 return false;
529 } 528 }
530 529
531 void MediaStreamVideoSource::OnStartDone(MediaStreamRequestResult result) { 530 void MediaStreamVideoSource::OnStartDone(MediaStreamRequestResult result) {
532 DCHECK(CalledOnValidThread()); 531 DCHECK(CalledOnValidThread());
533 DVLOG(3) << "OnStartDone({result =" << result << "})"; 532 DVLOG(3) << "OnStartDone({result =" << result << "})";
534 if (result == MEDIA_DEVICE_OK) { 533 if (result == MEDIA_DEVICE_OK) {
535 DCHECK_EQ(STARTING, state_); 534 DCHECK_EQ(STARTING, state_);
536 state_ = STARTED; 535 state_ = STARTED;
537 SetReadyState(blink::WebMediaStreamSource::ReadyStateLive); 536 SetReadyState(blink::WebMediaStreamSource::ReadyStateLive);
537
538 track_adapter_->StartFrameMonitoring(
539 current_format_.frame_rate,
540 base::Bind(&MediaStreamVideoSource::SetMutedState,
541 weak_factory_.GetWeakPtr()));
542
538 } else { 543 } else {
539 StopSource(); 544 StopSource();
540 } 545 }
541 546
542 // This object can be deleted after calling FinalizeAddTrack. See comment in 547 // This object can be deleted after calling FinalizeAddTrack. See comment in
543 // the header file. 548 // the header file.
544 FinalizeAddTrack(); 549 FinalizeAddTrack();
545 } 550 }
546 551
547 void MediaStreamVideoSource::FinalizeAddTrack() { 552 void MediaStreamVideoSource::FinalizeAddTrack() {
(...skipping 22 matching lines...) Expand all
570 GetDesiredMaxWidthAndHeight(it->constraints, &max_width, &max_height); 575 GetDesiredMaxWidthAndHeight(it->constraints, &max_width, &max_height);
571 double max_aspect_ratio; 576 double max_aspect_ratio;
572 double min_aspect_ratio; 577 double min_aspect_ratio;
573 GetDesiredMinAndMaxAspectRatio(it->constraints, 578 GetDesiredMinAndMaxAspectRatio(it->constraints,
574 &min_aspect_ratio, 579 &min_aspect_ratio,
575 &max_aspect_ratio); 580 &max_aspect_ratio);
576 double max_frame_rate = 0.0f; 581 double max_frame_rate = 0.0f;
577 GetConstraintValueAsDouble(it->constraints, 582 GetConstraintValueAsDouble(it->constraints,
578 kMaxFrameRate, &max_frame_rate); 583 kMaxFrameRate, &max_frame_rate);
579 584
580 VideoTrackAdapter::OnMutedCallback on_mute_callback =
581 media::BindToCurrentLoop(base::Bind(
582 &MediaStreamVideoSource::SetMutedState,
583 weak_factory_.GetWeakPtr()));
584 track_adapter_->AddTrack(it->track, it->frame_callback, 585 track_adapter_->AddTrack(it->track, it->frame_callback,
585 max_width, max_height, 586 max_width, max_height,
586 min_aspect_ratio, max_aspect_ratio, 587 min_aspect_ratio, max_aspect_ratio,
587 max_frame_rate, current_format_.frame_rate, 588 max_frame_rate);
588 on_mute_callback);
589 } 589 }
590 590
591 DVLOG(3) << "FinalizeAddTrack() result " << result; 591 DVLOG(3) << "FinalizeAddTrack() result " << result;
592 592
593 if (!it->callback.is_null()) { 593 if (!it->callback.is_null()) {
594 it->callback.Run(this, result, unsatisfied_constraint); 594 it->callback.Run(this, result, unsatisfied_constraint);
595 } 595 }
596 } 596 }
597 } 597 }
598 598
599 void MediaStreamVideoSource::SetReadyState( 599 void MediaStreamVideoSource::SetReadyState(
600 blink::WebMediaStreamSource::ReadyState state) { 600 blink::WebMediaStreamSource::ReadyState state) {
601 DVLOG(3) << "MediaStreamVideoSource::SetReadyState state " << state; 601 DVLOG(3) << "MediaStreamVideoSource::SetReadyState state " << state;
602 DCHECK(CalledOnValidThread()); 602 DCHECK(CalledOnValidThread());
603 if (!owner().isNull()) 603 if (!owner().isNull())
604 owner().setReadyState(state); 604 owner().setReadyState(state);
605 for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin(); 605 for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin();
606 it != tracks_.end(); ++it) { 606 it != tracks_.end(); ++it) {
607 (*it)->OnReadyStateChanged(state); 607 (*it)->OnReadyStateChanged(state);
608 } 608 }
609 } 609 }
610 610
611 void MediaStreamVideoSource::SetMutedState(bool muted_state) { 611 void MediaStreamVideoSource::SetMutedState(bool muted_state) {
612 DVLOG(3) << "MediaStreamVideoSource::SetMutedState state=" << muted_state; 612 DVLOG(3) << "MediaStreamVideoSource::SetMutedState state=" << muted_state;
613 DCHECK(CalledOnValidThread()); 613 DCHECK(CalledOnValidThread());
614 if (muted_state != muted_state_) { 614 if (!owner().isNull()) {
615 muted_state_ = muted_state; 615 owner().setReadyState(muted_state
616 if (!owner().isNull()) {
617 owner().setReadyState(muted_state_
618 ? blink::WebMediaStreamSource::ReadyStateMuted 616 ? blink::WebMediaStreamSource::ReadyStateMuted
619 : blink::WebMediaStreamSource::ReadyStateLive); 617 : blink::WebMediaStreamSource::ReadyStateLive);
620 }
621 }
622 // WebMediaStreamSource doesn't have a muted state, the tracks do.
623 for (std::vector<MediaStreamVideoTrack*>::iterator it = tracks_.begin();
624 it != tracks_.end(); ++it) {
625 (*it)->SetMutedState(muted_state);
626 } 618 }
627 } 619 }
628 620
629 MediaStreamVideoSource::RequestedConstraints::RequestedConstraints( 621 MediaStreamVideoSource::RequestedConstraints::RequestedConstraints(
630 MediaStreamVideoTrack* track, 622 MediaStreamVideoTrack* track,
631 const VideoCaptureDeliverFrameCB& frame_callback, 623 const VideoCaptureDeliverFrameCB& frame_callback,
632 const blink::WebMediaConstraints& constraints, 624 const blink::WebMediaConstraints& constraints,
633 const ConstraintsCallback& callback) 625 const ConstraintsCallback& callback)
634 : track(track), 626 : track(track),
635 frame_callback(frame_callback), 627 frame_callback(frame_callback),
636 constraints(constraints), 628 constraints(constraints),
637 callback(callback) { 629 callback(callback) {
638 } 630 }
639 631
640 MediaStreamVideoSource::RequestedConstraints::~RequestedConstraints() { 632 MediaStreamVideoSource::RequestedConstraints::~RequestedConstraints() {
641 } 633 }
642 634
643 } // namespace content 635 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/media_stream_video_source.h ('k') | content/renderer/media/media_stream_video_source_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698