mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 08:41:07 +00:00
[MOVED FROM BAD 05/29] shapewipe: Adjust border to still have everything transparent at 1.0 and the other way around
This commit is contained in:
parent
88f4bd4efd
commit
19a0764537
1 changed files with 30 additions and 10 deletions
|
@ -556,14 +556,24 @@ gst_shape_wipe_blend_16 (GstShapeWipe * self, GstBuffer * inbuf,
|
||||||
guint i, j;
|
guint i, j;
|
||||||
guint mask_increment = GST_ROUND_UP_2 (self->width) - self->width;
|
guint mask_increment = GST_ROUND_UP_2 (self->width) - self->width;
|
||||||
gfloat position = self->mask_position;
|
gfloat position = self->mask_position;
|
||||||
gfloat low = MAX (0.0, position - (self->mask_border / 2.0));
|
gfloat low = position - (self->mask_border / 2.0f);
|
||||||
gfloat high = MIN (1.0, position + (self->mask_border / 2.0));
|
gfloat high = position + (self->mask_border / 2.0f);
|
||||||
|
|
||||||
|
if (low < 0.0f) {
|
||||||
|
high = 0.0f;
|
||||||
|
low = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (high > 1.0f) {
|
||||||
|
low = 1.0f;
|
||||||
|
high = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < self->height; i++) {
|
for (i = 0; i < self->height; i++) {
|
||||||
for (j = 0; j < self->width; j++) {
|
for (j = 0; j < self->width; j++) {
|
||||||
gfloat in = *mask / 65535.0;
|
gfloat in = *mask / 65535.0f;
|
||||||
|
|
||||||
if (in <= low) {
|
if (in < low) {
|
||||||
output[0] = 0x00; /* A */
|
output[0] = 0x00; /* A */
|
||||||
output[1] = 0x00; /* Y */
|
output[1] = 0x00; /* Y */
|
||||||
output[2] = 0x80; /* U */
|
output[2] = 0x80; /* U */
|
||||||
|
@ -574,7 +584,7 @@ gst_shape_wipe_blend_16 (GstShapeWipe * self, GstBuffer * inbuf,
|
||||||
output[2] = input[2]; /* U */
|
output[2] = input[2]; /* U */
|
||||||
output[3] = input[3]; /* V */
|
output[3] = input[3]; /* V */
|
||||||
} else {
|
} else {
|
||||||
gfloat val = 255 * ((in - low) / (high - low));
|
gfloat val = 255.0f * ((in - low) / (high - low));
|
||||||
|
|
||||||
output[0] = CLAMP (val, 0, 255); /* A */
|
output[0] = CLAMP (val, 0, 255); /* A */
|
||||||
output[1] = input[1]; /* Y */
|
output[1] = input[1]; /* Y */
|
||||||
|
@ -602,14 +612,24 @@ gst_shape_wipe_blend_8 (GstShapeWipe * self, GstBuffer * inbuf,
|
||||||
guint i, j;
|
guint i, j;
|
||||||
guint mask_increment = GST_ROUND_UP_4 (self->width) - self->width;
|
guint mask_increment = GST_ROUND_UP_4 (self->width) - self->width;
|
||||||
gfloat position = self->mask_position;
|
gfloat position = self->mask_position;
|
||||||
gfloat low = MAX (0.0, position - (self->mask_border / 2.0));
|
gfloat low = position - (self->mask_border / 2.0f);
|
||||||
gfloat high = MIN (1.0, position + (self->mask_border / 2.0));
|
gfloat high = position + (self->mask_border / 2.0f);
|
||||||
|
|
||||||
|
if (low < 0.0f) {
|
||||||
|
high = 0.0f;
|
||||||
|
low = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (high > 1.0f) {
|
||||||
|
low = 1.0f;
|
||||||
|
high = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < self->height; i++) {
|
for (i = 0; i < self->height; i++) {
|
||||||
for (j = 0; j < self->width; j++) {
|
for (j = 0; j < self->width; j++) {
|
||||||
gfloat in = *mask / 255.0;
|
gfloat in = *mask / 255.0f;
|
||||||
|
|
||||||
if (in <= low) {
|
if (in < low) {
|
||||||
output[0] = 0x00; /* A */
|
output[0] = 0x00; /* A */
|
||||||
output[1] = 0x00; /* Y */
|
output[1] = 0x00; /* Y */
|
||||||
output[2] = 0x80; /* U */
|
output[2] = 0x80; /* U */
|
||||||
|
@ -620,7 +640,7 @@ gst_shape_wipe_blend_8 (GstShapeWipe * self, GstBuffer * inbuf,
|
||||||
output[2] = input[2]; /* U */
|
output[2] = input[2]; /* U */
|
||||||
output[3] = input[3]; /* V */
|
output[3] = input[3]; /* V */
|
||||||
} else {
|
} else {
|
||||||
gfloat val = 255 * ((in - low) / (high - low));
|
gfloat val = 255.0f * ((in - low) / (high - low));
|
||||||
|
|
||||||
output[0] = CLAMP (val, 0, 255); /* A */
|
output[0] = CLAMP (val, 0, 255); /* A */
|
||||||
output[1] = input[1]; /* Y */
|
output[1] = input[1]; /* Y */
|
||||||
|
|
Loading…
Reference in a new issue