Hallo,
ich versuche mich gerade an einem Plugin und stosse dabei auf ein Problem, für das ich derzeit keine Lösung finde.
Ich habe eine Klasse abgeleitet von cStatus, welche die Methode ChannelSwitch implementiert hat.
Nun möchte ich, das sofern der Ton "gemuted" ist nach einem Kanalwechsel für den neuen Kanal eine Lautstärke setzen und den Kanal dann wieder "muten".
Nur leider wird dann bei einem Kanalwechsel immer zum übernächsten Kanal gewechselt.
Hier mal der Code:
Code
void cStatusSCVL::ChannelSwitch (const cDevice *Device, int ChannelNumber)
{
isInReplayMode = Device->PrimaryDevice()->Replaying();
isMute = Device->PrimaryDevice()->IsMute();
cChannel *Channel = Channels.GetByNumber(Device->PrimaryDevice()->CurrentChannel());
if (Channel && !(ChannelNumber == 0) && Device->IsPrimaryDevice())
{
tChannelID current = Channel->GetChannelID();
cDevice *device = Device->PrimaryDevice();
int chVolOffset = SCVLChannelsList.GetSCVLOffset(current) - actualOffset;
int SetVolume = device->CurrentVolume();
// do nothing for the first time
if (!(actualOffset == -1))
{
SetVolume += chVolOffset;
// do nothing if the actual Offset is 0 and the Offset for the next Channel is 0 or it's in replaymode
if (SetVolume > 0 && (actualOffset != 0 || chVolOffset != 0) && !isInReplayMode)
{
device->SetVolume(SetVolume, 1);
actualOffset = SCVLChannelsList.GetSCVLOffset(current);
if (isMute)
{
device->ToggleMute();
}
}
}
else
{
actualOffset = 0;
}
}
}
Alles anzeigen
Der Aufruf von device->ToggleMute() führt dann dazu, das beim Kanalwechsel nach Wechsel zum nächsten Kanal direkt weiter zum übernächsten Kanal gewechselt wird.
Wieso passiert dies?
Wäre super, wenn es mir jemand erklären könnte.
Danke.