public void NewMessage(OSDMessage.Type type, string msg = "", List <SubStyle> styles = null, int duration = -1) { lock (messages) messages[type] = new OSDMessage(type, msg, styles, duration); if (!player.isPlaying) { PresentFrame(null); } }
public void NewMessage(OSDMessage.Type type, string msg = "", List <SubStyle> styles = null, int duration = -1) { if (!OSDEnabled) { return; } lock (messages) { messages[type] = new OSDMessage(type, msg, styles, duration); if (type == OSDMessage.Type.Subtitles) { messages[type].startAt = player.CurTime; } } if (!player.isPlaying) { PresentFrame(null); } }
private void PresentOSD() { if (ShouldVisible(player.Activity, msgToVis[OSDMessage.Type.Time])) { long curTime = player.SeekTime == -1 ? player.CurTime : player.SeekTime; if (player.Duration != 0) { osd[msgToSurf[OSDMessage.Type.Time]].DrawText((new TimeSpan(curTime)).ToString(@"hh\:mm\:ss") + " / " + (new TimeSpan(player.Duration)).ToString(@"hh\:mm\:ss") + " | " + (player.CurTime > 0 ? ((int)((player.CurTime + 1500000) / (player.Duration / 100))).ToString() : "0") + "%"); } else { osd[msgToSurf[OSDMessage.Type.Time]].DrawText((new TimeSpan(curTime)).ToString(@"hh\:mm\:ss") + " / --:--:--"); } } lock (messages) { if (messages.Count > 0) { long curTicks = DateTime.UtcNow.Ticks; // Remove Timed-out Messages (Except subs if not playing) List <OSDMessage.Type> removeKeys = new List <OSDMessage.Type>(); foreach (KeyValuePair <OSDMessage.Type, OSDMessage> msgKV in messages) { if (curTicks - msgKV.Value.startAt > (long)msgKV.Value.duration * 10000) { if (msgKV.Value.type == OSDMessage.Type.Subtitles && !player.isPlaying) { continue; // Dont remove subs if stopped } removeKeys.Add(msgKV.Key); } } foreach (OSDMessage.Type key in removeKeys) { messages.Remove(key); } // Add Text/SubStyles to Surfaces foreach (KeyValuePair <OSDMessage.Type, OSDMessage> msgKV in messages) { OSDMessage msg = msgKV.Value; if (!ShouldVisible(player.Activity, msgToVis[msg.type])) { continue; } switch (msg.type) { case OSDMessage.Type.HardwareAcceleration: msg.msg = "Hardware Acceleration " + (player.HWAccel ? "On" : "Off") + " (" + (!player.isReady || player.iSHWAccelSuccess ? "Success" : "Failed") + ")"; if (player.HWAccel) { msg.UpdateStyle(new SubStyle(22, 2, Color.Green)); } else { msg.UpdateStyle(new SubStyle(22, 3, Color.Red)); } break; case OSDMessage.Type.AudioDelay: var delay = (player.AudioExternalDelay / 10000); // + AudioPlayer.NAUDIO_DELAY_MS; msg.msg = "Audio Delay " + (delay > 0 ? "+" : "") + delay + "ms"; break; case OSDMessage.Type.SubsDelay: msg.msg = "Subtitles Delay " + (player.SubsExternalDelay / 10000 > 0 ? "+" : "") + player.SubsExternalDelay / 10000 + "ms"; break; case OSDMessage.Type.SubsFontSize: msg.msg = "Subtitles Fontsize " + player.SubsFontSize; break; case OSDMessage.Type.SubsHeight: msg.msg = "Subtitles Height " + (player.SubsPosition > 0 ? "+" : "") + player.SubsPosition; break; case OSDMessage.Type.Volume: msg.msg = "Volume " + player.Volume + "%"; break; } osd[msgToSurf[msg.type]].msgs.Add(msg); } foreach (var osdsurf in osd) { osdsurf.Value.DrawMessages(); } } } }