diff --git a/CHANGELOG.md b/CHANGELOG.md index cbd1f9e04..d2f00b9fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Optimize anamorphic pipelines by only performing one scale instead of two - Optimize tonemapping pipelines by downscaling before tonemapping when possible - Optimize QSV pipelines by merging consecutive vpp_qsv filters as much as possible (e.g. tonemap, scale and format using a single filter) + - Show error messages over black/silence fallback streams by default + - To disable, create the file `next/channel-config-overlays/default.json` in ETV's config folder with the contents `{"fallback":{"show_error":false}}` ### Fixed - Next engine: diff --git a/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs b/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs index 7a4a15001..3a54fceb6 100644 --- a/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs +++ b/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs @@ -159,6 +159,10 @@ public class ChannelConfigConverter(IConfigElementRepository configElementReposi Audio = audioNormalization, Video = videoNormalization, Subtitle = subtitleNormalization + }, + Fallback = new Fallback + { + ShowError = true } }; } diff --git a/ErsatzTV.Core/Next/Config/ChannelConfig.cs b/ErsatzTV.Core/Next/Config/ChannelConfig.cs index ee9792d19..ed67ba790 100644 --- a/ErsatzTV.Core/Next/Config/ChannelConfig.cs +++ b/ErsatzTV.Core/Next/Config/ChannelConfig.cs @@ -22,6 +22,10 @@ namespace ErsatzTV.Core.Next.Config public partial class ChannelConfig { + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + [JsonPropertyName("fallback")] + public Fallback? Fallback { get; set; } + [JsonPropertyName("ffmpeg")] public Ffmpeg Ffmpeg { get; set; } @@ -32,6 +36,21 @@ namespace ErsatzTV.Core.Next.Config public Playout Playout { get; set; } } + /// + /// Controls the content that replaces scheduled content when there is nothing to play + /// (a gap in the playout) or when the scheduled item fails + /// + public partial class Fallback + { + /// + /// Burn the reason for the fallback into the fallback video; this is always burned, + /// regardless of the normalization subtitle mode + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + [JsonPropertyName("show_error")] + public bool? ShowError { get; set; } + } + public partial class Ffmpeg { [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]