mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-31 11:32:38 +00:00
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:
parent
81d3ba3fa2
commit
99f4899491
4 changed files with 276 additions and 64 deletions
|
@ -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))) {
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue