gstvideotestsrc.h 5.84 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* GStreamer
 * Copyright (C) <2002> David A. Schleef <ds@schleef.org>
 * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

21
22
#ifndef __GST_VIDEO_TEST_SRC_H__
#define __GST_VIDEO_TEST_SRC_H__
23
24

#include <gst/gst.h>
25
#include <gst/base/gstpushsrc.h>
26

David I. Lehn's avatar
David I. Lehn committed
27
G_BEGIN_DECLS
Johan Dahlin's avatar
Johan Dahlin committed
28

29
30
31
32
33
#define GST_TYPE_VIDEO_TEST_SRC \
  (gst_video_test_src_get_type())
#define GST_VIDEO_TEST_SRC(obj) \
  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_VIDEO_TEST_SRC,GstVideoTestSrc))
#define GST_VIDEO_TEST_SRC_CLASS(klass) \
34
  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_VIDEO_TEST_SRC,GstVideoTestSrcClass))
35
36
#define GST_IS_VIDEO_TEST_SRC(obj) \
  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_VIDEO_TEST_SRC))
37
#define GST_IS_VIDEO_TEST_SRC_CLASS(klass) \
38
  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_VIDEO_TEST_SRC))
Johan Dahlin's avatar
Johan Dahlin committed
39

Wim Taymans's avatar
Wim Taymans committed
40
41
42
43
44
/**
 * GstVideoTestSrcPattern:
 * @GST_VIDEO_TEST_SRC_SMPTE: A standard SMPTE test pattern
 * @GST_VIDEO_TEST_SRC_SNOW: Random noise
 * @GST_VIDEO_TEST_SRC_BLACK: A black image
45
46
47
48
 * @GST_VIDEO_TEST_SRC_WHITE: A white image
 * @GST_VIDEO_TEST_SRC_RED: A red image
 * @GST_VIDEO_TEST_SRC_GREEN: A green image
 * @GST_VIDEO_TEST_SRC_BLUE: A blue image
49
50
51
52
 * @GST_VIDEO_TEST_SRC_CHECKERS1: Checkers pattern (1px)
 * @GST_VIDEO_TEST_SRC_CHECKERS2: Checkers pattern (2px)
 * @GST_VIDEO_TEST_SRC_CHECKERS4: Checkers pattern (4px)
 * @GST_VIDEO_TEST_SRC_CHECKERS8: Checkers pattern (8px)
53
 * @GST_VIDEO_TEST_SRC_CIRCULAR: Circular pattern
54
 * @GST_VIDEO_TEST_SRC_BLINK: Alternate between black and white
55
 * @GST_VIDEO_TEST_SRC_SMPTE75: SMPTE test pattern (75% color bars)
56
 * @GST_VIDEO_TEST_SRC_ZONE_PLATE: Zone plate
57
 * @GST_VIDEO_TEST_SRC_GAMUT: Gamut checking pattern
58
 * @GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE: Chroma zone plate
David Schleef's avatar
David Schleef committed
59
 * @GST_VIDEO_TEST_SRC_BALL: Moving ball
60
 * @GST_VIDEO_TEST_SRC_SMPTE100: SMPTE test pattern (100% color bars)
Thijs Vermeir's avatar
Thijs Vermeir committed
61
 * @GST_VIDEO_TEST_SRC_BAR: Bar with foreground color
Wim Taymans's avatar
Wim Taymans committed
62
63
 *
 * The test pattern to produce.
64
65
66
67
68
69
70
71
72
 *
 * The Gamut pattern creates a checkerboard pattern of colors at the
 * edge of the YCbCr gamut and nearby colors that are out of gamut.
 * The pattern is divided into 4 regions: black, white, red, and blue.
 * After conversion to RGB, the out-of-gamut colors should be converted
 * to the same value as their in-gamut neighbors.  If the checkerboard
 * pattern is still visible after conversion, this indicates a faulty
 * conversion.  Image manipulation, such as adjusting contrast or
 * brightness, can also cause the pattern to be visible.
73
74
75
76
77
78
79
80
 *
 * The Zone Plate pattern is based on BBC R&D Report 1978/23, and can
 * be used to test spatial frequency response of a system.  This
 * pattern generator is controlled by the xoffset and yoffset parameters
 * and also by all the parameters starting with 'k'.  The default
 * parameters produce a grey pattern.  Try 'videotestsrc
 * pattern=zone-plate kx2=20 ky2=20 kt=1' to produce something
 * interesting.
Wim Taymans's avatar
Wim Taymans committed
81
 */
