From: David Schleef Date: Mon, 6 Sep 2010 03:57:48 +0000 (-0700) Subject: videotestsrc: Use static sine table X-Git-Tag: RELEASE-0.10.31~247 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d03fc85095d32461455875f1ecd63cce9cdce64f;p=platform%2Fupstream%2Fgst-plugins-base.git videotestsrc: Use static sine table --- diff --git a/gst/videotestsrc/Makefile.am b/gst/videotestsrc/Makefile.am index 4e21874..12f357d 100644 --- a/gst/videotestsrc/Makefile.am +++ b/gst/videotestsrc/Makefile.am @@ -15,4 +15,9 @@ libgstvideotestsrc_la_LIBTOOLFLAGS = --tag=disable-static 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) diff --git a/gst/videotestsrc/generate_sine_table.c b/gst/videotestsrc/generate_sine_table.c new file mode 100644 index 0000000..4d8e571 --- /dev/null +++ b/gst/videotestsrc/generate_sine_table.c @@ -0,0 +1,42 @@ + +#include +#include + + +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"); + +} diff --git a/gst/videotestsrc/videotestsrc.c b/gst/videotestsrc/videotestsrc.c index de7f336..d4c61a6 100644 --- a/gst/videotestsrc/videotestsrc.c +++ b/gst/videotestsrc/videotestsrc.c @@ -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 gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest, int w, int h) @@ -1189,8 +1225,6 @@ gst_video_test_src_zoneplate (GstVideoTestSrc * v, unsigned char *dest, paintinfo *p = π struct fourcc_list_struct *fourcc; struct vts_color_struct color; - static guint8 sine_array[256]; - static int sine_array_inited = FALSE; int t = v->zoneplate_t; int xreset = -(w / 2) - v->xoffset; /* starting values for x^2 and y^2, centering the ellipse */ 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_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); fourcc = v->fourcc; 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) + ((v->kt2 * t * t) >> 1); - color.Y = sine_array[phase & 0xff]; + color.Y = sine_table[phase & 0xff]; color.R = 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); 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); } @@ -1325,8 +1348,6 @@ gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, unsigned char *dest, paintinfo *p = π struct fourcc_list_struct *fourcc; struct vts_color_struct color; - static guint8 sine_array[256]; - static int sine_array_inited = FALSE; int t = v->zoneplate_t; 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_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); fourcc = v->fourcc; 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); color.Y = 128; - color.U = sine_array[phase & 0xff]; - color.V = sine_array[phase & 0xff]; + color.U = sine_table[phase & 0xff]; + color.V = sine_table[phase & 0xff]; color.R = 128; color.G = 128; @@ -1439,8 +1449,6 @@ gst_video_test_src_circular (GstVideoTestSrc * v, unsigned char *dest, paintinfo *p = π struct fourcc_list_struct *fourcc; struct vts_color_struct color; - static guint8 sine_array[256]; - static int sine_array_inited = FALSE; double freq[8]; #ifdef SCALE_AMPLITUDE @@ -1448,14 +1456,6 @@ gst_video_test_src_circular (GstVideoTestSrc * v, unsigned char *dest, #endif 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); fourcc = v->fourcc; if (fourcc == NULL) @@ -1499,10 +1499,10 @@ gst_video_test_src_circular (GstVideoTestSrc * v, unsigned char *dest, if (a < 0) a = 0; 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 videotestsrc_blend_color (&color, &p->foreground_color, - &p->background_color, sine_array[d & 0xff]); + &p->background_color, sine_table[d & 0xff]); #endif } p->paint_hline (p, i, j, 1);