private void ExtractInfo(string filePath, string pathToDll, NumberFormatInfo providerNumber) { using (var mediaInfo = new MediaInfo(pathToDll)) { Version = mediaInfo.Option("Info_Version"); mediaInfo.Open(filePath); var streamNumber = 0; // Setup videos for (var i = 0; i < mediaInfo.CountGet(StreamKind.Video); ++i) { VideoStreams.Add(new VideoStreamBuilder(mediaInfo, streamNumber++, i).Build()); } if (VideoDuration == 0) { double duration; double.TryParse( mediaInfo.Get(StreamKind.Video, 0, "Duration"), NumberStyles.AllowDecimalPoint, providerNumber, out duration); VideoDuration = (int)duration; } // Setup audios for (var i = 0; i < mediaInfo.CountGet(StreamKind.Audio); ++i) { AudioStreams.Add(new AudioStreamBuilder(mediaInfo, streamNumber++, i).Build()); } // Setup subtitles for (var i = 0; i < mediaInfo.CountGet(StreamKind.Text); ++i) { Subtitles.Add(new SubtitleStreamBuilder(mediaInfo, streamNumber++, i).Build()); } // Setup chapters for (var i = 0; i < mediaInfo.CountGet(StreamKind.Other); ++i) { Chapters.Add(new ChapterStreamBuilder(mediaInfo, streamNumber++, i).Build()); } // Setup menus for (var i = 0; i < mediaInfo.CountGet(StreamKind.Menu); ++i) { MenuStreams.Add(new MenuStreamBuilder(mediaInfo, streamNumber++, i).Build()); } MediaInfoNotloaded = VideoStreams.Count == 0 && AudioStreams.Count == 0 && Subtitles.Count == 0; // Produce copability properties if (MediaInfoNotloaded) { SetPropertiesDefault(); } else { SetupProperties(mediaInfo); } } }
private void ExtractInfo(string filePath, NumberFormatInfo providerNumber) #endif { #if (NET40 || NET45) using (var mediaInfo = new MediaInfo(pathToDll)) #else using (var mediaInfo = new MediaInfo()) #endif { if (mediaInfo.Handle == IntPtr.Zero) { MediaInfoNotloaded = true; _logger.LogWarning("MediaInfo library was not loaded!"); return; } else { Version = mediaInfo.Option("Info_Version"); _logger.LogDebug($"MediaInfo library was loaded. Handle={mediaInfo.Handle} Version is {Version}"); } var filePricessingHandle = mediaInfo.Open(filePath); if (filePricessingHandle == IntPtr.Zero) { MediaInfoNotloaded = true; _logger.LogWarning($"MediaInfo library has not been opened media {filePath}"); return; } else { _logger.LogDebug($"MediaInfo library successfully opened {filePath}. Handle={filePricessingHandle}"); } var streamNumber = 0; Tags = new AudioTagBuilder(mediaInfo, 0).Build(); // Setup videos for (var i = 0; i < mediaInfo.CountGet(StreamKind.Video); ++i) { VideoStreams.Add(new VideoStreamBuilder(mediaInfo, streamNumber++, i).Build()); } if (Duration == 0) { double.TryParse( mediaInfo.Get(StreamKind.Video, 0, (int)NativeMethods.Video.Video_Duration), NumberStyles.AllowDecimalPoint, providerNumber, out var duration); Duration = (int)duration; } // Fix 3D for some containers if (VideoStreams.Count == 1 && Tags.GeneralTags.TryGetValue((NativeMethods.General) 1000, out var isStereo)) { var video = VideoStreams.First(); if (Tags.GeneralTags.TryGetValue((NativeMethods.General) 1001, out var stereoMode)) { video.Stereoscopic = (StereoMode)stereoMode; } else { video.Stereoscopic = (bool)isStereo ? StereoMode.Stereo : StereoMode.Mono; } } // Setup audios for (var i = 0; i < mediaInfo.CountGet(StreamKind.Audio); ++i) { AudioStreams.Add(new AudioStreamBuilder(mediaInfo, streamNumber++, i).Build()); } if (Duration == 0) { double.TryParse( mediaInfo.Get(StreamKind.Audio, 0, (int)NativeMethods.Audio.Audio_Duration), NumberStyles.AllowDecimalPoint, providerNumber, out var duration); Duration = (int)duration; } // Setup subtitles for (var i = 0; i < mediaInfo.CountGet(StreamKind.Text); ++i) { Subtitles.Add(new SubtitleStreamBuilder(mediaInfo, streamNumber++, i).Build()); } // Setup chapters for (var i = 0; i < mediaInfo.CountGet(StreamKind.Other); ++i) { Chapters.Add(new ChapterStreamBuilder(mediaInfo, streamNumber++, i).Build()); } // Setup menus for (var i = 0; i < mediaInfo.CountGet(StreamKind.Menu); ++i) { MenuStreams.Add(new MenuStreamBuilder(mediaInfo, streamNumber++, i).Build()); } MediaInfoNotloaded = VideoStreams.Count == 0 && AudioStreams.Count == 0 && Subtitles.Count == 0; // Produce capability properties if (MediaInfoNotloaded) { SetPropertiesDefault(); } else { SetupProperties(mediaInfo); } } }