Resolution dropdown drives the output frame: vertical 9:16 tier with semi-crop preview over the fixed 1920x1080 master

This commit is contained in:
2026-08-06 09:20:32 -07:00
parent 4bf4a13299
commit 8f0ecd3796
7 changed files with 92 additions and 9 deletions
+3 -1
View File
@@ -2,8 +2,10 @@ namespace ytLive.Models;
/// <summary>
/// A resolution tier offered by the bottom-bar dropdown. Bitrate is Mbps.
/// Width/Height is the output frame; the composition master is always
/// 1920x1080 and a non-16:9 tier renders as a centered crop of it.
/// </summary>
public sealed record QualityOption(string Display, int Fps, double Bitrate)
public sealed record QualityOption(string Display, int Fps, double Bitrate, int Width, int Height)
{
/// <summary>Self-documenting label, e.g. "1080p60 (8Mbps)".</summary>
public string Label => $"{Display} ({Bitrate:0.#}Mbps)";
+1 -1
View File
@@ -7,7 +7,7 @@ Plain data types. No logic beyond what a property can carry. See
|------|---------|
| `Scene.cs` | A scene: `Name`, `IsHidden`, `IsChatScene`, `IsEditing`, `Sources` collection |
| `Source.cs` | A source: `SourceType` enum (Image/Webcam/Screen/Background/Text), `X`/`Y`/`Width`/`Height`, `Opacity`, `IsEnabled`, `ImageSource`, asset identity |
| `QualityOption.cs` | Resolution tier record `(Display, Fps, Bitrate)`; `Label` formats as `1080p60 (8Mbps)` — drives the bottom-bar dropdown |
| `QualityOption.cs` | Resolution tier record `(Display, Fps, Bitrate, Width, Height)`; `Label` formats as `1080p60 (8Mbps)` — drives the bottom-bar dropdown and the output-rect math |
| `StreamConfig.cs` | `StreamConfig` (note: `TargetBitrate`/`Resolution` defaults are stale — not yet wired to the dropdown), `StreamHealth` (bitrate/FPS/dropped/duration), `StreamStatus` enum |
| `YouTube.cs` | `YouTubeChannel` and `ChatMessage` (chat feed) |