splitter/Splitter-UI/Services/AutoDecisionService.cs

34 lines
1.1 KiB
C#

using NcnnDotNet.Layers;
using OpenCvSharp;
using splitter.tui;
namespace Splitter_UI.Services;
public sealed class AutoDecisionService(IThumbnailService _thumbnails, IFileProbeService _fileProbe, ILogger _log) : IAutoDecisionService
{
public void ApplyAutoDecisions(JobViewModel job)
{
Task.Run(() => Detect(job));
}
private async Task Detect(JobViewModel job)
{
try
{
job.Probe = await _fileProbe.ProbeAsync(job.InputFile);
job.Thumbnail = await _thumbnails.CreateThumbnailAsync(job.InputFile, job.Probe, rotateDegree: job.Rotate);
var sampler = new VideoRotationSampler(null);
job.Rotate = await sampler.DetectRotationAsync(job.InputFile, job.Probe.Duration);
job.SuggestedAction = job.Rotate == 0 ? "crop" : "rotate";
if (job.SuggestedAction == "crop")
job.Detect = "body";
}
catch (Exception ex)
{
_log.LogError($"Error creating thumbnail for {Path.GetFileName(job.InputFile)}: {ex.Message}");
}
}
}