diff --git a/Limelight/Stream/Connection.m b/Limelight/Stream/Connection.m index 3804543..8b898fd 100644 --- a/Limelight/Stream/Connection.m +++ b/Limelight/Stream/Connection.m @@ -34,6 +34,7 @@ static int lastFrameNumber; static int activeVideoFormat; static video_stats_t currentVideoStats; static video_stats_t lastVideoStats; +static NSLock* videoStatsLock; #define OUTPUT_BUS 0 @@ -73,12 +74,15 @@ void DrCleanup(void) -(BOOL) getVideoStats:(video_stats_t*)stats { // We return lastVideoStats because it is a complete 1 second window + [videoStatsLock lock]; if (lastVideoStats.endTime != 0) { memcpy(stats, &lastVideoStats, sizeof(*stats)); + [videoStatsLock unlock]; return YES; } // No stats yet + [videoStatsLock unlock]; return NO; } @@ -115,7 +119,9 @@ int DrSubmitDecodeUnit(PDECODE_UNIT decodeUnit) else { // Flip stats roughly every second if (now - currentVideoStats.startTime > 1.0f) { + [videoStatsLock lock]; lastVideoStats = currentVideoStats; + [videoStatsLock unlock]; memset(¤tVideoStats, 0, sizeof(currentVideoStats)); currentVideoStats.startTime = now; @@ -386,6 +392,10 @@ void ClConnectionStatusUpdate(int status) initLock = [[NSLock alloc] init]; } + if (videoStatsLock == nil) { + videoStatsLock = [[NSLock alloc] init]; + } + strncpy(_hostString, [config.host cStringUsingEncoding:NSUTF8StringEncoding], sizeof(_hostString)); diff --git a/Limelight/Stream/StreamManager.m b/Limelight/Stream/StreamManager.m index fc06e6b..734d89b 100644 --- a/Limelight/Stream/StreamManager.m +++ b/Limelight/Stream/StreamManager.m @@ -142,12 +142,11 @@ } float interval = stats.endTime - stats.startTime; - return [NSString stringWithFormat:@"Video stream: %dx%d %.2f FPS (Codec: %@)\nIncoming frame rate from network: %.2f FPS\nFrames dropped by your network connection: %.2f%%\n", + return [NSString stringWithFormat:@"Video stream: %dx%d %.2f FPS (Codec: %@)\nFrames dropped by your network connection: %.2f%%\n", _config.width, _config.height, stats.totalFrames / interval, [_connection getActiveCodecName], - stats.receivedFrames / interval, stats.networkDroppedFrames / interval]; }