mirror of
https://github.com/leejet/stable-diffusion.cpp.git
synced 2026-08-10 14:16:50 +00:00
feat: make ffi for same shape (#1635)
This commit is contained in:
parent
f0271076ad
commit
ccda89e09c
@ -802,12 +802,16 @@ int main(int argc, const char* argv[]) {
|
|||||||
SDImageOwner current_image(results[i]);
|
SDImageOwner current_image(results[i]);
|
||||||
results[i] = {0, 0, 0, nullptr};
|
results[i] = {0, 0, 0, nullptr};
|
||||||
for (int u = 0; u < gen_params.upscale_repeats; ++u) {
|
for (int u = 0; u < gen_params.upscale_repeats; ++u) {
|
||||||
SDImageOwner upscaled_image(upscale(upscaler_ctx.get(), current_image.get(), upscale_factor));
|
sd_image_t* upscaled_images = upscale(upscaler_ctx.get(), current_image.get(), upscale_factor);
|
||||||
if (upscaled_image.get().data == nullptr) {
|
if (upscaled_images == nullptr || upscaled_images[0].data == nullptr) {
|
||||||
|
free_sd_images(upscaled_images, 1);
|
||||||
LOG_ERROR("upscale failed");
|
LOG_ERROR("upscale failed");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
current_image = std::move(upscaled_image);
|
sd_image_t upscaled_image = upscaled_images[0];
|
||||||
|
upscaled_images[0] = {0, 0, 0, nullptr};
|
||||||
|
free_sd_images(upscaled_images, 1);
|
||||||
|
current_image.reset(upscaled_image);
|
||||||
}
|
}
|
||||||
results[i] = current_image.release(); // Set the final upscaled image as the result
|
results[i] = current_image.release(); // Set the final upscaled image as the result
|
||||||
}
|
}
|
||||||
|
|||||||
@ -484,7 +484,7 @@ SD_API upscaler_ctx_t* new_upscaler_ctx(const char* esrgan_path,
|
|||||||
const char* params_backend);
|
const char* params_backend);
|
||||||
SD_API void free_upscaler_ctx(upscaler_ctx_t* upscaler_ctx);
|
SD_API void free_upscaler_ctx(upscaler_ctx_t* upscaler_ctx);
|
||||||
|
|
||||||
SD_API sd_image_t upscale(upscaler_ctx_t* upscaler_ctx,
|
SD_API sd_image_t* upscale(upscaler_ctx_t* upscaler_ctx,
|
||||||
sd_image_t input_image,
|
sd_image_t input_image,
|
||||||
uint32_t upscale_factor);
|
uint32_t upscale_factor);
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
#include "model_loader.h"
|
#include "model_loader.h"
|
||||||
#include "stable-diffusion.h"
|
#include "stable-diffusion.h"
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
UpscalerGGML::UpscalerGGML(int n_threads,
|
UpscalerGGML::UpscalerGGML(int n_threads,
|
||||||
@ -198,8 +199,23 @@ upscaler_ctx_t* new_upscaler_ctx(const char* esrgan_path_c_str,
|
|||||||
return upscaler_ctx;
|
return upscaler_ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
sd_image_t upscale(upscaler_ctx_t* upscaler_ctx, sd_image_t input_image, uint32_t upscale_factor) {
|
sd_image_t* upscale(upscaler_ctx_t* upscaler_ctx, sd_image_t input_image, uint32_t upscale_factor) {
|
||||||
return upscaler_ctx->upscaler->upscale(input_image, upscale_factor);
|
if (upscaler_ctx == nullptr || upscaler_ctx->upscaler == nullptr) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
sd_image_t* result_images = (sd_image_t*)calloc(1, sizeof(sd_image_t));
|
||||||
|
if (result_images == nullptr) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
result_images[0] = upscaler_ctx->upscaler->upscale(input_image, upscale_factor);
|
||||||
|
if (result_images[0].data == nullptr) {
|
||||||
|
free(result_images);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result_images;
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_upscale_factor(upscaler_ctx_t* upscaler_ctx) {
|
int get_upscale_factor(upscaler_ctx_t* upscaler_ctx) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user