public override void DeepCopy(Utilities.DeepCopy.IDeepCopyable source, Utilities.DeepCopy.ICopyManager copyManager)
        {
            base.DeepCopy(source, copyManager);
            BackgroundVideoBrush b = (BackgroundVideoBrush)source;

            VideoPlayer = b.VideoPlayer;
        }
Beispiel #2
0
 private void SynchronizeToVideoPlayerFramerate(IVideoPlayer videoPlayer)
 {
     lock (_screenManager.SyncObj)
     {
         if (videoPlayer == _synchronizedVideoPlayer)
         {
             return;
         }
         ISharpDXVideoPlayer oldPlayer = _synchronizedVideoPlayer;
         _synchronizedVideoPlayer = null;
         if (oldPlayer != null)
         {
             oldPlayer.SetRenderDelegate(null);
         }
         ISharpDXVideoPlayer newPlayer = videoPlayer as ISharpDXVideoPlayer;
         if (newPlayer == null)
         {
             ServiceRegistration.Get <ILogger>().Info("SkinEngine MainForm: SynchronizeToVideoPlayerFramerate: Restore default rendering, no new Player!");
             return;
         }
         if (newPlayer.SetRenderDelegate(VideoPlayerRender))
         {
             _synchronizedVideoPlayer = newPlayer;
             ServiceRegistration.Get <ILogger>().Info("SkinEngine MainForm: Synchronized render framerate to video player '{0}'", newPlayer);
         }
         else
         {
             ServiceRegistration.Get <ILogger>().Info("SkinEngine MainForm: Video player '{0}' doesn't provide render thread synchronization, using default framerate", newPlayer);
         }
     }
 }
        protected virtual bool GetPlayer(out ISharpDXVideoPlayer player)
        {
            player = null;
            IPlayerContextManager playerContextManager = ServiceRegistration.Get <IPlayerContextManager>(false);

            if (playerContextManager == null)
            {
                return(false);
            }

            player = playerContextManager[Stream] as ISharpDXVideoPlayer;
            return(player != null);
        }
        public static void ReallocGUIResources(IPlayerSlotController psc)
        {
            ISharpDXVideoPlayer sdvp = psc.CurrentPlayer as ISharpDXVideoPlayer;

            if (sdvp == null)
            {
                return;
            }
            try
            {
                sdvp.ReallocGUIResources();
            }
            catch (Exception e)
            {
                ServiceRegistration.Get <ILogger>().Error("Problem reallocating GUI resources in player '{0}'", e, sdvp);
            }
        }
        private static string GetPlayerInfos()
        {
            string         playerInfos = string.Empty;
            IPlayerManager pm          = ServiceRegistration.Get <IPlayerManager>();
            int            index       = 0;

            pm.ForEach(psc =>
            {
                ISharpDXVideoPlayer player = psc.CurrentPlayer as ISharpDXVideoPlayer;
                if (player == null || player.Texture == null)
                {
                    return;
                }
                SurfaceDescription desc = player.Texture.GetLevelDescription(0);
                playerInfos            += String.Format("{0}Player {1}: Resolution {2}x{3}", string.IsNullOrEmpty(playerInfos) ? "" : "\r\n", index++, desc.Width, desc.Height);
            });
            return(playerInfos);
        }
Beispiel #6
0
        private void HandleVideoEffectSelection(IPlayerSlotController psc)
        {
            ISharpDXVideoPlayer player = psc.CurrentPlayer as ISharpDXVideoPlayer;

            if (player == null)
            {
                return;
            }

            lock (player.SurfaceLock)
            {
                if (player.Texture == null)
                {
                    return;
                }

                var videoFrameHeight = player.VideoSize.Height;
                player.EffectOverride = videoFrameHeight <= _settings.Settings.ResolutionLimit ?
                                        _settings.Settings.LowerResolutionEffect :
                                        _settings.Settings.HigherResolutionEffect;
            }
        }
