📄 controller.c
字号:
ctrl = gst_controller_new (G_OBJECT (elem), "double", 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, "double", GST_CONTROL_SOURCE (csource))); /* set interpolation mode */ fail_unless (gst_interpolation_control_source_set_interpolation_mode (csource, GST_INTERPOLATE_CUBIC)); /* set control values */ g_value_init (&val_double, G_TYPE_DOUBLE); g_value_set_double (&val_double, 0.0); res = gst_interpolation_control_source_set (csource, 0 * GST_SECOND, &val_double); fail_unless (res, NULL); g_value_set_double (&val_double, 5.0); res = gst_interpolation_control_source_set (csource, 1 * GST_SECOND, &val_double); fail_unless (res, NULL); g_value_set_double (&val_double, 2.0); res = gst_interpolation_control_source_set (csource, 2 * GST_SECOND, &val_double); fail_unless (res, NULL); g_value_set_double (&val_double, 8.0); res = gst_interpolation_control_source_set (csource, 4 * GST_SECOND, &val_double); fail_unless (res, NULL); g_object_unref (G_OBJECT (csource)); /* now pull in values for some timestamps */ gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_double, 0.0); gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_double, 5.0); gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_double, 2.0); gst_controller_sync_values (ctrl, 3 * GST_SECOND); fail_unless (GST_TEST_MONO_SOURCE (elem)->val_double > 2.0 && GST_TEST_MONO_SOURCE (elem)->val_double < 8.0, NULL); gst_controller_sync_values (ctrl, 4 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_double, 8.0); gst_controller_sync_values (ctrl, 5 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_double, 8.0); GST_INFO ("controller->ref_count=%d", G_OBJECT (ctrl)->ref_count); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* make sure we don't crash when someone sets an unsupported interpolation * mode */GST_START_TEST (controller_interpolate_unimplemented){ GstController *ctrl; GstInterpolationControlSource *csource; GstElement *elem; 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_interpolation_control_source_new (); fail_unless (csource != NULL); fail_unless (gst_controller_set_control_source (ctrl, "ulong", GST_CONTROL_SOURCE (csource))); /* set completely bogus interpolation mode */ fail_if (gst_interpolation_control_source_set_interpolation_mode (csource, (GstInterpolateMode) 93871)); g_object_unref (G_OBJECT (csource)); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* test _unset() */GST_START_TEST (controller_interpolation_unset){ GstController *ctrl; GstInterpolationControlSource *csource; GstElement *elem; gboolean res; GValue val_ulong = { 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_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_NONE)); /* 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, 1 * GST_SECOND, &val_ulong); fail_unless (res, NULL); g_value_set_ulong (&val_ulong, 50); res = gst_interpolation_control_source_set (csource, 2 * GST_SECOND, &val_ulong); fail_unless (res, NULL); /* verify values */ 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, 100);; gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 50);; /* unset second */ res = gst_interpolation_control_source_unset (csource, 1 * GST_SECOND); fail_unless (res, NULL); g_object_unref (csource); /* verify value again */ 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_INFO ("controller->ref_count=%d", G_OBJECT (ctrl)->ref_count); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* test _unset_all() */GST_START_TEST (controller_interpolation_unset_all){ GstController *ctrl; GstInterpolationControlSource *csource; GstElement *elem; gboolean res; GValue val_ulong = { 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_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_NONE)); /* 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, 1 * GST_SECOND, &val_ulong); fail_unless (res, NULL); /* verify values */ 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, 100);; /* unset second */ gst_interpolation_control_source_unset_all (csource); g_object_unref (csource); /* verify value again */ gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_int (GST_TEST_MONO_SOURCE (elem)->val_ulong, 100);; GST_INFO ("controller->ref_count=%d", G_OBJECT (ctrl)->ref_count); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* test retrieval of an array of values with get_value_array() */GST_START_TEST (controller_interpolation_linear_value_array){ GstController *ctrl; GstInterpolationControlSource *csource; GstElement *elem; gboolean res; GValue val_ulong = { 0, }; GstValueArray values = { 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_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 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); /* now pull in values for some timestamps */ values.property_name = "ulong"; values.nbsamples = 3; values.sample_interval = GST_SECOND; values.values = (gpointer) g_new (gulong, 3); fail_unless (gst_control_source_get_value_array (GST_CONTROL_SOURCE (csource), 0, &values)); fail_unless_equals_int (((gulong *) values.values)[0], 0); fail_unless_equals_int (((gulong *) values.values)[1], 50); fail_unless_equals_int (((gulong *) values.values)[2], 100); g_object_unref (csource); GST_INFO ("controller->ref_count=%d", G_OBJECT (ctrl)->ref_count); g_free (values.values); g_object_unref (ctrl); gst_object_unref (elem);}GST_END_TEST;/* test if values below minimum and above maximum are clipped */GST_START_TEST (controller_interpolation_linear_invalid_values){ GstController *ctrl; GstInterpolationControlSource *csource; GstElement *elem; gboolean res; GValue val_float = { 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), "float", 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, "float", GST_CONTROL_SOURCE (csource))); /* set interpolation mode */ fail_unless (gst_interpolation_control_source_set_interpolation_mode (csource, GST_INTERPOLATE_LINEAR)); /* set control values */ g_value_init (&val_float, G_TYPE_FLOAT); g_value_set_float (&val_float, 200.0); res = gst_interpolation_control_source_set (csource, 0 * GST_SECOND, &val_float); fail_unless (res, NULL); g_value_set_float (&val_float, -200.0); res = gst_interpolation_control_source_set (csource, 4 * GST_SECOND, &val_float); fail_unless (res, NULL); g_object_unref (csource); /* now pull in values for some timestamps and see if clipping works */ /* 200.0 */ gst_controller_sync_values (ctrl, 0 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_float, 100.0); /* 100.0 */ gst_controller_sync_values (ctrl, 1 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_float, 100.0); /* 50.0 */ gst_controller_sync_values (ctrl, 1 * GST_SECOND + 500 * GST_MSECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_float, 50.0); /* 0.0 */ gst_controller_sync_values (ctrl, 2 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_float, 0.0); /* -100.0 */ gst_controller_sync_values (ctrl, 3 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_float, 0.0); /* -200.0 */ gst_controller_sync_values (ctrl, 4 * GST_SECOND); fail_unless_equals_float (GST_TEST_MONO_SOURCE (elem)->val_float, 0.0); 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_linear_default_values){ GstController *ctrl; GstInterpolationControlSource *csource; GstElement *elem; gboolean res; GValue val_ulong = { 0, }; gst_controller_init (NULL, NULL); elem = gst_element_factory_make ("testmonosource", "test_source");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -