typedef struct _GstTestTrans GstTestTrans;
typedef struct _GstTestTransClass GstTestTransClass;
-#define GST_TYPE_TEST_TRANS \
- (gst_test_trans_get_type())
-#define GST_TEST_TRANS(obj) \
- (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_TEST_TRANS,GstTestTrans))
-#define GST_TEST_TRANS_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_TEST_TRANS,GstTestTransClass))
-#define GST_TEST_TRANS_GET_CLASS(obj) \
- (G_TYPE_INSTANCE_GET_CLASS((obj), GST_TYPE_TEST_TRANS, GstTestTransClass))
-#define GST_IS_TEST_TRANS(obj) \
- (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_TEST_TRANS))
-#define GST_IS_TEST_TRANS_CLASS(klass) \
- (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_TEST_TRANS))
+#define GST_TEST_TRANS(obj) ((GstTestTrans *)(obj))
struct _GstTestTrans
{
GstBaseTransformClass parent_class;
};
-GType gst_test_trans_get_type (void);
-
-G_DEFINE_TYPE (GstTestTrans, gst_test_trans, GST_TYPE_BASE_TRANSFORM);
-
static GstFlowReturn (*klass_transform) (GstBaseTransform * trans,
GstBuffer * inbuf, GstBuffer * outbuf) = NULL;
static GstFlowReturn (*klass_transform_ip) (GstBaseTransform * trans,
gst_element_class_add_static_pad_template (element_class, sink_template);
gst_element_class_add_static_pad_template (element_class, src_template);
+ GST_INFO ("setting up %s", g_type_name (((GTypeClass *) klass)->g_type));
+
trans_class->passthrough_on_same_caps = klass_passthrough_on_same_caps;
if (klass_transform_ip != NULL)
trans_class->transform_ip = klass_transform_ip;
TestTransData *res;
GstPad *tmp;
GstPadTemplate *templ;
+ GType type;
+
+ /* we register a new sub-class for every test-run, so the class init
+ * function is called for every test run and can be set up properly
+ * even with CK_FORK=no */
+ {
+ static gint counter = 0;
+ gchar name[100];
+
+ g_snprintf (name, sizeof (name), "GstTestTrans%d", ++counter);
+
+ type = g_type_register_static_simple (GST_TYPE_BASE_TRANSFORM, name,
+ sizeof (GstTestTransClass), (GClassInitFunc) gst_test_trans_class_init,
+ sizeof (GstTestTrans), (GInstanceInitFunc) gst_test_trans_init, 0);
+ }
res = g_new0 (TestTransData, 1);
- res->trans = g_object_new (GST_TYPE_TEST_TRANS, NULL);
+ res->trans = g_object_new (type, NULL);
templ = gst_static_pad_template_get (sink_template);
templ->direction = GST_PAD_SRC;
gst_test_trans_push_segment (trans);
gst_test_trans_free (trans);
+
+ klass_transform_ip = NULL;
+ klass_transform = NULL;
+ klass_transform_caps = NULL;
+ klass_transform_size = NULL;
+ klass_set_caps = NULL;
+ klass_submit_input_buffer = NULL;
+ klass_generate_output = NULL;
}
GST_END_TEST;
GST_END_TEST;
+static void
+transform1_setup (void)
+{
+ sink_template = &gst_test_trans_sink_template;
+ src_template = &gst_test_trans_src_template;
+}
+
+static void
+transform1_teardown (void)
+{
+ /* reset global state */
+ klass_transform_ip = NULL;
+ klass_transform = NULL;
+ klass_transform_caps = NULL;
+ klass_transform_size = NULL;
+ klass_set_caps = NULL;
+ klass_submit_input_buffer = NULL;
+ klass_generate_output = NULL;
+}
static Suite *
gst_basetransform_suite (void)
TCase *tc = tcase_create ("general");
suite_add_tcase (s, tc);
+ tcase_add_checked_fixture (tc, transform1_setup, transform1_teardown);
+
/* pass through */
tcase_add_test (tc, basetransform_chain_pt1);
tcase_add_test (tc, basetransform_chain_pt2);