Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "media/blink/webmediaplayer_impl.h" | 5 #include "media/blink/webmediaplayer_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 570 | 570 |
| 571 return pipeline_metadata_.has_video; | 571 return pipeline_metadata_.has_video; |
| 572 } | 572 } |
| 573 | 573 |
| 574 bool WebMediaPlayerImpl::hasAudio() const { | 574 bool WebMediaPlayerImpl::hasAudio() const { |
| 575 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 575 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 576 | 576 |
| 577 return pipeline_metadata_.has_audio; | 577 return pipeline_metadata_.has_audio; |
| 578 } | 578 } |
| 579 | 579 |
| 580 using RestartStreamPlaybackCB = | |
| 581 base::Callback<void(DemuxerStream*, base::TimeDelta)>; | |
| 582 | |
| 583 void OnEnabledAudioTracksChanged( | |
| 584 Demuxer* demuxer, | |
| 585 base::TimeDelta currentTime, | |
| 586 const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds, | |
| 587 const RestartStreamPlaybackCB& restart_stream_playback_cb) { | |
| 588 DemuxerStream* audio_stream = demuxer->GetStream(DemuxerStream::AUDIO); | |
| 589 bool enabled = false; | |
| 590 for (const auto& trackId : enabledTrackIds) { | |
| 591 const DemuxerStream* s = demuxer->GetDemuxerStreamByTrackId(trackId); | |
| 592 CHECK(s); | |
| 593 CHECK_EQ(s, audio_stream); | |
| 594 enabled = true; | |
| 595 } | |
| 596 | |
| 597 DVLOG(1) << __FUNCTION__ << (enabled ? " enabling" : " disabling") | |
| 598 << " audio_stream=" << audio_stream | |
| 599 << " currentTime=" << currentTime.InSecondsF(); | |
| 600 bool was_disabled = !audio_stream->enabled(); | |
| 601 audio_stream->set_enabled(enabled, currentTime); | |
| 602 if (enabled && was_disabled) { | |
| 603 restart_stream_playback_cb.Run(audio_stream, currentTime); | |
| 604 } | |
| 605 } | |
| 606 | |
| 580 void WebMediaPlayerImpl::enabledAudioTracksChanged( | 607 void WebMediaPlayerImpl::enabledAudioTracksChanged( |
| 581 const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) { | 608 const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) { |
| 582 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 609 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 583 CHECK(demuxer_.get()); | 610 CHECK(demuxer_.get()); |
| 584 | 611 |
| 585 // TODO(servolk): Implement disabling/enabling audio streams. | 612 media_task_runner_->PostTask( |
|
chcunningham
2016/06/02 23:49:42
This is bit bouncy.
Main Thread: JS sets enabl
servolk
2016/06/03 02:53:15
Yes, we could do what you suggested, but one signi
chcunningham
2016/06/03 20:54:59
Let me see how our discussion here shakes out
htt
xhwang
2016/06/04 00:09:43
For the thread hopping chcunningham pointed out, w
servolk
2016/06/09 21:00:13
There is a lot of different points here, let me tr
| |
| 613 FROM_HERE, | |
| 614 base::Bind( | |
| 615 &OnEnabledAudioTracksChanged, demuxer_.get(), | |
| 616 base::TimeDelta::FromSecondsD(currentTime()), enabledTrackIds, | |
| 617 BindToCurrentLoop(base::Bind( | |
| 618 &WebMediaPlayerImpl::RestartStreamPlayback, AsWeakPtr())))); | |
| 619 } | |
| 620 | |
| 621 void OnSelectedVideoTrackChanged( | |
| 622 Demuxer* demuxer, | |
| 623 base::TimeDelta currentTime, | |
| 624 const std::vector<blink::WebMediaPlayer::TrackId>& selectedTrackIdVector, | |
| 625 const RestartStreamPlaybackCB& restart_stream_playback_cb) { | |
| 626 DemuxerStream* video_stream = demuxer->GetStream(DemuxerStream::VIDEO); | |
| 627 bool enabled = false; | |
| 628 if (!selectedTrackIdVector.empty()) { | |
| 629 const DemuxerStream* selectedVideoStream = | |
| 630 demuxer->GetDemuxerStreamByTrackId(selectedTrackIdVector[0]); | |
| 631 CHECK(selectedVideoStream); | |
| 632 CHECK_EQ(selectedVideoStream, video_stream); | |
| 633 enabled = true; | |
| 634 } | |
| 635 | |
| 636 DVLOG(1) << __FUNCTION__ << (enabled ? " enabling" : " disabling") | |
| 637 << " video_stream=" << video_stream | |
| 638 << " currentTime=" << currentTime.InSecondsF(); | |
| 639 bool was_disabled = !video_stream->enabled(); | |
| 640 video_stream->set_enabled(enabled, currentTime); | |
| 641 if (enabled && was_disabled) { | |
| 642 restart_stream_playback_cb.Run(video_stream, currentTime); | |
| 643 } | |
| 586 } | 644 } |
| 587 | 645 |
| 588 void WebMediaPlayerImpl::selectedVideoTrackChanged( | 646 void WebMediaPlayerImpl::selectedVideoTrackChanged( |
| 589 blink::WebMediaPlayer::TrackId* selectedTrackId) { | 647 blink::WebMediaPlayer::TrackId* selectedTrackId) { |
| 590 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 648 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 591 CHECK(demuxer_.get()); | 649 CHECK(demuxer_.get()); |
| 592 | 650 |
| 593 // TODO(servolk): Implement disabling/enabling video stream. | 651 std::vector<blink::WebMediaPlayer::TrackId> selectedTrackIdVector; |
| 652 if (selectedTrackId) { | |
| 653 selectedTrackIdVector.push_back(*selectedTrackId); | |
| 654 } | |
| 655 media_task_runner_->PostTask( | |
| 656 FROM_HERE, | |
| 657 base::Bind( | |
| 658 &OnSelectedVideoTrackChanged, demuxer_.get(), | |
| 659 base::TimeDelta::FromSecondsD(currentTime()), selectedTrackIdVector, | |
| 660 BindToCurrentLoop(base::Bind( | |
| 661 &WebMediaPlayerImpl::RestartStreamPlayback, AsWeakPtr())))); | |
| 662 } | |
| 663 | |
| 664 void WebMediaPlayerImpl::RestartStreamPlayback(DemuxerStream* stream, | |
| 665 base::TimeDelta time) { | |
| 666 DCHECK(main_task_runner_->BelongsToCurrentThread()); | |
| 667 pipeline_.RestartStreamPlayback(stream, time); | |
| 594 } | 668 } |
| 595 | 669 |
| 596 blink::WebSize WebMediaPlayerImpl::naturalSize() const { | 670 blink::WebSize WebMediaPlayerImpl::naturalSize() const { |
| 597 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 671 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 598 | 672 |
| 599 return blink::WebSize(pipeline_metadata_.natural_size); | 673 return blink::WebSize(pipeline_metadata_.natural_size); |
| 600 } | 674 } |
| 601 | 675 |
| 602 bool WebMediaPlayerImpl::paused() const { | 676 bool WebMediaPlayerImpl::paused() const { |
| 603 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 677 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| (...skipping 1025 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1629 << ", Video: " << stats.video_memory_usage << ", DataSource: " | 1703 << ", Video: " << stats.video_memory_usage << ", DataSource: " |
| 1630 << (data_source_ ? data_source_->GetMemoryUsage() : 0) | 1704 << (data_source_ ? data_source_->GetMemoryUsage() : 0) |
| 1631 << ", Demuxer: " << demuxer_memory_usage; | 1705 << ", Demuxer: " << demuxer_memory_usage; |
| 1632 | 1706 |
| 1633 const int64_t delta = current_memory_usage - last_reported_memory_usage_; | 1707 const int64_t delta = current_memory_usage - last_reported_memory_usage_; |
| 1634 last_reported_memory_usage_ = current_memory_usage; | 1708 last_reported_memory_usage_ = current_memory_usage; |
| 1635 adjust_allocated_memory_cb_.Run(delta); | 1709 adjust_allocated_memory_cb_.Run(delta); |
| 1636 } | 1710 } |
| 1637 | 1711 |
| 1638 } // namespace media | 1712 } // namespace media |
| OLD | NEW |