From 1dd93bfcff689d41091ad56a068d693d77b45abc Mon Sep 17 00:00:00 2001 From: stax76 Date: Thu, 2 Jun 2022 14:15:02 +0200 Subject: [PATCH] - --- src/Misc/App.cs | 2 + src/Misc/Player.cs | 172 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+) diff --git a/src/Misc/App.cs b/src/Misc/App.cs index 8b14883..bb6cd4e 100644 --- a/src/Misc/App.cs +++ b/src/Misc/App.cs @@ -27,6 +27,7 @@ namespace mpvnet public static bool DebugMode { get; set; } public static bool Exit { get; set; } public static bool IsTerminalAttached { get; } = Environment.GetEnvironmentVariable("_started_from_console") == "yes"; + public static bool MediaInfo { get; set; } = true; public static bool Queue { get; set; } public static bool RememberVolume { get; set; } = true; public static bool RememberWindowPosition { get; set; } @@ -246,6 +247,7 @@ namespace mpvnet case "debug-mode": DebugMode = value == "yes"; return true; case "image-file-extensions": CorePlayer.ImageTypes = value.Split(" ,;".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); return true; case "light-theme": LightTheme = value.Trim('\'', '"'); return true; + case "media-info": MediaInfo = value == "yes"; return true; case "minimum-aspect-ratio": MinimumAspectRatio = value.ToFloat(); return true; case "process-instance": ProcessInstance = value; return true; case "queue": Queue = value == "yes"; return true; diff --git a/src/Misc/Player.cs b/src/Misc/Player.cs index 9610e90..7b396e7 100644 --- a/src/Misc/Player.cs +++ b/src/Misc/Player.cs @@ -541,6 +541,7 @@ namespace mpvnet } App.RunTask(new Action(() => ReadMetaData())); + //Debug.WriteLine("################# " + GetPropertyString("media-title")); App.RunTask(new Action(() => { if (path.Contains("://")) @@ -1429,6 +1430,177 @@ namespace mpvnet } void ReadMetaData() + { + if (App.MediaInfo) + ReadMetaDataUsingMediaInfo(); + else + { + ReadMetaDataUsingMediaInfo(); + ReadMetaDataUsingMpv(); + } + } + + void ReadMetaDataUsingMpv() + { + string path = GetPropertyString("path"); + + if (!path.ToLowerEx().StartsWithEx("bd://")) + lock (BluRayTitles) + BluRayTitles.Clear(); + + lock (MediaTracks) + { + //MediaTracks.Clear(); + + int trackListCount = GetPropertyInt("track-list/count"); + + for (int i = 0; i < trackListCount; i++) + { + string type = GetPropertyString($"track-list/{i}/type"); + string test = GetPropertyString($"track-list"); + + if (type == "video") + { + MediaTrack track = new MediaTrack(); + Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); + Add(track, GetPropertyString($"track-list/{i}/demux-w") + "x" + GetPropertyString($"track-list/{i}/demux-h")); + Add(track, GetPropertyString($"track-list/{i}/demux-fps").Replace(".000000", "") + " FPS"); + Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : ""); + track.Text = "V: " + track.Text.Trim(' ', ','); + track.Type = "v"; + track.ID = GetPropertyInt($"track-list/{i}/id"); + MediaTracks.Add(track); + } + else if (type == "audio") + { + //Add(track, mi.GetAudio(i, "Language/String")); + //Add(track, mi.GetAudio(i, "Format")); + //Add(track, mi.GetAudio(i, "Format_Profile")); + //Add(track, mi.GetAudio(i, "BitRate/String")); + //Add(track, mi.GetAudio(i, "Channel(s)/String")); + //Add(track, mi.GetAudio(i, "SamplingRate/String")); + + //Add(track, mi.GetAudio(i, "Forced") == "Yes" ? "Forced" : ""); + //Add(track, mi.GetAudio(i, "Default") == "Yes" ? "Default" : ""); + + //Add(track, mi.GetAudio(i, "Title")); + + MediaTrack track = new MediaTrack(); + Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); + Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); + Add(track, GetPropertyInt($"track-list/{i}/audio-channels") + " channels"); + Add(track, GetPropertyInt($"track-list/{i}/demux-samplerate") + " Hz"); + Add(track, GetPropertyBool($"track-list/{i}/forced") ? "Forced" : ""); + Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : ""); + track.Text = "A: " + track.Text.Trim(' ', ','); + track.Type = "a"; + track.ID = GetPropertyInt($"track-list/{i}/id"); + MediaTracks.Add(track); + } + else if (type == "sub") + { + //MediaTrack track = new MediaTrack(); + //Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); + //track.Text = "S: " + track.Text.Trim(' ', ','); + //track.Type = "s"; + //track.ID = GetPropertyInt($"track-list/{i}/id"); + //MediaTracks.Add(track); + } + } + + //using (MediaInfo mi = new MediaInfo(path)) + //{ + // int videoCount = mi.GetCount(MediaInfoStreamKind.Video); + + // for (int i = 0; i < videoCount; i++) + // { + // MediaTrack track = new MediaTrack(); + // Add(track, mi.GetVideo(i, "Format")); + // Add(track, mi.GetVideo(i, "Format_Profile")); + // Add(track, mi.GetVideo(i, "Width") + "x" + mi.GetVideo(i, "Height")); + // Add(track, mi.GetVideo(i, "FrameRate") + " FPS"); + // Add(track, mi.GetVideo(i, "Language/String")); + // Add(track, mi.GetVideo(i, "Forced") == "Yes" ? "Forced" : ""); + // Add(track, mi.GetVideo(i, "Default") == "Yes" ? "Default" : ""); + // Add(track, mi.GetVideo(i, "Title")); + // track.Text = "V: " + track.Text.Trim(' ', ','); + // track.Type = "v"; + // track.ID = i + 1; + // MediaTracks.Add(track); + // } + + // int audioCount = mi.GetCount(MediaInfoStreamKind.Audio); + + // for (int i = 0; i < audioCount; i++) + // { + // MediaTrack track = new MediaTrack(); + // Add(track, mi.GetAudio(i, "Language/String")); + // Add(track, mi.GetAudio(i, "Format")); + // Add(track, mi.GetAudio(i, "Format_Profile")); + // Add(track, mi.GetAudio(i, "BitRate/String")); + // Add(track, mi.GetAudio(i, "Channel(s)/String")); + // Add(track, mi.GetAudio(i, "SamplingRate/String")); + // Add(track, mi.GetAudio(i, "Forced") == "Yes" ? "Forced" : ""); + // Add(track, mi.GetAudio(i, "Default") == "Yes" ? "Default" : ""); + // Add(track, mi.GetAudio(i, "Title")); + // track.Text = "A: " + track.Text.Trim(' ', ','); + // track.Type = "a"; + // track.ID = i + 1; + // MediaTracks.Add(track); + // } + + // int subCount = mi.GetCount(MediaInfoStreamKind.Text); + + // for (int i = 0; i < subCount; i++) + // { + // MediaTrack track = new MediaTrack(); + // Add(track, mi.GetText(i, "Language/String")); + // Add(track, mi.GetText(i, "Format")); + // Add(track, mi.GetText(i, "Format_Profile")); + // Add(track, mi.GetText(i, "Forced") == "Yes" ? "Forced" : ""); + // Add(track, mi.GetText(i, "Default") == "Yes" ? "Default" : ""); + // Add(track, mi.GetText(i, "Title")); + // track.Text = "S: " + track.Text.Trim(' ', ','); + // track.Type = "s"; + // track.ID = i + 1; + // MediaTracks.Add(track); + // } + + // int editionCount = GetPropertyInt("edition-list/count"); + + // for (int i = 0; i < editionCount; i++) + // { + // string title = GetPropertyString($"edition-list/{i}/title"); + // if (string.IsNullOrEmpty(title)) + // title = "Edition " + i; + // MediaTrack track = new MediaTrack(); + // track.Text = "E: " + title; + // track.Type = "e"; + // track.ID = i; + // MediaTracks.Add(track); + // } + //} + } + + //lock (Chapters) + //{ + // Chapters.Clear(); + // int count = GetPropertyInt("chapter-list/count"); + + // for (int x = 0; x < count; x++) + // { + // string text = GetPropertyString($"chapter-list/{x}/title"); + // double time = GetPropertyDouble($"chapter-list/{x}/time"); + + // if (string.IsNullOrEmpty(text)) + // text = "Chapter " + (x + 1); + + // Chapters.Add(new KeyValuePair(text, time)); + // } + //} + } + + void ReadMetaDataUsingMediaInfo() { string path = GetPropertyString("path");