Johan Dahlin's avatar
Johan Dahlin committed
82
typedef enum {
83
84
85
  GST_VIDEO_TEST_SRC_SMPTE,
  GST_VIDEO_TEST_SRC_SNOW,
  GST_VIDEO_TEST_SRC_BLACK,
86
87
88
  GST_VIDEO_TEST_SRC_WHITE,
  GST_VIDEO_TEST_SRC_RED,
  GST_VIDEO_TEST_SRC_GREEN,
89
90
91
92
  GST_VIDEO_TEST_SRC_BLUE,
  GST_VIDEO_TEST_SRC_CHECKERS1,
  GST_VIDEO_TEST_SRC_CHECKERS2,
  GST_VIDEO_TEST_SRC_CHECKERS4,
93
  GST_VIDEO_TEST_SRC_CHECKERS8,
94
  GST_VIDEO_TEST_SRC_CIRCULAR,
95
  GST_VIDEO_TEST_SRC_BLINK,
96
  GST_VIDEO_TEST_SRC_SMPTE75,
97
  GST_VIDEO_TEST_SRC_ZONE_PLATE,
98
  GST_VIDEO_TEST_SRC_GAMUT,
99
  GST_VIDEO_TEST_SRC_CHROMA_ZONE_PLATE,
David Schleef's avatar
David Schleef committed
100
  GST_VIDEO_TEST_SRC_SOLID,
101
  GST_VIDEO_TEST_SRC_BALL,
Thijs Vermeir's avatar
Thijs Vermeir committed
102
103
  GST_VIDEO_TEST_SRC_SMPTE100,
  GST_VIDEO_TEST_SRC_BAR
Andy Wingo's avatar
Andy Wingo committed
104
} GstVideoTestSrcPattern;
105

106
107
/**
 * GstVideoTestSrcColorSpec:
108
109
 * @GST_VIDEO_TEST_SRC_BT601: ITU-R Rec. BT.601/BT.470 (SD)
 * @GST_VIDEO_TEST_SRC_BT709: ITU-R Rec. BT.709 (HD)
110
111
112
113
114
115
116
117
 *
 * The color specification to use.
 */
typedef enum {
  GST_VIDEO_TEST_SRC_BT601,
  GST_VIDEO_TEST_SRC_BT709
} GstVideoTestSrcColorSpec;

Andy Wingo's avatar
Andy Wingo committed
118
119
typedef struct _GstVideoTestSrc GstVideoTestSrc;
typedef struct _GstVideoTestSrcClass GstVideoTestSrcClass;
120

Wim Taymans's avatar
Wim Taymans committed
121
122
123
124
125
/**
 * GstVideoTestSrc:
 *
 * Opaque data structure.
 */
Andy Wingo's avatar
Andy Wingo committed
126
struct _GstVideoTestSrc {
127
  GstPushSrc element;
128

129
130
  /*< private >*/

131
  /* type of output */
Andy Wingo's avatar
Andy Wingo committed
132
  GstVideoTestSrcPattern pattern_type;
133

134
135
136
  /* Color spec of output */
  GstVideoTestSrcColorSpec color_spec;

137
  /* video state */
138
  char *format_name;
139
140
  gint width;
  gint height;
141
  struct fourcc_list_struct *fourcc;
142
  gint bpp;
143
144
  gint rate_numerator;
  gint rate_denominator;
145

146
  /* private */
Thomas Vander Stichele's avatar
Thomas Vander Stichele committed
147
148
149
  gint64 timestamp_offset;              /* base offset */
  GstClockTime running_time;            /* total running time */
  gint64 n_frames;                      /* total frames sent */
150
  gboolean peer_alloc;
David Schleef's avatar
David Schleef committed
151

152
153
154
155
156
157
158
159
160
161
162
163
164
  /* zoneplate */
  gint k0;
  gint kx;
  gint ky;
  gint kt;
  gint kxt;
  gint kyt;
  gint kxy;
  gint kx2;
  gint ky2;
  gint kt2;
  gint xoffset;
  gint yoffset;
165
166

  /* solid color */
167
168
169
  guint foreground_color;
  guint background_color;

170
  /* moving color bars */
171
172
  gint horizontal_offset;
  gint horizontal_speed;
173

Andy Wingo's avatar
Andy Wingo committed
174
  void (*make_image) (GstVideoTestSrc *v, unsigned char *dest, int w, int h);
175
176

  /* temporary AYUV/ARGB scanline */
177
  guint8 *tmpline_u8;
178
  guint8 *tmpline;
179
  guint8 *tmpline2;
180
181
};

Andy Wingo's avatar
Andy Wingo committed
182
struct _GstVideoTestSrcClass {
183
  GstPushSrcClass parent_class;
184
185
};

186
GType gst_video_test_src_get_type (void);
187

David I. Lehn's avatar
David I. Lehn committed
188
G_END_DECLS
Johan Dahlin's avatar
Johan Dahlin committed
189

190
#endif /* __GST_VIDEO_TEST_SRC_H__ */