aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs')
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs92
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)