@@ -380,7 +380,8 @@ __STATIC_INLINE__ void sd_mask_to_tensor(const uint8_t* image_data,
380
380
381
381
__STATIC_INLINE__ void sd_apply_mask (struct ggml_tensor * image_data,
382
382
struct ggml_tensor * mask,
383
- struct ggml_tensor * output) {
383
+ struct ggml_tensor * output,
384
+ float masked_value = 0 .5f ) {
384
385
int64_t width = output->ne [0 ];
385
386
int64_t height = output->ne [1 ];
386
387
int64_t channels = output->ne [2 ];
@@ -389,11 +390,14 @@ __STATIC_INLINE__ void sd_apply_mask(struct ggml_tensor* image_data,
389
390
GGML_ASSERT (output->type == GGML_TYPE_F32);
390
391
for (int ix = 0 ; ix < width; ix++) {
391
392
for (int iy = 0 ; iy < height; iy++) {
392
- float m = ggml_tensor_get_f32 (mask, ix, iy);
393
+ int mx = (int )(ix * rescale_mx);
394
+ int my = (int )(iy * rescale_my);
395
+ float m = ggml_tensor_get_f32 (mask, mx, my);
393
396
m = round (m); // inpaint models need binary masks
394
- ggml_tensor_set_f32 (mask, m, ix, iy );
397
+ ggml_tensor_set_f32 (mask, m, mx, my );
395
398
for (int k = 0 ; k < channels; k++) {
396
- float value = (1 - m) * (ggml_tensor_get_f32 (image_data, ix, iy, k) - .5 ) + .5 ;
399
+ float value = ggml_tensor_get_f32 (image_data, ix, iy, k);
400
+ value = (1 - m) * (value - masked_value) + masked_value;
397
401
ggml_tensor_set_f32 (output, value, ix, iy, k);
398
402
}
399
403
}
0 commit comments