Bug 1578615 - part1 : provide function GetAudibleState() on media element. r=chunmin
As we have another usage to know whether media is audible or not, we remove this function from AudioChannelWrapper and make it as media element's function. In addition, it also makes sense to have this function for media element, because the result is decided by media element's own attributes. Differential Revision: https://phabricator.services.mozilla.com/D44744
This commit is contained in:
@@ -9,7 +9,6 @@
|
||||
#endif
|
||||
|
||||
#include "mozilla/dom/HTMLMediaElement.h"
|
||||
#include "AudioChannelService.h"
|
||||
#include "AudioDeviceInfo.h"
|
||||
#include "AudioStreamTrack.h"
|
||||
#include "AutoplayPolicy.h"
|
||||
@@ -148,6 +147,8 @@ extern void NotifyMediaStarted(uint64_t aWindowID);
|
||||
extern void NotifyMediaStopped(uint64_t aWindowID);
|
||||
extern void NotifyMediaAudibleChanged(uint64_t aWindowID, bool aAudible);
|
||||
|
||||
using AudibleState = AudioChannelService::AudibleState;
|
||||
|
||||
// Number of milliseconds between progress events as defined by spec
|
||||
static const uint32_t PROGRESS_MS = 350;
|
||||
|
||||
@@ -1323,25 +1324,11 @@ class HTMLMediaElement::AudioChannelAgentCallback final
|
||||
}
|
||||
|
||||
AudibleState IsOwnerAudible() const {
|
||||
// No audio track.
|
||||
if (!mOwner->HasAudio()) {
|
||||
return AudioChannelService::AudibleState::eNotAudible;
|
||||
}
|
||||
|
||||
// Muted or the volume should not be ~0
|
||||
if (mOwner->mMuted || (std::fabs(mOwner->Volume()) <= 1e-7)) {
|
||||
return AudioChannelService::AudibleState::eMaybeAudible;
|
||||
}
|
||||
|
||||
// Suspended or paused media doesn't produce any sound.
|
||||
if (mSuspended != nsISuspendedTypes::NONE_SUSPENDED || mOwner->mPaused) {
|
||||
return AudioChannelService::AudibleState::eNotAudible;
|
||||
return AudibleState::eNotAudible;
|
||||
}
|
||||
|
||||
// Might be audible but not yet.
|
||||
return mOwner->mIsAudioTrackAudible
|
||||
? AudioChannelService::AudibleState::eAudible
|
||||
: AudioChannelService::AudibleState::eMaybeAudible;
|
||||
return mOwner->GetAudibleState();
|
||||
}
|
||||
|
||||
bool IsPlayingThroughTheAudioChannel() const {
|
||||
@@ -7232,6 +7219,21 @@ void HTMLMediaElement::NotifyDecoderActivityChanges() const {
|
||||
|
||||
Document* HTMLMediaElement::GetDocument() const { return OwnerDoc(); }
|
||||
|
||||
AudibleState HTMLMediaElement::GetAudibleState() const {
|
||||
// No audio track.
|
||||
if (!HasAudio()) {
|
||||
return AudibleState::eNotAudible;
|
||||
}
|
||||
|
||||
// Muted or the volume should not be ~0
|
||||
if (mMuted || (std::fabs(Volume()) <= 1e-7)) {
|
||||
return AudibleState::eMaybeAudible;
|
||||
}
|
||||
|
||||
return mIsAudioTrackAudible ? AudibleState::eAudible
|
||||
: AudibleState::eMaybeAudible;
|
||||
}
|
||||
|
||||
void HTMLMediaElement::ConstructMediaTracks(const MediaInfo* aInfo) {
|
||||
if (mMediaTracksConstructed || !aInfo) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user