diff options
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_scale_sample.c')
-rw-r--r-- | libraries/evas/src/lib/engines/common/evas_scale_sample.c | 113 |
1 files changed, 67 insertions, 46 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_scale_sample.c b/libraries/evas/src/lib/engines/common/evas_scale_sample.c index 54b8e92..a8951b8 100644 --- a/libraries/evas/src/lib/engines/common/evas_scale_sample.c +++ b/libraries/evas/src/lib/engines/common/evas_scale_sample.c | |||
@@ -154,7 +154,7 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst, | |||
154 | dst_clip_w = m_clip_w; | 154 | dst_clip_w = m_clip_w; |
155 | dst_clip_h = m_clip_h; | 155 | dst_clip_h = m_clip_h; |
156 | } | 156 | } |
157 | 157 | ||
158 | if (dst_clip_x < dst_region_x) | 158 | if (dst_clip_x < dst_region_x) |
159 | { | 159 | { |
160 | dst_clip_w += dst_clip_x - dst_region_x; | 160 | dst_clip_w += dst_clip_x - dst_region_x; |
@@ -258,7 +258,7 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst, | |||
258 | func = evas_common_gfx_func_composite_pixel_mask_span_get(src, dst, dst_clip_w, dc->render_op); | 258 | func = evas_common_gfx_func_composite_pixel_mask_span_get(src, dst, dst_clip_w, dc->render_op); |
259 | maskobj = dc->mask.mask; | 259 | maskobj = dc->mask.mask; |
260 | mask = maskobj->mask.mask; | 260 | mask = maskobj->mask.mask; |
261 | /* | 261 | /* |
262 | if (1 || dst_region_w > src_region_w || dst_region_h > src_region_h){ | 262 | if (1 || dst_region_w > src_region_w || dst_region_h > src_region_h){ |
263 | printf("Mask w/h: %d/%d\n",maskobj->cache_entry.w, | 263 | printf("Mask w/h: %d/%d\n",maskobj->cache_entry.w, |
264 | maskobj->cache_entry.h); | 264 | maskobj->cache_entry.h); |
@@ -276,26 +276,47 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst, | |||
276 | if ((dst_region_w == src_region_w) && (dst_region_h == src_region_h)) | 276 | if ((dst_region_w == src_region_w) && (dst_region_h == src_region_h)) |
277 | { | 277 | { |
278 | #ifdef HAVE_PIXMAN | 278 | #ifdef HAVE_PIXMAN |
279 | if ((1) && | 279 | # ifdef PIXMAN_IMAGE_SCALE_SAMPLE |
280 | (src->pixman.im) && (dst->pixman.im) && | 280 | if ((src->pixman.im) && (dst->pixman.im) && (!dc->mask.mask) && |
281 | ((!dc->mul.use) || | 281 | ((!dc->mul.use) || |
282 | ((dc->mul.use) && (dc->mul.col == 0xffffffff))) && | 282 | ((dc->mul.use) && (dc->mul.col == 0xffffffff))) && |
283 | ((dc->render_op == _EVAS_RENDER_COPY) || | 283 | ((dc->render_op == _EVAS_RENDER_COPY) || |
284 | (dc->render_op == _EVAS_RENDER_BLEND)) | 284 | (dc->render_op == _EVAS_RENDER_BLEND))) |
285 | ) | ||
286 | { | 285 | { |
287 | pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY | 286 | pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY |
288 | if (dc->render_op == _EVAS_RENDER_BLEND) op = PIXMAN_OP_OVER; | 287 | if (dc->render_op == _EVAS_RENDER_BLEND) |
288 | op = PIXMAN_OP_OVER; | ||
289 | |||
289 | pixman_image_composite(op, | 290 | pixman_image_composite(op, |
290 | src->pixman.im, NULL, | 291 | src->pixman.im, NULL, |
291 | dst->pixman.im, | 292 | dst->pixman.im, |
292 | (dst_clip_x - dst_region_x) + src_region_x, | 293 | (dst_clip_x - dst_region_x) + src_region_x, |
293 | (dst_clip_y - dst_region_y) + src_region_y, | 294 | (dst_clip_y - dst_region_y) + src_region_y, |
294 | 0, 0, | 295 | 0, 0, |
295 | dst_clip_x, dst_clip_y, | 296 | dst_clip_x, dst_clip_y, |
297 | dst_clip_w, dst_clip_h); | ||
298 | } | ||
299 | else if ((src->pixman.im) && (dst->pixman.im) && | ||
300 | (dc->mask.mask) && (dc->mask.mask->pixman.im) && | ||
301 | ((dc->render_op == _EVAS_RENDER_COPY) || | ||
302 | (dc->render_op == _EVAS_RENDER_BLEND))) | ||
303 | { | ||
304 | // In case of pixel and color operation. | ||
305 | pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY | ||
306 | if (dc->render_op == _EVAS_RENDER_BLEND) | ||
307 | op = PIXMAN_OP_OVER; | ||
308 | |||
309 | pixman_image_composite(op, | ||
310 | src->pixman.im, dc->mask.mask->pixman.im, | ||
311 | dst->pixman.im, | ||
312 | (dst_clip_x - dst_region_x) + src_region_x, | ||
313 | (dst_clip_y - dst_region_y) + src_region_y, | ||
314 | 0, 0, | ||
315 | dst_clip_x, dst_clip_y, | ||
296 | dst_clip_w, dst_clip_h); | 316 | dst_clip_w, dst_clip_h); |
297 | } | 317 | } |
298 | else | 318 | else |
319 | # endif | ||
299 | #endif | 320 | #endif |
300 | { | 321 | { |
301 | ptr = src_data + ((dst_clip_y - dst_region_y + src_region_y) * src_w) + (dst_clip_x - dst_region_x) + src_region_x; | 322 | ptr = src_data + ((dst_clip_y - dst_region_y + src_region_y) * src_w) + (dst_clip_x - dst_region_x) + src_region_x; |
@@ -322,59 +343,59 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst, | |||
322 | } | 343 | } |
323 | else | 344 | else |
324 | { | 345 | { |
325 | /* fill scale tables */ | 346 | /* fill scale tables */ |
326 | for (x = 0; x < dst_clip_w; x++) | 347 | for (x = 0; x < dst_clip_w; x++) |
327 | lin_ptr[x] = (((x + dst_clip_x - dst_region_x) * src_region_w) / dst_region_w) + src_region_x; | 348 | lin_ptr[x] = (((x + dst_clip_x - dst_region_x) * src_region_w) / dst_region_w) + src_region_x; |
328 | for (y = 0; y < dst_clip_h; y++) | 349 | for (y = 0; y < dst_clip_h; y++) |
329 | row_ptr[y] = src_data + (((((y + dst_clip_y - dst_region_y) * src_region_h) / dst_region_h) | 350 | row_ptr[y] = src_data + (((((y + dst_clip_y - dst_region_y) * src_region_h) / dst_region_h) |
330 | + src_region_y) * src_w); | 351 | + src_region_y) * src_w); |
331 | /* scale to dst */ | 352 | /* scale to dst */ |
332 | dptr = dst_ptr; | 353 | dptr = dst_ptr; |
333 | #ifdef DIRECT_SCALE | 354 | #ifdef DIRECT_SCALE |
334 | if ((!src->cache_entry.flags.alpha) && | 355 | if ((!src->cache_entry.flags.alpha) && |
335 | (!dst->cache_entry.flags.alpha) && | 356 | (!dst->cache_entry.flags.alpha) && |
336 | (!dc->mul.use)) | 357 | (!dc->mul.use)) |
337 | { | 358 | { |
338 | for (y = 0; y < dst_clip_h; y++) | 359 | for (y = 0; y < dst_clip_h; y++) |
339 | { | 360 | { |
340 | #ifdef EVAS_SLI | 361 | # ifdef EVAS_SLI |
341 | if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) | 362 | if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) |
342 | #endif | 363 | # endif |
343 | { | 364 | { |
344 | dst_ptr = dptr; | 365 | dst_ptr = dptr; |
345 | for (x = 0; x < dst_clip_w; x++) | 366 | for (x = 0; x < dst_clip_w; x++) |
346 | { | 367 | { |
347 | ptr = row_ptr[y] + lin_ptr[x]; | 368 | ptr = row_ptr[y] + lin_ptr[x]; |
348 | *dst_ptr = *ptr; | 369 | *dst_ptr = *ptr; |
349 | dst_ptr++; | 370 | dst_ptr++; |
350 | } | 371 | } |
351 | } | 372 | } |
352 | dptr += dst_w; | 373 | dptr += dst_w; |
353 | } | 374 | } |
354 | } | 375 | } |
355 | else | 376 | else |
356 | #endif | 377 | #endif |
357 | { | 378 | { |
358 | /* a scanline buffer */ | 379 | /* a scanline buffer */ |
359 | buf = alloca(dst_clip_w * sizeof(DATA32)); | 380 | buf = alloca(dst_clip_w * sizeof(DATA32)); |
360 | for (y = 0; y < dst_clip_h; y++) | 381 | for (y = 0; y < dst_clip_h; y++) |
361 | { | 382 | { |
362 | #ifdef EVAS_SLI | 383 | #ifdef EVAS_SLI |
363 | if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) | 384 | if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) |
364 | #endif | 385 | #endif |
365 | { | 386 | { |
366 | dst_ptr = buf; | 387 | dst_ptr = buf; |
367 | for (x = 0; x < dst_clip_w; x++) | 388 | for (x = 0; x < dst_clip_w; x++) |
368 | { | 389 | { |
369 | ptr = row_ptr[y] + lin_ptr[x]; | 390 | ptr = row_ptr[y] + lin_ptr[x]; |
370 | *dst_ptr = *ptr; | 391 | *dst_ptr = *ptr; |
371 | dst_ptr++; | 392 | dst_ptr++; |
372 | } | 393 | } |
373 | /* * blend here [clip_w *] buf -> dptr * */ | 394 | /* * blend here [clip_w *] buf -> dptr * */ |
374 | func(buf, NULL, dc->mul.col, dptr, dst_clip_w); | 395 | func(buf, NULL, dc->mul.col, dptr, dst_clip_w); |
375 | } | 396 | } |
376 | dptr += dst_w; | 397 | dptr += dst_w; |
377 | } | 398 | } |
378 | } | 399 | } |
379 | } | 400 | } |
380 | } | 401 | } |