Bug 1786306 assert that there is no more than one output for each key on a track r=padenot

SetAudioOutputVolume() assumes this.

Depends on D158304

Differential Revision: https://phabricator.services.mozilla.com/D158305
This commit is contained in:
Karl Tomlinson 2022-09-30 04:13:33 +00:00
Родитель 9ab92a85f6
Коммит 4268d59840
2 изменённых файлов: 18 добавлений и 4 удалений

Просмотреть файл

@ -825,6 +825,7 @@ void MediaTrackGraphImpl::CloseAudioInputImpl(DeviceInputTrack* aTrack) {
void MediaTrackGraphImpl::RegisterAudioOutput(MediaTrack* aTrack, void* aKey) {
MOZ_ASSERT(OnGraphThread());
MOZ_ASSERT(!mAudioOutputs.Contains(TrackAndKey{aTrack, aKey}));
TrackKeyAndVolume* tkv = mAudioOutputs.AppendElement();
tkv->mTrack = aTrack;
@ -861,10 +862,7 @@ void MediaTrackGraphImpl::UnregisterAudioOutput(MediaTrack* aTrack,
void* aKey) {
MOZ_ASSERT(OnGraphThreadOrNotRunning());
mAudioOutputs.RemoveElementsBy(
[&aKey, &aTrack](const TrackKeyAndVolume& aTkv) {
return aTkv.mKey == aKey && aTkv.mTrack == aTrack;
});
mAudioOutputs.RemoveElement(TrackAndKey{aTrack, aKey});
}
void MediaTrackGraphImpl::CloseAudioInput(DeviceInputTrack* aTrack) {

Просмотреть файл

@ -414,6 +414,10 @@ class MediaTrackGraphImpl : public MediaTrackGraph,
* Queue audio (mix of track audio and silence for blocked intervals)
* to the audio output track. Returns the number of frames played.
*/
struct TrackAndKey {
MediaTrack* mTrack;
void* mKey;
};
struct TrackKeyAndVolume {
MediaTrack* mTrack;
void* mKey;
@ -1046,4 +1050,16 @@ class MediaTrackGraphImpl : public MediaTrackGraph,
} // namespace mozilla
template <>
class nsDefaultComparator<mozilla::MediaTrackGraphImpl::TrackKeyAndVolume,
mozilla::MediaTrackGraphImpl::TrackAndKey> {
public:
bool Equals(
const mozilla::MediaTrackGraphImpl::TrackKeyAndVolume& aElement,
const mozilla::MediaTrackGraphImpl::TrackAndKey& aTrackAndKey) const {
return aElement.mTrack == aTrackAndKey.mTrack &&
aElement.mKey == aTrackAndKey.mKey;
}
};
#endif /* MEDIATRACKGRAPHIMPL_H_ */