mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Apply local volume / mute to additional audio stream.
This commit is contained in:
parent
f17fc0b670
commit
cc013305ac
2 changed files with 35 additions and 24 deletions
|
@ -986,22 +986,12 @@ void GroupCall::join(const MTPInputGroupCall &inputCall) {
|
||||||
return (_instance != nullptr);
|
return (_instance != nullptr);
|
||||||
}) | rpl::start_with_next([=](const Update &update) {
|
}) | rpl::start_with_next([=](const Update &update) {
|
||||||
if (!update.now) {
|
if (!update.now) {
|
||||||
_instance->removeSsrcs({ update.was->ssrc });
|
_instance->removeSsrcs({
|
||||||
|
update.was->ssrc,
|
||||||
|
GetAdditionalAudioSsrc(update.was->videoParams),
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
const auto &now = *update.now;
|
updateInstanceVolume(update.was, *update.now);
|
||||||
const auto &was = update.was;
|
|
||||||
const auto volumeChanged = was
|
|
||||||
? (was->volume != now.volume
|
|
||||||
|| was->mutedByMe != now.mutedByMe)
|
|
||||||
: (now.volume != Group::kDefaultVolume || now.mutedByMe);
|
|
||||||
if (volumeChanged) {
|
|
||||||
_instance->setVolume(
|
|
||||||
now.ssrc,
|
|
||||||
(now.mutedByMe
|
|
||||||
? 0.
|
|
||||||
: (now.volume
|
|
||||||
/ float64(Group::kDefaultVolume))));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, _lifetime);
|
}, _lifetime);
|
||||||
|
|
||||||
|
@ -2642,15 +2632,33 @@ void GroupCall::updateInstanceVolumes() {
|
||||||
|
|
||||||
const auto &participants = real->participants();
|
const auto &participants = real->participants();
|
||||||
for (const auto &participant : participants) {
|
for (const auto &participant : participants) {
|
||||||
const auto setVolume = participant.mutedByMe
|
updateInstanceVolume(std::nullopt, participant);
|
||||||
|| (participant.volume != Group::kDefaultVolume);
|
}
|
||||||
if (setVolume && participant.ssrc) {
|
}
|
||||||
_instance->setVolume(
|
|
||||||
participant.ssrc,
|
void GroupCall::updateInstanceVolume(
|
||||||
(participant.mutedByMe
|
const std::optional<Data::GroupCallParticipant> &was,
|
||||||
? 0.
|
const Data::GroupCallParticipant &now) {
|
||||||
: (participant.volume / float64(Group::kDefaultVolume))));
|
const auto nonDefault = now.mutedByMe
|
||||||
}
|
|| (now.volume != Group::kDefaultVolume);
|
||||||
|
const auto volumeChanged = was
|
||||||
|
? (was->volume != now.volume || was->mutedByMe != now.mutedByMe)
|
||||||
|
: nonDefault;
|
||||||
|
const auto additionalSsrc = GetAdditionalAudioSsrc(now.videoParams);
|
||||||
|
const auto set = now.ssrc
|
||||||
|
&& (volumeChanged || (was && was->ssrc != now.ssrc));
|
||||||
|
const auto additionalSet = additionalSsrc
|
||||||
|
&& (volumeChanged
|
||||||
|
|| (was && (GetAdditionalAudioSsrc(was->videoParams)
|
||||||
|
!= additionalSsrc)));
|
||||||
|
const auto localVolume = now.mutedByMe
|
||||||
|
? 0.
|
||||||
|
: (now.volume / float64(Group::kDefaultVolume));
|
||||||
|
if (set) {
|
||||||
|
_instance->setVolume(now.ssrc, localVolume);
|
||||||
|
}
|
||||||
|
if (additionalSet) {
|
||||||
|
_instance->setVolume(additionalSsrc, localVolume);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -484,6 +484,9 @@ private:
|
||||||
void sendSelfUpdate(SendUpdateType type);
|
void sendSelfUpdate(SendUpdateType type);
|
||||||
void updateInstanceMuteState();
|
void updateInstanceMuteState();
|
||||||
void updateInstanceVolumes();
|
void updateInstanceVolumes();
|
||||||
|
void updateInstanceVolume(
|
||||||
|
const std::optional<Data::GroupCallParticipant> &was,
|
||||||
|
const Data::GroupCallParticipant &now);
|
||||||
void applyMeInCallLocally();
|
void applyMeInCallLocally();
|
||||||
void rejoin();
|
void rejoin();
|
||||||
void leave();
|
void leave();
|
||||||
|
|
Loading…
Add table
Reference in a new issue