private CasparItem _getItem(Event aEvent) { CasparItem item = new CasparItem(string.Empty); IPersistentMedia media = (aEvent.Engine.PlayoutChannelPRI == this) ? aEvent.ServerMediaPRI : aEvent.ServerMediaSEC; if (aEvent.EventType == TEventType.Live || media != null) { if (aEvent.EventType == TEventType.Movie || aEvent.EventType == TEventType.StillImage) { item.Clipname = string.Format($"\"{Path.GetFileNameWithoutExtension(media.FileName)}\""); } if (aEvent.EventType == TEventType.Live) { item.Clipname = string.IsNullOrWhiteSpace(LiveDevice) ? "BLACK" : LiveDevice; } if (aEvent.EventType == TEventType.Live || aEvent.EventType == TEventType.Movie) { item.ChannelLayout = ChannelLayout.Stereo; } if (aEvent.EventType == TEventType.Movie) { item.FieldOrderInverted = media.FieldOrderInverted; } item.VideoLayer = (int)aEvent.Layer; item.Loop = false; item.Transition.Type = (TransitionType)aEvent.TransitionType; item.Transition.Duration = (int)((aEvent.TransitionTime.Ticks - aEvent.TransitionPauseTime.Ticks) / aEvent.Engine.FrameTicks); item.Transition.Pause = (int)(aEvent.TransitionPauseTime.Ticks / aEvent.Engine.FrameTicks); item.Transition.Easing = (Easing)aEvent.TransitionEasing; item.Seek = (int)aEvent.MediaSeek; return(item); } return(null); }
public MediaSegmentViewmodel(IPersistentMedia media, IMediaSegment mediaSegment) { MediaSegment = mediaSegment; Media = media; _videoFormat = media.VideoFormat; mediaSegment.PropertyChanged += OnPropertyChanged; Load(); }
private void _mediaSegments_SegmentAdded(object sender, MediaSegmentEventArgs e) { Application.Current.Dispatcher.BeginInvoke((Action) delegate() { IPersistentMedia media = _loadedMedia as IPersistentMedia; if (media != null && sender == media.MediaSegments) { var newVM = new MediaSegmentViewmodel(media, e.Segment); _mediaSegments.Add(newVM); if (e.Segment == _lastAddedSegment) { SelectedSegment = newVM; } } }); }
public MediaViewViewmodel(IMedia media) { Media = media; media.PropertyChanged += OnMediaPropertyChanged; IPersistentMedia pm = media as IPersistentMedia; if (pm != null) { _mediaSegments = new Lazy <ObservableCollection <MediaSegmentViewmodel> >(() => { var result = new ObservableCollection <MediaSegmentViewmodel>(pm.MediaSegments.Segments.Select(ms => new MediaSegmentViewmodel(pm, ms))); pm.MediaSegments.SegmentAdded += MediaSegments_SegmentAdded; pm.MediaSegments.SegmentRemoved += _mediaSegments_SegmentRemoved; return(result); }); } }
private void _mediaSegments_SegmentRemoved(object sender, MediaSegmentEventArgs e) { Application.Current.Dispatcher.BeginInvoke((Action) delegate() { IPersistentMedia media = _loadedMedia as IPersistentMedia; if (media != null && sender == media.MediaSegments) { var vM = _mediaSegments.FirstOrDefault(s => s.MediaSegment == e.Segment); if (vM != null) { _mediaSegments.Remove(vM); } if (_selectedSegment == vM) { SelectedSegment = null; } } }); }
private void CreateCommands() { CommandPause = new UICommand() { ExecuteDelegate = o => { if (LoadedMedia == null) { LoadedMedia = _media ?? _event?.Media; } else if (_preview.PreviewIsPlaying) { _preview.PreviewPause(); } else { _preview.PreviewPosition = 0; NotifyPropertyChanged(nameof(Position)); } }, CanExecuteDelegate = o => { IMedia media = Media ?? (Event != null ? Event.Media : null); return((LoadedMedia != null && LoadedMedia.MediaStatus == TMediaStatus.Available) || _canLoad(media)); } }; CommandPlay = new UICommand() { ExecuteDelegate = o => { IMedia loadedMedia = LoadedMedia; if (loadedMedia != null) { if (_preview.PreviewIsPlaying) { _preview.PreviewPause(); } else { _preview.PreviewPlay(); } } else { CommandPause.Execute(null); if (LoadedMedia != null) { _preview.PreviewPlay(); } } }, CanExecuteDelegate = o => { IMedia media = Media ?? (Event != null ? Event.Media : null); return((LoadedMedia != null && LoadedMedia.MediaStatus == TMediaStatus.Available) || _canLoad(media)); } }; CommandStop = new UICommand() { ExecuteDelegate = o => _mediaUnload(), CanExecuteDelegate = _canStop }; CommandSeek = new UICommand() { ExecuteDelegate = param => { if (_preview.PreviewIsPlaying) { _preview.PreviewPause(); } long seekFrames; switch ((string)param) { case "fframe": seekFrames = 1; break; case "rframe": seekFrames = -1; break; case "fsecond": seekFrames = FramesPerSecond; break; case "rsecond": seekFrames = -FramesPerSecond; break; default: seekFrames = 0; break; } _preview.PreviewPosition = _preview.PreviewPosition + seekFrames; NotifyPropertyChanged(nameof(Position)); }, CanExecuteDelegate = _canStop }; CommandCopyToTcIn = new UICommand() { ExecuteDelegate = o => TcIn = Position, CanExecuteDelegate = _canStop }; CommandCopyToTcOut = new UICommand() { ExecuteDelegate = o => TcOut = Position, CanExecuteDelegate = _canStop }; CommandSaveSegment = new UICommand() { ExecuteDelegate = o => { MediaSegmentViewmodel msVm = _selectedSegment; IPersistentMedia media = LoadedMedia as IPersistentMedia; if (msVm == null) { _lastAddedSegment = media.MediaSegments.Add(TcIn, TcOut, SelectedSegmentName); _lastAddedSegment.Save(); } else { msVm.TcIn = TcIn; msVm.TcOut = TcOut; msVm.SegmentName = SelectedSegmentName; msVm.Save(); } }, CanExecuteDelegate = o => { var ss = SelectedSegment; return(LoadedMedia != null && ((ss == null && !string.IsNullOrEmpty(SelectedSegmentName)) || (ss != null && (ss.IsModified || SelectedSegmentName != ss.SegmentName || TcIn != ss.TcIn || TcOut != ss.TcOut)))); } }; CommandDeleteSegment = new UICommand() { ExecuteDelegate = o => { MediaSegmentViewmodel msVm = _selectedSegment; if (msVm != null) { msVm.MediaSegment.Delete(); } }, CanExecuteDelegate = o => _selectedSegment != null }; CommandNewSegment = new UICommand() { ExecuteDelegate = o => { var media = LoadedMedia as IPersistentMedia; if (media != null) { _lastAddedSegment = media.MediaSegments.Add(TcIn, TcOut, Common.Properties.Resources._title_NewSegment); } }, }; CommandSetSegmentNameFocus = new UICommand() { ExecuteDelegate = o => { IsSegmentNameFocused = true; NotifyPropertyChanged(nameof(IsSegmentNameFocused)); }, }; }