mirror of https://github.com/ErsatzTV/ErsatzTV.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.5 KiB
68 lines
2.5 KiB
using System.Text.RegularExpressions; |
|
|
|
namespace ErsatzTV.FFmpeg.Capabilities.Vaapi; |
|
|
|
public static class VaapiCapabilityParser |
|
{ |
|
public static List<VaapiProfileEntrypoint> Parse(string output) |
|
{ |
|
var profileEntrypoints = new List<VaapiProfileEntrypoint>(); |
|
|
|
foreach (string line in string.Join("", output).Split("\n")) |
|
{ |
|
const string PROFILE_ENTRYPOINT_PATTERN = @"(VAProfile\w*).*(VAEntrypoint\w*)"; |
|
Match match = Regex.Match(line, PROFILE_ENTRYPOINT_PATTERN); |
|
if (match.Success) |
|
{ |
|
profileEntrypoints.Add( |
|
new VaapiProfileEntrypoint( |
|
match.Groups[1].Value.Trim(), |
|
match.Groups[2].Value.Trim())); |
|
} |
|
} |
|
|
|
return profileEntrypoints; |
|
} |
|
|
|
public static List<VaapiProfileEntrypoint> ParseFull(string output) |
|
{ |
|
var profileEntrypoints = new List<VaapiProfileEntrypoint>(); |
|
var profile = new VaapiProfileEntrypoint(string.Empty, string.Empty); |
|
string[] allLines = string.Join("", output).Split("\n"); |
|
|
|
for (var i = 0; i < allLines.Length; i++) |
|
{ |
|
string line = allLines[i]; |
|
const string PROFILE_ENTRYPOINT_PATTERN = @"(VAProfile\w*).*(VAEntrypoint\w*)"; |
|
const string PROFILE_RATE_CONTROL_PATTERN = @".*VA_RC_(\w*).*"; |
|
Match match = Regex.Match(line, PROFILE_ENTRYPOINT_PATTERN); |
|
if (match.Success) |
|
{ |
|
profile = new VaapiProfileEntrypoint(match.Groups[1].Value.Trim(), match.Groups[2].Value.Trim()); |
|
profileEntrypoints.Add(profile); |
|
} |
|
else |
|
{ |
|
// check for rate control |
|
match = Regex.Match(line, PROFILE_RATE_CONTROL_PATTERN); |
|
if (match.Success) |
|
{ |
|
switch (match.Groups[1].Value.Trim().ToLowerInvariant()) |
|
{ |
|
case "cqp": |
|
profile.AddRateControlMode(RateControlMode.CQP); |
|
break; |
|
case "vbr": |
|
profile.AddRateControlMode(RateControlMode.VBR); |
|
break; |
|
case "cbr": |
|
profile.AddRateControlMode(RateControlMode.CBR); |
|
break; |
|
} |
|
} |
|
} |
|
} |
|
|
|
return profileEntrypoints; |
|
} |
|
}
|
|
|