diff --git a/Limelight/Stream/Connection.h b/Limelight/Stream/Connection.h index 268b7fc..dc15541 100644 --- a/Limelight/Stream/Connection.h +++ b/Limelight/Stream/Connection.h @@ -17,6 +17,10 @@ typedef struct { int totalFrames; int receivedFrames; int networkDroppedFrames; + int totalHostProcessingLatency; + int framesWithHostProcessingLatency; + int maxHostProcessingLatency; + int minHostProcessingLatency; } video_stats_t; @interface Connection : NSOperation diff --git a/Limelight/Stream/Connection.m b/Limelight/Stream/Connection.m index 7e69c30..c40119e 100644 --- a/Limelight/Stream/Connection.m +++ b/Limelight/Stream/Connection.m @@ -143,6 +143,19 @@ int DrSubmitDecodeUnit(PDECODE_UNIT decodeUnit) lastFrameNumber = decodeUnit->frameNumber; } + if (decodeUnit->frameHostProcessingLatency != 0) { + if (currentVideoStats.minHostProcessingLatency == 0 || decodeUnit->frameHostProcessingLatency < currentVideoStats.minHostProcessingLatency) { + currentVideoStats.minHostProcessingLatency = decodeUnit->frameHostProcessingLatency; + } + + if (decodeUnit->frameHostProcessingLatency > currentVideoStats.maxHostProcessingLatency) { + currentVideoStats.maxHostProcessingLatency = decodeUnit->frameHostProcessingLatency; + } + + currentVideoStats.framesWithHostProcessingLatency++; + currentVideoStats.totalHostProcessingLatency += decodeUnit->frameHostProcessingLatency; + } + currentVideoStats.receivedFrames++; currentVideoStats.totalFrames++; diff --git a/Limelight/Stream/StreamManager.m b/Limelight/Stream/StreamManager.m index d60d3fc..e776fee 100644 --- a/Limelight/Stream/StreamManager.m +++ b/Limelight/Stream/StreamManager.m @@ -167,14 +167,26 @@ latencyString = @"N/A"; } + NSString* hostProcessingString; + if (stats.framesWithHostProcessingLatency != 0) { + hostProcessingString = [NSString stringWithFormat:@"\nHost processing latency min/max/avg: %.1f/%.1f/%.1f ms", + stats.minHostProcessingLatency / 10.f, + stats.maxHostProcessingLatency / 10.f, + (float)stats.totalHostProcessingLatency / stats.framesWithHostProcessingLatency / 10.f]; + } + else { + hostProcessingString = @""; + } + float interval = stats.endTime - stats.startTime; - return [NSString stringWithFormat:@"Video stream: %dx%d %.2f FPS (Codec: %@)\nFrames dropped by your network connection: %.2f%%\nAverage network latency: %@", + return [NSString stringWithFormat:@"Video stream: %dx%d %.2f FPS (Codec: %@)\nFrames dropped by your network connection: %.2f%%\nAverage network latency: %@%@", _config.width, _config.height, stats.totalFrames / interval, [_connection getActiveCodecName], stats.networkDroppedFrames / interval, - latencyString]; + latencyString, + hostProcessingString]; } @end