diff --git a/src/view/view.cpp b/src/view/view.cpp index e4a2bd325..4de2a2692 100644 --- a/src/view/view.cpp +++ b/src/view/view.cpp @@ -48,6 +48,7 @@ struct marshal { struct ncplane* subtitle_plane; int framecount; bool quiet; + ncblitter_e blitter; // can be changed while streaming, must propagate out }; // frame count is in the curry. original time is kept in n's userptr. @@ -70,14 +71,13 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts, struct timespec now; clock_gettime(CLOCK_MONOTONIC, &now); intmax_t ns = timespec_to_ns(&now) - timespec_to_ns(start); - auto blitter = vopts->blitter; - if(blitter == NCBLIT_DEFAULT){ - blitter = ncvisual_default_blitter(notcurses_canutf8(nc), vopts->scaling); - vopts->blitter = blitter; + marsh->blitter = vopts->blitter; + if(marsh->blitter == NCBLIT_DEFAULT){ + marsh->blitter = ncvisual_default_blitter(notcurses_canutf8(nc), vopts->scaling); } if(!marsh->quiet){ stdn->printf(0, NCAlign::Left, "frame %06d\u2026 (%s)", marsh->framecount, - notcurses_str_blitter(blitter)); + notcurses_str_blitter(marsh->blitter)); } char* subtitle = ncvisual_subtitle(ncv); if(subtitle){ @@ -145,7 +145,8 @@ auto perframe(struct ncvisual* ncv, struct ncvisual_options* vopts, if(keyp == NCKey::Resize){ return 0; }else if(keyp >= '0' && keyp <= '8'){ // FIXME eliminate ctrl/alt - vopts->blitter = static_cast(keyp - '0'); + marsh->blitter = static_cast(keyp - '0'); + vopts->blitter = marsh->blitter; continue; } return 1; @@ -280,12 +281,16 @@ auto main(int argc, char** argv) -> int { vopts.blitter = blitter; do{ struct marshal marsh = { - .subtitle_plane = nullptr, .framecount = 0, .quiet = quiet, + .subtitle_plane = nullptr, + .framecount = 0, + .quiet = quiet, + .blitter = vopts.blitter, }; r = ncv->stream(&vopts, timescale, perframe, &marsh); free(stdn->get_userptr()); stdn->set_userptr(nullptr); if(r == 0){ + vopts.blitter = marsh.blitter; if(!loop){ stdn->printf(0, NCAlign::Center, "press any key to advance"); if(!nc.render()){ @@ -300,7 +305,7 @@ auto main(int argc, char** argv) -> int { break; }else if(ie >= '0' && ie <= '8'){ --i; // rerun same input with the new blitter - blitter = static_cast(ie - '0'); + vopts.blitter = static_cast(ie - '0'); }else if(ie == NCKey::Resize){ --i; // rerun with the new size if(!nc.refresh(&dimy, &dimx)){