Bug 1240423 - part3 : add reason when media element notify audible changing. r=baku

MozReview-Commit-ID: C3DAZHhZOqH
This commit is contained in:
Alastor Wu
2016-06-01 10:26:10 +08:00
parent aab07fb2f3
commit e8e8300eb3
2 changed files with 51 additions and 16 deletions

View File

@@ -1876,7 +1876,8 @@ void HTMLMediaElement::SetVolumeInternal()
}
}
UpdateAudioChannelPlayingState();
NotifyAudioPlaybackChanged(
AudioChannelService::AudibleChangedReasons::eVolumeChanged);
}
NS_IMETHODIMP HTMLMediaElement::SetMuted(bool aMuted)
@@ -2281,7 +2282,8 @@ HTMLMediaElement::HTMLMediaElement(already_AddRefed<mozilla::dom::NodeInfo>& aNo
mHasUserInteraction(false),
mFirstFrameLoaded(false),
mDefaultPlaybackStartPosition(0.0),
mIsAudioTrackAudible(false)
mIsAudioTrackAudible(false),
mAudible(IsAudible())
{
mAudioChannel = AudioChannelService::GetDefaultAudioChannel();
@@ -4969,8 +4971,8 @@ HTMLMediaElement::IsPlayingThroughTheAudioChannel() const
return true;
}
// Are we paused or muted
if (mPaused || Muted()) {
// Are we paused
if (mPaused) {
return false;
}
@@ -4984,11 +4986,6 @@ HTMLMediaElement::IsPlayingThroughTheAudioChannel() const
return false;
}
// The volume should not be ~0
if (std::fabs(Volume()) <= 1e-7) {
return false;
}
// We should consider any bfcached page or inactive document as non-playing.
if (!IsActive()) {
return false;
@@ -5053,7 +5050,7 @@ HTMLMediaElement::NotifyAudioChannelAgent(bool aPlaying)
// any sound.
AudioPlaybackConfig config;
nsresult rv = mAudioChannelAgent->NotifyStartedPlaying(&config,
mIsAudioTrackAudible);
IsAudible());
if (NS_WARN_IF(NS_FAILED(rv))) {
return;
}
@@ -5114,6 +5111,9 @@ HTMLMediaElement::WindowSuspendChanged(SuspendTypes aSuspend)
"Error : unknown suspended type!\n", this));
}
NotifyAudioPlaybackChanged(
AudioChannelService::AudibleChangedReasons::ePauseStateChanged);
return NS_OK;
}
@@ -5609,16 +5609,45 @@ HTMLMediaElement::SetAudibleState(bool aAudible)
{
if (mIsAudioTrackAudible != aAudible) {
mIsAudioTrackAudible = aAudible;
NotifyAudioPlaybackChanged();
NotifyAudioPlaybackChanged(
AudioChannelService::AudibleChangedReasons::eDataAudibleChanged);
}
}
void
HTMLMediaElement::NotifyAudioPlaybackChanged()
HTMLMediaElement::NotifyAudioPlaybackChanged(AudibleChangedReasons aReason)
{
if (mAudioChannelAgent) {
mAudioChannelAgent->NotifyStartedAudible(mIsAudioTrackAudible);
if (!mAudioChannelAgent) {
return;
}
if (mAudible == IsAudible()) {
return;
}
mAudible = IsAudible();
mAudioChannelAgent->NotifyStartedAudible(mAudible, aReason);
}
bool
HTMLMediaElement::IsAudible() const
{
// Muted or the volume should not be ~0
if (Muted() || (std::fabs(Volume()) <= 1e-7)) {
return false;
}
// No sound can be heard during suspending.
if (IsSuspendedByAudioChannel()) {
return false;
}
// Silent audio track.
if (!mIsAudioTrackAudible) {
return false;
}
return true;
}
} // namespace dom