Generic telemetry
This commit is contained in:
@@ -27,7 +27,7 @@ struct RuntimeStateJsonInput
|
||||
inline void WriteVideoIoStatusJson(JsonWriter& writer, const RuntimeStateJsonInput& input)
|
||||
{
|
||||
writer.BeginObject();
|
||||
writer.KeyString("backend", "decklink");
|
||||
writer.KeyString("backend", input.config.videoOutputBackend);
|
||||
writer.KeyNull("modelName");
|
||||
writer.KeyBool("supportsInternalKeying", false);
|
||||
writer.KeyBool("supportsExternalKeying", false);
|
||||
@@ -38,6 +38,47 @@ inline void WriteVideoIoStatusJson(JsonWriter& writer, const RuntimeStateJsonInp
|
||||
writer.EndObject();
|
||||
}
|
||||
|
||||
inline void WriteVideoOutputBackendMetricsJson(JsonWriter& writer, const RuntimeStateJsonInput& input)
|
||||
{
|
||||
writer.BeginObject();
|
||||
if (input.config.videoOutputBackend == "decklink")
|
||||
{
|
||||
writer.KeyBool("bufferedAvailable", input.telemetry.deckLinkBufferedAvailable);
|
||||
writer.Key("buffered");
|
||||
if (input.telemetry.deckLinkBufferedAvailable)
|
||||
writer.UInt(input.telemetry.deckLinkBuffered);
|
||||
else
|
||||
writer.Null();
|
||||
writer.KeyDouble("scheduleCallMs", input.telemetry.deckLinkScheduleCallMilliseconds);
|
||||
writer.KeyBool("scheduleLeadAvailable", input.telemetry.deckLinkScheduleLeadAvailable);
|
||||
writer.Key("scheduleLeadFrames");
|
||||
if (input.telemetry.deckLinkScheduleLeadAvailable)
|
||||
writer.Int(input.telemetry.deckLinkScheduleLeadFrames);
|
||||
else
|
||||
writer.Null();
|
||||
writer.KeyUInt("playbackFrameIndex", input.telemetry.deckLinkPlaybackFrameIndex);
|
||||
writer.KeyUInt("nextScheduleFrameIndex", input.telemetry.deckLinkNextScheduleFrameIndex);
|
||||
writer.KeyInt("playbackStreamTime", input.telemetry.deckLinkPlaybackStreamTime);
|
||||
writer.KeyUInt("scheduleRealignments", input.telemetry.deckLinkScheduleRealignments);
|
||||
}
|
||||
writer.EndObject();
|
||||
}
|
||||
|
||||
inline void WriteVideoOutputTelemetryJson(JsonWriter& writer, const RuntimeStateJsonInput& input)
|
||||
{
|
||||
writer.BeginObject();
|
||||
writer.KeyBool("enabled", input.videoOutputEnabled);
|
||||
writer.KeyString("backend", input.config.videoOutputBackend);
|
||||
writer.KeyString("statusMessage", input.videoOutputStatus);
|
||||
writer.KeyUInt("scheduleFailures", input.telemetry.scheduleFailures);
|
||||
writer.KeyUInt("completions", input.telemetry.completions);
|
||||
writer.KeyUInt("late", input.telemetry.displayedLate);
|
||||
writer.KeyUInt("dropped", input.telemetry.dropped);
|
||||
writer.Key("backendMetrics");
|
||||
WriteVideoOutputBackendMetricsJson(writer, input);
|
||||
writer.EndObject();
|
||||
}
|
||||
|
||||
inline void OutputDimensions(const RuntimeStateJsonInput& input, unsigned& width, unsigned& height)
|
||||
{
|
||||
VideoFormatDimensions(input.config.outputVideoFormat, width, height);
|
||||
@@ -277,6 +318,8 @@ inline std::string RuntimeStateToJson(const RuntimeStateJsonInput& input)
|
||||
writer.KeyString("modeName", input.config.outputVideoFormat + " output-only");
|
||||
writer.EndObject();
|
||||
|
||||
writer.Key("videoOutput");
|
||||
WriteVideoOutputTelemetryJson(writer, input);
|
||||
writer.Key("decklink");
|
||||
WriteVideoIoStatusJson(writer, input);
|
||||
writer.Key("videoIO");
|
||||
|
||||
Reference in New Issue
Block a user