diff options
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/renderer_libplacebo.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/src/render/renderer_libplacebo.c b/src/render/renderer_libplacebo.c index eeef565..8dde7f5 100644 --- a/src/render/renderer_libplacebo.c +++ b/src/render/renderer_libplacebo.c @@ -204,27 +204,33 @@ static void renderer_lp_render(struct camu_renderer *renderer, struct camu_scree struct camu_screen_video *video; while (scr->videos.size > 0) { - video = &al_array_last(scr->videos); - if (camu_video_buffer_read(video->buf, &mix) && mix.frames) { - target.crop = mix.frames[0]->crop; - target.crop.x1 *= video->view.zoom / video->view.stretch; - target.crop.y1 *= video->view.zoom * video->view.stretch; - target.crop.x0 += video->view.x_offset; - target.crop.y0 += video->view.y_offset; - target.crop.x1 += video->view.x_offset; - target.crop.y1 += video->view.y_offset; - target.rotation = video->view.rotation; - //lr->params.color_adjustment = pl_color_adjustment( - // .saturation = 0.0 - //); - pl_render_image_mix(lr->renderer, &mix, &target, &lr->params); - break; + bool any_eof = false; + al_array_foreach_ptr(scr->videos, i, video) { + if (camu_video_buffer_read(video->buf, &mix) && mix.frames) { + target.crop = mix.frames[0]->crop; + target.crop.x1 *= video->view.zoom / video->view.stretch; + target.crop.y1 *= video->view.zoom * video->view.stretch; + target.crop.x0 += video->view.x_offset; + target.crop.y0 += video->view.y_offset; + target.crop.x1 += video->view.x_offset; + target.crop.y1 += video->view.y_offset; + target.rotation = video->view.rotation; + //lr->params.color_adjustment = pl_color_adjustment( + // .saturation = 0.0 + //); + pl_render_image_mix(lr->renderer, &mix, &target, &lr->params); + } else { + any_eof = true; + } + } + if (any_eof) { #ifdef CAMU_SCREEN_THREADED - } else { if (al_atomic_load(u8)(&scr->queued, AL_ATOMIC_RELAXED)) { camu_screen_run_queue(scr); } #endif + } else { + break; } } |