]> git.sesse.net Git - nageru/blobdiff - mixer.cpp
Release Nageru 1.2.1.
[nageru] / mixer.cpp
index 1f1035bf84065ef9c7ccca19afb8a5a51a1075e0..42d854817b57c10c7dce162c9b149cceb62a8ed3 100644 (file)
--- a/mixer.cpp
+++ b/mixer.cpp
@@ -543,8 +543,10 @@ void Mixer::bm_frame(unsigned card_index, uint16_t timecode,
                check_error();
                glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo);
                check_error();
-               glFlushMappedBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, video_frame.size);
-               check_error();
+               if (global_flags.flush_pbos) {
+                       glFlushMappedBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, video_frame.size);
+                       check_error();
+               }
 
                glBindTexture(GL_TEXTURE_2D, userdata->tex_cbcr[field]);
                check_error();
@@ -561,6 +563,8 @@ void Mixer::bm_frame(unsigned card_index, uint16_t timecode,
                RefCountedGLsync fence(GL_SYNC_GPU_COMMANDS_COMPLETE, /*flags=*/0);
                check_error();
                assert(fence.get() != nullptr);
+               glFlush();  // Make sure the main thread doesn't have to wait until we push out enough frames to make a new command buffer.
+               check_error();
 
                if (field == 1) {
                        // Don't upload the second field as fast as we can; wait until
@@ -793,11 +797,8 @@ void Mixer::render_one_frame()
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 
-       RefCountedGLsync fence(GL_SYNC_GPU_COMMANDS_COMPLETE, /*flags=*/0);
-       check_error();
-
        const int64_t av_delay = TIMEBASE / 10;  // Corresponds to the fixed delay in resampling_queue.h. TODO: Make less hard-coded.
-       h264_encoder->end_frame(fence, pts_int + av_delay, theme_main_chain.input_frames);
+       RefCountedGLsync fence = h264_encoder->end_frame(pts_int + av_delay, theme_main_chain.input_frames);
 
        // The live frame just shows the RGBA texture we just rendered.
        // It owns rgba_tex now.