void encoding() { while (!quitEncodeThread_) { if (framesToEncode_.Count >= 1) { var frame = framesToEncode_.Dequeue(); int res = NativeRecorder.EncodeDesktopFrame(frame.Data, frame.TimeMilliSeconds * 0.001f); if (res == (int)APIResult.Fatal) { Debug.LogErrorFormat("Fatal error occurred when encoding"); break; } else if (res != 0) { Debug.LogErrorFormat("Failed to encode"); continue; } } else { System.Threading.Thread.Sleep(100); // sleep 100ms if there is no frame to encode. } } // flush while (framesToEncode_.Count >= 1) { var frame = framesToEncode_.Dequeue(); int res = NativeRecorder.EncodeDesktopFrame(frame.Data, frame.TimeMilliSeconds * 0.001f); if (res == (int)APIResult.Fatal) { Debug.LogErrorFormat("Fatal error occurred when encoding (Flush)"); break; } else if (res != (int)APIResult.OK) { Debug.LogErrorFormat("Failed to encode (Flush)"); continue; } } }