#define M_PI 3.14159265358979323846
#endif
+static void paint_tmpline_ARGB (paintinfo * p, int x, int w);
+static void paint_tmpline_AYUV (paintinfo * p, int x, int w);
+
+static void convert_hline_I420 (paintinfo * p, int y);
+
+
static unsigned char
random_char (void)
{
p->height = h;
p->paint_hline = v->fourcc->paint_hline;
+ if (v->fourcc->type == VTS_RGB || v->fourcc->type == VTS_BAYER) {
+ p->paint_tmpline = paint_tmpline_ARGB;
+ } else {
+ p->paint_tmpline = paint_tmpline_AYUV;
+ }
+ p->convert_tmpline = convert_hline_I420;
+ p->tmpline = v->tmpline;
a = (v->foreground_color >> 24) & 0xff;
r = (v->foreground_color >> 16) & 0xff;
y2 = h * 0.75;
/* color bars */
- for (i = 0; i < 7; i++) {
- int x1 = i * w / 7;
- int x2 = (i + 1) * w / 7;
+ for (j = 0; j < y1; j++) {
+ for (i = 0; i < 7; i++) {
+ int x1 = i * w / 7;
+ int x2 = (i + 1) * w / 7;
- p->color = p->colors + i;
- for (j = 0; j < y1; j++) {
- p->paint_hline (p, x1, j, (x2 - x1));
+ p->color = p->colors + i;
+ p->paint_tmpline (p, x1, (x2 - x1));
}
+ p->convert_tmpline (p, j);
}
/* inverse blue bars */
- for (i = 0; i < 7; i++) {
- int x1 = i * w / 7;
- int x2 = (i + 1) * w / 7;
- int k;
+ for (j = y1; j < y2; j++) {
+ for (i = 0; i < 7; i++) {
+ int x1 = i * w / 7;
+ int x2 = (i + 1) * w / 7;
+ int k;
- if (i & 1) {
- k = 7;
- } else {
- k = 6 - i;
- }
- p->color = p->colors + k;
- for (j = y1; j < y2; j++) {
- p->paint_hline (p, x1, j, (x2 - x1));
+ if (i & 1) {
+ k = 7;
+ } else {
+ k = 6 - i;
+ }
+ p->color = p->colors + k;
+ p->paint_tmpline (p, x1, (x2 - x1));
}
+ p->convert_tmpline (p, j);
}
- /* -I, white, Q regions */
- for (i = 0; i < 3; i++) {
- int x1 = i * w / 6;
- int x2 = (i + 1) * w / 6;
- int k;
-
- if (i == 0) {
- k = 8;
- } else if (i == 1) {
- k = 0;
- } else
- k = 9;
-
- p->color = p->colors + k;
- for (j = y2; j < h; j++) {
- p->paint_hline (p, x1, j, (x2 - x1));
+ for (j = y2; j < h; j++) {
+ /* -I, white, Q regions */
+ for (i = 0; i < 3; i++) {
+ int x1 = i * w / 6;
+ int x2 = (i + 1) * w / 6;
+ int k;
+
+ if (i == 0) {
+ k = 8;
+ } else if (i == 1) {
+ k = 0;
+ } else
+ k = 9;
+
+ p->color = p->colors + k;
+ p->paint_tmpline (p, x1, (x2 - x1));
}
- }
- /* superblack, black, dark grey */
- for (i = 0; i < 3; i++) {
- int x1 = w / 2 + i * w / 12;
- int x2 = w / 2 + (i + 1) * w / 12;
- int k;
-
- if (i == 0) {
- k = COLOR_SUPER_BLACK;
- } else if (i == 1) {
- k = COLOR_BLACK;
- } else
- k = COLOR_DARK_GREY;
-
- p->color = p->colors + k;
- for (j = y2; j < h; j++) {
- p->paint_hline (p, x1, j, (x2 - x1));
+ /* superblack, black, dark grey */
+ for (i = 0; i < 3; i++) {
+ int x1 = w / 2 + i * w / 12;
+ int x2 = w / 2 + (i + 1) * w / 12;
+ int k;
+
+ if (i == 0) {
+ k = COLOR_SUPER_BLACK;
+ } else if (i == 1) {
+ k = COLOR_BLACK;
+ } else
+ k = COLOR_DARK_GREY;
+
+ p->color = p->colors + k;
+ p->paint_tmpline (p, x1, (x2 - x1));
}
- }
- {
- int x1 = w * 3 / 4;
- struct vts_color_struct color;
+ {
+ int x1 = w * 3 / 4;
+ struct vts_color_struct color;
- color = p->colors[COLOR_BLACK];
- p->color = &color;
+ color = p->colors[COLOR_BLACK];
+ p->color = &color;
- for (i = x1; i < w; i++) {
- for (j = y2; j < h; j++) {
+ for (i = x1; i < w; i++) {
int y = random_char ();
videotestsrc_blend_color (&color, &p->foreground_color,
&p->background_color, y);
- p->paint_hline (p, i, j, 1);
+ p->paint_tmpline (p, i, 1);
}
}
+ p->convert_tmpline (p, j);
}
}
fourcc->paint_setup (p, dest);
/* color bars */
- for (i = 0; i < 7; i++) {
- int x1 = i * w / 7;
- int x2 = (i + 1) * w / 7;
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < 7; i++) {
+ int x1 = i * w / 7;
+ int x2 = (i + 1) * w / 7;
- p->color = p->colors + i;
- for (j = 0; j < h; j++) {
- p->paint_hline (p, x1, j, (x2 - x1));
+ p->color = p->colors + i;
+ p->paint_tmpline (p, x1, (x2 - x1));
}
+ p->convert_tmpline (p, j);
}
}
color = p->colors[COLOR_BLACK];
p->color = &color;
- for (i = 0; i < w; i++) {
- for (j = 0; j < h; j++) {
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
int y = random_char ();
videotestsrc_blend_color (&color, &p->foreground_color,
&p->background_color, y);
- p->paint_hline (p, i, j, 1);
+ p->paint_tmpline (p, i, 1);
}
+ p->convert_tmpline (p, j);
}
}
}
for (i = 0; i < h; i++) {
- p->paint_hline (p, 0, i, w);
+ p->paint_tmpline (p, 0, w);
+ p->convert_tmpline (p, i);
}
}
p->color = &p->foreground_color;
for (i = 0; i < h; i++) {
- p->paint_hline (p, 0, i, w);
+ p->paint_tmpline (p, 0, w);
+ p->convert_tmpline (p, i);
}
}
fourcc->paint_setup (p, dest);
- for (y = 0; y < h; y++) {
- p->color = p->colors + COLOR_GREEN;
- p->paint_hline (p, 0, y, w);
- for (x = (y % 2); x < w; x += 2) {
- p->color = p->colors + COLOR_RED;
- p->paint_hline (p, x, y, 1);
+ for (y = 0; y < h; y ++) {
+ for (x = 0; x < w; x++){
+ if ((x^y)&1) {
+ p->color = p->colors + COLOR_GREEN;
+ } else {
+ p->color = p->colors + COLOR_RED;
+ }
+ p->paint_tmpline (p, x, 1);
}
+ p->convert_tmpline (p, y);
}
}
fourcc->paint_setup (p, dest);
- p->color = p->colors + COLOR_GREEN;
- for (y = 0; y < h; y++) {
- p->paint_hline (p, 0, y, w);
- }
-
- for (y = 0; y < h; y += 2) {
- for (x = ((y % 4) == 0) ? 0 : 2; x < w; x += 4) {
- guint len = (x < (w - 1)) ? 2 : (w - x);
+ for (y = 0; y < h; y ++) {
+ for (x = 0; x < w; x+=2){
+ guint len = MIN(2,w-x);
- p->color = p->colors + COLOR_RED;
- p->paint_hline (p, x, y + 0, len);
- if (G_LIKELY ((y + 1) < h)) {
- p->paint_hline (p, x, y + 1, len);
+ if ((x^y)&2) {
+ p->color = p->colors + COLOR_GREEN;
+ } else {
+ p->color = p->colors + COLOR_RED;
}
+ p->paint_tmpline (p, x, len);
}
+ p->convert_tmpline (p, y);
}
}
fourcc->paint_setup (p, dest);
- p->color = p->colors + COLOR_GREEN;
- for (y = 0; y < h; y++) {
- p->paint_hline (p, 0, y, w);
- }
+ for (y = 0; y < h; y ++) {
+ for (x = 0; x < w; x+=4){
+ guint len = MIN(4,w-x);
- for (y = 0; y < h; y += 4) {
- for (x = ((y % 8) == 0) ? 0 : 4; x < w; x += 8) {
- guint len = (x < (w - 3)) ? 4 : (w - x);
-
- p->color = p->colors + COLOR_RED;
- p->paint_hline (p, x, y + 0, len);
- if (G_LIKELY ((y + 1) < h)) {
- p->paint_hline (p, x, y + 1, len);
- if (G_LIKELY ((y + 2) < h)) {
- p->paint_hline (p, x, y + 2, len);
- if (G_LIKELY ((y + 3) < h)) {
- p->paint_hline (p, x, y + 3, len);
- }
- }
+ if ((x^y)&4) {
+ p->color = p->colors + COLOR_GREEN;
+ } else {
+ p->color = p->colors + COLOR_RED;
}
+ p->paint_tmpline (p, x, len);
}
+ p->convert_tmpline (p, y);
}
}
fourcc->paint_setup (p, dest);
- p->color = p->colors + COLOR_GREEN;
- for (y = 0; y < h; y++) {
- for (x = 0; x < w; x += 8) {
- int len = MIN (8, w - x);
+ for (y = 0; y < h; y ++) {
+ for (x = 0; x < w; x+=8){
+ guint len = MIN(8,w-x);
- if ((x ^ y) & (1 << 3)) {
+ if ((x^y)&8) {
p->color = p->colors + COLOR_GREEN;
} else {
p->color = p->colors + COLOR_RED;
}
- p->paint_hline (p, x, y, len);
+ p->paint_tmpline (p, x, len);
}
+ p->convert_tmpline (p, y);
}
}
color.R = color.Y;
color.G = color.Y;
color.B = color.Y;
- p->paint_hline (p, i, j, 1);
+ p->paint_tmpline (p, i, 1);
}
}
#endif
videotestsrc_blend_color (&color, &p->foreground_color,
&p->background_color, sine_table[phase & 0xff]);
- p->paint_hline (p, i, j, 1);
+ p->paint_tmpline (p, i, 1);
}
+ p->convert_tmpline (p, j);
}
v->zoneplate_t++;
color.B = color.V;
color.gray = color.Y << 8;
- p->paint_hline (p, i, j, 1);
+ p->paint_tmpline (p, i, 1);
}
+ p->convert_tmpline (p, j);
}
v->zoneplate_t++;
#endif
}
- for (i = 0; i < w; i++) {
- for (j = 0; j < h; j++) {
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < w; i++) {
double dist;
int seg;
&p->background_color, sine_table[d & 0xff]);
#endif
}
- p->paint_hline (p, i, j, 1);
+ p->paint_tmpline (p, i, 1);
}
+ p->convert_tmpline (p, j);
}
}
} else {
p->color = &yuv_secondary;
}
- p->paint_hline (p, x, y, len);
+ p->paint_tmpline (p, x, len);
}
+ p->convert_tmpline (p, y);
}
}
for (i = 0; i < h; i++) {
if (i < y - radius || i > y + radius) {
p->color = &p->foreground_color;
- p->paint_hline (p, 0, i, w);
+ p->paint_tmpline (p, 0, w);
} else {
int r = rint (sqrt (radius * radius - (i - y) * (i - y)));
int x1, x2;
p->color = &p->foreground_color;
x1 = 0;
x2 = MAX (0, x - r);
- p->paint_hline (p, x1, i, x2 - x1);
+ p->paint_tmpline (p, x1, x2 - x1);
x1 = MAX (0, x - r);
x2 = MIN (w, x + r + 1);
p->color = &yuv;
}
- p->paint_hline (p, j, i, 1);
+ p->paint_tmpline (p, j, 1);
}
p->color = &p->foreground_color;
x1 = MIN (w, x + r + 1);
x2 = w;
- p->paint_hline (p, x1, i, x2 - x1);
+ p->paint_tmpline (p, x1, x2 - x1);
}
+ p->convert_tmpline (p, i);
}
v->zoneplate_t++;
}
}
/* color bars */
- for (i = 0; i < 7; i++) {
- int w1, w2 = 0;
- int x1 = i * w / 7 + offset;
- int x2 = (i + 1) * w / 7 + offset;
-
- if (x1 > w) {
- x1 -= w;
- x2 -= w;
- }
+ for (j = 0; j < h; j++) {
+ for (i = 0; i < 7; i++) {
+ int w1, w2 = 0;
+ int x1 = i * w / 7 + offset;
+ int x2 = (i + 1) * w / 7 + offset;
+
+ if (x1 > w) {
+ x1 -= w;
+ x2 -= w;
+ }
- if (x2 > w) {
- w1 = w - x1;
- w2 = (x2 - x1) - w1;
- } else {
- w1 = x2 - x1;
- }
+ if (x2 > w) {
+ w1 = w - x1;
+ w2 = (x2 - x1) - w1;
+ } else {
+ w1 = x2 - x1;
+ }
- p->color = p->colors + i;
- for (j = 0; j < h; j++) {
+ p->color = p->colors + i;
if (x2 > w) {
- p->paint_hline (p, 0, j, w2);
+ p->paint_tmpline (p, 0, w2);
}
- p->paint_hline (p, x1, j, w1);
+ p->paint_tmpline (p, x1, w1);
}
+ p->convert_tmpline (p, j);
}
}
+static void
+paint_tmpline_ARGB (paintinfo * p, int x, int w)
+{
+ int offset;
+ guint32 value;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ value = (p->color->A << 0) | (p->color->R << 8) |
+ (p->color->G << 16) | (p->color->B << 24);
+#else
+ value = (p->color->A << 24) | (p->color->R << 16) |
+ (p->color->G << 8) | (p->color->B << 0);
+#endif
+
+ offset = (x * 4);
+ gst_orc_splat_u32 (p->tmpline + offset, value, w);
+}
+
+static void
+paint_tmpline_AYUV (paintinfo * p, int x, int w)
+{
+ int offset;
+ guint32 value;
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ value = (p->color->A << 0) | (p->color->Y << 8) |
+ (p->color->U << 16) | (p->color->V << 24);
+#else
+ value = (p->color->A << 24) | (p->color->Y << 16) |
+ (p->color->U << 8) | (p->color->V << 0);
+#endif
+
+ offset = (x * 4);
+ gst_orc_splat_u32 (p->tmpline + offset, value, w);
+}
+
static void
paint_setup_I420 (paintinfo * p, unsigned char *dest)
}
static void
+convert_hline_I420 (paintinfo * p, int y)
+{
+ int i;
+ guint8 *Y = p->yp + y * p->ystride;
+ guint8 *U = p->up + (y/2) * p->ustride;
+ guint8 *V = p->vp + (y/2) * p->vstride;
+ guint8 *ayuv = p->tmpline;
+
+ for(i=0;i<p->width;i++){
+ Y[i] = ayuv[4*i+1];
+ }
+ for(i=0;i<p->width/2;i++){
+ U[i] = (ayuv[4*(i*2)+2] + ayuv[4*(i*2+1)+2] + 1)>>1;
+ V[i] = (ayuv[4*(i*2)+3] + ayuv[4*(i*2+1)+3] + 1)>>1;
+ }
+}
+
+static void
paint_hline_NV12 (paintinfo * p, int x, int y, int w)
{
int x1 = x / 2;