2002-07-26 22:18:57 +00:00
|
|
|
/* GStreamer
|
|
|
|
* Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
|
2005-07-19 12:01:53 +00:00
|
|
|
* Copyright (C) <2002> David A. Schleef <ds@schleef.org>
|
2002-07-26 22:18:57 +00:00
|
|
|
*
|
|
|
|
* 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.
|
|
|
|
*/
|
|
|
|
|
2005-09-11 21:45:24 +00:00
|
|
|
/**
|
|
|
|
* SECTION:element-videotestsrc
|
|
|
|
*
|
|
|
|
* <refsect2>
|
|
|
|
* <para>
|
2006-03-01 17:39:28 +00:00
|
|
|
* 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.
|
|
|
|
* </para>
|
2007-05-04 13:10:07 +00:00
|
|
|
* <title>Example launch line</title>
|
2006-03-01 17:39:28 +00:00
|
|
|
* <para>
|
2005-09-11 21:45:24 +00:00
|
|
|
* <programlisting>
|
|
|
|
* gst-launch -v videotestsrc pattern=snow ! ximagesink
|
|
|
|
* </programlisting>
|
2006-03-01 17:39:28 +00:00
|
|
|
* Shows random noise in an X window.
|
2005-09-11 21:45:24 +00:00
|
|
|
* </para>
|
|
|
|
* </refsect2>
|
|
|
|
*/
|
2005-07-19 12:01:53 +00:00
|
|
|
|
2003-06-29 19:46:12 +00:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
#include "config.h"
|
|
|
|
#endif
|
2004-07-27 21:51:32 +00:00
|
|
|
#include "gstvideotestsrc.h"
|
|
|
|
#include "videotestsrc.h"
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2002-07-28 13:40:53 +00:00
|
|
|
#include <string.h>
|
2002-07-26 22:18:57 +00:00
|
|
|
#include <stdlib.h>
|
Convert a few inner loops to use liboil. This is currently optional, and is only enabled if liboil is present (duh!).
Original commit message from CVS:
Convert a few inner loops to use liboil. This is currently
optional, and is only enabled if liboil is present (duh!).
* configure.ac: Check for liboil-0.1
* gst/intfloat/Makefile.am:
* gst/intfloat/gstint2float.c: (conv_f32_s16), (scalarmult_f32),
(gst_int2float_chain_gint16):
* gst/videofilter/Makefile.am:
* gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init),
(tablelookup_u8), (gst_videobalance_planar411):
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (plugin_init):
* gst/videotestsrc/videotestsrc.c: (splat_u8), (paint_hline_YUY2),
(paint_hline_IYU2), (paint_hline_str4), (paint_hline_str3),
(paint_hline_RGB565), (paint_hline_xRGB1555):
2004-02-12 07:37:50 +00:00
|
|
|
#include <liboil/liboil.h>
|
2002-07-26 22:18:57 +00:00
|
|
|
|
configure.ac: In the output at the end, don't show the first plugin on the same line as "Core plug-ins, always built:".
Original commit message from CVS:
* configure.ac:
In the output at the end, don't show the first plugin on the same
line as "Core plug-ins, always built:".
Indent the output as for other plugin categories
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_create):
#define that can be used to not use peer buffer_alloc functions for
test purposes.
* sys/ximage/ximagesink.c: (gst_ximage_buffer_init),
(gst_ximage_buffer_get_type), (gst_ximagesink_ximage_new),
(gst_ximagesink_show_frame):
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_init),
(gst_xvimage_buffer_get_type), (gst_xvimagesink_setcaps),
(gst_xvimagesink_show_frame):
Error case handling fixes. gst-launch fakesrc ! x[v]imagesink now
fails gracefully instead of XError aborting or deadlocking.
2005-09-06 23:26:49 +00:00
|
|
|
#define USE_PEER_BUFFERALLOC
|
2005-07-19 12:01:53 +00:00
|
|
|
|
2006-06-23 09:53:09 +00:00
|
|
|
GST_DEBUG_CATEGORY_STATIC (video_test_src_debug);
|
2005-12-01 01:12:55 +00:00
|
|
|
#define GST_CAT_DEFAULT video_test_src_debug
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
|
2006-04-28 19:46:37 +00:00
|
|
|
static const GstElementDetails video_test_src_details =
|
2004-03-14 22:34:34 +00:00
|
|
|
GST_ELEMENT_DETAILS ("Video test source",
|
|
|
|
"Source/Video",
|
|
|
|
"Creates a test video stream",
|
|
|
|
"David A. Schleef <ds@schleef.org>");
|
2002-07-26 22:18:57 +00:00
|
|
|
|
|
|
|
|
2002-10-04 06:49:51 +00:00
|
|
|
enum
|
|
|
|
{
|
2005-07-19 12:01:53 +00:00
|
|
|
PROP_0,
|
|
|
|
PROP_PATTERN,
|
|
|
|
PROP_TIMESTAMP_OFFSET,
|
2005-09-28 13:36:45 +00:00
|
|
|
PROP_IS_LIVE
|
|
|
|
/* FILL ME */
|
2002-07-26 22:18:57 +00:00
|
|
|
};
|
|
|
|
|
2004-08-04 11:08:13 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
GST_BOILERPLATE (GstVideoTestSrc, gst_video_test_src, GstPushSrc,
|
2005-07-19 12:01:53 +00:00
|
|
|
GST_TYPE_PUSH_SRC);
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_video_test_src_set_pattern (GstVideoTestSrc * videotestsrc,
|
2004-03-14 22:34:34 +00:00
|
|
|
int pattern_type);
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_video_test_src_set_property (GObject * object, guint prop_id,
|
2004-03-14 22:34:34 +00:00
|
|
|
const GValue * value, GParamSpec * pspec);
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_video_test_src_get_property (GObject * object, guint prop_id,
|
2004-03-14 22:34:34 +00:00
|
|
|
GValue * value, GParamSpec * pspec);
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static GstCaps *gst_video_test_src_getcaps (GstBaseSrc * bsrc);
|
|
|
|
static gboolean gst_video_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps);
|
|
|
|
static void gst_video_test_src_src_fixate (GstPad * pad, GstCaps * caps);
|
2005-11-14 12:15:01 +00:00
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
static gboolean gst_video_test_src_is_seekable (GstBaseSrc * psrc);
|
|
|
|
static gboolean gst_video_test_src_do_seek (GstBaseSrc * bsrc,
|
|
|
|
GstSegment * segment);
|
|
|
|
static gboolean gst_video_test_src_query (GstBaseSrc * bsrc, GstQuery * query);
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
static void gst_video_test_src_get_times (GstBaseSrc * basesrc,
|
2005-11-10 14:58:41 +00:00
|
|
|
GstBuffer * buffer, GstClockTime * start, GstClockTime * end);
|
2005-12-01 01:12:55 +00:00
|
|
|
static GstFlowReturn gst_video_test_src_create (GstPushSrc * psrc,
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
GstBuffer ** buffer);
|
2005-12-27 22:29:43 +00:00
|
|
|
static gboolean gst_video_test_src_start (GstBaseSrc * basesrc);
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
#define GST_TYPE_VIDEO_TEST_SRC_PATTERN (gst_video_test_src_pattern_get_type ())
|
2003-04-23 07:38:32 +00:00
|
|
|
static GType
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_pattern_get_type (void)
|
2003-04-23 07:38:32 +00:00
|
|
|
{
|
2005-12-01 01:12:55 +00:00
|
|
|
static GType video_test_src_pattern_type = 0;
|
Const-ify GEnumValue and GFlagsValue arrays. Use
Original commit message from CVS:
* ext/pango/gsttextoverlay.c: (gst_text_overlay_valign_get_type),
(gst_text_overlay_halign_get_type),
(gst_text_overlay_wrap_mode_get_type):
* ext/theora/theoradec.c: (theora_handle_type_packet),
(theora_handle_data_packet):
* ext/theora/theoraenc.c: (gst_border_mode_get_type),
(theora_enc_sink_setcaps), (theora_enc_chain):
* gst-libs/gst/cdda/gstcddabasesrc.c:
(gst_cdda_base_src_mode_get_type):
* gst/audiotestsrc/gstaudiotestsrc.c:
(gst_audiostestsrc_wave_get_type):
* gst/playback/gststreaminfo.c: (gst_stream_type_get_type):
* gst/tcp/gstfdset.c: (gst_fdset_mode_get_type):
* gst/tcp/gstmultifdsink.c: (gst_recover_policy_get_type),
(gst_sync_method_get_type), (gst_unit_type_get_type),
(gst_client_status_get_type):
* gst/videoscale/gstvideoscale.c:
(gst_video_scale_method_get_type):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_video_test_src_pattern_get_type):
* gst/videotestsrc/videotestsrc.c: (paint_setup_I420),
(paint_setup_YV12), (paint_setup_YUY2), (paint_setup_UYVY),
(paint_setup_YVYU), (paint_setup_IYU2), (paint_setup_Y41B),
(paint_setup_Y42B), (paint_setup_Y800), (paint_setup_YVU9),
(paint_setup_YUV9), (paint_setup_RGB888), (paint_setup_BGR888),
(paint_setup_RGB565), (paint_setup_xRGB1555):
Const-ify GEnumValue and GFlagsValue arrays. Use
GST_ROUND_UP_* macros instead of home-made ones.
2006-05-09 19:24:46 +00:00
|
|
|
static const GEnumValue pattern_types[] = {
|
2005-12-01 01:12:55 +00:00
|
|
|
{GST_VIDEO_TEST_SRC_SMPTE, "SMPTE 100% color bars", "smpte"},
|
|
|
|
{GST_VIDEO_TEST_SRC_SNOW, "Random (television snow)", "snow"},
|
|
|
|
{GST_VIDEO_TEST_SRC_BLACK, "100% Black", "black"},
|
gst/videotestsrc/: Add more uni-colour patterns ("white", "red", "green", and "blue").
Original commit message from CVS:
* gst/videotestsrc/gstvideotestsrc.c:
(gst_video_test_src_pattern_get_type),
(gst_video_test_src_set_pattern):
* gst/videotestsrc/gstvideotestsrc.h:
* gst/videotestsrc/videotestsrc.c: (gst_video_test_src_unicolor),
(gst_video_test_src_black), (gst_video_test_src_white),
(gst_video_test_src_red), (gst_video_test_src_green),
(gst_video_test_src_blue):
* gst/videotestsrc/videotestsrc.h:
Add more uni-colour patterns ("white", "red", "green", and "blue").
2006-09-01 16:12:35 +00:00
|
|
|
{GST_VIDEO_TEST_SRC_WHITE, "100% White", "white"},
|
|
|
|
{GST_VIDEO_TEST_SRC_RED, "Red", "red"},
|
|
|
|
{GST_VIDEO_TEST_SRC_GREEN, "Green", "green"},
|
|
|
|
{GST_VIDEO_TEST_SRC_BLUE, "Blue", "blue"},
|
2006-10-23 12:46:41 +00:00
|
|
|
{GST_VIDEO_TEST_SRC_CHECKERS1, "Checkers 1px", "checkers-1"},
|
|
|
|
{GST_VIDEO_TEST_SRC_CHECKERS2, "Checkers 2px", "checkers-2"},
|
|
|
|
{GST_VIDEO_TEST_SRC_CHECKERS4, "Checkers 4px", "checkers-4"},
|
|
|
|
{GST_VIDEO_TEST_SRC_CHECKERS8, "Checkers 8px", "checkers-8"},
|
2007-04-04 02:45:03 +00:00
|
|
|
{GST_VIDEO_TEST_SRC_CIRCULAR, "Circular", "circular"},
|
gst/videotestsrc/: Add more uni-colour patterns ("white", "red", "green", and "blue").
Original commit message from CVS:
* gst/videotestsrc/gstvideotestsrc.c:
(gst_video_test_src_pattern_get_type),
(gst_video_test_src_set_pattern):
* gst/videotestsrc/gstvideotestsrc.h:
* gst/videotestsrc/videotestsrc.c: (gst_video_test_src_unicolor),
(gst_video_test_src_black), (gst_video_test_src_white),
(gst_video_test_src_red), (gst_video_test_src_green),
(gst_video_test_src_blue):
* gst/videotestsrc/videotestsrc.h:
Add more uni-colour patterns ("white", "red", "green", and "blue").
2006-09-01 16:12:35 +00:00
|
|
|
{0, NULL, NULL}
|
2003-04-23 07:38:32 +00:00
|
|
|
};
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
if (!video_test_src_pattern_type) {
|
|
|
|
video_test_src_pattern_type =
|
2005-07-19 12:01:53 +00:00
|
|
|
g_enum_register_static ("GstVideoTestSrcPattern", pattern_types);
|
2003-04-23 07:38:32 +00:00
|
|
|
}
|
2005-12-01 01:12:55 +00:00
|
|
|
return video_test_src_pattern_type;
|
2003-04-23 07:38:32 +00:00
|
|
|
}
|
|
|
|
|
2003-11-02 20:48:33 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_base_init (gpointer g_class)
|
2003-11-02 20:48:33 +00:00
|
|
|
{
|
|
|
|
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_element_class_set_details (element_class, &video_test_src_details);
|
2003-11-02 20:48:33 +00:00
|
|
|
|
|
|
|
gst_element_class_add_pad_template (element_class,
|
2005-07-19 12:01:53 +00:00
|
|
|
gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_getcaps (NULL)));
|
2003-11-02 20:48:33 +00:00
|
|
|
}
|
2005-07-19 12:01:53 +00:00
|
|
|
|
2002-07-26 22:18:57 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_class_init (GstVideoTestSrcClass * klass)
|
2002-07-26 22:18:57 +00:00
|
|
|
{
|
|
|
|
GObjectClass *gobject_class;
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
GstBaseSrcClass *gstbasesrc_class;
|
|
|
|
GstPushSrcClass *gstpushsrc_class;
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2002-10-04 06:49:51 +00:00
|
|
|
gobject_class = (GObjectClass *) klass;
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
gstbasesrc_class = (GstBaseSrcClass *) klass;
|
|
|
|
gstpushsrc_class = (GstPushSrcClass *) klass;
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gobject_class->set_property = gst_video_test_src_set_property;
|
|
|
|
gobject_class->get_property = gst_video_test_src_get_property;
|
2005-03-31 09:43:49 +00:00
|
|
|
|
2006-06-22 10:10:51 +00:00
|
|
|
g_object_class_install_property (gobject_class, PROP_PATTERN,
|
2004-03-14 22:34:34 +00:00
|
|
|
g_param_spec_enum ("pattern", "Pattern",
|
2005-12-01 01:12:55 +00:00
|
|
|
"Type of test pattern to generate", GST_TYPE_VIDEO_TEST_SRC_PATTERN,
|
|
|
|
1, G_PARAM_READWRITE));
|
2006-06-22 10:10:51 +00:00
|
|
|
g_object_class_install_property (gobject_class,
|
2005-07-19 12:01:53 +00:00
|
|
|
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));
|
2005-09-28 13:36:45 +00:00
|
|
|
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", FALSE, G_PARAM_READWRITE));
|
2003-05-01 06:24:34 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gstbasesrc_class->get_caps = gst_video_test_src_getcaps;
|
|
|
|
gstbasesrc_class->set_caps = gst_video_test_src_setcaps;
|
2005-12-12 15:09:55 +00:00
|
|
|
gstbasesrc_class->is_seekable = gst_video_test_src_is_seekable;
|
|
|
|
gstbasesrc_class->do_seek = gst_video_test_src_do_seek;
|
|
|
|
gstbasesrc_class->query = gst_video_test_src_query;
|
2005-12-01 01:12:55 +00:00
|
|
|
gstbasesrc_class->get_times = gst_video_test_src_get_times;
|
2005-12-27 22:29:43 +00:00
|
|
|
gstbasesrc_class->start = gst_video_test_src_start;
|
2005-12-12 15:09:55 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gstpushsrc_class->create = gst_video_test_src_create;
|
2002-07-26 22:18:57 +00:00
|
|
|
}
|
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_init (GstVideoTestSrc * src, GstVideoTestSrcClass * g_class)
|
2003-12-22 01:47:09 +00:00
|
|
|
{
|
2005-11-14 12:15:01 +00:00
|
|
|
GstPad *pad = GST_BASE_SRC_PAD (src);
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_pad_set_fixatecaps_function (pad, gst_video_test_src_src_fixate);
|
2005-11-14 12:15:01 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_set_pattern (src, GST_VIDEO_TEST_SRC_SMPTE);
|
2003-12-22 01:47:09 +00:00
|
|
|
|
2005-09-28 13:36:45 +00:00
|
|
|
src->timestamp_offset = 0;
|
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
/* we operate in time */
|
|
|
|
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
2005-09-28 13:36:45 +00:00
|
|
|
gst_base_src_set_live (GST_BASE_SRC (src), FALSE);
|
2005-07-19 12:01:53 +00:00
|
|
|
}
|
2003-12-22 01:47:09 +00:00
|
|
|
|
2005-11-14 12:15:01 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_src_fixate (GstPad * pad, GstCaps * caps)
|
2005-11-14 12:15:01 +00:00
|
|
|
{
|
|
|
|
GstStructure *structure;
|
|
|
|
|
|
|
|
structure = gst_caps_get_structure (caps, 0);
|
|
|
|
|
2005-11-21 14:29:53 +00:00
|
|
|
gst_structure_fixate_field_nearest_int (structure, "width", 320);
|
|
|
|
gst_structure_fixate_field_nearest_int (structure, "height", 240);
|
Updates for API changes
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps):
* gst/videorate/gstvideorate.c: (gst_videorate_setcaps),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_create):
* sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get_fps),
(gst_v4lmjpegsrc_src_convert), (gst_v4lmjpegsrc_src_query),
(gst_v4lmjpegsrc_get), (gst_v4lmjpegsrc_getcaps):
* sys/v4l/v4lsrc_calls.c: (gst_v4lsrc_get_fps),
(gst_v4lsrc_get_fps_list), (gst_v4lsrc_buffer_new):
Updates for API changes
2005-11-23 13:25:54 +00:00
|
|
|
gst_structure_fixate_field_nearest_fraction (structure, "framerate", 30, 1);
|
2005-11-14 12:15:01 +00:00
|
|
|
}
|
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_set_pattern (GstVideoTestSrc * videotestsrc,
|
|
|
|
int pattern_type)
|
2005-07-19 12:01:53 +00:00
|
|
|
{
|
|
|
|
videotestsrc->pattern_type = pattern_type;
|
2003-12-22 01:47:09 +00:00
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
GST_DEBUG_OBJECT (videotestsrc, "setting pattern to %d", pattern_type);
|
2003-12-22 01:47:09 +00:00
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
switch (pattern_type) {
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_VIDEO_TEST_SRC_SMPTE:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_smpte;
|
2005-07-19 12:01:53 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_VIDEO_TEST_SRC_SNOW:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_snow;
|
2005-07-19 12:01:53 +00:00
|
|
|
break;
|
2005-12-01 01:12:55 +00:00
|
|
|
case GST_VIDEO_TEST_SRC_BLACK:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_black;
|
2005-07-19 12:01:53 +00:00
|
|
|
break;
|
gst/videotestsrc/: Add more uni-colour patterns ("white", "red", "green", and "blue").
Original commit message from CVS:
* gst/videotestsrc/gstvideotestsrc.c:
(gst_video_test_src_pattern_get_type),
(gst_video_test_src_set_pattern):
* gst/videotestsrc/gstvideotestsrc.h:
* gst/videotestsrc/videotestsrc.c: (gst_video_test_src_unicolor),
(gst_video_test_src_black), (gst_video_test_src_white),
(gst_video_test_src_red), (gst_video_test_src_green),
(gst_video_test_src_blue):
* gst/videotestsrc/videotestsrc.h:
Add more uni-colour patterns ("white", "red", "green", and "blue").
2006-09-01 16:12:35 +00:00
|
|
|
case GST_VIDEO_TEST_SRC_WHITE:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_white;
|
|
|
|
break;
|
|
|
|
case GST_VIDEO_TEST_SRC_RED:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_red;
|
|
|
|
break;
|
|
|
|
case GST_VIDEO_TEST_SRC_GREEN:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_green;
|
|
|
|
break;
|
|
|
|
case GST_VIDEO_TEST_SRC_BLUE:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_blue;
|
|
|
|
break;
|
2006-10-23 12:46:41 +00:00
|
|
|
case GST_VIDEO_TEST_SRC_CHECKERS1:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_checkers1;
|
|
|
|
break;
|
|
|
|
case GST_VIDEO_TEST_SRC_CHECKERS2:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_checkers2;
|
|
|
|
break;
|
|
|
|
case GST_VIDEO_TEST_SRC_CHECKERS4:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_checkers4;
|
|
|
|
break;
|
|
|
|
case GST_VIDEO_TEST_SRC_CHECKERS8:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_checkers8;
|
|
|
|
break;
|
2007-04-04 02:45:03 +00:00
|
|
|
case GST_VIDEO_TEST_SRC_CIRCULAR:
|
|
|
|
videotestsrc->make_image = gst_video_test_src_circular;
|
|
|
|
break;
|
2005-07-19 12:01:53 +00:00
|
|
|
default:
|
|
|
|
g_assert_not_reached ();
|
|
|
|
}
|
|
|
|
}
|
2005-03-31 09:43:49 +00:00
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_set_property (GObject * object, guint prop_id,
|
2005-07-19 12:01:53 +00:00
|
|
|
const GValue * value, GParamSpec * pspec)
|
|
|
|
{
|
2005-12-01 01:12:55 +00:00
|
|
|
GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (object);
|
2003-12-22 01:47:09 +00:00
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
switch (prop_id) {
|
|
|
|
case PROP_PATTERN:
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_set_pattern (src, g_value_get_enum (value));
|
2005-07-19 12:01:53 +00:00
|
|
|
break;
|
|
|
|
case PROP_TIMESTAMP_OFFSET:
|
2005-09-28 13:36:45 +00:00
|
|
|
src->timestamp_offset = g_value_get_int64 (value);
|
|
|
|
break;
|
|
|
|
case PROP_IS_LIVE:
|
|
|
|
gst_base_src_set_live (GST_BASE_SRC (src), g_value_get_boolean (value));
|
2005-07-19 12:01:53 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
}
|
2005-07-19 12:01:53 +00:00
|
|
|
}
|
2003-12-22 01:47:09 +00:00
|
|
|
|
2005-07-19 12:01:53 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_get_property (GObject * object, guint prop_id,
|
|
|
|
GValue * value, GParamSpec * pspec)
|
2005-07-19 12:01:53 +00:00
|
|
|
{
|
2005-12-01 01:12:55 +00:00
|
|
|
GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (object);
|
2005-07-19 12:01:53 +00:00
|
|
|
|
|
|
|
switch (prop_id) {
|
|
|
|
case PROP_PATTERN:
|
2005-09-28 13:36:45 +00:00
|
|
|
g_value_set_enum (value, src->pattern_type);
|
2005-07-19 12:01:53 +00:00
|
|
|
break;
|
|
|
|
case PROP_TIMESTAMP_OFFSET:
|
2005-09-28 13:36:45 +00:00
|
|
|
g_value_set_int64 (value, src->timestamp_offset);
|
|
|
|
break;
|
|
|
|
case PROP_IS_LIVE:
|
|
|
|
g_value_set_boolean (value, gst_base_src_is_live (GST_BASE_SRC (src)));
|
2005-07-19 12:01:53 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* threadsafe because this gets called as the plugin is loaded */
|
|
|
|
static GstCaps *
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_getcaps (GstBaseSrc * unused)
|
2005-07-19 12:01:53 +00:00
|
|
|
{
|
|
|
|
static GstCaps *capslist = NULL;
|
|
|
|
|
|
|
|
if (!capslist) {
|
|
|
|
GstCaps *caps;
|
|
|
|
GstStructure *structure;
|
|
|
|
int i;
|
|
|
|
|
|
|
|
caps = gst_caps_new_empty ();
|
|
|
|
for (i = 0; i < n_fourccs; i++) {
|
|
|
|
structure = paint_get_structure (fourcc_list + i);
|
|
|
|
gst_structure_set (structure,
|
|
|
|
"width", GST_TYPE_INT_RANGE, 1, G_MAXINT,
|
|
|
|
"height", GST_TYPE_INT_RANGE, 1, G_MAXINT,
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
"framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
|
2005-07-19 12:01:53 +00:00
|
|
|
gst_caps_append_structure (caps, structure);
|
|
|
|
}
|
|
|
|
|
|
|
|
capslist = caps;
|
|
|
|
}
|
|
|
|
|
|
|
|
return gst_caps_copy (capslist);
|
2005-03-31 09:43:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_parse_caps (const GstCaps * caps,
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
gint * width, gint * height, gint * rate_numerator, gint * rate_denominator,
|
2005-03-31 09:43:49 +00:00
|
|
|
struct fourcc_list_struct **fourcc)
|
2002-07-26 22:18:57 +00:00
|
|
|
{
|
2003-12-22 01:47:09 +00:00
|
|
|
const GstStructure *structure;
|
|
|
|
GstPadLinkReturn ret;
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
const GValue *framerate;
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-03-31 09:43:49 +00:00
|
|
|
GST_DEBUG ("parsing caps");
|
|
|
|
|
|
|
|
if (gst_caps_get_size (caps) < 1)
|
|
|
|
return FALSE;
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2003-12-22 01:47:09 +00:00
|
|
|
structure = gst_caps_get_structure (caps, 0);
|
2003-06-10 16:22:41 +00:00
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
if (!(*fourcc = paintinfo_find_by_structure (structure)))
|
|
|
|
goto unknown_format;
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-03-31 09:43:49 +00:00
|
|
|
ret = gst_structure_get_int (structure, "width", width);
|
|
|
|
ret &= gst_structure_get_int (structure, "height", height);
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
framerate = gst_structure_get_value (structure, "framerate");
|
|
|
|
|
|
|
|
if (framerate) {
|
|
|
|
*rate_numerator = gst_value_get_fraction_numerator (framerate);
|
|
|
|
*rate_denominator = gst_value_get_fraction_denominator (framerate);
|
|
|
|
} else
|
2005-12-12 15:09:55 +00:00
|
|
|
goto no_framerate;
|
2005-03-31 09:43:49 +00:00
|
|
|
|
|
|
|
return ret;
|
2005-12-12 15:09:55 +00:00
|
|
|
|
|
|
|
/* ERRORS */
|
|
|
|
unknown_format:
|
|
|
|
{
|
|
|
|
GST_DEBUG ("videotestsrc format not found");
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
no_framerate:
|
|
|
|
{
|
|
|
|
GST_DEBUG ("videotestsrc no framerate given");
|
|
|
|
return FALSE;
|
|
|
|
}
|
2005-03-31 09:43:49 +00:00
|
|
|
}
|
2003-04-16 07:52:54 +00:00
|
|
|
|
2005-03-31 09:43:49 +00:00
|
|
|
static gboolean
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps)
|
2005-03-31 09:43:49 +00:00
|
|
|
{
|
|
|
|
gboolean res;
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
gint width, height, rate_denominator, rate_numerator;
|
2005-03-31 09:43:49 +00:00
|
|
|
struct fourcc_list_struct *fourcc;
|
2005-07-19 12:01:53 +00:00
|
|
|
GstVideoTestSrc *videotestsrc;
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
videotestsrc = GST_VIDEO_TEST_SRC (bsrc);
|
2005-03-31 09:43:49 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
res = gst_video_test_src_parse_caps (caps, &width, &height,
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
&rate_numerator, &rate_denominator, &fourcc);
|
2005-03-31 09:43:49 +00:00
|
|
|
if (res) {
|
|
|
|
/* looks ok here */
|
|
|
|
videotestsrc->fourcc = fourcc;
|
|
|
|
videotestsrc->width = width;
|
|
|
|
videotestsrc->height = height;
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
videotestsrc->rate_numerator = rate_numerator;
|
|
|
|
videotestsrc->rate_denominator = rate_denominator;
|
2005-03-31 09:43:49 +00:00
|
|
|
videotestsrc->bpp = videotestsrc->fourcc->bitspp;
|
|
|
|
|
Convert elements to use fractions for their framerate.
Original commit message from CVS:
* ext/libvisual/visual.c: (gst_visual_src_setcaps), (get_buffer),
(gst_visual_chain):
* ext/ogg/gstogmparse.c: (gst_ogm_parse_chain):
* ext/theora/theoradec.c: (theora_handle_type_packet):
* ext/theora/theoraenc.c: (theora_enc_sink_setcaps),
(theora_enc_chain):
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps):
* gst-libs/gst/video/video.c: (gst_video_frame_rate):
* gst-libs/gst/video/video.h:
* gst/ffmpegcolorspace/avcodec.h:
* gst/ffmpegcolorspace/gstffmpegcodecmap.c:
(gst_ffmpeg_caps_to_pixfmt):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_set_caps):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_setcaps), (gst_videorate_blank_data),
(gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_fixate), (gst_videotestsrc_getcaps),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_setcaps),
(gst_videotestsrc_event), (gst_videotestsrc_create):
* gst/videotestsrc/gstvideotestsrc.h:
* sys/ximage/ximagesink.c: (gst_ximagesink_xcontext_get),
(gst_ximagesink_setcaps), (gst_ximagesink_change_state),
(gst_ximagesink_get_times), (gst_ximagesink_init):
* sys/ximage/ximagesink.h:
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support),
(gst_xvimagesink_setcaps), (gst_xvimagesink_change_state),
(gst_xvimagesink_get_times), (gst_xvimagesink_init):
* sys/xvimage/xvimagesink.h:
Convert elements to use fractions for their framerate.
V4L elements to come later tonight.
2005-11-22 16:08:37 +00:00
|
|
|
GST_DEBUG_OBJECT (videotestsrc, "size %dx%d, %d/%d fps",
|
|
|
|
videotestsrc->width, videotestsrc->height,
|
|
|
|
videotestsrc->rate_numerator, videotestsrc->rate_denominator);
|
2005-03-31 09:43:49 +00:00
|
|
|
}
|
|
|
|
return res;
|
2002-07-26 22:18:57 +00:00
|
|
|
}
|
|
|
|
|
2004-06-18 22:32:44 +00:00
|
|
|
static gboolean
|
2005-12-12 15:09:55 +00:00
|
|
|
gst_video_test_src_query (GstBaseSrc * bsrc, GstQuery * query)
|
2004-06-18 22:32:44 +00:00
|
|
|
{
|
2005-12-12 15:09:55 +00:00
|
|
|
gboolean res;
|
|
|
|
GstVideoTestSrc *src;
|
2004-06-18 22:32:44 +00:00
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
src = GST_VIDEO_TEST_SRC (bsrc);
|
2004-06-18 22:32:44 +00:00
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
switch (GST_QUERY_TYPE (query)) {
|
|
|
|
case GST_QUERY_CONVERT:
|
2004-06-18 22:32:44 +00:00
|
|
|
{
|
2005-12-12 15:09:55 +00:00
|
|
|
GstFormat src_fmt, dest_fmt;
|
|
|
|
gint64 src_val, dest_val;
|
examples/seeking/seek.c: Update seek example.
Original commit message from CVS:
* examples/seeking/seek.c: (setup_dynamic_link),
(make_dv_pipeline), (make_vorbis_theora_pipeline), (query_rates),
(query_positions_elems), (query_positions_pads), (do_seek):
Update seek example.
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_event),
(gst_ogg_pad_typefind), (gst_ogg_demux_chain_elem_pad),
(gst_ogg_demux_queue_data), (gst_ogg_demux_chain_peer),
(gst_ogg_pad_submit_packet), (gst_ogg_pad_submit_page),
(gst_ogg_demux_handle_event),
(gst_ogg_demux_deactivate_current_chain),
(gst_ogg_demux_activate_chain), (gst_ogg_demux_perform_seek),
(gst_ogg_demux_collect_chain_info), (gst_ogg_demux_collect_info),
(gst_ogg_demux_chain), (gst_ogg_demux_send_event),
(gst_ogg_demux_loop):
* ext/ogg/gstoggmux.c: (gst_ogg_mux_collected):
* ext/theora/theoradec.c: (theora_dec_src_event),
(theora_dec_src_getcaps), (theora_dec_sink_event),
(theora_dec_push), (theora_dec_chain):
* ext/vorbis/Makefile.am:
* ext/vorbis/vorbisdec.c: (vorbis_dec_src_event),
(vorbis_dec_sink_event), (vorbis_dec_push),
(vorbis_handle_data_packet):
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_sink_event),
(gst_vorbisenc_chain):
* gst/playback/gststreaminfo.c: (cb_probe):
* gst/subparse/gstsubparse.c: (gst_subparse_src_event):
* gst/videorate/gstvideorate.c: (gst_videorate_event):
* gst/videoscale/gstvideoscale.c:
(gst_videoscale_handle_src_event):
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_event):
* sys/ximage/ximagesink.c: (gst_ximagesink_show_frame),
(gst_ximagesink_navigation_send_event):
* sys/xvimage/xvimagesink.c:
(gst_xvimagesink_navigation_send_event):
Various event updates and cleanups
2005-07-27 18:34:29 +00:00
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
gst_query_parse_convert (query, &src_fmt, &src_val, &dest_fmt, &dest_val);
|
|
|
|
if (src_fmt == dest_fmt) {
|
|
|
|
dest_val = src_val;
|
|
|
|
goto done;
|
|
|
|
}
|
examples/seeking/seek.c: Update seek example.
Original commit message from CVS:
* examples/seeking/seek.c: (setup_dynamic_link),
(make_dv_pipeline), (make_vorbis_theora_pipeline), (query_rates),
(query_positions_elems), (query_positions_pads), (do_seek):
Update seek example.
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_event),
(gst_ogg_pad_typefind), (gst_ogg_demux_chain_elem_pad),
(gst_ogg_demux_queue_data), (gst_ogg_demux_chain_peer),
(gst_ogg_pad_submit_packet), (gst_ogg_pad_submit_page),
(gst_ogg_demux_handle_event),
(gst_ogg_demux_deactivate_current_chain),
(gst_ogg_demux_activate_chain), (gst_ogg_demux_perform_seek),
(gst_ogg_demux_collect_chain_info), (gst_ogg_demux_collect_info),
(gst_ogg_demux_chain), (gst_ogg_demux_send_event),
(gst_ogg_demux_loop):
* ext/ogg/gstoggmux.c: (gst_ogg_mux_collected):
* ext/theora/theoradec.c: (theora_dec_src_event),
(theora_dec_src_getcaps), (theora_dec_sink_event),
(theora_dec_push), (theora_dec_chain):
* ext/vorbis/Makefile.am:
* ext/vorbis/vorbisdec.c: (vorbis_dec_src_event),
(vorbis_dec_sink_event), (vorbis_dec_push),
(vorbis_handle_data_packet):
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_sink_event),
(gst_vorbisenc_chain):
* gst/playback/gststreaminfo.c: (cb_probe):
* gst/subparse/gstsubparse.c: (gst_subparse_src_event):
* gst/videorate/gstvideorate.c: (gst_videorate_event):
* gst/videoscale/gstvideoscale.c:
(gst_videoscale_handle_src_event):
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_event):
* sys/ximage/ximagesink.c: (gst_ximagesink_show_frame),
(gst_ximagesink_navigation_send_event):
* sys/xvimage/xvimagesink.c:
(gst_xvimagesink_navigation_send_event):
Various event updates and cleanups
2005-07-27 18:34:29 +00:00
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
switch (src_fmt) {
|
2004-06-18 22:32:44 +00:00
|
|
|
case GST_FORMAT_DEFAULT:
|
2005-12-12 15:09:55 +00:00
|
|
|
switch (dest_fmt) {
|
|
|
|
case GST_FORMAT_TIME:
|
|
|
|
/* frames to time */
|
2006-03-23 11:18:19 +00:00
|
|
|
if (src->rate_numerator) {
|
|
|
|
dest_val = gst_util_uint64_scale (src_val,
|
|
|
|
src->rate_denominator * GST_SECOND, src->rate_numerator);
|
|
|
|
} else {
|
|
|
|
dest_val = 0;
|
|
|
|
}
|
2005-12-12 15:09:55 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
goto error;
|
|
|
|
}
|
2004-06-18 22:32:44 +00:00
|
|
|
break;
|
2005-12-12 15:09:55 +00:00
|
|
|
case GST_FORMAT_TIME:
|
|
|
|
switch (dest_fmt) {
|
|
|
|
case GST_FORMAT_DEFAULT:
|
|
|
|
/* time to frames */
|
2006-03-23 11:18:19 +00:00
|
|
|
if (src->rate_numerator) {
|
|
|
|
dest_val = gst_util_uint64_scale (src_val,
|
|
|
|
src->rate_numerator, src->rate_denominator * GST_SECOND);
|
|
|
|
} else {
|
|
|
|
dest_val = 0;
|
|
|
|
}
|
2005-12-12 15:09:55 +00:00
|
|
|
break;
|
|
|
|
default:
|
|
|
|
goto error;
|
|
|
|
}
|
2004-06-18 22:32:44 +00:00
|
|
|
break;
|
2005-12-12 15:09:55 +00:00
|
|
|
default:
|
|
|
|
goto error;
|
2004-06-18 22:32:44 +00:00
|
|
|
}
|
2005-12-12 15:09:55 +00:00
|
|
|
done:
|
|
|
|
gst_query_set_convert (query, src_fmt, src_val, dest_fmt, dest_val);
|
|
|
|
res = TRUE;
|
2004-06-18 22:32:44 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
default:
|
2005-12-12 15:09:55 +00:00
|
|
|
res = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query);
|
2004-06-18 22:32:44 +00:00
|
|
|
}
|
2005-12-12 15:09:55 +00:00
|
|
|
return res;
|
2004-06-18 22:32:44 +00:00
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
/* ERROR */
|
|
|
|
error:
|
|
|
|
{
|
|
|
|
GST_DEBUG_OBJECT (src, "query failed");
|
|
|
|
return FALSE;
|
2004-06-18 22:32:44 +00:00
|
|
|
}
|
|
|
|
}
|
2003-12-14 21:25:32 +00:00
|
|
|
|
2005-11-10 14:58:41 +00:00
|
|
|
static void
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_get_times (GstBaseSrc * basesrc, GstBuffer * buffer,
|
2005-11-10 14:58:41 +00:00
|
|
|
GstClockTime * start, GstClockTime * end)
|
2005-09-28 13:36:45 +00:00
|
|
|
{
|
2005-11-10 14:58:41 +00:00
|
|
|
/* for live sources, sync on the timestamp of the buffer */
|
|
|
|
if (gst_base_src_is_live (basesrc)) {
|
|
|
|
GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer);
|
2005-09-28 13:36:45 +00:00
|
|
|
|
2005-11-10 14:58:41 +00:00
|
|
|
if (GST_CLOCK_TIME_IS_VALID (timestamp)) {
|
|
|
|
/* get duration to calculate end time */
|
|
|
|
GstClockTime duration = GST_BUFFER_DURATION (buffer);
|
2005-09-28 13:36:45 +00:00
|
|
|
|
2005-11-10 14:58:41 +00:00
|
|
|
if (GST_CLOCK_TIME_IS_VALID (duration)) {
|
|
|
|
*end = timestamp + duration;
|
|
|
|
}
|
|
|
|
*start = timestamp;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
*start = -1;
|
|
|
|
*end = -1;
|
|
|
|
}
|
2005-09-28 13:36:45 +00:00
|
|
|
}
|
|
|
|
|
2005-12-12 15:09:55 +00:00
|
|
|
static gboolean
|
|
|
|
gst_video_test_src_do_seek (GstBaseSrc * bsrc, GstSegment * segment)
|
|
|
|
{
|
|
|
|
GstClockTime time;
|
|
|
|
GstVideoTestSrc *src;
|
|
|
|
|
|
|
|
src = GST_VIDEO_TEST_SRC (bsrc);
|
|
|
|
|
2007-05-17 11:16:14 +00:00
|
|
|
segment->time = segment->start;
|
|
|
|
time = segment->last_stop;
|
2005-12-12 15:09:55 +00:00
|
|
|
|
|
|
|
/* now move to the time indicated */
|
2006-03-23 11:18:19 +00:00
|
|
|
if (src->rate_numerator) {
|
|
|
|
src->n_frames = gst_util_uint64_scale (time,
|
|
|
|
src->rate_numerator, src->rate_denominator * GST_SECOND);
|
|
|
|
} else {
|
|
|
|
src->n_frames = 0;
|
|
|
|
}
|
|
|
|
if (src->rate_numerator) {
|
|
|
|
src->running_time = gst_util_uint64_scale (src->n_frames,
|
|
|
|
src->rate_denominator * GST_SECOND, src->rate_numerator);
|
|
|
|
} else {
|
|
|
|
/* FIXME : Not sure what to set here */
|
|
|
|
src->running_time = 0;
|
|
|
|
}
|
2005-12-12 15:09:55 +00:00
|
|
|
|
|
|
|
g_assert (src->running_time <= time);
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static gboolean
|
|
|
|
gst_video_test_src_is_seekable (GstBaseSrc * psrc)
|
|
|
|
{
|
|
|
|
/* we're seekable... */
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
static GstFlowReturn
|
2005-12-01 01:12:55 +00:00
|
|
|
gst_video_test_src_create (GstPushSrc * psrc, GstBuffer ** buffer)
|
2002-07-26 22:18:57 +00:00
|
|
|
{
|
2005-09-28 13:36:45 +00:00
|
|
|
GstVideoTestSrc *src;
|
2002-07-26 22:18:57 +00:00
|
|
|
gulong newsize;
|
2005-03-31 09:43:49 +00:00
|
|
|
GstBuffer *outbuf;
|
Cleanups and buffer alloc.
Original commit message from CVS:
* ext/ogg/README:
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
(gst_ogg_demux_activate_chain), (gst_ogg_demux_clear_chains):
* ext/ogg/gstoggmux.c: (gst_ogg_mux_buffer_from_page):
* ext/theora/theoradec.c: (theora_dec_src_query),
(theora_handle_data_packet):
* ext/theora/theoraenc.c: (theora_buffer_from_packet),
(theora_enc_chain):
* ext/vorbis/vorbisdec.c: (vorbis_dec_sink_event),
(vorbis_handle_data_packet):
* gst/audioconvert/bufferframesconvert.c:
(buffer_frames_convert_chain):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_getcaps), (gst_ffmpegcsp_configure_context),
(gst_ffmpegcsp_setcaps), (gst_ffmpegcsp_bufferalloc),
(gst_ffmpegcsp_chain):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_getcaps), (gst_videorate_setcaps),
(gst_videorate_event), (gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_activate),
(gst_videotestsrc_src_query), (gst_videotestsrc_loop):
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
(gst_ximagesink_setcaps), (gst_ximagesink_buffer_alloc):
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
(gst_xvimage_buffer_finalize), (gst_xvimage_buffer_free),
(gst_xvimage_buffer_class_init), (gst_xvimage_buffer_get_type),
(gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_put),
(gst_xvimagesink_show_frame), (gst_xvimagesink_buffer_alloc):
Cleanups and buffer alloc.
2005-06-02 09:46:40 +00:00
|
|
|
GstFlowReturn res;
|
2005-12-12 15:09:55 +00:00
|
|
|
GstClockTime next_time;
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
src = GST_VIDEO_TEST_SRC (psrc);
|
2004-06-18 22:32:44 +00:00
|
|
|
|
2006-09-18 15:48:01 +00:00
|
|
|
if (G_UNLIKELY (src->fourcc == NULL))
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
goto not_negotiated;
|
2004-06-18 22:32:44 +00:00
|
|
|
|
2006-04-28 14:24:38 +00:00
|
|
|
/* 0 framerate and we are at the second frame, eos */
|
2006-09-18 15:48:01 +00:00
|
|
|
if (G_UNLIKELY (src->rate_numerator == 0 && src->n_frames == 1))
|
2006-04-28 14:24:38 +00:00
|
|
|
goto eos;
|
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
newsize = gst_video_test_src_get_size (src, src->width, src->height);
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
|
|
|
|
g_return_val_if_fail (newsize > 0, GST_FLOW_ERROR);
|
2002-07-26 22:18:57 +00:00
|
|
|
|
2006-09-18 15:48:01 +00:00
|
|
|
GST_LOG_OBJECT (src,
|
2006-10-05 15:55:21 +00:00
|
|
|
"creating buffer of %lu bytes with %dx%d image for frame %d", newsize,
|
|
|
|
src->width, src->height, (gint) src->n_frames);
|
2005-09-28 13:36:45 +00:00
|
|
|
|
configure.ac: In the output at the end, don't show the first plugin on the same line as "Core plug-ins, always built:".
Original commit message from CVS:
* configure.ac:
In the output at the end, don't show the first plugin on the same
line as "Core plug-ins, always built:".
Indent the output as for other plugin categories
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_create):
#define that can be used to not use peer buffer_alloc functions for
test purposes.
* sys/ximage/ximagesink.c: (gst_ximage_buffer_init),
(gst_ximage_buffer_get_type), (gst_ximagesink_ximage_new),
(gst_ximagesink_show_frame):
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_init),
(gst_xvimage_buffer_get_type), (gst_xvimagesink_setcaps),
(gst_xvimagesink_show_frame):
Error case handling fixes. gst-launch fakesrc ! x[v]imagesink now
fails gracefully instead of XError aborting or deadlocking.
2005-09-06 23:26:49 +00:00
|
|
|
#ifdef USE_PEER_BUFFERALLOC
|
Cleanups and buffer alloc.
Original commit message from CVS:
* ext/ogg/README:
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
(gst_ogg_demux_activate_chain), (gst_ogg_demux_clear_chains):
* ext/ogg/gstoggmux.c: (gst_ogg_mux_buffer_from_page):
* ext/theora/theoradec.c: (theora_dec_src_query),
(theora_handle_data_packet):
* ext/theora/theoraenc.c: (theora_buffer_from_packet),
(theora_enc_chain):
* ext/vorbis/vorbisdec.c: (vorbis_dec_sink_event),
(vorbis_handle_data_packet):
* gst/audioconvert/bufferframesconvert.c:
(buffer_frames_convert_chain):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_getcaps), (gst_ffmpegcsp_configure_context),
(gst_ffmpegcsp_setcaps), (gst_ffmpegcsp_bufferalloc),
(gst_ffmpegcsp_chain):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_getcaps), (gst_videorate_setcaps),
(gst_videorate_event), (gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_activate),
(gst_videotestsrc_src_query), (gst_videotestsrc_loop):
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
(gst_ximagesink_setcaps), (gst_ximagesink_buffer_alloc):
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
(gst_xvimage_buffer_finalize), (gst_xvimage_buffer_free),
(gst_xvimage_buffer_class_init), (gst_xvimage_buffer_get_type),
(gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_put),
(gst_xvimagesink_show_frame), (gst_xvimagesink_buffer_alloc):
Cleanups and buffer alloc.
2005-06-02 09:46:40 +00:00
|
|
|
res =
|
2005-12-05 13:02:12 +00:00
|
|
|
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);
|
Cleanups and buffer alloc.
Original commit message from CVS:
* ext/ogg/README:
* ext/ogg/gstoggdemux.c: (gst_ogg_pad_submit_packet),
(gst_ogg_demux_activate_chain), (gst_ogg_demux_clear_chains):
* ext/ogg/gstoggmux.c: (gst_ogg_mux_buffer_from_page):
* ext/theora/theoradec.c: (theora_dec_src_query),
(theora_handle_data_packet):
* ext/theora/theoraenc.c: (theora_buffer_from_packet),
(theora_enc_chain):
* ext/vorbis/vorbisdec.c: (vorbis_dec_sink_event),
(vorbis_handle_data_packet):
* gst/audioconvert/bufferframesconvert.c:
(buffer_frames_convert_chain):
* gst/ffmpegcolorspace/gstffmpegcolorspace.c:
(gst_ffmpegcsp_getcaps), (gst_ffmpegcsp_configure_context),
(gst_ffmpegcsp_setcaps), (gst_ffmpegcsp_bufferalloc),
(gst_ffmpegcsp_chain):
* gst/videorate/gstvideorate.c: (gst_videorate_transformcaps),
(gst_videorate_getcaps), (gst_videorate_setcaps),
(gst_videorate_event), (gst_videorate_chain):
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_activate),
(gst_videotestsrc_src_query), (gst_videotestsrc_loop):
* sys/ximage/ximagesink.c: (gst_ximagesink_ximage_new),
(gst_ximagesink_setcaps), (gst_ximagesink_buffer_alloc):
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
(gst_xvimage_buffer_finalize), (gst_xvimage_buffer_free),
(gst_xvimage_buffer_class_init), (gst_xvimage_buffer_get_type),
(gst_xvimagesink_xvimage_new), (gst_xvimagesink_xvimage_put),
(gst_xvimagesink_show_frame), (gst_xvimagesink_buffer_alloc):
Cleanups and buffer alloc.
2005-06-02 09:46:40 +00:00
|
|
|
if (res != GST_FLOW_OK)
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
goto no_buffer;
|
configure.ac: In the output at the end, don't show the first plugin on the same line as "Core plug-ins, always built:".
Original commit message from CVS:
* configure.ac:
In the output at the end, don't show the first plugin on the same
line as "Core plug-ins, always built:".
Indent the output as for other plugin categories
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_create):
#define that can be used to not use peer buffer_alloc functions for
test purposes.
* sys/ximage/ximagesink.c: (gst_ximage_buffer_init),
(gst_ximage_buffer_get_type), (gst_ximagesink_ximage_new),
(gst_ximagesink_show_frame):
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_init),
(gst_xvimage_buffer_get_type), (gst_xvimagesink_setcaps),
(gst_xvimagesink_show_frame):
Error case handling fixes. gst-launch fakesrc ! x[v]imagesink now
fails gracefully instead of XError aborting or deadlocking.
2005-09-06 23:26:49 +00:00
|
|
|
#else
|
|
|
|
outbuf = gst_buffer_new_and_alloc (newsize);
|
|
|
|
gst_buffer_set_caps (outbuf, GST_PAD_CAPS (GST_BASE_SRC_PAD (psrc)));
|
|
|
|
#endif
|
2002-07-30 01:25:26 +00:00
|
|
|
|
2005-09-28 13:36:45 +00:00
|
|
|
src->make_image (src, (void *) GST_BUFFER_DATA (outbuf),
|
|
|
|
src->width, src->height);
|
2004-03-14 22:34:34 +00:00
|
|
|
|
2005-09-28 13:36:45 +00:00
|
|
|
GST_BUFFER_TIMESTAMP (outbuf) = src->timestamp_offset + src->running_time;
|
2005-12-12 15:09:55 +00:00
|
|
|
GST_BUFFER_OFFSET (outbuf) = src->n_frames;
|
2005-09-28 13:36:45 +00:00
|
|
|
src->n_frames++;
|
2005-12-12 15:09:55 +00:00
|
|
|
GST_BUFFER_OFFSET_END (outbuf) = src->n_frames;
|
2006-03-23 11:18:19 +00:00
|
|
|
if (src->rate_numerator) {
|
|
|
|
next_time = gst_util_uint64_scale_int (src->n_frames * GST_SECOND,
|
|
|
|
src->rate_denominator, src->rate_numerator);
|
|
|
|
GST_BUFFER_DURATION (outbuf) = next_time - src->running_time;
|
|
|
|
} else {
|
|
|
|
next_time = src->timestamp_offset;
|
|
|
|
/* NONE means forever */
|
|
|
|
GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
|
|
|
|
}
|
2005-12-12 15:09:55 +00:00
|
|
|
|
|
|
|
src->running_time = next_time;
|
2005-03-31 09:43:49 +00:00
|
|
|
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
*buffer = outbuf;
|
gst/: Don't ignore _push() return values.
Original commit message from CVS:
* gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_chain),
(gst_audio_convert_caps_remove_format_info),
(gst_audio_convert_setcaps), (gst_audio_convert_fixate),
(gst_audio_convert_change_state), (gst_audio_convert_channels):
* gst/videotestsrc/gstvideotestsrc.c:
(gst_videotestsrc_src_negotiate), (gst_videotestsrc_src_link),
(gst_videotestsrc_parse_caps), (gst_videotestsrc_src_accept_caps),
(gst_videotestsrc_setcaps), (gst_videotestsrc_activate),
(gst_videotestsrc_init), (gst_videotestsrc_loop):
Don't ignore _push() return values.
Make sure no processing is done when shutting down.
Videotestsrc pad activation fix.
2005-05-05 09:49:08 +00:00
|
|
|
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
return GST_FLOW_OK;
|
2005-03-31 09:43:49 +00:00
|
|
|
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
not_negotiated:
|
2005-03-31 09:43:49 +00:00
|
|
|
{
|
2005-09-28 13:36:45 +00:00
|
|
|
GST_ELEMENT_ERROR (src, CORE, NEGOTIATION, (NULL),
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
("format wasn't negotiated before get function"));
|
|
|
|
return GST_FLOW_NOT_NEGOTIATED;
|
2005-03-31 09:43:49 +00:00
|
|
|
}
|
2006-04-28 14:24:38 +00:00
|
|
|
eos:
|
|
|
|
{
|
2006-10-05 15:55:21 +00:00
|
|
|
GST_DEBUG_OBJECT (src, "eos: 0 framerate, frame %d", (gint) src->n_frames);
|
2006-04-28 14:24:38 +00:00
|
|
|
return GST_FLOW_UNEXPECTED;
|
|
|
|
}
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
no_buffer:
|
|
|
|
{
|
2005-12-12 15:09:55 +00:00
|
|
|
GST_DEBUG_OBJECT (src, "could not allocate buffer, reason %s",
|
|
|
|
gst_flow_get_name (res));
|
gst/videotestsrc/: Make videotestsrc a pushsrc.
Original commit message from CVS:
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (gst_videotestsrc_get_type),
(gst_videotestsrc_class_init), (gst_videotestsrc_negotiate),
(gst_videotestsrc_setcaps), (gst_videotestsrc_getcaps),
(gst_videotestsrc_init), (gst_videotestsrc_event),
(gst_videotestsrc_create), (gst_videotestsrc_start),
(gst_videotestsrc_stop), (gst_videotestsrc_get_times),
(gst_videotestsrc_set_pattern), (gst_videotestsrc_set_property),
(gst_videotestsrc_get_property):
* gst/videotestsrc/gstvideotestsrc.h:
Make videotestsrc a pushsrc.
2005-07-14 18:42:47 +00:00
|
|
|
return res;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-12-27 22:29:43 +00:00
|
|
|
static gboolean
|
|
|
|
gst_video_test_src_start (GstBaseSrc * basesrc)
|
|
|
|
{
|
|
|
|
GstVideoTestSrc *src = GST_VIDEO_TEST_SRC (basesrc);
|
|
|
|
|
|
|
|
src->running_time = 0;
|
|
|
|
src->n_frames = 0;
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
2002-07-26 22:18:57 +00:00
|
|
|
static gboolean
|
2003-11-02 20:48:33 +00:00
|
|
|
plugin_init (GstPlugin * plugin)
|
2002-07-26 22:18:57 +00:00
|
|
|
{
|
2004-03-14 22:34:34 +00:00
|
|
|
oil_init ();
|
Convert a few inner loops to use liboil. This is currently optional, and is only enabled if liboil is present (duh!).
Original commit message from CVS:
Convert a few inner loops to use liboil. This is currently
optional, and is only enabled if liboil is present (duh!).
* configure.ac: Check for liboil-0.1
* gst/intfloat/Makefile.am:
* gst/intfloat/gstint2float.c: (conv_f32_s16), (scalarmult_f32),
(gst_int2float_chain_gint16):
* gst/videofilter/Makefile.am:
* gst/videofilter/gstvideobalance.c: (gst_videobalance_class_init),
(tablelookup_u8), (gst_videobalance_planar411):
* gst/videotestsrc/Makefile.am:
* gst/videotestsrc/gstvideotestsrc.c: (plugin_init):
* gst/videotestsrc/videotestsrc.c: (splat_u8), (paint_hline_YUY2),
(paint_hline_IYU2), (paint_hline_str4), (paint_hline_str3),
(paint_hline_RGB565), (paint_hline_xRGB1555):
2004-02-12 07:37:50 +00:00
|
|
|
|
2005-12-01 01:12:55 +00:00
|
|
|
GST_DEBUG_CATEGORY_INIT (video_test_src_debug, "videotestsrc", 0,
|
2005-07-19 12:01:53 +00:00
|
|
|
"Video Test Source");
|
2004-08-04 11:08:13 +00:00
|
|
|
|
2004-03-14 22:34:34 +00:00
|
|
|
return gst_element_register (plugin, "videotestsrc", GST_RANK_NONE,
|
2005-12-01 01:12:55 +00:00
|
|
|
GST_TYPE_VIDEO_TEST_SRC);
|
2002-07-26 22:18:57 +00:00
|
|
|
}
|
|
|
|
|
2004-03-14 22:34:34 +00:00
|
|
|
GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
|
|
|
|
GST_VERSION_MINOR,
|
|
|
|
"videotestsrc",
|
|
|
|
"Creates a test video stream",
|
2005-10-16 13:54:44 +00:00
|
|
|
plugin_init, VERSION, GST_LICENSE, GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN)
|