1013
1013
overlay->outline_offset = MINIMUM_OUTLINE_OFFSET;
1016
#define CAIRO_UNPREMULTIPLY(a,r,g,b) G_STMT_START { \
1017
b = (a > 0) ? MIN ((b * 255 + a / 2) / a, 255) : 0; \
1018
g = (a > 0) ? MIN ((g * 255 + a / 2) / a, 255) : 0; \
1019
r = (a > 0) ? MIN ((r * 255 + a / 2) / a, 255) : 0; \
1016
1022
static inline void
1017
1023
gst_text_overlay_blit_1 (GstTextOverlay * overlay, guchar * dest, gint xpos,
1018
1024
gint ypos, guchar * text_image, guint dest_stride)
1047
1053
g = pimage[CAIRO_ARGB_G];
1048
1054
r = pimage[CAIRO_ARGB_R];
1049
1055
a = pimage[CAIRO_ARGB_A];
1056
CAIRO_UNPREMULTIPLY (a, r, g, b);
1097
1106
g = pimage1[CAIRO_ARGB_G];
1098
1107
r = pimage1[CAIRO_ARGB_R];
1099
1108
a = pimage1[CAIRO_ARGB_A];
1102
b += pimage1[CAIRO_ARGB_B];
1103
g += pimage1[CAIRO_ARGB_G];
1104
r += pimage1[CAIRO_ARGB_R];
1105
a += pimage1[CAIRO_ARGB_A];
1108
b += pimage2[CAIRO_ARGB_B];
1109
g += pimage2[CAIRO_ARGB_G];
1110
r += pimage2[CAIRO_ARGB_R];
1111
a += pimage2[CAIRO_ARGB_A];
1109
CAIRO_UNPREMULTIPLY (a, r, g, b);
1112
b1 = pimage1[CAIRO_ARGB_B];
1113
g1 = pimage1[CAIRO_ARGB_G];
1114
r1 = pimage1[CAIRO_ARGB_R];
1115
a1 = pimage1[CAIRO_ARGB_A];
1116
CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
1123
b1 = pimage2[CAIRO_ARGB_B];
1124
g1 = pimage2[CAIRO_ARGB_G];
1125
r1 = pimage2[CAIRO_ARGB_R];
1126
a1 = pimage2[CAIRO_ARGB_A];
1127
CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
1114
1134
/* + 2 for rounding */
1115
b += pimage2[CAIRO_ARGB_B] + 2;
1116
g += pimage2[CAIRO_ARGB_G] + 2;
1117
r += pimage2[CAIRO_ARGB_R] + 2;
1118
a += pimage2[CAIRO_ARGB_A] + 2;
1135
b1 = pimage2[CAIRO_ARGB_B];
1136
g1 = pimage2[CAIRO_ARGB_G];
1137
r1 = pimage2[CAIRO_ARGB_R];
1138
a1 = pimage2[CAIRO_ARGB_A];
1139
CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
1430
1455
g0 = pimage[CAIRO_ARGB_G];
1431
1456
r0 = pimage[CAIRO_ARGB_R];
1432
1457
a0 = pimage[CAIRO_ARGB_A];
1458
CAIRO_UNPREMULTIPLY (a0, r0, g0, b0);
1435
1461
b1 = pimage[CAIRO_ARGB_B];
1436
1462
g1 = pimage[CAIRO_ARGB_G];
1437
1463
r1 = pimage[CAIRO_ARGB_R];
1438
1464
a1 = pimage[CAIRO_ARGB_A];
1465
CAIRO_UNPREMULTIPLY (a1, r1, g1, b1);
1501
1528
dest = rgb_pixels + (i + ypos) * 4 * overlay->width + xpos * 4; \
1502
1529
for (j = 0; j < w; j++) { \
1503
1530
a = pimage[CAIRO_ARGB_A]; \
1504
b = (pimage[CAIRO_ARGB_B] * a + dest[B] * (255-a)) / 255; \
1505
g = (pimage[CAIRO_ARGB_G] * a + dest[G] * (255-a)) / 255; \
1506
r = (pimage[CAIRO_ARGB_R] * a + dest[R] * (255-a)) / 255; \
1531
b = pimage[CAIRO_ARGB_B]; \
1532
g = pimage[CAIRO_ARGB_G]; \
1533
r = pimage[CAIRO_ARGB_R]; \
1534
CAIRO_UNPREMULTIPLY (a, r, g, b); \
1535
b = (b*a + dest[B] * (255-a)) / 255; \
1536
g = (g*a + dest[G] * (255-a)) / 255; \
1537
r = (r*a + dest[R] * (255-a)) / 255; \