--- a/gst_plugins_base/gst/videotestsrc/gstvideotestsrc.c Tue Aug 31 15:30:33 2010 +0300
+++ b/gst_plugins_base/gst/videotestsrc/gstvideotestsrc.c Wed Sep 01 12:16:41 2010 +0100
@@ -21,15 +21,19 @@
/**
* SECTION:element-videotestsrc
*
+ * <refsect2>
+ * <para>
* The videotestsrc element is used to produce test video data in a wide variaty
* of formats. The video test data produced can be controlled with the "pattern"
* property.
- *
- * <refsect2>
+ * </para>
* <title>Example launch line</title>
- * |[
+ * <para>
+ * <programlisting>
* gst-launch -v videotestsrc pattern=snow ! ximagesink
- * ]| Shows random noise in an X window.
+ * </programlisting>
+ * Shows random noise in an X window.
+ * </para>
* </refsect2>
*/
@@ -41,48 +45,28 @@
#include <string.h>
#include <stdlib.h>
-#include <liboil/liboil.h>
+#include <gst/liboil.h>
-#ifdef __SYMBIAN32__
-#include <liboil/globals.h>
-#endif
+#define USE_PEER_BUFFERALLOC
GST_DEBUG_CATEGORY_STATIC (video_test_src_debug);
#define GST_CAT_DEFAULT video_test_src_debug
+
static const GstElementDetails video_test_src_details =
GST_ELEMENT_DETAILS ("Video test source",
"Source/Video",
"Creates a test video stream",
"David A. Schleef <ds@schleef.org>");
-#define DEFAULT_PATTERN GST_VIDEO_TEST_SRC_SMPTE
-#define DEFAULT_TIMESTAMP_OFFSET 0
-#define DEFAULT_IS_LIVE FALSE
-#define DEFAULT_PEER_ALLOC TRUE
-#define DEFAULT_COLOR_SPEC GST_VIDEO_TEST_SRC_BT601
enum
{
PROP_0,
PROP_PATTERN,
PROP_TIMESTAMP_OFFSET,
- PROP_IS_LIVE,
- PROP_PEER_ALLOC,
- PROP_COLOR_SPEC,
- PROP_K0,
- PROP_KX,
- PROP_KY,
- PROP_KT,
- PROP_KXT,
- PROP_KYT,
- PROP_KXY,
- PROP_KX2,
- PROP_KY2,
- PROP_KT2,
- PROP_XOFFSET,
- PROP_YOFFSET,
- PROP_LAST
+ PROP_IS_LIVE
+ /* FILL ME */
};
@@ -131,8 +115,6 @@
{GST_VIDEO_TEST_SRC_CHECKERS8, "Checkers 8px", "checkers-8"},
{GST_VIDEO_TEST_SRC_CIRCULAR, "Circular", "circular"},
{GST_VIDEO_TEST_SRC_BLINK, "Blink", "blink"},
- {GST_VIDEO_TEST_SRC_SMPTE75, "SMPTE 75% color bars", "smpte75"},
- {GST_VIDEO_TEST_SRC_ZONE_PLATE, "Zone plate", "zone-plate"},
{0, NULL, NULL}
};
@@ -143,24 +125,6 @@
return video_test_src_pattern_type;
}
-#define GST_TYPE_VIDEO_TEST_SRC_COLOR_SPEC (gst_video_test_src_color_spec_get_type ())
-static GType
-gst_video_test_src_color_spec_get_type (void)
-{
- static GType video_test_src_color_spec_type = 0;
- static const GEnumValue color_spec_types[] = {
- {GST_VIDEO_TEST_SRC_BT601, "ITU-R Rec. BT.601", "bt601"},
- {GST_VIDEO_TEST_SRC_BT709, "ITU-R Rec. BT.709", "bt709"},
- {0, NULL, NULL}
- };
-
- if (!video_test_src_color_spec_type) {
- video_test_src_color_spec_type =
- g_enum_register_static ("GstVideoTestSrcColorSpec", color_spec_types);
- }
- return video_test_src_color_spec_type;
-}
-
static void
gst_video_test_src_base_init (gpointer g_class)
{
@@ -190,79 +154,15 @@
g_object_class_install_property (gobject_class, PROP_PATTERN,
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_TIMESTAMP_OFFSET,
- g_param_spec_int64 ("timestamp-offset", "Timestamp offset",
+ GST_VIDEO_TEST_SRC_SMPTE, G_PARAM_READWRITE));
+ 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)", G_MININT64,
- G_MAXINT64, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ G_MAXINT64, 0, G_PARAM_READWRITE));
g_object_class_install_property (gobject_class, PROP_IS_LIVE,
g_param_spec_boolean ("is-live", "Is Live",
- "Whether to act as a live source", DEFAULT_IS_LIVE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_PEER_ALLOC,
- g_param_spec_boolean ("peer-alloc", "Peer Alloc",
- "Ask the peer to allocate an output buffer", DEFAULT_PEER_ALLOC,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_COLOR_SPEC,
- g_param_spec_enum ("colorspec", "Color Specification",
- "Generate video in the given color specification",
- GST_TYPE_VIDEO_TEST_SRC_COLOR_SPEC,
- DEFAULT_COLOR_SPEC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_K0,
- g_param_spec_int ("k0", "Zoneplate zero order phase",
- "Zoneplate zero order phase, for generating plain fields or phase offsets",
- G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KX,
- g_param_spec_int ("kx", "Zoneplate 1st order x phase",
- "Zoneplate 1st order x phase, for generating constant horizontal frequencies",
- G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KY,
- g_param_spec_int ("ky", "Zoneplate 1st order y phase",
- "Zoneplate 1st order y phase, for generating contant vertical frequencies",
- G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KT,
- g_param_spec_int ("kt", "Zoneplate 1st order t phase",
- "Zoneplate 1st order t phase, for generating phase rotation as a function of time",
- G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KXT,
- g_param_spec_int ("kxt", "Zoneplate x*t product phase",
- "Zoneplate x*t product phase, normalised to kxy/256 cycles per vertical pixel at width/2 from origin",
- G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KYT,
- g_param_spec_int ("kyt", "Zoneplate y*t product phase",
- "Zoneplate y*t product phase", G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KXY,
- g_param_spec_int ("kxy", "Zoneplate x*y product phase",
- "Zoneplate x*t product phase", G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KX2,
- g_param_spec_int ("kx2", "Zoneplate 2nd order x phase",
- "Zoneplate 2nd order x phase, normalised to kx2/256 cycles per horizontal pixel at width/2 from origin",
- G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KY2,
- g_param_spec_int ("ky2", "Zoneplate 2nd order y phase",
- "Zoneplate 2nd order y phase, normailsed to ky2/256 cycles per vertical pixel at height/2 from origin",
- G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_KT2,
- g_param_spec_int ("kt2", "Zoneplate 2nd order t phase",
- "Zoneplate 2nd order t phase, t*t/256 cycles per picture", G_MININT32,
- G_MAXINT32, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_XOFFSET,
- g_param_spec_int ("xoffset", "Zoneplate 2nd order products x offset",
- "Zoneplate 2nd order products x offset", G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (gobject_class, PROP_YOFFSET,
- g_param_spec_int ("yoffset", "Zoneplate 2nd order products y offset",
- "Zoneplate 2nd order products y offset", G_MININT32, G_MAXINT32, 0,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+ "Whether to act as a live source", FALSE, G_PARAM_READWRITE));
gstbasesrc_class->get_caps = gst_video_test_src_getcaps;
gstbasesrc_class->set_caps = gst_video_test_src_setcaps;
@@ -282,14 +182,13 @@
gst_pad_set_fixatecaps_function (pad, gst_video_test_src_src_fixate);
- gst_video_test_src_set_pattern (src, DEFAULT_PATTERN);
+ gst_video_test_src_set_pattern (src, GST_VIDEO_TEST_SRC_SMPTE);
- src->timestamp_offset = DEFAULT_TIMESTAMP_OFFSET;
+ src->timestamp_offset = 0;
/* 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->peer_alloc = DEFAULT_PEER_ALLOC;
+ gst_base_src_set_live (GST_BASE_SRC (src), FALSE);
}
static void
@@ -352,12 +251,6 @@
case GST_VIDEO_TEST_SRC_BLINK:
videotestsrc->make_image = gst_video_test_src_black;
break;
- case GST_VIDEO_TEST_SRC_SMPTE75:
- videotestsrc->make_image = gst_video_test_src_smpte75;
- break;
- case GST_VIDEO_TEST_SRC_ZONE_PLATE:
- videotestsrc->make_image = gst_video_test_src_zoneplate;
- break;
default:
g_assert_not_reached ();
}
@@ -379,48 +272,6 @@
case PROP_IS_LIVE:
gst_base_src_set_live (GST_BASE_SRC (src), g_value_get_boolean (value));
break;
- case PROP_PEER_ALLOC:
- src->peer_alloc = g_value_get_boolean (value);
- break;
- case PROP_COLOR_SPEC:
- src->color_spec = g_value_get_enum (value);
- break;
- case PROP_K0:
- src->k0 = g_value_get_int (value);
- break;
- case PROP_KX:
- src->kx = g_value_get_int (value);
- break;
- case PROP_KY:
- src->ky = g_value_get_int (value);
- break;
- case PROP_KT:
- src->kt = g_value_get_int (value);
- break;
- case PROP_KXT:
- src->kxt = g_value_get_int (value);
- break;
- case PROP_KYT:
- src->kyt = g_value_get_int (value);
- break;
- case PROP_KXY:
- src->kxy = g_value_get_int (value);
- break;
- case PROP_KX2:
- src->kx2 = g_value_get_int (value);
- break;
- case PROP_KY2:
- src->ky2 = g_value_get_int (value);
- break;
- case PROP_KT2:
- src->kt2 = g_value_get_int (value);
- break;
- case PROP_XOFFSET:
- src->xoffset = g_value_get_int (value);
- break;
- case PROP_YOFFSET:
- src->yoffset = g_value_get_int (value);
- break;
default:
break;
}
@@ -442,48 +293,6 @@
case PROP_IS_LIVE:
g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src)));
break;
- case PROP_PEER_ALLOC:
- g_value_set_boolean (value, src->peer_alloc);
- break;
- case PROP_COLOR_SPEC:
- g_value_set_enum (value, src->color_spec);
- break;
- case PROP_K0:
- g_value_set_int (value, src->k0);
- break;
- case PROP_KX:
- g_value_set_int (value, src->kx);
- break;
- case PROP_KY:
- g_value_set_int (value, src->ky);
- break;
- case PROP_KT:
- g_value_set_int (value, src->kt);
- break;
- case PROP_KXT:
- g_value_set_int (value, src->kxt);
- break;
- case PROP_KYT:
- g_value_set_int (value, src->kyt);
- break;
- case PROP_KXY:
- g_value_set_int (value, src->kxy);
- break;
- case PROP_KX2:
- g_value_set_int (value, src->kx2);
- break;
- case PROP_KY2:
- g_value_set_int (value, src->ky2);
- break;
- case PROP_KT2:
- g_value_set_int (value, src->kt2);
- break;
- case PROP_XOFFSET:
- g_value_set_int (value, src->xoffset);
- break;
- case PROP_YOFFSET:
- g_value_set_int (value, src->yoffset);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -492,12 +301,9 @@
/* threadsafe because this gets called as the plugin is loaded */
static GstCaps *
-gst_video_test_src_getcaps (GstBaseSrc * bsrc)
+gst_video_test_src_getcaps (GstBaseSrc * unused)
{
static GstCaps *capslist = NULL;
- GstVideoTestSrc *videotestsrc;
-
- videotestsrc = GST_VIDEO_TEST_SRC (bsrc);
if (!capslist) {
GstCaps *caps;
@@ -729,8 +535,8 @@
gst_video_test_src_create (GstPushSrc * psrc, GstBuffer ** buffer)
{
GstVideoTestSrc *src;
- gulong newsize, size;
- GstBuffer *outbuf = NULL;
+ gulong newsize;
+ GstBuffer *outbuf;
GstFlowReturn res;
GstClockTime next_time;
@@ -751,31 +557,17 @@
"creating buffer of %lu bytes with %dx%d image for frame %d", newsize,
src->width, src->height, (gint) src->n_frames);
- if (src->peer_alloc) {
- res =
- gst_pad_alloc_buffer_and_set_caps (GST_BASE_SRC_PAD (psrc),
- GST_BUFFER_OFFSET_NONE, newsize, GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc)),
- &outbuf);
- if (res != GST_FLOW_OK)
- goto no_buffer;
-
- /* the buffer could have renegotiated, we need to discard any buffers of the
- * wrong size. */
- size = GST_BUFFER_SIZE (outbuf);
- newsize = gst_video_test_src_get_size (src, src->width, src->height);
-
- if (size != newsize) {
- gst_buffer_unref (outbuf);
- outbuf = NULL;
- }
- }
-
- if (outbuf == NULL) {
- outbuf = gst_buffer_new_and_alloc (newsize);
- gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc)));
- }
-
- memset (GST_BUFFER_DATA (outbuf), 0, GST_BUFFER_SIZE (outbuf));
+#ifdef USE_PEER_BUFFERALLOC
+ res =
+ gst_pad_alloc_buffer_and_set_caps (GST_BASE_SRC_PAD (psrc),
+ GST_BUFFER_OFFSET_NONE, newsize, GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc)),
+ &outbuf);
+ if (res != GST_FLOW_OK)
+ goto no_buffer;
+#else
+ outbuf = gst_buffer_new_and_alloc (newsize);
+ gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc)));
+#endif
if (src->pattern_type == GST_VIDEO_TEST_SRC_BLINK) {
if (src->n_frames & 0x1) {
@@ -843,7 +635,7 @@
static gboolean
plugin_init (GstPlugin * plugin)
{
- oil_init ();
+ //oil_init ();
GST_DEBUG_CATEGORY_INIT (video_test_src_debug, "videotestsrc", 0,
"Video Test Source");