public virtual void MediaAdd(MediaBase media) { MediaBase prevMedia; lock (((IDictionary)Files).SyncRoot) { if (Files.TryGetValue(media.MediaGuid, out prevMedia)) { if (prevMedia is IServerMedia || prevMedia is IAnimatedMedia) { ThreadPool.QueueUserWorkItem(o => { if (prevMedia is IAnimatedMedia am) { EngineController.Database.DbDeleteMedia(am); } if (prevMedia is IServerMedia sm) { EngineController.Database.DbDeleteMedia(sm); } Logger.Warn("Media {0} replaced in dictionary. Previous media deleted in database.", prevMedia); }); Debug.WriteLine(prevMedia, "Media replaced in dictionary"); } } Files[media.MediaGuid] = media; } media.PropertyChanged += _media_PropertyChanged; MediaAdded?.Invoke(this, new MediaEventArgs(media)); }
public override void MediaAdd(MediaBase media) { base.MediaAdd(media); if (media.MediaStatus != TMediaStatus.Required && File.Exists(media.FullPath)) { ThreadPool.QueueUserWorkItem(o => media.Verify()); } }
private void _archiveCopy(MediaBase fromMedia, IMediaDirectory destDirectory, bool deleteAfterSuccess, bool toTop) { FileOperation operation = new FileOperation((FileManager)MediaManager.FileManager) { Kind = deleteAfterSuccess ? TFileOperationKind.Move : TFileOperationKind.Copy, Source = fromMedia, DestDirectory = destDirectory }; operation.Success += _archived; operation.Failure += _failure; MediaManager.FileManager.Queue(operation, toTop); }
internal void UpdateMediaGuid(Guid oldGuid, MediaBase media) { if (oldGuid != media.MediaGuid) { lock (((IDictionary)Files).SyncRoot) { if (Files.ContainsKey(oldGuid)) { Files.Remove(oldGuid); } Files.Add(media.MediaGuid, media); } } }
protected override void OnMediaRenamed(MediaBase media, string newFullPath) { ((ServerMedia)media).Save(); base.OnMediaRenamed(media, newFullPath); }
internal void OnMediaSaved(MediaBase media) { MediaSaved?.Invoke(this, new MediaEventArgs(media)); }
protected override void OnMediaRenamed(MediaBase media, string newName) { ((ArchiveMedia)media).Save(); }
protected override void OnMediaRenamed(MediaBase media, string newFullPath) { Debug.WriteLine(newFullPath, "OnMediaRenamed"); media.MediaName = FileUtils.GetFileNameWithoutExtension(newFullPath, media.MediaType); }
internal static void Check(MediaBase media) { if (media.MediaType == TMediaType.Movie || media.MediaType == TMediaType.Unknown) { int startTickCunt = Environment.TickCount; using (FFMpegWrapper ffmpeg = new FFMpegWrapper(media.FullPath)) { Rational r = ffmpeg.GetFrameRate(); RationalNumber frameRate = new RationalNumber(r.Num, r.Den); var videoDuration = ffmpeg.GetFrameCount().SMPTEFramesToTimeSpan(frameRate); var audioDuration = (TimeSpan)ffmpeg.GetAudioDuration(); var mediaDuration = ((videoDuration > audioDuration) && (audioDuration > TimeSpan.Zero) ? audioDuration : videoDuration).Round(frameRate); media.Duration = mediaDuration; if (media.DurationPlay == TimeSpan.Zero || media.DurationPlay > mediaDuration) { media.DurationPlay = mediaDuration; } int w = ffmpeg.GetWidth(); int h = ffmpeg.GetHeight(); FieldOrder order = ffmpeg.GetFieldOrder(); Rational sar = ffmpeg.GetSAR(); if (h == 608 && w == 720) { media.HasExtraLines = true; h = 576; } else { media.HasExtraLines = false; } string timecode = ffmpeg.GetTimeCode(); if (timecode != null && timecode.IsValidSMPTETimecode(frameRate)) { media.TcStart = timecode.SMPTETimecodeToTimeSpan(frameRate); if (media.TcPlay < media.TcStart) { media.TcPlay = media.TcStart; } } RationalNumber sAR = (h == 576 && ((sar.Num == 608 && sar.Den == 405) || (sar.Num == 1 && sar.Den == 1) || (sar.Num == 118 && sar.Den == 81))) ? VideoFormatDescription.Descriptions[TVideoFormat.PAL_FHA].SAR : (sar.Num == 152 && sar.Den == 135) ? VideoFormatDescription.Descriptions[TVideoFormat.PAL].SAR : new RationalNumber(sar.Num, sar.Den); var vfd = VideoFormatDescription.Match(new System.Drawing.Size(w, h), new RationalNumber(frameRate.Num, frameRate.Den), sAR, order != FieldOrder.PROGRESSIVE); media.VideoFormat = vfd.Format; if (media is IngestMedia ingestMedia) { ingestMedia.StreamInfo = ffmpeg.GetStreamInfo(); } if (media is TempMedia tempMedia) { tempMedia.StreamInfo = ffmpeg.GetStreamInfo(); } Debug.WriteLine("FFmpeg check of {0} finished. It took {1} milliseconds", media.FullPath, Environment.TickCount - startTickCunt); if (videoDuration > TimeSpan.Zero) { media.MediaType = TMediaType.Movie; if (Math.Abs(videoDuration.Ticks - audioDuration.Ticks) >= TimeSpan.TicksPerSecond && audioDuration != TimeSpan.Zero) { // when more than 0.5 sec difference media.MediaStatus = TMediaStatus.ValidationError; } media.MediaStatus = TMediaStatus.Available; } media.MediaStatus = TMediaStatus.ValidationError; } } media.MediaStatus = TMediaStatus.Available; }
public override void MediaAdd(MediaBase media) { // do not add to _files }
protected virtual void OnMediaRenamed(MediaBase media, string newFullPath) { Logger.Trace("Media {0} renamed: {1}", media, newFullPath); }