diff options
Diffstat (limited to 'MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs')
| -rw-r--r-- | MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs | 92 |
1 files changed, 51 insertions, 41 deletions
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs index 620a7a6f65..c2279fb508 100644 --- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs +++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs @@ -53,9 +53,18 @@ namespace MediaBrowser.Providers.MediaInfo { var isoMount = await MountIsoIfNeeded(item, cancellationToken).ConfigureAwait(false); + BlurayDiscInfo blurayDiscInfo = null; + try { - OnPreFetch(item, isoMount); + if (item.VideoType == VideoType.BluRay || (item.IsoType.HasValue && item.IsoType == IsoType.BluRay)) + { + var inputPath = isoMount != null ? isoMount.MountedPath : item.Path; + + blurayDiscInfo = GetBDInfo(inputPath); + } + + OnPreFetch(item, isoMount, blurayDiscInfo); // If we didn't find any satisfying the min length, just take them all if (item.VideoType == VideoType.Dvd || (item.IsoType.HasValue && item.IsoType == IsoType.Dvd)) @@ -67,6 +76,15 @@ namespace MediaBrowser.Providers.MediaInfo } } + if (item.VideoType == VideoType.BluRay || (item.IsoType.HasValue && item.IsoType == IsoType.BluRay)) + { + if (item.PlayableStreamFileNames.Count == 0) + { + _logger.Error("No playable vobs found in bluray structure, skipping ffprobe."); + return ItemUpdateType.MetadataImport; + } + } + var result = await GetMediaInfo(item, isoMount, cancellationToken).ConfigureAwait(false); cancellationToken.ThrowIfCancellationRequested(); @@ -75,7 +93,7 @@ namespace MediaBrowser.Providers.MediaInfo cancellationToken.ThrowIfCancellationRequested(); - await Fetch(item, cancellationToken, result, isoMount, directoryService).ConfigureAwait(false); + await Fetch(item, cancellationToken, result, isoMount, blurayDiscInfo, directoryService).ConfigureAwait(false); } finally @@ -128,7 +146,7 @@ namespace MediaBrowser.Providers.MediaInfo return result; } - protected async Task Fetch(Video video, CancellationToken cancellationToken, InternalMediaInfoResult data, IIsoMount isoMount, IDirectoryService directoryService) + protected async Task Fetch(Video video, CancellationToken cancellationToken, InternalMediaInfoResult data, IIsoMount isoMount, BlurayDiscInfo blurayInfo, IDirectoryService directoryService) { if (data.format != null) { @@ -147,8 +165,7 @@ namespace MediaBrowser.Providers.MediaInfo if (video.VideoType == VideoType.BluRay || (video.IsoType.HasValue && video.IsoType.Value == IsoType.BluRay)) { - var inputPath = isoMount != null ? isoMount.MountedPath : video.Path; - FetchBdInfo(video, chapters, mediaStreams, inputPath, cancellationToken); + FetchBdInfo(video, chapters, mediaStreams, blurayInfo); } AddExternalSubtitles(video, mediaStreams, directoryService); @@ -183,14 +200,10 @@ namespace MediaBrowser.Providers.MediaInfo await _itemRepo.SaveChapters(video.Id, chapters, cancellationToken).ConfigureAwait(false); } - private void FetchBdInfo(BaseItem item, List<ChapterInfo> chapters, List<MediaStream> mediaStreams, string inputPath, CancellationToken cancellationToken) + private void FetchBdInfo(BaseItem item, List<ChapterInfo> chapters, List<MediaStream> mediaStreams, BlurayDiscInfo blurayInfo) { var video = (Video)item; - var result = GetBDInfo(inputPath); - - cancellationToken.ThrowIfCancellationRequested(); - int? currentHeight = null; int? currentWidth = null; int? currentBitRate = null; @@ -206,51 +219,43 @@ namespace MediaBrowser.Providers.MediaInfo } // Fill video properties from the BDInfo result - Fetch(video, mediaStreams, result, chapters); - - videoStream = mediaStreams.FirstOrDefault(s => s.Type == MediaStreamType.Video); - - // Use the ffprobe values if these are empty - if (videoStream != null) - { - videoStream.BitRate = IsEmpty(videoStream.BitRate) ? currentBitRate : videoStream.BitRate; - videoStream.Width = IsEmpty(videoStream.Width) ? currentWidth : videoStream.Width; - videoStream.Height = IsEmpty(videoStream.Height) ? currentHeight : videoStream.Height; - } - } - - private bool IsEmpty(int? num) - { - return !num.HasValue || num.Value == 0; - } - - /// <param name="chapters">The chapters.</param> - private void Fetch(Video video, List<MediaStream> mediaStreams, BlurayDiscInfo stream, List<ChapterInfo> chapters) - { - // Check all input for null/empty/zero - mediaStreams.Clear(); - mediaStreams.AddRange(stream.MediaStreams); + mediaStreams.AddRange(blurayInfo.MediaStreams); - video.MainFeaturePlaylistName = stream.PlaylistName; + video.MainFeaturePlaylistName = blurayInfo.PlaylistName; - if (stream.RunTimeTicks.HasValue && stream.RunTimeTicks.Value > 0) + if (blurayInfo.RunTimeTicks.HasValue && blurayInfo.RunTimeTicks.Value > 0) { - video.RunTimeTicks = stream.RunTimeTicks; + video.RunTimeTicks = blurayInfo.RunTimeTicks; } - video.PlayableStreamFileNames = stream.Files.ToList(); + video.PlayableStreamFileNames = blurayInfo.Files.ToList(); - if (stream.Chapters != null) + if (blurayInfo.Chapters != null) { chapters.Clear(); - chapters.AddRange(stream.Chapters.Select(c => new ChapterInfo + chapters.AddRange(blurayInfo.Chapters.Select(c => new ChapterInfo { StartPositionTicks = TimeSpan.FromSeconds(c).Ticks })); } + + videoStream = mediaStreams.FirstOrDefault(s => s.Type == MediaStreamType.Video); + + // Use the ffprobe values if these are empty + if (videoStream != null) + { + videoStream.BitRate = IsEmpty(videoStream.BitRate) ? currentBitRate : videoStream.BitRate; + videoStream.Width = IsEmpty(videoStream.Width) ? currentWidth : videoStream.Width; + videoStream.Height = IsEmpty(videoStream.Height) ? currentHeight : videoStream.Height; + } + } + + private bool IsEmpty(int? num) + { + return !num.HasValue || num.Value == 0; } /// <summary> @@ -498,7 +503,7 @@ namespace MediaBrowser.Providers.MediaInfo /// </summary> /// <param name="item">The item.</param> /// <param name="mount">The mount.</param> - private void OnPreFetch(Video item, IIsoMount mount) + private void OnPreFetch(Video item, IIsoMount mount, BlurayDiscInfo blurayDiscInfo) { if (item.VideoType == VideoType.Iso) { @@ -509,6 +514,11 @@ namespace MediaBrowser.Providers.MediaInfo { FetchFromDvdLib(item, mount); } + + if (item.VideoType == VideoType.BluRay || (item.IsoType.HasValue && item.IsoType.Value == IsoType.BluRay)) + { + item.PlayableStreamFileNames = blurayDiscInfo.Files.ToList(); + } } private void FetchFromDvdLib(Video item, IIsoMount mount) |
