Browse Source

feat: use configured scaling behavior with next engine (#2880)

* update dependencies

* feat: respect desired scaling behavior using next engine
pull/2872/head
Jason Dove 3 weeks ago committed by GitHub
parent
commit
7869f16573
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      ErsatzTV.Application/Streaming/Commands/StartFFmpegNextSessionHandler.cs
  2. 2
      ErsatzTV.Core.Tests/ErsatzTV.Core.Tests.csproj
  3. 52
      ErsatzTV.Core/Next/Config/ChannelConfig.cs
  4. 2
      ErsatzTV.FFmpeg.Tests/ErsatzTV.FFmpeg.Tests.csproj
  5. 2
      ErsatzTV.FFmpeg/ErsatzTV.FFmpeg.csproj
  6. 4
      ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj
  7. 4
      ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj
  8. 4
      ErsatzTV.Tests/ErsatzTV.Tests.csproj
  9. 2
      ErsatzTV/ErsatzTV.csproj

6
ErsatzTV.Application/Streaming/Commands/StartFFmpegNextSessionHandler.cs

@ -348,6 +348,12 @@ public class StartFFmpegNextSessionHandler(
Width = ffmpegProfile.Resolution.Width, Width = ffmpegProfile.Resolution.Width,
BitrateKbps = ffmpegProfile.VideoBitrate, BitrateKbps = ffmpegProfile.VideoBitrate,
BufferKbps = ffmpegProfile.VideoBufferSize, BufferKbps = ffmpegProfile.VideoBufferSize,
ScalingMode = ffmpegProfile.ScalingBehavior switch
{
ScalingBehavior.Stretch => ScalingMode.Stretch,
ScalingBehavior.Crop => ScalingMode.Crop,
_ => ScalingMode.ScaleAndPad
},
// TODO: NEXT: more tonemap algorithms // TODO: NEXT: more tonemap algorithms
TonemapAlgorithm = "linear", TonemapAlgorithm = "linear",
VaapiDevice = ffmpegProfile.VaapiDevice, VaapiDevice = ffmpegProfile.VaapiDevice,

2
ErsatzTV.Core.Tests/ErsatzTV.Core.Tests.csproj

@ -16,7 +16,7 @@
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.7" /> <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="10.0.7" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageReference Include="NSubstitute" Version="5.3.0" /> <PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.5.1" /> <PackageReference Include="NUnit" Version="4.6.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" /> <PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
<PackageReference Include="Serilog" Version="4.3.1" /> <PackageReference Include="Serilog" Version="4.3.1" />
<PackageReference Include="Serilog.Extensions.Logging" Version="10.0.0" /> <PackageReference Include="Serilog.Extensions.Logging" Version="10.0.0" />

52
ErsatzTV.Core/Next/Config/ChannelConfig.cs

@ -119,6 +119,9 @@ namespace ErsatzTV.Core.Next.Config
[JsonProperty("height")] [JsonProperty("height")]
public long? Height { get; set; } public long? Height { get; set; }
[JsonProperty("scaling_mode", NullValueHandling = NullValueHandling.Ignore)]
public ScalingMode? ScalingMode { get; set; }
[JsonProperty("tonemap_algorithm")] [JsonProperty("tonemap_algorithm")]
public string TonemapAlgorithm { get; set; } public string TonemapAlgorithm { get; set; }
@ -152,6 +155,8 @@ namespace ErsatzTV.Core.Next.Config
public enum VideoFormat { H264, Hevc }; public enum VideoFormat { H264, Hevc };
public enum ScalingMode { Crop, ScaleAndPad, Stretch };
public enum VaapiDriverEnum { I965, Ihd, Radeonsi }; public enum VaapiDriverEnum { I965, Ihd, Radeonsi };
public partial class ChannelConfig public partial class ChannelConfig
@ -176,6 +181,7 @@ namespace ErsatzTV.Core.Next.Config
ModeConverter.Singleton, ModeConverter.Singleton,
AccelEnumConverter.Singleton, AccelEnumConverter.Singleton,
VideoFormatConverter.Singleton, VideoFormatConverter.Singleton,
ScalingModeConverter.Singleton,
VaapiDriverEnumConverter.Singleton, VaapiDriverEnumConverter.Singleton,
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal } new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
}, },
@ -361,6 +367,52 @@ namespace ErsatzTV.Core.Next.Config
public static readonly VideoFormatConverter Singleton = new VideoFormatConverter(); public static readonly VideoFormatConverter Singleton = new VideoFormatConverter();
} }
internal class ScalingModeConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(ScalingMode) || t == typeof(ScalingMode?);
public override object ReadJson(JsonReader reader, Type t, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null) return null;
var value = serializer.Deserialize<string>(reader);
switch (value)
{
case "crop":
return ScalingMode.Crop;
case "scale_and_pad":
return ScalingMode.ScaleAndPad;
case "stretch":
return ScalingMode.Stretch;
}
throw new Exception("Cannot unmarshal type ScalingMode");
}
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer)
{
if (untypedValue == null)
{
serializer.Serialize(writer, null);
return;
}
var value = (ScalingMode)untypedValue;
switch (value)
{
case ScalingMode.Crop:
serializer.Serialize(writer, "crop");
return;
case ScalingMode.ScaleAndPad:
serializer.Serialize(writer, "scale_and_pad");
return;
case ScalingMode.Stretch:
serializer.Serialize(writer, "stretch");
return;
}
throw new Exception("Cannot marshal type ScalingMode");
}
public static readonly ScalingModeConverter Singleton = new ScalingModeConverter();
}
internal class VaapiDriverEnumConverter : JsonConverter internal class VaapiDriverEnumConverter : JsonConverter
{ {
public override bool CanConvert(Type t) => t == typeof(VaapiDriverEnum) || t == typeof(VaapiDriverEnum?); public override bool CanConvert(Type t) => t == typeof(VaapiDriverEnum) || t == typeof(VaapiDriverEnum?);

2
ErsatzTV.FFmpeg.Tests/ErsatzTV.FFmpeg.Tests.csproj

@ -12,7 +12,7 @@
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.7" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.7" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageReference Include="NSubstitute" Version="5.3.0" /> <PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.5.1" /> <PackageReference Include="NUnit" Version="4.6.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" /> <PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
<PackageReference Include="Shouldly" Version="4.3.0" /> <PackageReference Include="Shouldly" Version="4.3.0" />
<PackageReference Include="coverlet.collector" Version="10.0.0"> <PackageReference Include="coverlet.collector" Version="10.0.0">

2
ErsatzTV.FFmpeg/ErsatzTV.FFmpeg.csproj

@ -14,7 +14,7 @@
<PackageReference Include="CliWrap" Version="3.10.1" /> <PackageReference Include="CliWrap" Version="3.10.1" />
<PackageReference Include="Hardware.Info" Version="101.1.1.1" /> <PackageReference Include="Hardware.Info" Version="101.1.1.1" />
<PackageReference Include="LanguageExt.Core" Version="4.4.9" /> <PackageReference Include="LanguageExt.Core" Version="4.4.9" />
<PackageReference Include="Lennox.NvEncSharp" Version="2.0.0" /> <PackageReference Include="Lennox.NvEncSharp" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="10.0.7" /> <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="10.0.7" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.7" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.7" />
</ItemGroup> </ItemGroup>

4
ErsatzTV.Infrastructure.Tests/ErsatzTV.Infrastructure.Tests.csproj

@ -11,9 +11,9 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageReference Include="NSubstitute" Version="5.3.0" /> <PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.5.1" /> <PackageReference Include="NUnit" Version="4.6.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" /> <PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.12.0"> <PackageReference Include="NUnit.Analyzers" Version="4.13.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
</PackageReference> </PackageReference>

4
ErsatzTV.Scanner.Tests/ErsatzTV.Scanner.Tests.csproj

@ -12,9 +12,9 @@
<PackageReference Include="LanguageExt.Core" Version="4.4.9" /> <PackageReference Include="LanguageExt.Core" Version="4.4.9" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.5.1" />
<PackageReference Include="NSubstitute" Version="5.3.0" /> <PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="NUnit" Version="4.5.1" /> <PackageReference Include="NUnit" Version="4.6.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" /> <PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.12.0"> <PackageReference Include="NUnit.Analyzers" Version="4.13.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
</PackageReference> </PackageReference>

4
ErsatzTV.Tests/ErsatzTV.Tests.csproj

@ -11,8 +11,8 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="NUnit" Version="4.5.1" /> <PackageReference Include="NUnit" Version="4.6.0" />
<PackageReference Include="NUnit.Analyzers" Version="4.12.0"> <PackageReference Include="NUnit.Analyzers" Version="4.13.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>

2
ErsatzTV/ErsatzTV.csproj

@ -55,7 +55,7 @@
<PackageReference Include="MudBlazor" Version="9.4.0" /> <PackageReference Include="MudBlazor" Version="9.4.0" />
<PackageReference Include="NaturalSort.Extension" Version="4.4.1" /> <PackageReference Include="NaturalSort.Extension" Version="4.4.1" />
<PackageReference Include="Refit.HttpClientFactory" Version="10.1.6" /> <PackageReference Include="Refit.HttpClientFactory" Version="10.1.6" />
<PackageReference Include="Scalar.AspNetCore" Version="2.14.6" /> <PackageReference Include="Scalar.AspNetCore" Version="2.14.9" />
<PackageReference Include="Serilog" Version="4.3.1" /> <PackageReference Include="Serilog" Version="4.3.1" />
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" /> <PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="10.0.0" /> <PackageReference Include="Serilog.Settings.Configuration" Version="10.0.0" />

Loading…
Cancel
Save