public override void DeepCopy(Utilities.DeepCopy.IDeepCopyable source, Utilities.DeepCopy.ICopyManager copyManager) { base.DeepCopy(source, copyManager); BackgroundVideoBrush b = (BackgroundVideoBrush)source; VideoPlayer = b.VideoPlayer; }
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); }
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; } }
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); }
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); } }
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; }
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; }
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); } }