diff --git a/otherarch/sdcpp/sdtype_adapter.cpp b/otherarch/sdcpp/sdtype_adapter.cpp index 7906186c0..0d00bfd3d 100644 --- a/otherarch/sdcpp/sdtype_adapter.cpp +++ b/otherarch/sdcpp/sdtype_adapter.cpp @@ -173,6 +173,7 @@ struct { int steps = 0; bool preview_requested = false; bool preview_enabled = false; + bool aborted = false; gendata_st gendata; } geninfo; @@ -313,6 +314,9 @@ static void progress_callback(int step, int steps, float time, void* data) const char* phase = "Encoding"; { std::lock_guard lock(geninfo.mux); + if (geninfo.aborted) { + return; + } if (geninfo.gendata.status == 2 && geninfo.preview_requested && !geninfo.preview_enabled) { geninfo.preview_enabled = true; set_preview_images(2); @@ -1064,6 +1068,15 @@ static std::string upscale_image_to_png_base64(upscaler_ctx_t* upscaler_ctx, con } void sdtype_abort_generation() { + { + std::lock_guard lock(geninfo.mux); + geninfo.aborted = true; + geninfo.gendata.status = 0; + geninfo.gendata.preview = ""; + geninfo.preview_requested = false; + geninfo.preview_enabled = false; + } + set_preview_images(0); sd_cancel_generation(sd_ctx, SD_CANCEL_ALL); } @@ -1074,8 +1087,10 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) { std::lock_guard lock(geninfo.mux); geninfo.gendata.status = 0; + geninfo.gendata.preview = ""; geninfo.preview_requested = false; geninfo.preview_enabled = false; + geninfo.aborted = false; } set_preview_images(0); } @@ -1092,6 +1107,7 @@ sd_generation_outputs sdtype_generate(const sd_generation_inputs inputs) geninfo.steps = inputs.sample_steps; geninfo.preview_requested = false; geninfo.preview_enabled = false; + geninfo.aborted = false; geninfo.gendata = {}; geninfo.gendata.status = 1; set_preview_images(1); @@ -1774,6 +1790,9 @@ static void step_callback(int step, int frame_count, sd_image_t* image, bool is_ { step = step < 0 ? -step : step; std::lock_guard lock(geninfo.mux); + if (geninfo.aborted) { + return; + } double step_time = get_time_delta(geninfo.start_time); bool should_encode_preview = false; @@ -1822,7 +1841,7 @@ static void step_callback(int step, int frame_count, sd_image_t* image, bool is_ void sdtype_request_ongoing_generation_preview() { std::lock_guard lock(geninfo.mux); - if (geninfo.gendata.status != 0 && !geninfo.preview_requested) { + if (!geninfo.aborted && geninfo.gendata.status != 0 && !geninfo.preview_requested) { geninfo.preview_requested = true; } }