Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
 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);
        }
Exemplo n.º 4
0
 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);
         }
     }
 }
Exemplo n.º 5
0
 protected override void OnMediaRenamed(MediaBase media, string newFullPath)
 {
     ((ServerMedia)media).Save();
     base.OnMediaRenamed(media, newFullPath);
 }
Exemplo n.º 6
0
 internal void OnMediaSaved(MediaBase media)
 {
     MediaSaved?.Invoke(this, new MediaEventArgs(media));
 }
 protected override void OnMediaRenamed(MediaBase media, string newName)
 {
     ((ArchiveMedia)media).Save();
 }
Exemplo n.º 8
0
 protected override void OnMediaRenamed(MediaBase media, string newFullPath)
 {
     Debug.WriteLine(newFullPath, "OnMediaRenamed");
     media.MediaName = FileUtils.GetFileNameWithoutExtension(newFullPath, media.MediaType);
 }
Exemplo n.º 9
0
        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;
        }
Exemplo n.º 10
0
 public override void MediaAdd(MediaBase media)
 {
     // do not add to _files
 }
Exemplo n.º 11
0
 protected virtual void OnMediaRenamed(MediaBase media, string newFullPath)
 {
     Logger.Trace("Media {0} renamed: {1}", media, newFullPath);
 }