示例#1
0
 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);
     }
 }
示例#2
0
 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);
     }
 }
示例#3
0
        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();
                    }
                }
            }
        }