This commit is contained in:
stax76
2022-06-02 20:16:13 +02:00
parent d465b13a03
commit e9df0f9f99
3 changed files with 99 additions and 144 deletions

View File

@@ -303,11 +303,18 @@ namespace mpvnet
public static void CycleAudio() public static void CycleAudio()
{ {
if (!App.MediaInfo)
Core.UpdateTrackData();
var tracks = Core.MediaTracks.Where(track => track.Type == "a").ToArray(); var tracks = Core.MediaTracks.Where(track => track.Type == "a").ToArray();
if (App.MediaInfo)
{
var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a"); var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a");
if (externalTracks.Count() > 0) if (externalTracks.Count() > 0)
tracks = tracks.Concat(externalTracks).ToArray(); tracks = tracks.Concat(externalTracks).ToArray();
}
int len = tracks.Length; int len = tracks.Length;
@@ -425,11 +432,18 @@ namespace mpvnet
public static void ShowAudioTracks() => App.InvokeOnMainThread(() => public static void ShowAudioTracks() => App.InvokeOnMainThread(() =>
{ {
if (!App.MediaInfo)
Core.UpdateTrackData();
var tracks = Core.MediaTracks.Where(track => track.Type == "a").ToArray(); var tracks = Core.MediaTracks.Where(track => track.Type == "a").ToArray();
if (App.MediaInfo)
{
var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a"); var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "a");
if (externalTracks.Count() > 0) if (externalTracks.Count() > 0)
tracks = tracks.Concat(externalTracks).ToArray(); tracks = tracks.Concat(externalTracks).ToArray();
}
if (tracks.Length < 1) if (tracks.Length < 1)
{ {
@@ -463,11 +477,18 @@ namespace mpvnet
public static void ShowSubtitleTracks() => App.InvokeOnMainThread(() => public static void ShowSubtitleTracks() => App.InvokeOnMainThread(() =>
{ {
if (!App.MediaInfo)
Core.UpdateTrackData();
var tracks = Core.MediaTracks.Where(track => track.Type == "s").ToArray(); var tracks = Core.MediaTracks.Where(track => track.Type == "s").ToArray();
if (App.MediaInfo)
{
var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "s"); var externalTracks = Core.GetExternalTracks().Where(track => track.Type == "s");
if (externalTracks.Count() > 0) if (externalTracks.Count() > 0)
tracks = tracks.Concat(externalTracks).ToArray(); tracks = tracks.Concat(externalTracks).ToArray();
}
if (tracks.Length < 1) if (tracks.Length < 1)
{ {

View File

@@ -227,6 +227,9 @@ namespace mpvnet
void UpdateMenu() void UpdateMenu()
{ {
if (!App.MediaInfo)
Core.UpdateTrackData();
lock (Core.MediaTracks) lock (Core.MediaTracks)
{ {
var trackMenuItem = FindMenuItem("Track"); var trackMenuItem = FindMenuItem("Track");
@@ -240,6 +243,8 @@ namespace mpvnet
var vidTracks = Core.MediaTracks.Where(track => track.Type == "v"); var vidTracks = Core.MediaTracks.Where(track => track.Type == "v");
var ediTracks = Core.MediaTracks.Where(track => track.Type == "e"); var ediTracks = Core.MediaTracks.Where(track => track.Type == "e");
if (App.MediaInfo)
{
var externalTracks = Core.GetExternalTracks(); var externalTracks = Core.GetExternalTracks();
if (externalTracks.Count > 0) if (externalTracks.Count > 0)
@@ -253,6 +258,7 @@ namespace mpvnet
if (exSubTracks.Count() > 0) if (exSubTracks.Count() > 0)
subTracks = subTracks.Concat(exSubTracks); subTracks = subTracks.Concat(exSubTracks);
} }
}
foreach (MediaTrack track in vidTracks) foreach (MediaTrack track in vidTracks)
{ {

View File

@@ -541,8 +541,8 @@ namespace mpvnet
VideoSizeAutoResetEvent.Set(); VideoSizeAutoResetEvent.Set();
} }
App.RunTask(new Action(() => ReadMetaData())); if (App.MediaInfo)
//Debug.WriteLine("################# " + GetPropertyString("media-title")); App.RunTask(new Action(() => UpdateTrackDataUsingMediaInfo()));
App.RunTask(new Action(() => { App.RunTask(new Action(() => {
if (path.Contains("://")) if (path.Contains("://"))
@@ -1412,7 +1412,7 @@ namespace mpvnet
Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx());
Add(track, GetPropertyInt($"track-list/{i}/audio-channels") + " channels"); Add(track, GetPropertyInt($"track-list/{i}/audio-channels") + " channels");
Add(track, "External"); Add(track, "External");
Add(track, $"{title}"); Add(track, title);
track.Text = "A: " + track.Text.Trim(' ', ','); track.Text = "A: " + track.Text.Trim(' ', ',');
track.Type = "a"; track.Type = "a";
track.ID = GetPropertyInt($"track-list/{i}/id"); track.ID = GetPropertyInt($"track-list/{i}/id");
@@ -1424,7 +1424,7 @@ namespace mpvnet
Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang")));
Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx());
Add(track, "External"); Add(track, "External");
Add(track, $"{title}"); Add(track, title);
track.Text = "S: " + track.Text.Trim(' ', ','); track.Text = "S: " + track.Text.Trim(' ', ',');
track.Type = "s"; track.Type = "s";
track.ID = GetPropertyInt($"track-list/{i}/id"); track.ID = GetPropertyInt($"track-list/{i}/id");
@@ -1436,18 +1436,7 @@ namespace mpvnet
return tracks; return tracks;
} }
void ReadMetaData() public void UpdateTrackData()
{
if (App.MediaInfo)
ReadMetaDataUsingMediaInfo();
else
{
ReadMetaDataUsingMediaInfo();
ReadMetaDataUsingMpv();
}
}
void ReadMetaDataUsingMpv()
{ {
string path = GetPropertyString("path"); string path = GetPropertyString("path");
@@ -1457,14 +1446,17 @@ namespace mpvnet
lock (MediaTracks) lock (MediaTracks)
{ {
//MediaTracks.Clear(); MediaTracks.Clear();
int trackListCount = GetPropertyInt("track-list/count"); int trackListCount = GetPropertyInt("track-list/count");
for (int i = 0; i < trackListCount; i++) for (int i = 0; i < trackListCount; i++)
{ {
string type = GetPropertyString($"track-list/{i}/type"); string type = GetPropertyString($"track-list/{i}/type");
string test = GetPropertyString($"track-list"); string filename = GetPropertyString($"filename/no-ext");
string title = GetPropertyString($"track-list/{i}/title").Replace(filename, "");
title = Regex.Replace(title, @"^[\._\-]", "").Replace("_", "__");
if (type == "video") if (type == "video")
{ {
@@ -1472,7 +1464,7 @@ namespace mpvnet
Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); 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-w") + "x" + GetPropertyString($"track-list/{i}/demux-h"));
Add(track, GetPropertyString($"track-list/{i}/demux-fps").Replace(".000000", "") + " FPS"); Add(track, GetPropertyString($"track-list/{i}/demux-fps").Replace(".000000", "") + " FPS");
Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : ""); Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : null);
track.Text = "V: " + track.Text.Trim(' ', ','); track.Text = "V: " + track.Text.Trim(' ', ',');
track.Type = "v"; track.Type = "v";
track.ID = GetPropertyInt($"track-list/{i}/id"); track.ID = GetPropertyInt($"track-list/{i}/id");
@@ -1480,25 +1472,15 @@ namespace mpvnet
} }
else if (type == "audio") 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(); MediaTrack track = new MediaTrack();
Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang")));
Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx()); Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx());
Add(track, GetPropertyInt($"track-list/{i}/audio-channels") + " channels"); Add(track, GetPropertyInt($"track-list/{i}/audio-channels") + " channels");
Add(track, GetPropertyInt($"track-list/{i}/demux-samplerate") + " Hz"); Add(track, GetPropertyInt($"track-list/{i}/demux-samplerate") + " Hz");
Add(track, GetPropertyBool($"track-list/{i}/forced") ? "Forced" : ""); Add(track, GetPropertyBool($"track-list/{i}/forced") ? "Forced" : null);
Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : ""); Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : null);
Add(track, GetPropertyBool($"track-list/{i}/external") ? "External" : null);
Add(track, title);
track.Text = "A: " + track.Text.Trim(' ', ','); track.Text = "A: " + track.Text.Trim(' ', ',');
track.Type = "a"; track.Type = "a";
track.ID = GetPropertyInt($"track-list/{i}/id"); track.ID = GetPropertyInt($"track-list/{i}/id");
@@ -1506,108 +1488,54 @@ namespace mpvnet
} }
else if (type == "sub") else if (type == "sub")
{ {
//MediaTrack track = new MediaTrack(); MediaTrack track = new MediaTrack();
//Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang"))); Add(track, GetLanguage(GetPropertyString($"track-list/{i}/lang")));
//track.Text = "S: " + track.Text.Trim(' ', ','); Add(track, GetPropertyString($"track-list/{i}/codec").ToUpperEx());
//track.Type = "s"; Add(track, GetPropertyBool($"track-list/{i}/forced") ? "Forced" : null);
//track.ID = GetPropertyInt($"track-list/{i}/id"); Add(track, GetPropertyBool($"track-list/{i}/default") ? "Default" : null);
//MediaTracks.Add(track); Add(track, GetPropertyBool($"track-list/{i}/external") ? "External" : null);
Add(track, title);
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 editionCount = GetPropertyInt("edition-list/count");
//{
// int videoCount = mi.GetCount(MediaInfoStreamKind.Video);
// for (int i = 0; i < videoCount; i++) for (int i = 0; i < editionCount; i++)
// { {
// MediaTrack track = new MediaTrack(); string title = GetPropertyString($"edition-list/{i}/title");
// Add(track, mi.GetVideo(i, "Format")); if (string.IsNullOrEmpty(title))
// Add(track, mi.GetVideo(i, "Format_Profile")); title = "Edition " + i;
// Add(track, mi.GetVideo(i, "Width") + "x" + mi.GetVideo(i, "Height")); MediaTrack track = new MediaTrack();
// Add(track, mi.GetVideo(i, "FrameRate") + " FPS"); track.Text = "E: " + title;
// Add(track, mi.GetVideo(i, "Language/String")); track.Type = "e";
// Add(track, mi.GetVideo(i, "Forced") == "Yes" ? "Forced" : ""); track.ID = i;
// Add(track, mi.GetVideo(i, "Default") == "Yes" ? "Default" : ""); MediaTracks.Add(track);
// 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) lock (Chapters)
//{ {
// Chapters.Clear(); Chapters.Clear();
// int count = GetPropertyInt("chapter-list/count"); int count = GetPropertyInt("chapter-list/count");
// for (int x = 0; x < count; x++) for (int x = 0; x < count; x++)
// { {
// string text = GetPropertyString($"chapter-list/{x}/title"); string text = GetPropertyString($"chapter-list/{x}/title");
// double time = GetPropertyDouble($"chapter-list/{x}/time"); double time = GetPropertyDouble($"chapter-list/{x}/time");
// if (string.IsNullOrEmpty(text)) if (string.IsNullOrEmpty(text))
// text = "Chapter " + (x + 1); text = "Chapter " + (x + 1);
// Chapters.Add(new KeyValuePair<string, double>(text, time)); Chapters.Add(new KeyValuePair<string, double>(text, time));
// } }
//} }
} }
void ReadMetaDataUsingMediaInfo() public void UpdateTrackDataUsingMediaInfo()
{ {
string path = GetPropertyString("path"); string path = GetPropertyString("path");