📄 controller.c
字号:
/* that property should exist and should be controllable */ ctrl = gst_controller_new (G_OBJECT (elem), "ulong", NULL); fail_unless (ctrl != NULL, NULL); /* Get interpolation control source */ csource = gst_interpolation_control_source_new (); fail_unless (csource != NULL); fail_unless (gst_controller_set_control_source (ctrl, "ulong", GST_CONTROL_SOURCE (csource))); /* set interpolation mode */ fail_unless (gst_interpolation_control_source_set_interpolation_mode (csource, GST_INTERPOLATE_LINEAR)); /* Should fail if no value was set yet */ g_value_init (&val_ulong, G_TYPE_ULONG); fail_if (gst_control_source_get_value (GST_CONTROL_SOURCE (csource), 0 * GST_SECOND, &val_ulong)); /* set control values */ g_value_set_ulong (&val_ulong, 0); res = gst_interpolation_control_source_set (csource, 1 * GST_SECOND, &val_ulong); fail_unless (res, NULL); g_value_set_ulong (&val_ulong, 100); res = gst_interpolation_control_source_set (csource, 3 * GST_SECOND, &val_ulong); fail_unless (res, NULL); /* now pull in values for some timestamps */ /* should give the value of the first control point for timestamps before it */ gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 50);; gst_controller_sync_values (ctrl, 3 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; /* set control values */ g_value_set_ulong (&val_ulong, 0); res = gst_interpolation_control_source_set (csource, 0 * GST_SECOND, &val_ulong); fail_unless (res, NULL); g_value_set_ulong (&val_ulong, 100); res = gst_interpolation_control_source_set (csource, 2 * GST_SECOND, &val_ulong); fail_unless (res, NULL); /* unset the old ones */ res = gst_interpolation_control_source_unset (csource, 1 * GST_SECOND); fail_unless (res, NULL); res = gst_interpolation_control_source_unset (csource, 3 * GST_SECOND); fail_unless (res, NULL); /* now pull in values for some timestamps */ /* should now give our value for timestamp 0 */ gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 50);; gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; g_object_unref (G_OBJECT (csource)); GST_INFO ("controller->ref_count=%d", G_OBJECT (ctrl)->ref_count); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* test gst_controller_set_disabled() with linear interpolation */GST_START_TEST (controller_interpolate_linear_disabled){ GstController *ctrl; GstInterpolationControlSource *csource, *csource2; GstElement *elem; gboolean res; GValue val_ulong = { 0, } , val_double = { 0,}; gst_controller_init (NULL, NULL); elem = gst_element_factory_make ("testmonosource", "test_source"); /* that property should exist and should be controllable */ ctrl = gst_controller_new (G_OBJECT (elem), "ulong", "double", NULL); fail_unless (ctrl != NULL, NULL); /* Get interpolation control source */ csource = gst_interpolation_control_source_new (); csource2 = gst_interpolation_control_source_new (); fail_unless (csource != NULL); fail_unless (gst_controller_set_control_source (ctrl, "ulong", GST_CONTROL_SOURCE (csource))); fail_unless (csource2 != NULL); fail_unless (gst_controller_set_control_source (ctrl, "double", GST_CONTROL_SOURCE (csource2))); /* set interpolation mode */ fail_unless (gst_interpolation_control_source_set_interpolation_mode (csource, GST_INTERPOLATE_LINEAR)); fail_unless (gst_interpolation_control_source_set_interpolation_mode (csource2, GST_INTERPOLATE_LINEAR)); /* set control values */ g_value_init (&val_ulong, G_TYPE_ULONG); g_value_set_ulong (&val_ulong, 0); res = gst_interpolation_control_source_set (csource, 0 * GST_SECOND, &val_ulong); fail_unless (res, NULL); g_value_set_ulong (&val_ulong, 100); res = gst_interpolation_control_source_set (csource, 2 * GST_SECOND, &val_ulong); fail_unless (res, NULL); g_object_unref (G_OBJECT (csource));/* set control values */ g_value_init (&val_double, G_TYPE_DOUBLE); g_value_set_double (&val_double, 2.0); res = gst_interpolation_control_source_set (csource2, 0 * GST_SECOND, &val_double); fail_unless (res, NULL); g_value_set_double (&val_double, 4.0); res = gst_interpolation_control_source_set (csource2, 2 * GST_SECOND, &val_double); fail_unless (res, NULL); g_object_unref (G_OBJECT (csource2)); /* now pull in values for some timestamps */ gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 2.0, NULL); gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 50);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 3.0, NULL); gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 4.0, NULL); /* now pull in values for some timestamps, prop double disabled */ GST_TEST_MONO_SOURCE (elem)->val_ulong = 0; GST_TEST_MONO_SOURCE (elem)->val_double = 0.0; gst_controller_set_property_disabled (ctrl, "double", TRUE); gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 0.0, NULL); gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 50);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 0.0, NULL); gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 0.0, NULL); /* now pull in values for some timestamps, after enabling double again */ GST_TEST_MONO_SOURCE (elem)->val_ulong = 0; GST_TEST_MONO_SOURCE (elem)->val_double = 0.0; gst_controller_set_property_disabled (ctrl, "double", FALSE); gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 2.0, NULL); gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 50);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 3.0, NULL); gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 4.0, NULL); /* now pull in values for some timestamps, after disabling all props */ GST_TEST_MONO_SOURCE (elem)->val_ulong = 0; GST_TEST_MONO_SOURCE (elem)->val_double = 0.0; gst_controller_set_disabled (ctrl, TRUE); gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 0.0, NULL); gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 0.0, NULL); gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 0.0, NULL); /* now pull in values for some timestamps, enabling double again */ GST_TEST_MONO_SOURCE (elem)->val_ulong = 0; GST_TEST_MONO_SOURCE (elem)->val_double = 0.0; gst_controller_set_property_disabled (ctrl, "double", FALSE); gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 2.0, NULL); gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 3.0, NULL); gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 4.0, NULL); /* now pull in values for some timestamps, enabling all */ GST_TEST_MONO_SOURCE (elem)->val_ulong = 0; GST_TEST_MONO_SOURCE (elem)->val_double = 0.0; gst_controller_set_disabled (ctrl, FALSE); gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 2.0, NULL); gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 50);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 3.0, NULL); gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double == 4.0, NULL); GST_INFO ("controller->ref_count=%d", G_OBJECT (ctrl)->ref_count); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;GST_START_TEST (controller_interpolation_set_from_list){ GstController *ctrl; GstInterpolationControlSource *csource; GstTimedValue *tval; GstElement *elem; GSList *list = NULL; gst_controller_init (NULL, NULL); /* test that an invalid timestamp throws a warning of some sort */ elem = gst_element_factory_make ("testmonosource", "test_source"); /* that property should exist and should be controllable */ ctrl = gst_controller_new (G_OBJECT (elem), "ulong", NULL); fail_unless (ctrl != NULL, NULL); /* Get interpolation control source */ csource = gst_interpolation_control_source_new (); fail_unless (csource != NULL); fail_unless (gst_controller_set_control_source (ctrl, "ulong", GST_CONTROL_SOURCE (csource))); /* set interpolation mode */ fail_unless (gst_interpolation_control_source_set_interpolation_mode (csource, GST_INTERPOLATE_LINEAR)); /* set control value */ tval = g_new0 (GstTimedValue, 1); tval->timestamp = GST_CLOCK_TIME_NONE; g_value_init (&tval->value, G_TYPE_ULONG); g_value_set_ulong (&tval->value, 0); list = g_slist_append (list, tval); fail_if (gst_interpolation_control_source_set_from_list (csource, list)); /* try again with a valid stamp, should work now */ tval->timestamp = 0; fail_unless (gst_interpolation_control_source_set_from_list (csource, list)); g_object_unref (csource); /* allocated GstTimedValue now belongs to the controller, but list not */ g_value_unset (&tval->value); g_free (tval); g_slist_free (list); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* test lfo control source with sine waveform */GST_START_TEST (controller_lfo_sine){ GstController *ctrl; GstLFOControlSource *csource; GstElement *elem; GValue amp = { 0, } , off = { 0,}; gst_controller_init (NULL, NULL); elem = gst_element_factory_make ("testmonosource", "test_source"); /* that property should exist and should be controllable */ ctrl = gst_controller_new (G_OBJECT (elem), "ulong", NULL); fail_unless (ctrl != NULL, NULL); /* Get interpolation control source */ csource = gst_lfo_control_source_new (); fail_unless (csource != NULL); fail_unless (gst_controller_set_control_source (ctrl, "ulong", GST_CONTROL_SOURCE (csource))); /* set amplitude and offset values */ g_value_init (&, G_TYPE_ULONG); g_value_init (&off, G_TYPE_ULONG); g_value_set_ulong (&, 100); g_value_set_ulong (&off, 100); /* set waveform mode */ g_object_set (csource, "waveform", GST_LFO_WAVEFORM_SINE, "frequency", 1.0, "timeshift", (GstClockTime) 0, "amplitude", &, "offset", &off, NULL); g_object_unref (G_OBJECT (csource)); /* now pull in values for some timestamps */ gst_controller_sync_values (ctrl, 0 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; gst_controller_sync_values (ctrl, 250 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 200);; gst_controller_sync_values (ctrl, 500 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; gst_controller_sync_values (ctrl, 750 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; gst_controller_sync_values (ctrl, 1000 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; gst_controller_sync_values (ctrl, 1250 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 200);; gst_controller_sync_values (ctrl, 1500 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; gst_controller_sync_values (ctrl, 1750 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; gst_controller_sync_values (ctrl, 2000 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; gst_controller_sync_values (ctrl, 1250 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 200);; gst_controller_sync_values (ctrl, 1500 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; gst_controller_sync_values (ctrl, 1750 * GST_MSECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 0);; GST_INFO ("controller->ref_count=%d", G_OBJECT (ctrl)->ref_count); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* test lfo control source with sine waveform and timeshift */GST_START_TEST (controller_lfo_sine_timeshift){ GstController *ctrl; GstLFOControlSource *csource; GstElement *elem; GValue amp = { 0, } , off = { 0,}; gst_controller_init (NULL, NULL); elem = gst_element_factory_make ("testmonosource", "test_source"); /* that property should exist and should be controllable */ ctrl = gst_controller_new (G_OBJECT (elem), "ulong", NULL); fail_unless (ctrl != NULL, NULL); /* Get interpolation control source */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -