videotestsrc: Use static sine table
This commit is contained in:
parent
131d619737
commit
d03fc85095
@ -15,4 +15,9 @@ libgstvideotestsrc_la_LIBTOOLFLAGS = --tag=disable-static
|
|||||||
|
|
||||||
noinst_HEADERS = gstvideotestsrc.h videotestsrc.h
|
noinst_HEADERS = gstvideotestsrc.h videotestsrc.h
|
||||||
|
|
||||||
|
noinst_PROGRAMS = generate_sine_table
|
||||||
|
|
||||||
|
generate_sine_table_SOURCES = generate_sine_table.c
|
||||||
|
generate_sine_table_CFLAGS = $(GST_CFLAGS)
|
||||||
|
generate_sine_table_LDADD = $(LIBM)
|
||||||
|
|
||||||
|
42
gst/videotestsrc/generate_sine_table.c
Normal file
42
gst/videotestsrc/generate_sine_table.c
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
get_value (int i)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
|
||||||
|
x = floor (256 * (0.5 + 0.5 * sin (i * 2 * M_PI / 256)));
|
||||||
|
if (x > 255)
|
||||||
|
x = 255;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
printf ("static const guint8\n");
|
||||||
|
printf ("sine_table[256] = {\n");
|
||||||
|
for (i = 0; i < 256; i += 8) {
|
||||||
|
printf (" ");
|
||||||
|
for (j = 0; j < 8; j++) {
|
||||||
|
printf ("%3d", get_value (i + j));
|
||||||
|
if (j != 7) {
|
||||||
|
printf (", ");
|
||||||
|
} else {
|
||||||
|
if (i + j != 255) {
|
||||||
|
printf (",\n");
|
||||||
|
} else {
|
||||||
|
printf ("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf ("};\n");
|
||||||
|
|
||||||
|
}
|
@ -1179,6 +1179,42 @@ gst_video_test_src_checkers8 (GstVideoTestSrc * v, guchar * dest, int w, int h)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const guint8 sine_table[256] = {
|
||||||
|
128, 131, 134, 137, 140, 143, 146, 149,
|
||||||
|
152, 156, 159, 162, 165, 168, 171, 174,
|
||||||
|
176, 179, 182, 185, 188, 191, 193, 196,
|
||||||
|
199, 201, 204, 206, 209, 211, 213, 216,
|
||||||
|
218, 220, 222, 224, 226, 228, 230, 232,
|
||||||
|
234, 236, 237, 239, 240, 242, 243, 245,
|
||||||
|
246, 247, 248, 249, 250, 251, 252, 252,
|
||||||
|
253, 254, 254, 255, 255, 255, 255, 255,
|
||||||
|
255, 255, 255, 255, 255, 255, 254, 254,
|
||||||
|
253, 252, 252, 251, 250, 249, 248, 247,
|
||||||
|
246, 245, 243, 242, 240, 239, 237, 236,
|
||||||
|
234, 232, 230, 228, 226, 224, 222, 220,
|
||||||
|
218, 216, 213, 211, 209, 206, 204, 201,
|
||||||
|
199, 196, 193, 191, 188, 185, 182, 179,
|
||||||
|
176, 174, 171, 168, 165, 162, 159, 156,
|
||||||
|
152, 149, 146, 143, 140, 137, 134, 131,
|
||||||
|
128, 124, 121, 118, 115, 112, 109, 106,
|
||||||
|
103, 99, 96, 93, 90, 87, 84, 81,
|
||||||
|
79, 76, 73, 70, 67, 64, 62, 59,
|
||||||
|
56, 54, 51, 49, 46, 44, 42, 39,
|
||||||
|
37, 35, 33, 31, 29, 27, 25, 23,
|
||||||
|
21, 19, 18, 16, 15, 13, 12, 10,
|
||||||
|
9, 8, 7, 6, 5, 4, 3, 3,
|
||||||
|
2, 1, 1, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 1, 1,
|
||||||
|
2, 3, 3, 4, 5, 6, 7, 8,
|
||||||
|
9, 10, 12, 13, 15, 16, 18, 19,
|
||||||
|
21, 23, 25, 27, 29, 31, 33, 35,
|
||||||
|
37, 39, 42, 44, 46, 49, 51, 54,
|
||||||
|
56, 59, 62, 64, 67, 70, 73, 76,
|
||||||
|
79, 81, 84, 87, 90, 93, 96, 99,
|
||||||
|
103, 106, 109, 112, 115, 118, 121, 124
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
||||||
int w, int h)
|
int w, int h)
|
||||||
@ -1189,8 +1225,6 @@ gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
paintinfo *p = π
|
paintinfo *p = π
|
||||||
struct fourcc_list_struct *fourcc;
|
struct fourcc_list_struct *fourcc;
|
||||||
struct vts_color_struct color;
|
struct vts_color_struct color;
|
||||||
static guint8 sine_array[256];
|
|
||||||
static int sine_array_inited = FALSE;
|
|
||||||
int t = v->zoneplate_t;
|
int t = v->zoneplate_t;
|
||||||
int xreset = -(w / 2) - v->xoffset; /* starting values for x^2 and y^2, centering the ellipse */
|
int xreset = -(w / 2) - v->xoffset; /* starting values for x^2 and y^2, centering the ellipse */
|
||||||
int yreset = -(h / 2) - v->yoffset;
|
int yreset = -(h / 2) - v->yoffset;
|
||||||
@ -1209,17 +1243,6 @@ gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
int scale_kxy = 0xffff / (w / 2);
|
int scale_kxy = 0xffff / (w / 2);
|
||||||
int scale_kx2 = 0xffff / w;
|
int scale_kx2 = 0xffff / w;
|
||||||
|
|
||||||
if (!sine_array_inited) {
|
|
||||||
int black = 16;
|
|
||||||
int white = 235;
|
|
||||||
int range = white - black;
|
|
||||||
for (i = 0; i < 256; i++) {
|
|
||||||
sine_array[i] =
|
|
||||||
floor (range * (0.5 + 0.5 * sin (i * 2 * M_PI / 256)) + 0.5 + black);
|
|
||||||
}
|
|
||||||
sine_array_inited = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
videotestsrc_setup_paintinfo (v, p, w, h);
|
videotestsrc_setup_paintinfo (v, p, w, h);
|
||||||
fourcc = v->fourcc;
|
fourcc = v->fourcc;
|
||||||
if (fourcc == NULL)
|
if (fourcc == NULL)
|
||||||
@ -1257,7 +1280,7 @@ gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
phase + ((v->kx2 * x * x) / w) + ((v->ky2 * y * y) / h) +
|
phase + ((v->kx2 * x * x) / w) + ((v->ky2 * y * y) / h) +
|
||||||
((v->kt2 * t * t) >> 1);
|
((v->kt2 * t * t) >> 1);
|
||||||
|
|
||||||
color.Y = sine_array[phase & 0xff];
|
color.Y = sine_table[phase & 0xff];
|
||||||
|
|
||||||
color.R = color.Y;
|
color.R = color.Y;
|
||||||
color.G = color.Y;
|
color.G = color.Y;
|
||||||
@ -1306,7 +1329,7 @@ gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
phase = phase + ((v->kx2 * x * x * scale_kx2) >> 16) + ky2 + (kt2 >> 1);
|
phase = phase + ((v->kx2 * x * x * scale_kx2) >> 16) + ky2 + (kt2 >> 1);
|
||||||
|
|
||||||
videotestsrc_blend_color (&color, &p->foreground_color,
|
videotestsrc_blend_color (&color, &p->foreground_color,
|
||||||
&p->background_color, sine_array[phase & 0xff]);
|
&p->background_color, sine_table[phase & 0xff]);
|
||||||
|
|
||||||
p->paint_hline (p, i, j, 1);
|
p->paint_hline (p, i, j, 1);
|
||||||
}
|
}
|
||||||
@ -1325,8 +1348,6 @@ gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
paintinfo *p = π
|
paintinfo *p = π
|
||||||
struct fourcc_list_struct *fourcc;
|
struct fourcc_list_struct *fourcc;
|
||||||
struct vts_color_struct color;
|
struct vts_color_struct color;
|
||||||
static guint8 sine_array[256];
|
|
||||||
static int sine_array_inited = FALSE;
|
|
||||||
int t = v->zoneplate_t;
|
int t = v->zoneplate_t;
|
||||||
|
|
||||||
int xreset = -(w / 2) - v->xoffset; /* starting values for x^2 and y^2, centering the ellipse */
|
int xreset = -(w / 2) - v->xoffset; /* starting values for x^2 and y^2, centering the ellipse */
|
||||||
@ -1346,17 +1367,6 @@ gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
int scale_kxy = 0xffff / (w / 2);
|
int scale_kxy = 0xffff / (w / 2);
|
||||||
int scale_kx2 = 0xffff / w;
|
int scale_kx2 = 0xffff / w;
|
||||||
|
|
||||||
if (!sine_array_inited) {
|
|
||||||
int black = 16;
|
|
||||||
int white = 235;
|
|
||||||
int range = white - black;
|
|
||||||
for (i = 0; i < 256; i++) {
|
|
||||||
sine_array[i] =
|
|
||||||
floor (range * (0.5 + 0.5 * sin (i * 2 * M_PI / 256)) + 0.5 + black);
|
|
||||||
}
|
|
||||||
sine_array_inited = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
videotestsrc_setup_paintinfo (v, p, w, h);
|
videotestsrc_setup_paintinfo (v, p, w, h);
|
||||||
fourcc = v->fourcc;
|
fourcc = v->fourcc;
|
||||||
if (fourcc == NULL)
|
if (fourcc == NULL)
|
||||||
@ -1413,8 +1423,8 @@ gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
phase = phase + ((v->kx2 * x * x * scale_kx2) >> 16) + ky2 + (kt2 >> 1);
|
phase = phase + ((v->kx2 * x * x * scale_kx2) >> 16) + ky2 + (kt2 >> 1);
|
||||||
|
|
||||||
color.Y = 128;
|
color.Y = 128;
|
||||||
color.U = sine_array[phase & 0xff];
|
color.U = sine_table[phase & 0xff];
|
||||||
color.V = sine_array[phase & 0xff];
|
color.V = sine_table[phase & 0xff];
|
||||||
|
|
||||||
color.R = 128;
|
color.R = 128;
|
||||||
color.G = 128;
|
color.G = 128;
|
||||||
@ -1439,8 +1449,6 @@ gst_video_test_src_circular (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
paintinfo *p = π
|
paintinfo *p = π
|
||||||
struct fourcc_list_struct *fourcc;
|
struct fourcc_list_struct *fourcc;
|
||||||
struct vts_color_struct color;
|
struct vts_color_struct color;
|
||||||
static guint8 sine_array[256];
|
|
||||||
static int sine_array_inited = FALSE;
|
|
||||||
double freq[8];
|
double freq[8];
|
||||||
|
|
||||||
#ifdef SCALE_AMPLITUDE
|
#ifdef SCALE_AMPLITUDE
|
||||||
@ -1448,14 +1456,6 @@ gst_video_test_src_circular (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
#endif
|
#endif
|
||||||
int d;
|
int d;
|
||||||
|
|
||||||
if (!sine_array_inited) {
|
|
||||||
for (i = 0; i < 256; i++) {
|
|
||||||
sine_array[i] =
|
|
||||||
floor (255 * (0.5 + 0.5 * sin (i * 2 * M_PI / 256)) + 0.5);
|
|
||||||
}
|
|
||||||
sine_array_inited = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
videotestsrc_setup_paintinfo (v, p, w, h);
|
videotestsrc_setup_paintinfo (v, p, w, h);
|
||||||
fourcc = v->fourcc;
|
fourcc = v->fourcc;
|
||||||
if (fourcc == NULL)
|
if (fourcc == NULL)
|
||||||
@ -1499,10 +1499,10 @@ gst_video_test_src_circular (GstVideoTestSrc * v, unsigned char *dest,
|
|||||||
if (a < 0)
|
if (a < 0)
|
||||||
a = 0;
|
a = 0;
|
||||||
videotestsrc_blend_color (&color, &p->foreground_color,
|
videotestsrc_blend_color (&color, &p->foreground_color,
|
||||||
&p->background_color, 128 + a * (sine_array[d & 0xff] - 128));
|
&p->background_color, 128 + a * (sine_table[d & 0xff] - 128));
|
||||||
#else
|
#else
|
||||||
videotestsrc_blend_color (&color, &p->foreground_color,
|
videotestsrc_blend_color (&color, &p->foreground_color,
|
||||||
&p->background_color, sine_array[d & 0xff]);
|
&p->background_color, sine_table[d & 0xff]);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
p->paint_hline (p, i, j, 1);
|
p->paint_hline (p, i, j, 1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user