2026-05-07 11:26:54 -04:00
|
|
|
using TeamsISO.Engine.Domain;
|
|
|
|
|
|
|
|
|
|
namespace TeamsISO.Engine.Pipeline;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Per-pipeline configuration — identifies the participant, the source it captures,
|
|
|
|
|
/// the output it emits, and the global processing settings to apply.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public sealed record IsoPipelineConfig(
|
|
|
|
|
Guid ParticipantId,
|
|
|
|
|
string SourceName,
|
|
|
|
|
string OutputName,
|
|
|
|
|
FrameProcessingSettings Settings)
|
|
|
|
|
{
|
|
|
|
|
/// <summary>Default no-signal threshold per spec §4.</summary>
|
|
|
|
|
public TimeSpan SlateThreshold { get; init; } = TimeSpan.FromSeconds(2.5);
|
|
|
|
|
|
|
|
|
|
/// <summary>Bounded raw-frame channel capacity (drop-oldest backpressure).</summary>
|
|
|
|
|
public int RawChannelCapacity { get; init; } = 4;
|
|
|
|
|
|
|
|
|
|
/// <summary>Bounded processed-frame channel capacity.</summary>
|
|
|
|
|
public int ProcessedChannelCapacity { get; init; } = 2;
|
2026-05-07 23:48:49 -04:00
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// NDI groups (comma-separated) the output sender broadcasts on. <c>null</c> means
|
|
|
|
|
/// "use the NDI default" (Public). Set per pipeline so the controller can drive it
|
|
|
|
|
/// from the global NdiGroupSettings without changing this record's identity contract.
|
|
|
|
|
/// </summary>
|
|
|
|
|
public string? OutputGroups { get; init; }
|
2026-05-07 11:26:54 -04:00
|
|
|
}
|