X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=decklink_output.cpp;h=d68467703103966942ce730076ab25875008ad5b;hb=f932301ce7f23ef4c14dd0d4f52dee662d0b4ef6;hp=544e2edd333017d080b989a859004ba0f04bd6e4;hpb=017c260b96736e797fee120107b85c4c7fc81aa1;p=nageru diff --git a/decklink_output.cpp b/decklink_output.cpp index 544e2ed..d684677 100644 --- a/decklink_output.cpp +++ b/decklink_output.cpp @@ -2,6 +2,7 @@ #include #include // Must be above the Xlib includes. #include +#include #include @@ -262,7 +263,7 @@ void DeckLinkOutput::send_frame(GLuint y_tex, GLuint cbcr_tex, YCbCrLumaCoeffici last_frame_had_mode_mismatch = false; } - unique_ptr frame = move(get_frame()); + unique_ptr frame = get_frame(); if (global_flags.ten_bit_output) { chroma_subsampler->create_v210(y_tex, cbcr_tex, width, height, frame->uyvy_tex); } else { @@ -543,7 +544,15 @@ void DeckLinkOutput::present_thread_func() ++metric_decklink_output_inflight_frames; } - glClientWaitSync(frame->fence.get(), /*flags=*/0, GL_TIMEOUT_IGNORED); + for ( ;; ) { + int err = glClientWaitSync(frame->fence.get(), /*flags=*/0, 0); + if (err == GL_TIMEOUT_EXPIRED) { + // NVIDIA likes to busy-wait; yield instead. + this_thread::sleep_for(milliseconds(1)); + } else { + break; + } + } check_error(); frame->fence.reset();