mtmd: harden preprocessor_granite

This commit is contained in:
Xuan Son Nguyen
2026-08-17 10:48:30 +02:00
parent f9779dda86
commit 079c75500f
+7
View File
@@ -1606,12 +1606,19 @@ mtmd_image_preproc_out mtmd_image_preprocessor_granite::preprocess(const clip_im
const clip_image_size orig_size = img.get_size();
const int tile_size = hparams.image_size;
GGML_ASSERT(tile_size > 0);
// llava-next always encodes an overview plus a grid of tiles, even for small images
const clip_image_size refined_size = select_best_resolution(orig_size, hparams.image_res_candidates);
const int grid_x = refined_size.width / tile_size;
const int grid_y = refined_size.height / tile_size;
// the stacked image is tile_size * (1 + grid_x*grid_y) tall, it must fit in an int
const int64_t stacked_h = (int64_t) tile_size * (1 + (int64_t) grid_x * grid_y);
if (grid_x < 0 || grid_y < 0 || stacked_h > std::numeric_limits<int>::max()) {
throw std::runtime_error("invalid image grid, check image_grid_pinpoints in the mmproj file");
}
clip_image_u8 overview;
img_tool::resize(img, overview, {tile_size, tile_size}, hparams.image_resize_algo_ov,
hparams.image_pad_ov, hparams.image_pad_color_ov);