Beispiel #7
0
 private void SynchronizeToVideoPlayerFramerate(IVideoPlayer videoPlayer)
 {
   lock (_screenManager.SyncObj)
   {
     if (videoPlayer == _synchronizedVideoPlayer)
       return;
     ISharpDXVideoPlayer oldPlayer = _synchronizedVideoPlayer;
     _synchronizedVideoPlayer = null;
     if (oldPlayer != null)
       oldPlayer.SetRenderDelegate(null);
     ISharpDXVideoPlayer SharpDXVideoPlayer = videoPlayer as ISharpDXVideoPlayer;
     if (SharpDXVideoPlayer != null)
       if (SharpDXVideoPlayer.SetRenderDelegate(VideoPlayerRender))
       {
         _synchronizedVideoPlayer = SharpDXVideoPlayer;
         ServiceRegistration.Get<ILogger>().Info("SkinEngine MainForm: Synchronized render framerate to video player '{0}'", SharpDXVideoPlayer);
       }
       else
         ServiceRegistration.Get<ILogger>().Info(
             "SkinEngine MainForm: Video player '{0}' doesn't provide render thread synchronization, using default framerate", SharpDXVideoPlayer);
   }
 }
        protected bool RefreshEffectParameters(IVideoPlayer player)
        {
            ISharpDXVideoPlayer sdvPlayer = player as ISharpDXVideoPlayer;

            if (sdvPlayer == null)
            {
                return(false);
            }
            SizeF      aspectRatio   = sdvPlayer.VideoAspectRatio.ToSize2F();
            Size       playerSize    = sdvPlayer.VideoSize.ToSize2();
            Rectangle  cropVideoRect = sdvPlayer.CropVideoRect;
            IGeometry  geometry      = ChooseVideoGeometry(player);
            string     effectName    = player.EffectOverride;
            int        deviceWidth   = GraphicsDevice.Width; // To avoid threading issues if the device size changes
            int        deviceHeight  = GraphicsDevice.Height;
            RectangleF vertsBounds   = _vertsBounds;

            // Do we need a refresh?
            if (!_refresh &&
                _lastVideoSize == playerSize &&
                _lastAspectRatio == aspectRatio &&
                _lastCropVideoRect == cropVideoRect &&
                _lastGeometry == geometry &&
                _lastEffect == effectName &&
                _lastDeviceWidth == deviceWidth &&
                _lastDeviceHeight == deviceHeight &&
                _lastVertsBounds == vertsBounds)
            {
                return(true);
            }

            SizeF targetSize = vertsBounds.Size;

            lock (sdvPlayer.SurfaceLock)
            {
                Surface surface = sdvPlayer.Surface;
                if (surface == null)
                {
                    _refresh = true;
                    return(false);
                }
                SurfaceDescription desc = surface.Description;
                _videoTextureClip = new RectangleF(cropVideoRect.X / desc.Width, cropVideoRect.Y / desc.Height,
                                                   cropVideoRect.Width / desc.Width, cropVideoRect.Height / desc.Height);
            }
            _scaledVideoSize = cropVideoRect.Size.ToSize2F();

            // Correct aspect ratio for anamorphic video
            if (!aspectRatio.IsEmpty() && geometry.RequiresCorrectAspectRatio)
            {
                float pixelRatio = aspectRatio.Width / aspectRatio.Height;
                _scaledVideoSize.Width = _scaledVideoSize.Height * pixelRatio;
            }
            // Adjust target size to match final Skin scaling
            targetSize = ImageContext.AdjustForSkinAR(targetSize);

            // Adjust video size to fit desired geometry
            _scaledVideoSize = geometry.Transform(_scaledVideoSize.ToDrawingSizeF(), targetSize.ToDrawingSizeF()).ToSize2F();

            // Cache inverse RelativeTransform
            Transform relativeTransform = RelativeTransform;

            _inverseRelativeTransformCache = (relativeTransform == null) ? Matrix.Identity : Matrix.Invert(relativeTransform.GetTransform());

            // Prepare our ImageContext
            _imageContext.FrameSize       = targetSize;
            _imageContext.ShaderBase      = EFFECT_BASE_VIDEO;
            _imageContext.ShaderTransform = geometry.Shader;
            _imageContext.ShaderEffect    = player.EffectOverride;

            // Store state
            _lastFrameData     = new Vector4(playerSize.Width, playerSize.Height, 0.0f, 0.0f);
            _lastVideoSize     = playerSize;
            _lastAspectRatio   = aspectRatio;
            _lastGeometry      = geometry;
            _lastCropVideoRect = cropVideoRect;
            _lastEffect        = effectName;
            _lastDeviceWidth   = deviceWidth;
            _lastDeviceHeight  = deviceHeight;

            _refresh = false;
            return(true);
        }
 protected override bool GetPlayer(out ISharpDXVideoPlayer player)
 {
     player = VideoPlayer;
     return(player != null);
 }
