videotestsrc: Add options to make ball pattern based on system time, and invert each second.

This adds some extra options that affect pattern=ball mode, allowing the
animation to be synced to running time or wall-time clock for comparing
sync across different instances / pipelines / machines.

Also added is the ability to invert the rendering colours every second,
and some different ball motion patterns.

https://bugzilla.gnome.org/show_bug.cgi?id=740557
This commit is contained in:
Carl Karsten 2014-11-27 18:02:49 -06:00 committed by Jan Schmidt
parent 81d3ba3fa2
commit 99f4899491
4 changed files with 276 additions and 64 deletions

View file

@ -47,6 +47,9 @@ GST_DEBUG_CATEGORY_STATIC (video_test_src_debug);
#define GST_CAT_DEFAULT video_test_src_debug
#define DEFAULT_PATTERN GST_VIDEO_TEST_SRC_SMPTE
#define DEFAULT_ANIMATION_MODE GST_VIDEO_TEST_SRC_FRAMES
#define DEFAULT_MOTION_TYPE GST_VIDEO_TEST_SRC_WAVY
#define DEFAULT_FLIP FALSE
#define DEFAULT_TIMESTAMP_OFFSET 0
#define DEFAULT_IS_LIVE FALSE
#define DEFAULT_COLOR_SPEC GST_VIDEO_TEST_SRC_BT601
@ -74,7 +77,11 @@ enum
PROP_YOFFSET,
PROP_FOREGROUND_COLOR,
PROP_BACKGROUND_COLOR,
PROP_HORIZONTAL_SPEED
PROP_HORIZONTAL_SPEED,
PROP_ANIMATION_MODE,
PROP_MOTION_TYPE,
PROP_FLIP,
PROP_LAST
};
@ -162,6 +169,56 @@ gst_video_test_src_pattern_get_type (void)
return video_test_src_pattern_type;
}
/*"animation-mode", which can
* take the following values: frames (current behaviour that should stay the
* default), running time, wall clock time.
*/
#define GST_TYPE_VIDEO_TEST_SRC_ANIMATION_MODE (gst_video_test_src_animation_mode_get_type ())
static GType
gst_video_test_src_animation_mode_get_type (void)
{
static GType video_test_src_animation_mode = 0;
static const GEnumValue animation_modes[] = {
{GST_VIDEO_TEST_SRC_FRAMES, "frame count", "frames"},
{GST_VIDEO_TEST_SRC_WALL_TIME, "wall clock time", "wall-time"},
{GST_VIDEO_TEST_SRC_RUNNING_TIME, "running time", "running-time"},
{0, NULL, NULL}
};
if (!video_test_src_animation_mode) {
video_test_src_animation_mode =
g_enum_register_static ("GstVideoTestSrcAnimationMode",
animation_modes);
}
return video_test_src_animation_mode;
}
#define GST_TYPE_VIDEO_TEST_SRC_MOTION_TYPE (gst_video_test_src_motion_type_get_type ())
static GType
gst_video_test_src_motion_type_get_type (void)
{
static GType video_test_src_motion_type = 0;
static const GEnumValue motion_types[] = {
{GST_VIDEO_TEST_SRC_WAVY, "Ball waves back and forth, up and down",
"wavy"},
{GST_VIDEO_TEST_SRC_SWEEP, "1 revolution per second", "sweep"},
{GST_VIDEO_TEST_SRC_HSWEEP, "1/2 revolution per second, then reset to top",
"hsweep"},
{0, NULL, NULL}
};
if (!video_test_src_motion_type) {
video_test_src_motion_type =
g_enum_register_static ("GstVideoTestSrcMotionType", motion_types);
}
return video_test_src_motion_type;
}
static void
gst_video_test_src_class_init (GstVideoTestSrcClass * klass)
{
@ -182,6 +239,24 @@ gst_video_test_src_class_init (GstVideoTestSrcClass * klass)
g_param_spec_enum ("pattern", "Pattern",
"Type of test pattern to generate", GST_TYPE_VIDEO_TEST_SRC_PATTERN,
DEFAULT_PATTERN, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_ANIMATION_MODE,
g_param_spec_enum ("animation-mode", "Animation mode",
"For pattern=ball, which counter defines the position of the ball.",
GST_TYPE_VIDEO_TEST_SRC_ANIMATION_MODE, DEFAULT_ANIMATION_MODE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_MOTION_TYPE,
g_param_spec_enum ("motion", "Motion",
"For pattern=ball, what motion the ball does",
GST_TYPE_VIDEO_TEST_SRC_MOTION_TYPE, DEFAULT_MOTION_TYPE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_FLIP,
g_param_spec_boolean ("flip", "Flip",
"For pattern=ball, invert colors every second.",
DEFAULT_FLIP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
g_object_class_install_property (gobject_class, PROP_TIMESTAMP_OFFSET,
g_param_spec_int64 ("timestamp-offset", "Timestamp offset",
"An offset added to timestamps set on buffers (in ns)", 0,
@ -309,6 +384,11 @@ gst_video_test_src_init (GstVideoTestSrc * src)
/* we operate in time */
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
gst_base_src_set_live (GST_BASE_SRC (src), DEFAULT_IS_LIVE);
src->animation_mode = DEFAULT_ANIMATION_MODE;
src->motion_type = DEFAULT_MOTION_TYPE;
src->flip = DEFAULT_FLIP;
}
static GstCaps *
@ -565,6 +645,15 @@ gst_video_test_src_set_property (GObject * object, guint prop_id,
case PROP_HORIZONTAL_SPEED:
src->horizontal_speed = g_value_get_int (value);
break;
case PROP_ANIMATION_MODE:
src->animation_mode = g_value_get_enum (value);
break;
case PROP_MOTION_TYPE:
src->motion_type = g_value_get_enum (value);
break;
case PROP_FLIP:
src->flip = g_value_get_boolean (value);
break;
default:
break;
}
@ -631,6 +720,15 @@ gst_video_test_src_get_property (GObject * object, guint prop_id,
case PROP_HORIZONTAL_SPEED:
g_value_set_int (value, src->horizontal_speed);
break;
case PROP_ANIMATION_MODE:
g_value_set_enum (value, src->animation_mode);
break;
case PROP_MOTION_TYPE:
g_value_set_enum (value, src->motion_type);
break;
case PROP_FLIP:
g_value_set_boolean (value, src->flip);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@ -1020,7 +1118,7 @@ gst_video_test_src_fill (GstPushSrc * psrc, GstBuffer * buffer)
gst_object_sync_values (GST_OBJECT (psrc), GST_BUFFER_PTS (buffer));
src->make_image (src, &frame);
src->make_image (src, GST_BUFFER_PTS (buffer), &frame);
if ((pal = gst_video_format_get_palette (GST_VIDEO_FRAME_FORMAT (&frame),
&palsize))) {

View file

@ -116,6 +116,19 @@ typedef enum {
GST_VIDEO_TEST_SRC_COLORS
} GstVideoTestSrcPattern;
typedef enum {
GST_VIDEO_TEST_SRC_FRAMES,
GST_VIDEO_TEST_SRC_WALL_TIME,
GST_VIDEO_TEST_SRC_RUNNING_TIME
} GstVideoTestSrcAnimationMode;
typedef enum {
GST_VIDEO_TEST_SRC_WAVY,
GST_VIDEO_TEST_SRC_SWEEP,
GST_VIDEO_TEST_SRC_HSWEEP
} GstVideoTestSrcMotionType;
typedef struct _GstVideoTestSrc GstVideoTestSrc;
typedef struct _GstVideoTestSrcClass GstVideoTestSrcClass;
@ -177,7 +190,12 @@ struct _GstVideoTestSrc {
/* smpte & snow */
guint random_state;
void (*make_image) (GstVideoTestSrc *v, GstVideoFrame *frame);
/* Ball motion */
GstVideoTestSrcAnimationMode animation_mode;
GstVideoTestSrcMotionType motion_type;
gboolean flip;
void (*make_image) (GstVideoTestSrc *v, GstClockTime pts, GstVideoFrame *frame);
/* temporary AYUV/ARGB scanline */
guint8 *tmpline_u8;

View file

@ -324,7 +324,8 @@ videotestsrc_blend_line (GstVideoTestSrc * v, guint8 * dest, guint8 * src,
}
void
gst_video_test_src_smpte (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_smpte (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int y1, y2;
@ -424,7 +425,8 @@ gst_video_test_src_smpte (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_smpte75 (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_smpte75 (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -453,7 +455,8 @@ gst_video_test_src_smpte75 (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_smpte100 (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_smpte100 (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -477,7 +480,8 @@ gst_video_test_src_smpte100 (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_bar (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_bar (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int j;
paintinfo pi = PAINT_INFO_INIT;
@ -499,7 +503,8 @@ gst_video_test_src_bar (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_snow (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_snow (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -550,37 +555,43 @@ gst_video_test_src_unicolor (GstVideoTestSrc * v, GstVideoFrame * frame,
}
void
gst_video_test_src_black (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_black (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
gst_video_test_src_unicolor (v, frame, COLOR_BLACK);
}
void
gst_video_test_src_white (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_white (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
gst_video_test_src_unicolor (v, frame, COLOR_WHITE);
}
void
gst_video_test_src_red (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_red (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
gst_video_test_src_unicolor (v, frame, COLOR_RED);
}
void
gst_video_test_src_green (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_green (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
gst_video_test_src_unicolor (v, frame, COLOR_GREEN);
}
void
gst_video_test_src_blue (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_blue (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
gst_video_test_src_unicolor (v, frame, COLOR_BLUE);
}
void
gst_video_test_src_blink (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_blink (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
paintinfo pi = PAINT_INFO_INIT;
@ -602,7 +613,8 @@ gst_video_test_src_blink (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_solid (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_solid (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
paintinfo pi = PAINT_INFO_INIT;
@ -620,7 +632,8 @@ gst_video_test_src_solid (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_checkers1 (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_checkers1 (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int x, y;
paintinfo pi = PAINT_INFO_INIT;
@ -643,7 +656,8 @@ gst_video_test_src_checkers1 (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_checkers2 (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_checkers2 (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int x, y;
paintinfo pi = PAINT_INFO_INIT;
@ -668,7 +682,8 @@ gst_video_test_src_checkers2 (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_checkers4 (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_checkers4 (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int x, y;
paintinfo pi = PAINT_INFO_INIT;
@ -693,7 +708,8 @@ gst_video_test_src_checkers4 (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_checkers8 (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_checkers8 (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int x, y;
paintinfo pi = PAINT_INFO_INIT;
@ -754,7 +770,8 @@ static const guint8 sine_table[256] = {
void
gst_video_test_src_zoneplate (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_zoneplate (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -869,7 +886,8 @@ gst_video_test_src_zoneplate (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -963,7 +981,8 @@ gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, GstVideoFrame * frame)
#undef SCALE_AMPLITUDE
void
gst_video_test_src_circular (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_circular (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -1003,7 +1022,8 @@ gst_video_test_src_circular (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_gamut (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_gamut (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int x, y;
paintinfo pi = PAINT_INFO_INIT;
@ -1055,27 +1075,79 @@ gst_video_test_src_gamut (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_ball (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_ball (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
paintinfo pi = PAINT_INFO_INIT;
paintinfo *p = π
int t = v->n_frames;
double x, y;
int radius = 20;
int w = frame->info.width, h = frame->info.height;
GTimeVal rand_tv;
gdouble rad = 0;
double x, y;
int flipit = 0;
paintinfo pi = PAINT_INFO_INIT;
paintinfo *p = π
struct vts_color_struct
*foreground_color = &p->foreground_color,
*background_color = &p->background_color;
switch (v->animation_mode) {
case GST_VIDEO_TEST_SRC_FRAMES:
rad = (gdouble) (v->n_frames) / 200;
flipit = (v->n_frames / 50) % 2;
break;
case GST_VIDEO_TEST_SRC_WALL_TIME:
g_get_current_time (&rand_tv);
rad = (gdouble) (rand_tv.tv_usec) / 1000000.0 + rand_tv.tv_sec;
flipit = rand_tv.tv_sec % 2;
break;
case GST_VIDEO_TEST_SRC_RUNNING_TIME:
rad = (gdouble) (pts) / GST_SECOND;
flipit = (pts / GST_SECOND) % 2;
break;
}
if (v->motion_type == GST_VIDEO_TEST_SRC_HSWEEP) {
/* Periodic reset for half sweep */
rad /= 2;
rad -= floor (2 * rad) / 2;
}
/* Scale for the animation calcs */
rad = 2 * G_PI * rad;
if (v->motion_type == GST_VIDEO_TEST_SRC_WAVY) {
x = radius + (0.5 + 0.5 * sin (rad)) * (w - 2 * radius);
y = radius + (0.5 + 0.5 * sin (rad * sqrt (2))) * (h - 2 * radius);
} else {
/* sweep and hsweep */
/* x,y is center of circle,
* radius is radius
* rad = angle .. of sweep.
*/
radius = MIN (h, w) / 4 - 0;
/* 0 is the margin between edge of screen and top of ball */
x = w / 2 + sin (rad) * radius;
y = h / 2 - cos (rad) * radius;
}
if (v->flip && flipit) {
foreground_color = &p->background_color;
background_color = &p->foreground_color;
}
/* draw ball on frame */
videotestsrc_setup_paintinfo (v, p, w, h);
x = radius + (0.5 + 0.5 * sin (2 * G_PI * t / 200)) * (w - 2 * radius);
y = radius + (0.5 + 0.5 * sin (2 * G_PI * sqrt (2) * t / 200)) * (h -
2 * radius);
for (i = 0; i < h; i++) {
if (i < y - radius || i > y + radius) {
memset (p->tmpline_u8, 0, w);
} else {
int r = rint (sqrt (radius * radius - (i - y) * (i - y)));
double o = MAX (0, (radius * radius - (i - y) * (i - y)));
int r = rint (sqrt (o));
int x1, x2;
int j;
@ -1100,10 +1172,30 @@ gst_video_test_src_ball (GstVideoTestSrc * v, GstVideoFrame * frame)
p->tmpline_u8[j] = 0;
}
}
if ((v->motion_type == GST_VIDEO_TEST_SRC_SWEEP) ||
(v->motion_type == GST_VIDEO_TEST_SRC_HSWEEP)) {
/* dot in the middle (to draw a line down the center) */
p->tmpline_u8[w / 2] = 255;
p->tmpline_u8[(int) x] = 255;
}
videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8,
&p->foreground_color, &p->background_color, w);
foreground_color, background_color, w);
videotestsrc_convert_tmpline (p, frame, i);
}
if ((v->motion_type == GST_VIDEO_TEST_SRC_SWEEP) ||
(v->motion_type == GST_VIDEO_TEST_SRC_HSWEEP)) {
/* draw a line across the middle of frame and ball. */
for (i = 0; i < w; i++) {
p->tmpline_u8[i] = 255;
}
videotestsrc_blend_line (v, p->tmpline, p->tmpline_u8,
foreground_color, background_color, w);
videotestsrc_convert_tmpline (p, frame, h / 2);
videotestsrc_convert_tmpline (p, frame, y);
}
}
static void
@ -1232,7 +1324,8 @@ convert_hline_bayer (paintinfo * p, GstVideoFrame * frame, int y)
}
void
gst_video_test_src_pinwheel (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_pinwheel (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -1282,7 +1375,8 @@ gst_video_test_src_pinwheel (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_spokes (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_spokes (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -1333,7 +1427,8 @@ gst_video_test_src_spokes (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_gradient (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_gradient (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;
@ -1359,7 +1454,8 @@ gst_video_test_src_gradient (GstVideoTestSrc * v, GstVideoFrame * frame)
}
void
gst_video_test_src_colors (GstVideoTestSrc * v, GstVideoFrame * frame)
gst_video_test_src_colors (GstVideoTestSrc * v, GstClockTime pts,
GstVideoFrame * frame)
{
int i;
int j;

View file

@ -59,30 +59,30 @@ struct paintinfo_struct
};
#define PAINT_INFO_INIT {0, }
void gst_video_test_src_smpte (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_smpte75 (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_snow (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_black (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_white (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_red (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_green (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_blue (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_solid (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_blink (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_checkers1 (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_checkers2 (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_checkers4 (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_checkers8 (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_circular (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_zoneplate (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_gamut (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_ball (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_smpte100 (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_bar (GstVideoTestSrc * v, GstVideoFrame *frame);
void gst_video_test_src_pinwheel (GstVideoTestSrc * v, GstVideoFrame * frame);
void gst_video_test_src_spokes (GstVideoTestSrc * v, GstVideoFrame * frame);
void gst_video_test_src_gradient (GstVideoTestSrc * v, GstVideoFrame * frame);
void gst_video_test_src_colors (GstVideoTestSrc * v, GstVideoFrame * frame);
void gst_video_test_src_smpte (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_smpte75 (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_snow (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_black (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_white (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_red (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_green (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_blue (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_solid (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_blink (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_checkers1 (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_checkers2 (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_checkers4 (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_checkers8 (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_circular (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_zoneplate (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_gamut (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_chromazoneplate (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_ball (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_smpte100 (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_bar (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame *frame);
void gst_video_test_src_pinwheel (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame * frame);
void gst_video_test_src_spokes (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame * frame);
void gst_video_test_src_gradient (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame * frame);
void gst_video_test_src_colors (GstVideoTestSrc * v, GstClockTime pts, GstVideoFrame * frame);
#endif