resampler: Extract function: resample_now()

pull/65/head
Andri Yngvason 2022-05-16 22:11:45 +00:00
parent 7205139b11
commit bab78857e1
2 changed files with 21 additions and 10 deletions

View File

@ -32,3 +32,6 @@ void resampler_destroy(struct resampler*);
int resampler_feed(struct resampler*, struct nvnc_fb* fb, int resampler_feed(struct resampler*, struct nvnc_fb* fb,
struct pixman_region16* damage, resampler_fn on_done, struct pixman_region16* damage, resampler_fn on_done,
void* userdata); void* userdata);
void resample_now(struct nvnc_fb* dst, struct nvnc_fb* src,
struct pixman_region16* damage);

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021 Andri Yngvason * Copyright (c) 2021 - 2022 Andri Yngvason
* *
* Permission to use, copy, modify, and/or distribute this software for any * Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@ -100,15 +100,9 @@ void resampler_destroy(struct resampler* self)
free(self); free(self);
} }
static void do_work(void* handle) void resample_now(struct nvnc_fb* dst, struct nvnc_fb* src,
struct pixman_region16* damage)
{ {
struct aml_work* work = handle;
struct resampler_work* ctx = aml_get_userdata(work);
struct nvnc_fb* src = ctx->src;
struct nvnc_fb* dst = ctx->dst;
struct fb_side_data* dst_side_data = nvnc_get_userdata(dst);
assert(dst->transform == NVNC_TRANSFORM_NORMAL); assert(dst->transform == NVNC_TRANSFORM_NORMAL);
bool ok __attribute__((unused)); bool ok __attribute__((unused));
@ -138,7 +132,9 @@ static void do_work(void* handle)
/* Side data contains the union of the buffer damage and the frame /* Side data contains the union of the buffer damage and the frame
* damage. * damage.
*/ */
pixman_image_set_clip_region(dstimg, &dst_side_data->buffer_damage); if (damage) {
pixman_image_set_clip_region(dstimg, damage);
}
pixman_image_composite(PIXMAN_OP_OVER, srcimg, NULL, dstimg, pixman_image_composite(PIXMAN_OP_OVER, srcimg, NULL, dstimg,
0, 0, 0, 0,
@ -150,6 +146,18 @@ static void do_work(void* handle)
pixman_image_unref(dstimg); pixman_image_unref(dstimg);
} }
static void do_work(void* handle)
{
struct aml_work* work = handle;
struct resampler_work* ctx = aml_get_userdata(work);
struct nvnc_fb* src = ctx->src;
struct nvnc_fb* dst = ctx->dst;
struct fb_side_data* dst_side_data = nvnc_get_userdata(dst);
resample_now(dst, src, &dst_side_data->buffer_damage);
}
static void on_work_done(void* handle) static void on_work_done(void* handle)
{ {
struct aml_work* work = handle; struct aml_work* work = handle;