Beispiel #10
0
    public void UICapture(object sender, EventArgs args)
    {
      if (!coreObject.IsConnected() || !coreObject.IsAtmoLightOn() || coreObject.GetCurrentEffect() != ContentEffect.MediaPortalLiveMode)
      {
        return;
      }

      // Low CPU setting.
      // Skip frame if LowCPUTime has not yet passed since last frame.
      if (settings.LowCPU)
      {
        if ((Win32API.GetTickCount() - lastFrame) < settings.LowCPUTime)
        {
          return;
        }
        else
        {
          lastFrame = Win32API.GetTickCount();
        }
      }

      Rectangle rectangleDestination = new Rectangle(0, 0, coreObject.GetCaptureWidth(), coreObject.GetCaptureHeight());
      try
      {
        if (surfaceDestination == null)
        {
          surfaceDestination = SharpDX.Direct3D9.Surface.CreateRenderTarget(SkinContext.Device,
            coreObject.GetCaptureWidth(), coreObject.GetCaptureHeight(), SharpDX.Direct3D9.Format.A8R8G8B8,
            SharpDX.Direct3D9.MultisampleType.None, 0, true);
        }

        // Use the Player Surface if video is playing.
        // This results in lower time to calculate aswell as blackbar removal
        if (ServiceRegistration.Get<IPlayerContextManager>().IsVideoContextActive)
        {
          player = ServiceRegistration.Get<IPlayerContextManager>().PrimaryPlayerContext.CurrentPlayer as ISharpDXVideoPlayer;

          // player.Texture can be null even if VideoContext is active, e.g. at the start of a video
          if (player.Texture != null)
          {
            surfaceSource = player.Texture.GetSurfaceLevel(0);
          }
        }
        else
        {
          surfaceSource = SkinContext.Device.GetRenderTarget(0);
        }

        if (surfaceSource == null)
        {
          return;
        }

        surfaceSource.Device.StretchRectangle(surfaceSource, null, surfaceDestination, rectangleDestination, SharpDX.Direct3D9.TextureFilter.None);
        DataStream stream = SharpDX.Direct3D9.Surface.ToStream(surfaceDestination, SharpDX.Direct3D9.ImageFileFormat.Bmp);

        coreObject.CalculateBitmap(stream);

        stream.Close();
        stream.Dispose();
      }
      catch (Exception ex)
      {
        surfaceDestination.Dispose();
        surfaceDestination = null;
        Log.Error("Error in UICapture.");
        Log.Error("Exception: {0}", ex.Message);
      }
    }
