feature: Opus format resolution + sidecar lookup contract (Phase 18.2)
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
using DeepDrftContent.FileDatabase.Models;
|
||||
using DeepDrftModels.Enums;
|
||||
|
||||
namespace DeepDrftContent.Processors.Opus;
|
||||
|
||||
/// <summary>
|
||||
/// The outcome of resolving a track + requested <see cref="AudioFormat"/> to a concrete artifact
|
||||
/// (Phase 18.2). Carries the bytes, the content-type that matches <em>what was actually returned</em>,
|
||||
/// and the format actually served — which may differ from the requested one when the C2 fallback fires
|
||||
/// (Opus requested, no Opus artifact → the lossless artifact + its content-type). The delivery layer
|
||||
/// (18.3) sets the response <c>Content-Type</c> from <see cref="ContentType"/> so the eventual decoder
|
||||
/// picks the right decoder for the bytes it receives, not the bytes the listener asked for.
|
||||
/// </summary>
|
||||
/// <param name="Audio">The resolved audio artifact (never null when a resolution succeeds).</param>
|
||||
/// <param name="ContentType">The MIME type of <paramref name="Audio"/> (e.g. <c>audio/ogg</c> for Opus,
|
||||
/// or the source's real MIME for lossless).</param>
|
||||
/// <param name="ResolvedFormat">The format actually returned. Equal to the requested format on a direct
|
||||
/// hit; <see cref="AudioFormat.Lossless"/> when an Opus request fell back.</param>
|
||||
public sealed record ResolvedAudio(AudioBinary Audio, string ContentType, AudioFormat ResolvedFormat)
|
||||
{
|
||||
/// <summary>True when an Opus request was served the lossless artifact because no Opus existed (C2).</summary>
|
||||
public bool DidFallBack(AudioFormat requested) => requested != ResolvedFormat;
|
||||
}
|
||||
Reference in New Issue
Block a user