Lines Matching refs:image_info
28 void wprint_image_setup(wprint_image_info_t *image_info, const char *mime_type, in wprint_image_setup() argument
31 if (image_info != NULL) { in wprint_image_setup()
33 memset(image_info, 0, sizeof(wprint_image_info_t)); in wprint_image_setup()
34 image_info->wprint_ifc = wprint_ifc; in wprint_image_setup()
35 image_info->mime_type = mime_type; in wprint_image_setup()
36 image_info->print_resolution = output_resolution; in wprint_image_setup()
37 image_info->pdf_render_resolution = pdf_render_resolution; in wprint_image_setup()
41 status_t wprint_image_get_info(FILE *imgfile, wprint_image_info_t *image_info) { in wprint_image_get_info() argument
42 if (image_info == NULL) return ERROR; in wprint_image_get_info()
44 image_info->imgfile = imgfile; in wprint_image_get_info()
45 image_info->rotation = ROT_0; in wprint_image_get_info()
46 image_info->swath_start = -1; in wprint_image_get_info()
47 image_info->rows_cached = 0; in wprint_image_get_info()
48 image_info->output_cache = NULL; in wprint_image_get_info()
49 image_info->output_swath_start = -1; in wprint_image_get_info()
50 image_info->scaled_sample_size = 1; in wprint_image_get_info()
52 image_info->stripe_height = 0; in wprint_image_get_info()
53 image_info->unscaled_rows = NULL; in wprint_image_get_info()
54 image_info->unscaled_rows_needed = 0; in wprint_image_get_info()
55 image_info->mixed_memory = NULL; in wprint_image_get_info()
56 image_info->mixed_memory_needed = 0; in wprint_image_get_info()
57 image_info->scaled_width = -1; in wprint_image_get_info()
58 image_info->scaled_height = -1; in wprint_image_get_info()
59 image_info->unscaled_start_row = -1; in wprint_image_get_info()
60 image_info->unscaled_end_row = -1; in wprint_image_get_info()
61 image_info->scaling_needed = FALSE; in wprint_image_get_info()
63 image_info->output_padding_top = 0; in wprint_image_get_info()
64 image_info->output_padding_left = 0; in wprint_image_get_info()
65 image_info->output_padding_right = 0; in wprint_image_get_info()
66 image_info->output_padding_bottom = 0; in wprint_image_get_info()
68 const image_decode_ifc_t *decode_ifc = image_info->decode_ifc; in wprint_image_get_info()
71 if (OK == decode_ifc->get_hdr(image_info)) { in wprint_image_get_info()
72 LOGI("wprint_image_get_info(): %s dim = %dx%d", image_info->mime_type, in wprint_image_get_info()
73 image_info->width, image_info->height); in wprint_image_get_info()
76 LOGE("ERROR: get_hdr for %s", image_info->mime_type); in wprint_image_get_info()
80 LOGE("Unsupported image type: %s", image_info->mime_type); in wprint_image_get_info()
84 status_t wprint_image_set_output_properties(wprint_image_info_t *image_info, in wprint_image_set_output_properties() argument
119 image_info->padding_options = (padding_options & PAD_ALL); in wprint_image_set_output_properties()
122 image_info->printable_width = printable_width - (left_margin + right_margin); in wprint_image_set_output_properties()
123 image_info->printable_height = printable_height - (top_margin + bottom_margin); in wprint_image_set_output_properties()
126 image_info->render_flags = render_flags; in wprint_image_set_output_properties()
127 image_info->output_rows = max_decode_stripe; in wprint_image_set_output_properties()
128 image_info->stripe_height = max_decode_stripe; in wprint_image_set_output_properties()
129 image_info->concurrent_stripes = concurrent_stripes; in wprint_image_set_output_properties()
132 if (image_info->unscaled_rows != NULL) { in wprint_image_set_output_properties()
133 free(image_info->unscaled_rows); in wprint_image_set_output_properties()
137 if (image_info->mixed_memory != NULL) { in wprint_image_set_output_properties()
138 free(image_info->mixed_memory); in wprint_image_set_output_properties()
141 image_info->row_offset = 0; in wprint_image_set_output_properties()
142 image_info->col_offset = 0; in wprint_image_set_output_properties()
143 image_info->scaled_sample_size = 1; in wprint_image_set_output_properties()
144 image_info->scaled_width = -1; in wprint_image_set_output_properties()
145 image_info->scaled_height = -1; in wprint_image_set_output_properties()
146 image_info->unscaled_start_row = -1; in wprint_image_set_output_properties()
147 image_info->unscaled_end_row = -1; in wprint_image_set_output_properties()
148 image_info->unscaled_rows = NULL; in wprint_image_set_output_properties()
149 image_info->unscaled_rows_needed = 0; in wprint_image_set_output_properties()
150 image_info->mixed_memory = NULL; in wprint_image_set_output_properties()
151 image_info->mixed_memory_needed = 0; in wprint_image_set_output_properties()
152 image_info->rotation = rotation; in wprint_image_set_output_properties()
158 switch (image_info->rotation) { in wprint_image_set_output_properties()
161 image_info->output_padding_top = bottom_margin; in wprint_image_set_output_properties()
162 image_info->output_padding_left = right_margin; in wprint_image_set_output_properties()
163 image_info->output_padding_right = left_margin; in wprint_image_set_output_properties()
164 image_info->output_padding_bottom = top_margin; in wprint_image_set_output_properties()
169 image_info->output_padding_top = top_margin; in wprint_image_set_output_properties()
170 image_info->output_padding_left = left_margin; in wprint_image_set_output_properties()
171 image_info->output_padding_right = right_margin; in wprint_image_set_output_properties()
172 image_info->output_padding_bottom = bottom_margin; in wprint_image_set_output_properties()
177 switch (image_info->rotation) { in wprint_image_set_output_properties()
180 image_output_width = image_info->height; in wprint_image_set_output_properties()
181 image_output_height = image_info->width; in wprint_image_set_output_properties()
186 image_output_width = image_info->width; in wprint_image_set_output_properties()
187 image_output_height = image_info->height; in wprint_image_set_output_properties()
193 const image_decode_ifc_t *decode_ifc = image_info->decode_ifc; in wprint_image_set_output_properties()
194 if ((image_info->render_flags & RENDER_FLAG_AUTO_FIT) && (decode_ifc != NULL) && in wprint_image_set_output_properties()
196 native_units = decode_ifc->native_units(image_info); in wprint_image_set_output_properties()
200 native_units = image_info->print_resolution; in wprint_image_set_output_properties()
207 if ((native_units != image_info->print_resolution) in wprint_image_set_output_properties()
208 && !((image_info->render_flags & RENDER_FLAG_AUTO_SCALE) in wprint_image_set_output_properties()
209 || ((image_info->render_flags & RENDER_FLAG_AUTO_FIT) in wprint_image_set_output_properties()
210 && !(image_info->render_flags & RENDER_FLAG_DOCUMENT_SCALING)))) { in wprint_image_set_output_properties()
211 native_scaling = (image_info->print_resolution * 1.0f) / (native_units * 1.0f); in wprint_image_set_output_properties()
219 if ((image_info->render_flags & (RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT)) && in wprint_image_set_output_properties()
228 image_info->scaled_sample_size = 1; in wprint_image_set_output_properties()
229 if ((decode_ifc != NULL) && (decode_ifc->supports_subsampling(image_info) == OK)) { in wprint_image_set_output_properties()
234 while (((image_info->render_flags & RENDER_FLAG_AUTO_SCALE) && in wprint_image_set_output_properties()
235 (next_width > image_info->printable_width) && in wprint_image_set_output_properties()
236 (next_height > image_info->printable_height)) || in wprint_image_set_output_properties()
237 ((image_info->render_flags & RENDER_FLAG_AUTO_FIT) && in wprint_image_set_output_properties()
238 ((next_width > image_info->printable_width) || in wprint_image_set_output_properties()
239 (next_height > image_info->printable_height)))) { in wprint_image_set_output_properties()
240 image_info->scaled_sample_size <<= 1; in wprint_image_set_output_properties()
246 LOGD("calculated sample size: %d", image_info->scaled_sample_size); in wprint_image_set_output_properties()
249 if (image_info->scaled_sample_size > 1) { in wprint_image_set_output_properties()
251 decode_ifc->cleanup(image_info); in wprint_image_set_output_properties()
252 decode_ifc->get_hdr(image_info); in wprint_image_set_output_properties()
255 image_output_width /= image_info->scaled_sample_size; in wprint_image_set_output_properties()
256 image_output_height /= image_info->scaled_sample_size; in wprint_image_set_output_properties()
264 if ((image_output_width == image_info->printable_width) && in wprint_image_set_output_properties()
265 (((image_info->render_flags & RENDER_FLAG_AUTO_SCALE) && in wprint_image_set_output_properties()
266 (image_output_height >= image_info->printable_height)) || in wprint_image_set_output_properties()
267 ((image_info->render_flags & RENDER_FLAG_AUTO_FIT) && in wprint_image_set_output_properties()
268 (image_output_height < image_info->printable_height)))) { in wprint_image_set_output_properties()
270 image_info->render_flags &= ~(RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT); in wprint_image_set_output_properties()
271 } else if ((image_output_height == image_info->printable_height) && in wprint_image_set_output_properties()
272 (((image_info->render_flags & RENDER_FLAG_AUTO_SCALE) && in wprint_image_set_output_properties()
273 (image_output_width >= image_info->printable_width)) || in wprint_image_set_output_properties()
274 ((image_info->render_flags & RENDER_FLAG_AUTO_FIT) && in wprint_image_set_output_properties()
275 (image_output_width < image_info->printable_width)))) { in wprint_image_set_output_properties()
278 image_info->render_flags &= ~(RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT); in wprint_image_set_output_properties()
281 if ((image_info->render_flags & RENDER_FLAG_DOCUMENT_SCALING) in wprint_image_set_output_properties()
282 && (image_output_height <= image_info->printable_height) in wprint_image_set_output_properties()
283 && (image_output_width <= image_info->printable_width)) { in wprint_image_set_output_properties()
284 image_info->render_flags &= ~(RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT); in wprint_image_set_output_properties()
287 (image_info->render_flags & RENDER_FLAG_DOCUMENT_SCALING)) { in wprint_image_set_output_properties()
289 if ((native_image_output_height <= image_info->printable_height) in wprint_image_set_output_properties()
291 <= image_info->printable_width)) { in wprint_image_set_output_properties()
293 image_info->render_flags &= ~(RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT); in wprint_image_set_output_properties()
301 image_info->sampled_width = (image_info->width / image_info->scaled_sample_size); in wprint_image_set_output_properties()
302 image_info->sampled_height = (image_info->height / image_info->scaled_sample_size); in wprint_image_set_output_properties()
305 if ((image_info->render_flags & (RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT)) in wprint_image_set_output_properties()
317 if (image_info->render_flags & (RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT)) { in wprint_image_set_output_properties()
318 targetHeight = image_info->printable_height * 1.0f; in wprint_image_set_output_properties()
319 targetWidth = image_info->printable_width * 1.0f; in wprint_image_set_output_properties()
323 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
331 image_info->scaled_width = (int) floorf(rw); in wprint_image_set_output_properties()
332 image_info->scaled_height = (int) floorf(targetHeight); in wprint_image_set_output_properties()
334 image_info->scaled_height = (int) floorf(targetWidth * sourceHeight / sourceWidth); in wprint_image_set_output_properties()
335 image_info->scaled_width = (int) floorf(targetWidth); in wprint_image_set_output_properties()
338 image_info->scaled_height = native_image_output_height; in wprint_image_set_output_properties()
339 image_info->scaled_width = native_image_output_width; in wprint_image_set_output_properties()
341 image_info->scaling_needed = TRUE; in wprint_image_set_output_properties()
348 image_info->scaled_width, BYTES_PER_PIXEL(image_info->scaled_width), in wprint_image_set_output_properties()
349 image_output_height, image_info->scaled_height, &image_info->scaler_config); in wprint_image_set_output_properties()
351 image_info->unscaled_rows_needed = 0; in wprint_image_set_output_properties()
352 image_info->mixed_memory_needed = 0; in wprint_image_set_output_properties()
355 for (i = 0; i < image_info->printable_height; i += max_decode_stripe) { in wprint_image_set_output_properties()
360 if (row >= image_info->scaled_height) { in wprint_image_set_output_properties()
365 (image_info->scaled_height - 1)), in wprint_image_set_output_properties()
366 (void *) &image_info->scaler_config, in wprint_image_set_output_properties()
370 image_info->output_rows = MAX(image_info->output_rows, gen_rows); in wprint_image_set_output_properties()
371 image_info->unscaled_rows_needed = MAX(image_info->unscaled_rows_needed, in wprint_image_set_output_properties()
373 image_info->mixed_memory_needed = MAX(image_info->mixed_memory_needed, mixed); in wprint_image_set_output_properties()
376 (MAX(image_output_width, image_output_height) * image_info->unscaled_rows_needed)); in wprint_image_set_output_properties()
379 image_info->unscaled_rows = malloc(unscaled_size); in wprint_image_set_output_properties()
381 if (image_info->unscaled_rows != NULL) { in wprint_image_set_output_properties()
382 memset(image_info->unscaled_rows, 0xff, unscaled_size); in wprint_image_set_output_properties()
384 image_info->mixed_memory = (image_info->mixed_memory_needed != 0) ? malloc( in wprint_image_set_output_properties()
385 image_info->mixed_memory_needed) : NULL; in wprint_image_set_output_properties()
387 image_info->scaled_height = image_output_height; in wprint_image_set_output_properties()
388 image_info->scaled_width = image_output_width; in wprint_image_set_output_properties()
392 if ((image_info->render_flags & (RENDER_FLAG_AUTO_SCALE | RENDER_FLAG_AUTO_FIT)) || in wprint_image_set_output_properties()
393 image_info->scaling_needed) { in wprint_image_set_output_properties()
396 image_info->output_width = image_output_width; in wprint_image_set_output_properties()
397 image_info->output_height = image_output_height; in wprint_image_set_output_properties()
400 image_info->output_width = MIN(image_info->printable_width, image_output_width); in wprint_image_set_output_properties()
401 image_info->output_height = MIN(image_info->printable_height, image_output_height); in wprint_image_set_output_properties()
405 switch (image_info->rotation) { in wprint_image_set_output_properties()
407 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
408 } else if (image_info->render_flags & RENDER_FLAG_CENTER_HORIZONTAL) { in wprint_image_set_output_properties()
409 if (image_info->scaled_width > image_info->printable_width) { in wprint_image_set_output_properties()
410 image_info->col_offset = ( in wprint_image_set_output_properties()
411 (image_info->scaled_width - image_info->printable_width) / 2); in wprint_image_set_output_properties()
413 int paddingDelta = (image_info->printable_width - image_info->scaled_width); in wprint_image_set_output_properties()
415 image_info->output_padding_left += delta; in wprint_image_set_output_properties()
416 image_info->output_padding_right += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
418 } else if (image_info->scaled_width > image_info->printable_width) { in wprint_image_set_output_properties()
419 image_info->col_offset = (image_info->scaled_width - image_info->printable_width); in wprint_image_set_output_properties()
420 } else if (image_info->scaled_width < image_info->printable_width) { in wprint_image_set_output_properties()
421 image_info->output_padding_right += (image_info->printable_width - in wprint_image_set_output_properties()
422 image_info->scaled_width); in wprint_image_set_output_properties()
425 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
426 } else if (image_info->render_flags & RENDER_FLAG_CENTER_VERTICAL) { in wprint_image_set_output_properties()
427 if (image_info->scaled_height > image_info->printable_height) { in wprint_image_set_output_properties()
428 image_info->row_offset = ( in wprint_image_set_output_properties()
429 (image_info->scaled_height - image_info->printable_height) / 2); in wprint_image_set_output_properties()
431 int paddingDelta = (image_info->printable_height - image_info->scaled_height); in wprint_image_set_output_properties()
433 image_info->output_padding_top += delta; in wprint_image_set_output_properties()
434 image_info->output_padding_bottom += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
436 } else if (image_info->scaled_height < image_info->printable_height) { in wprint_image_set_output_properties()
437 image_info->output_padding_bottom += (image_info->printable_height - in wprint_image_set_output_properties()
438 image_info->scaled_height); in wprint_image_set_output_properties()
442 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
443 } else if (image_info->render_flags & RENDER_FLAG_CENTER_HORIZONTAL) { in wprint_image_set_output_properties()
444 if (image_info->scaled_width > image_info->printable_width) { in wprint_image_set_output_properties()
445 image_info->col_offset = ( in wprint_image_set_output_properties()
446 (image_info->scaled_width - image_info->printable_width) / 2); in wprint_image_set_output_properties()
448 int paddingDelta = (image_info->printable_width - image_info->scaled_width); in wprint_image_set_output_properties()
450 image_info->output_padding_left += delta; in wprint_image_set_output_properties()
451 image_info->output_padding_right += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
453 } else if (image_info->scaled_width > image_info->printable_width) { in wprint_image_set_output_properties()
454 image_info->col_offset = (image_info->scaled_width - image_info->printable_width); in wprint_image_set_output_properties()
455 } else if (image_info->scaled_width < image_info->printable_width) { in wprint_image_set_output_properties()
456 image_info->output_padding_left += (image_info->printable_width - in wprint_image_set_output_properties()
457 image_info->scaled_width); in wprint_image_set_output_properties()
460 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
461 } else if (image_info->render_flags & RENDER_FLAG_CENTER_VERTICAL) { in wprint_image_set_output_properties()
462 if (image_info->scaled_height > image_info->printable_height) { in wprint_image_set_output_properties()
463 image_info->row_offset = ( in wprint_image_set_output_properties()
464 (image_info->scaled_height - image_info->printable_height) / 2); in wprint_image_set_output_properties()
466 int paddingDelta = (image_info->printable_height - image_info->scaled_height); in wprint_image_set_output_properties()
468 image_info->output_padding_top += delta; in wprint_image_set_output_properties()
469 image_info->output_padding_bottom += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
471 } else if (image_info->scaled_height > image_info->printable_height) { in wprint_image_set_output_properties()
472 image_info->row_offset = (image_info->scaled_height - image_info->printable_height); in wprint_image_set_output_properties()
473 } else if (image_info->scaled_height < image_info->printable_height) { in wprint_image_set_output_properties()
474 image_info->output_padding_top += (image_info->printable_height - in wprint_image_set_output_properties()
475 image_info->scaled_height); in wprint_image_set_output_properties()
479 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
480 } else if (image_info->render_flags & RENDER_FLAG_CENTER_HORIZONTAL) { in wprint_image_set_output_properties()
481 if (image_info->scaled_width > image_info->printable_width) { in wprint_image_set_output_properties()
482 image_info->col_offset = ( in wprint_image_set_output_properties()
483 (image_info->scaled_width - image_info->printable_width) / 2); in wprint_image_set_output_properties()
485 int paddingDelta = (image_info->printable_width - image_info->scaled_width); in wprint_image_set_output_properties()
487 image_info->output_padding_left += delta; in wprint_image_set_output_properties()
488 image_info->output_padding_right += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
490 } else if (image_info->scaled_width > image_info->printable_width) { in wprint_image_set_output_properties()
491 image_info->col_offset = (image_info->scaled_width - image_info->printable_width); in wprint_image_set_output_properties()
492 } else if (image_info->scaled_width < image_info->printable_width) { in wprint_image_set_output_properties()
493 image_info->output_padding_left += (image_info->printable_width - in wprint_image_set_output_properties()
494 image_info->scaled_width); in wprint_image_set_output_properties()
497 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
498 } else if (image_info->render_flags & RENDER_FLAG_CENTER_VERTICAL) { in wprint_image_set_output_properties()
499 if (image_info->scaled_height > image_info->printable_height) { in wprint_image_set_output_properties()
500 image_info->row_offset = ( in wprint_image_set_output_properties()
501 (image_info->scaled_height - image_info->printable_height) / 2); in wprint_image_set_output_properties()
503 int paddingDelta = (image_info->printable_height - image_info->scaled_height); in wprint_image_set_output_properties()
505 image_info->output_padding_top += delta; in wprint_image_set_output_properties()
506 image_info->output_padding_bottom += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
508 } else if (image_info->scaled_height < image_info->printable_height) { in wprint_image_set_output_properties()
509 image_info->output_padding_top += (image_info->printable_height - in wprint_image_set_output_properties()
510 image_info->scaled_height); in wprint_image_set_output_properties()
511 } else if (image_info->scaled_height > image_info->printable_height) { in wprint_image_set_output_properties()
512 image_info->row_offset = (image_info->scaled_height - image_info->printable_height); in wprint_image_set_output_properties()
517 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
518 } else if (image_info->render_flags & RENDER_FLAG_CENTER_HORIZONTAL) { in wprint_image_set_output_properties()
519 if (image_info->scaled_width > image_info->printable_width) { in wprint_image_set_output_properties()
520 image_info->col_offset = ( in wprint_image_set_output_properties()
521 (image_info->scaled_width - image_info->printable_width) / 2); in wprint_image_set_output_properties()
523 int paddingDelta = (image_info->printable_width - image_info->scaled_width); in wprint_image_set_output_properties()
525 image_info->output_padding_left += delta; in wprint_image_set_output_properties()
526 image_info->output_padding_right += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
528 } else if (image_info->scaled_width < image_info->printable_width) { in wprint_image_set_output_properties()
529 image_info->output_padding_right += (image_info->printable_width - in wprint_image_set_output_properties()
530 image_info->scaled_width); in wprint_image_set_output_properties()
533 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in wprint_image_set_output_properties()
534 } else if (image_info->render_flags & RENDER_FLAG_CENTER_VERTICAL) { in wprint_image_set_output_properties()
535 if (image_info->scaled_height > image_info->printable_height) { in wprint_image_set_output_properties()
536 image_info->row_offset = ( in wprint_image_set_output_properties()
537 (image_info->scaled_height - image_info->printable_height) / 2); in wprint_image_set_output_properties()
539 int paddingDelta = (image_info->printable_height - image_info->scaled_height); in wprint_image_set_output_properties()
541 image_info->output_padding_top += delta; in wprint_image_set_output_properties()
542 image_info->output_padding_bottom += delta + (paddingDelta & 0x1); in wprint_image_set_output_properties()
544 } else if (image_info->scaled_height < image_info->printable_height) { in wprint_image_set_output_properties()
545 image_info->output_padding_bottom += (image_info->printable_height - in wprint_image_set_output_properties()
546 image_info->scaled_height); in wprint_image_set_output_properties()
558 image_info->padding_options, image_info->padding_options); in wprint_image_set_output_properties()
560 image_info->concurrent_stripes); in wprint_image_set_output_properties()
561 LOGD("wprint_image_set_output_properties(): stripe height - %d", image_info->stripe_height); in wprint_image_set_output_properties()
563 image_info->width, image_info->height); in wprint_image_set_output_properties()
564 LOGD("wprint_image_set_output_properties(): image rotation: %d", image_info->rotation); in wprint_image_set_output_properties()
566 image_info->render_flags, image_info->render_flags); in wprint_image_set_output_properties()
568 image_info->printable_width, image_info->printable_height); in wprint_image_set_output_properties()
570 image_info->output_padding_top, image_info->output_padding_left, in wprint_image_set_output_properties()
571 image_info->output_padding_right, image_info->output_padding_bottom); in wprint_image_set_output_properties()
572 LOGD("wprint_image_set_output_properties(): output dimensions: %dx%d", image_info->output_width, in wprint_image_set_output_properties()
573 image_info->output_height); in wprint_image_set_output_properties()
575 image_info->sampled_width, image_info->sampled_height); in wprint_image_set_output_properties()
577 image_info->scaled_width, image_info->scaled_height); in wprint_image_set_output_properties()
579 image_info->row_offset, image_info->col_offset); in wprint_image_set_output_properties()
581 image_info->output_padding_top, image_info->output_padding_left, in wprint_image_set_output_properties()
582 image_info->output_padding_right, image_info->output_padding_bottom); in wprint_image_set_output_properties()
587 static int _get_width(wprint_image_info_t *image_info, unsigned int padding_options) { in _get_width() argument
589 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in _get_width()
590 width = image_info->printable_width; in _get_width()
591 } else if ((image_info->render_flags & RENDER_FLAG_AUTO_FIT) || image_info->scaling_needed) { in _get_width()
592 width = image_info->scaled_width; in _get_width()
594 width = image_info->output_width; in _get_width()
597 width += image_info->output_padding_left; in _get_width()
600 width += image_info->output_padding_right; in _get_width()
605 int wprint_image_get_width(wprint_image_info_t *image_info) { in wprint_image_get_width() argument
606 int width = _get_width(image_info, image_info->padding_options); in wprint_image_get_width()
611 int wprint_image_get_output_buff_size(wprint_image_info_t *image_info) { in wprint_image_get_output_buff_size() argument
612 int width = MAX(MAX(image_info->scaled_width, image_info->scaled_height), in wprint_image_get_output_buff_size()
613 _get_width(image_info, image_info->padding_options)); in wprint_image_get_output_buff_size()
614 LOGD("wprint_image_get_output_buff_size(): %dx%d", width, image_info->output_rows); in wprint_image_get_output_buff_size()
615 return (BYTES_PER_PIXEL(width * image_info->output_rows)); in wprint_image_get_output_buff_size()
618 static int _get_height(wprint_image_info_t *image_info, unsigned int padding_options) { in _get_height() argument
620 if (image_info->render_flags & RENDER_FLAG_AUTO_SCALE) { in _get_height()
621 height = image_info->printable_height; in _get_height()
623 height = MIN(image_info->scaled_height, image_info->printable_height); in _get_height()
626 height += image_info->output_padding_top; in _get_height()
629 height += image_info->output_padding_bottom; in _get_height()
634 int wprint_image_get_height(wprint_image_info_t *image_info) { in wprint_image_get_height() argument
635 int height = _get_height(image_info, image_info->padding_options); in wprint_image_get_height()
640 bool wprint_image_is_landscape(wprint_image_info_t *image_info) { in wprint_image_is_landscape() argument
641 return (image_info->width > image_info->height); in wprint_image_is_landscape()
644 int _decode_stripe(wprint_image_info_t *image_info, int start_row, int num_rows, in _decode_stripe() argument
652 const image_decode_ifc_t *decode_ifc = image_info->decode_ifc; in _decode_stripe()
658 start_row += image_info->row_offset; in _decode_stripe()
659 rbytes = BYTES_PER_PIXEL(image_info->output_width); in _decode_stripe()
663 image_info->output_padding_left) : 0); in _decode_stripe()
665 image_info->output_padding_right) : 0); in _decode_stripe()
668 switch (image_info->rotation) { in _decode_stripe()
670 col_offset = BYTES_PER_PIXEL(image_info->col_offset); in _decode_stripe()
672 if (start_row > image_info->sampled_width) { in _decode_stripe()
680 if ((image_info->output_swath_start == -1) || in _decode_stripe()
681 (start_row < image_info->output_swath_start) || in _decode_stripe()
682 (start_row >= (image_info->output_swath_start + image_info->rows_cached))) { in _decode_stripe()
683 if (image_info->output_swath_start == -1) { in _decode_stripe()
684 if (decode_ifc->decode_row(image_info, 0) == NULL) { in _decode_stripe()
688 image_info->output_swath_start = ((start_row / image_info->rows_cached) * in _decode_stripe()
689 image_info->rows_cached); in _decode_stripe()
690 for (image_y = 0; image_y < image_info->sampled_height; image_y++) { in _decode_stripe()
691 image_data = decode_ifc->decode_row(image_info, image_y); in _decode_stripe()
695 for (image_x = 0; (image_x < image_info->rows_cached && in _decode_stripe()
696 ((image_x + image_info->output_swath_start) < in _decode_stripe()
697 image_info->sampled_width)); in _decode_stripe()
699 memcpy(image_info->output_cache[image_x] + BYTES_PER_PIXEL( in _decode_stripe()
700 (image_info->sampled_height - image_y - 1)), in _decode_stripe()
702 (image_info->output_swath_start + image_x)), in _decode_stripe()
709 (image_y < image_info->sampled_width) && in _decode_stripe()
710 (image_y < (image_info->output_swath_start + image_info->rows_cached))); in _decode_stripe()
713 image_info->output_cache[image_y - image_info->output_swath_start] + in _decode_stripe()
721 col_offset = image_info->col_offset; in _decode_stripe()
723 ((image_y < image_info->sampled_height) && (num_rows != 0)); in _decode_stripe()
725 image_data = decode_ifc->decode_row(image_info, in _decode_stripe()
726 (image_info->sampled_height - image_y - 1)); in _decode_stripe()
730 for (image_x = 0; image_x < image_info->output_width; image_x++) { in _decode_stripe()
732 image_data + BYTES_PER_PIXEL(image_info->sampled_width - in _decode_stripe()
741 col_offset = BYTES_PER_PIXEL(image_info->col_offset); in _decode_stripe()
743 if (start_row > image_info->sampled_width) { in _decode_stripe()
751 if ((image_info->output_swath_start == -1) || in _decode_stripe()
752 (start_row < image_info->output_swath_start) || in _decode_stripe()
753 (start_row >= (image_info->output_swath_start + image_info->rows_cached))) { in _decode_stripe()
754 if (image_info->output_swath_start == -1) { in _decode_stripe()
755 if (decode_ifc->decode_row(image_info, 0) == NULL) { in _decode_stripe()
759 image_info->output_swath_start = ((start_row / image_info->rows_cached) * in _decode_stripe()
760 image_info->rows_cached); in _decode_stripe()
761 for (image_y = 0; image_y < image_info->sampled_height; image_y++) { in _decode_stripe()
762 image_data = decode_ifc->decode_row(image_info, image_y); in _decode_stripe()
766 for (image_x = 0; ((image_x < image_info->rows_cached) && in _decode_stripe()
767 ((image_x + image_info->output_swath_start) < in _decode_stripe()
768 image_info->sampled_width)); in _decode_stripe()
770 memcpy(image_info->output_cache[image_x] + BYTES_PER_PIXEL(image_y), in _decode_stripe()
771 image_data + BYTES_PER_PIXEL(image_info->sampled_width - in _decode_stripe()
772 (image_info->output_swath_start + in _decode_stripe()
780 (image_y < image_info->sampled_width) && in _decode_stripe()
781 (image_y < (image_info->output_swath_start in _decode_stripe()
782 + image_info->rows_cached))); in _decode_stripe()
785 image_info->output_cache[image_y - image_info->output_swath_start] + in _decode_stripe()
794 col_offset = BYTES_PER_PIXEL(image_info->col_offset); in _decode_stripe()
796 ((image_y < image_info->sampled_height) && (num_rows != 0)); in _decode_stripe()
798 image_data = decode_ifc->decode_row(image_info, image_y); in _decode_stripe()
812 int wprint_image_decode_stripe(wprint_image_info_t *image_info, int start_row, int *height, in wprint_image_decode_stripe() argument
815 int bytes_per_row = BYTES_PER_PIXEL(_get_width(image_info, image_info->padding_options)); in wprint_image_decode_stripe()
826 int padding_left = ((image_info->padding_options & PAD_LEFT) ? BYTES_PER_PIXEL( in wprint_image_decode_stripe()
827 image_info->output_padding_left) : 0); in wprint_image_decode_stripe()
828 int padding_right = ((image_info->padding_options & PAD_RIGHT) ? BYTES_PER_PIXEL( in wprint_image_decode_stripe()
829 image_info->output_padding_right) : 0); in wprint_image_decode_stripe()
830 int padding_top = ((image_info->padding_options & PAD_TOP) ? in wprint_image_decode_stripe()
831 image_info->output_padding_top : 0); in wprint_image_decode_stripe()
833 if ((start_row < 0) || (start_row >= _get_height(image_info, image_info->padding_options))) { in wprint_image_decode_stripe()
836 } else if ((image_info->padding_options & PAD_TOP) && in wprint_image_decode_stripe()
846 } else if ((image_info->padding_options & PAD_BOTTOM) && in wprint_image_decode_stripe()
847 (start_row >= _get_height(image_info, image_info->padding_options & PAD_TOP))) { in wprint_image_decode_stripe()
850 _get_height(image_info, image_info->padding_options) - start_row); in wprint_image_decode_stripe()
867 if (image_info->padding_options & PAD_TOP) { in wprint_image_decode_stripe()
872 if (image_info->scaling_needed) { in wprint_image_decode_stripe()
875 if (image_info->scaled_height > image_info->printable_height) { in wprint_image_decode_stripe()
876 scaled_start_row += ((image_info->scaled_height - image_info->printable_height) / 2); in wprint_image_decode_stripe()
883 int scaled_num_rows = (((scaled_start_row + num_rows) > image_info->scaled_height) ? in wprint_image_decode_stripe()
884 (image_info->scaled_height - scaled_start_row) : num_rows); in wprint_image_decode_stripe()
886 stripe_height = MIN(scaled_num_rows, image_info->stripe_height); in wprint_image_decode_stripe()
889 (image_info->scaled_height - 1)), (void *) &image_info->scaler_config, in wprint_image_decode_stripe()
892 if (mixed > image_info->mixed_memory_needed) { in wprint_image_decode_stripe()
898 if (unscaled_row_start <= image_info->unscaled_end_row) { in wprint_image_decode_stripe()
900 predecoded_rows = (image_info->unscaled_end_row - unscaled_row_start) + 1; in wprint_image_decode_stripe()
902 memmove(image_info->unscaled_rows, image_info->unscaled_rows + in wprint_image_decode_stripe()
903 BYTES_PER_PIXEL(((unscaled_row_start - image_info->unscaled_start_row) * in wprint_image_decode_stripe()
904 image_info->output_width)), in wprint_image_decode_stripe()
905 BYTES_PER_PIXEL((predecoded_rows * image_info->output_width))); in wprint_image_decode_stripe()
908 image_info->unscaled_start_row = unscaled_row_start; in wprint_image_decode_stripe()
909 image_info->unscaled_end_row = unscaled_row_end; in wprint_image_decode_stripe()
915 int rowsLeftToDecode = ((image_info->unscaled_end_row - in wprint_image_decode_stripe()
916 (image_info->unscaled_start_row + predecoded_rows)) + 1); in wprint_image_decode_stripe()
918 int dbytes = _decode_stripe(image_info, in wprint_image_decode_stripe()
919 image_info->unscaled_start_row + predecoded_rows, rowsLeftToDecode, in wprint_image_decode_stripe()
920 PAD_NONE, (image_info->unscaled_rows + BYTES_PER_PIXEL(predecoded_rows * in wprint_image_decode_stripe()
921 image_info->output_width))); in wprint_image_decode_stripe()
933 scaler_scale_image_data(image_info->unscaled_rows, (void *) &image_info->scaler_config, in wprint_image_decode_stripe()
934 rgb_pixels, image_info->mixed_memory); in wprint_image_decode_stripe()
937 (image_info->scaled_width > image_info->printable_width) || in wprint_image_decode_stripe()
941 int pixelsToMove = BYTES_PER_PIXEL(MIN(image_info->scaled_width, in wprint_image_decode_stripe()
942 image_info->printable_width)); in wprint_image_decode_stripe()
944 int memMoveRow = ((bytes_per_row < image_info->scaler_config.iOutBufWidth) ? 0 : ( in wprint_image_decode_stripe()
946 int memMoveIncrement = ((bytes_per_row < image_info->scaler_config.iOutBufWidth) in wprint_image_decode_stripe()
950 if (image_info->scaled_width > image_info->printable_width) { in wprint_image_decode_stripe()
952 ((image_info->scaled_width - image_info->printable_width) / 2)); in wprint_image_decode_stripe()
960 image_info->scaler_config.iOutBufWidth) + delta, pixelsToMove); in wprint_image_decode_stripe()
976 int dbytes = _decode_stripe(image_info, unpadded_start_row, in wprint_image_decode_stripe()
978 _get_height(image_info, PAD_NONE)) ? in wprint_image_decode_stripe()
979 (_get_height(image_info, PAD_NONE) - unpadded_start_row) in wprint_image_decode_stripe()
981 image_info->padding_options, rgb_pixels); in wprint_image_decode_stripe()
1000 (image_info->padding_options & (PAD_LEFT | PAD_RIGHT)) && in wprint_image_decode_stripe()
1013 if ((image_info->padding_options & PAD_BOTTOM) && (num_rows > 0) && in wprint_image_decode_stripe()
1014 (start_row >= _get_height(image_info, image_info->padding_options & PAD_TOP))) { in wprint_image_decode_stripe()
1016 _get_height(image_info, image_info->padding_options) - start_row); in wprint_image_decode_stripe()
1028 int wprint_image_compute_rows_to_cache(wprint_image_info_t *image_info) { in wprint_image_compute_rows_to_cache() argument
1035 width = image_info->sampled_width; in wprint_image_compute_rows_to_cache()
1036 height = image_info->sampled_height; in wprint_image_compute_rows_to_cache()
1038 switch (image_info->rotation) { in wprint_image_compute_rows_to_cache()
1052 available_mem -= (wprint_image_get_output_buff_size(image_info) * in wprint_image_compute_rows_to_cache()
1053 image_info->concurrent_stripes); in wprint_image_compute_rows_to_cache()
1054 if (image_info->unscaled_rows != NULL) { in wprint_image_compute_rows_to_cache()
1057 image_info->unscaled_rows_needed * image_info->output_width); in wprint_image_compute_rows_to_cache()
1058 available_mem -= image_info->mixed_memory_needed; in wprint_image_compute_rows_to_cache()
1081 image_info->output_cache = (unsigned char **) malloc(sizeof(unsigned char *) * max_rows); in wprint_image_compute_rows_to_cache()
1083 image_info->output_cache[i] = (unsigned char *) malloc(row_width); in wprint_image_compute_rows_to_cache()
1089 image_info->rows_cached = max_rows; in wprint_image_compute_rows_to_cache()
1092 return wprint_image_input_rows_cached(image_info); in wprint_image_compute_rows_to_cache()
1095 int wprint_image_input_rows_cached(wprint_image_info_t *image_info) { in wprint_image_input_rows_cached() argument
1096 return ((image_info->output_cache != NULL) ? 1 : image_info->rows_cached); in wprint_image_input_rows_cached()
1099 void wprint_image_cleanup(wprint_image_info_t *image_info) { in wprint_image_cleanup() argument
1101 const image_decode_ifc_t *decode_ifc = image_info->decode_ifc; in wprint_image_cleanup()
1104 decode_ifc->cleanup(image_info); in wprint_image_cleanup()
1108 if (image_info->unscaled_rows != NULL) { in wprint_image_cleanup()
1109 free(image_info->unscaled_rows); in wprint_image_cleanup()
1110 image_info->unscaled_rows = NULL; in wprint_image_cleanup()
1114 if (image_info->mixed_memory != NULL) { in wprint_image_cleanup()
1115 free(image_info->mixed_memory); in wprint_image_cleanup()
1116 image_info->mixed_memory = NULL; in wprint_image_cleanup()
1119 if (image_info->output_cache != NULL) { in wprint_image_cleanup()
1120 for (i = 0; i < image_info->rows_cached; i++) { in wprint_image_cleanup()
1121 free(image_info->output_cache[i]); in wprint_image_cleanup()
1123 free(image_info->output_cache); in wprint_image_cleanup()
1124 image_info->output_cache = NULL; in wprint_image_cleanup()