Beispiel #11
0
        public void UICapture(object sender, EventArgs args)
        {
            if (!coreObject.IsConnected() || !coreObject.IsAtmoLightOn() || coreObject.GetCurrentEffect() != ContentEffect.MediaPortalLiveMode)
            {
                return;
            }

            // Low CPU setting.
            // Skip frame if LowCPUTime has not yet passed since last frame.
            if (settings.LowCPU)
            {
                if ((Win32API.GetTickCount() - lastFrame) < settings.LowCPUTime)
                {
                    return;
                }
                else
                {
                    lastFrame = Win32API.GetTickCount();
                }
            }

            Rectangle rectangleDestination = new Rectangle(0, 0, coreObject.GetCaptureWidth(), coreObject.GetCaptureHeight());

            try
            {
                if (surfaceDestination == null)
                {
                    surfaceDestination = SharpDX.Direct3D9.Surface.CreateRenderTarget(SkinContext.Device,
                                                                                      coreObject.GetCaptureWidth(), coreObject.GetCaptureHeight(), SharpDX.Direct3D9.Format.A8R8G8B8,
                                                                                      SharpDX.Direct3D9.MultisampleType.None, 0, true);
                }

                // Use the Player Surface if video is playing.
                // This results in lower time to calculate aswell as blackbar removal
                if (ServiceRegistration.Get <IPlayerContextManager>().IsVideoContextActive)
                {
                    player = ServiceRegistration.Get <IPlayerContextManager>().PrimaryPlayerContext.CurrentPlayer as ISharpDXVideoPlayer;

                    // player.Texture can be null even if VideoContext is active, e.g. at the start of a video
                    if (player.Texture != null)
                    {
                        surfaceSource = player.Texture.GetSurfaceLevel(0);
                    }
                }
                else
                {
                    surfaceSource = SkinContext.Device.GetRenderTarget(0);
                }

                if (surfaceSource == null)
                {
                    return;
                }

                surfaceSource.Device.StretchRectangle(surfaceSource, null, surfaceDestination, rectangleDestination, SharpDX.Direct3D9.TextureFilter.None);
                DataStream stream = SharpDX.Direct3D9.Surface.ToStream(surfaceDestination, SharpDX.Direct3D9.ImageFileFormat.Bmp);

                coreObject.CalculateBitmap(stream);

                stream.Close();
                stream.Dispose();
            }
            catch (Exception ex)
            {
                surfaceDestination.Dispose();
                surfaceDestination = null;
                Log.Error("Error in UICapture.");
                Log.Error("Exception: {0}", ex.Message);
            }
        }
 protected override bool GetPlayer(out ISharpDXVideoPlayer player)
 {
   player = VideoPlayer;
   return player != null;
 }
 public override void DeepCopy(Utilities.DeepCopy.IDeepCopyable source, Utilities.DeepCopy.ICopyManager copyManager)
 {
   base.DeepCopy(source, copyManager);
   BackgroundVideoBrush b = (BackgroundVideoBrush) source;
   VideoPlayer = b.VideoPlayer;
 }
Beispiel #14
0
    protected virtual bool GetPlayer(out ISharpDXVideoPlayer player)
    {
      player = null;
      IPlayerContextManager playerContextManager = ServiceRegistration.Get<IPlayerContextManager>(false);
      if (playerContextManager == null)
        return false;

      player = playerContextManager[Stream] as ISharpDXVideoPlayer;
      return player != null;
    }
