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( |
| 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 |