gst_plugins_base/gst/videotestsrc/gstvideotestsrc.c
branchRCL_3
changeset 30 7e817e7e631c
parent 29 567bb019e3e3
--- 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");