Beispiel #15
0
        private static void SendCommand(string command)
        {
            Key button = null;

            switch (command.ToLower())
            {
            case "stop":
                button = Key.Stop;
                break;

            case "record":
                button = Key.Record;
                break;

            case "pause":
                button = Key.PlayPause;
                break;

            case "play":
                button = Key.Play;
                break;

            case "rewind":
                button = Key.Rew;
                break;

            case "forward":
                button = Key.Fwd;
                break;

            case "replay":
                button = Key.Previous;
                break;

            case "skip":
                button = Key.Next;
                break;

            case "back":
                button = Key.Escape;
                break;

            case "info":
                button = Key.Info;
                break;

            case "menu":
                button = Key.ContextMenu;
                break;

            case "up":
                button = Key.Up;
                break;

            case "down":
                button = Key.Down;
                break;

            case "left":
                button = Key.Left;
                break;

            case "right":
                button = Key.Right;
                break;

            case "ok":
                button = Key.Ok;
                break;

            case "volup":
                button = Key.VolumeUp;
                break;

            case "voldown":
                button = Key.VolumeDown;
                break;

            case "volmute":
                button = Key.Mute;
                break;

            case "chup":
                button = Key.ChannelUp;
                break;

            case "chdown":
                button = Key.ChannelDown;
                break;

            case "dvdmenu":
                button = Key.DVDMenu;
                break;

            case "0":
            case "1":
            case "2":
            case "3":
            case "4":
            case "5":
            case "6":
            case "7":
            case "8":
            case "9":
                button = new Key(command[0]);
                break;

            case "clear":
                button = Key.Clear;
                break;

            case "enter":
                button = Key.Enter;
                break;

            case "teletext":
                button = Key.TeleText;
                break;

            case "red":
                button = Key.Red;
                break;

            case "blue":
                button = Key.Blue;
                break;

            case "yellow":
                button = Key.Yellow;
                break;

            case "green":
                button = Key.Green;
                break;

            case "home":
                button = Key.Home;
                break;

            case "basichome":
                button = Key.Home;
                break;

            case "nowplaying":
                //button = Key.NowPlaying;
                break;

            case "tvguide":
                button = Key.Guide;
                break;

            case "tvrecs":
                button = Key.RecordedTV;
                break;

            case "dvd":
                button = Key.DVDMenu;
                break;

            case "playlists":
                //button = RemoteButton.MyPlaylists;
                break;

            case "first":
                //button = RemoteButton.First;
                break;

            case "last":
                //button = RemoteButton.Last;
                break;

            case "fullscreen":
                button = Key.Fullscreen;
                break;

            case "subtitles":
                if (Helper.IsNowPlaying())
                {
                    ISubtitlePlayer subtitlePlayer = ServiceRegistration.Get <IPlayerContextManager>().PrimaryPlayerContext.CurrentPlayer as ISubtitlePlayer;
                    if (subtitlePlayer != null)
                    {
                        var availableSubtitlesList = subtitlePlayer.Subtitles.ToList();
                        int index = 0;
                        if (subtitlePlayer.CurrentSubtitle != null)
                        {
                            index = availableSubtitlesList.FindIndex(x => x == subtitlePlayer.CurrentSubtitle) + 1;
                            if (index == (availableSubtitlesList.Count - 1))
                            {
                                index = 0;
                            }
                        }
                        subtitlePlayer.SetSubtitle(availableSubtitlesList[index]);
                    }
                }
                break;

            case "audiotrack":
                if (Helper.IsNowPlaying())
                {
                    ISharpDXVideoPlayer videoPlayer = ServiceRegistration.Get <IPlayerContextManager>().PrimaryPlayerContext.CurrentPlayer as ISharpDXVideoPlayer;
                    if (videoPlayer != null)
                    {
                        var availableAudiotracksList = videoPlayer.AudioStreams.ToList();
                        int index = 0;
                        if (videoPlayer.CurrentAudioStream != null)
                        {
                            index = availableAudiotracksList.FindIndex(x => x == videoPlayer.CurrentAudioStream) + 1;
                            if (index == (availableAudiotracksList.Count - 1))
                            {
                                index = 0;
                            }
                        }
                        videoPlayer.SetAudioStream(availableAudiotracksList[index]);
                    }
                }
                break;

            /*case "screenshot":
             * button = Key.Screenshot;
             * break;*/

            case "aspectratio":
                if (Helper.IsNowPlaying())
                {
                    ISharpDXVideoPlayer videoPlayer = ServiceRegistration.Get <IPlayerContextManager>().PrimaryPlayerContext.CurrentPlayer as ISharpDXVideoPlayer;
                    if (videoPlayer != null)
                    {
                        var availableGeometriesList = availableGeometries.Values.ToList();
                        int index = 0;
                        if (videoPlayer.GeometryOverride != null)
                        {
                            index = availableGeometriesList.FindIndex(x => x.Name == videoPlayer.GeometryOverride.Name) + 1;
                            if (index == (availableGeometriesList.Count - 1))
                            {
                                index = 0;
                            }
                        }
                        videoPlayer.GeometryOverride = availableGeometriesList[index];
                    }
                }
                break;

            /*case "ejectcd":
             * button = RemoteButton.EjectCD;
             * break;*/

            default:
                break;
            }

            if (button != null)
            {
                ServiceRegistration.Get <IInputManager>().KeyPress(button);
            }
        }