test-filter.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <obs-module.h>
  2. struct test_filter {
  3. obs_source_t *source;
  4. gs_effect_t *whatever;
  5. };
  6. static const char *filter_getname(void)
  7. {
  8. return "Test";
  9. }
  10. static void filter_destroy(void *data)
  11. {
  12. struct test_filter *tf = data;
  13. if (tf) {
  14. obs_enter_graphics();
  15. gs_effect_destroy(tf->whatever);
  16. bfree(tf);
  17. obs_leave_graphics();
  18. }
  19. }
  20. static void *filter_create(obs_data_t *settings, obs_source_t *source)
  21. {
  22. struct test_filter *tf = bzalloc(sizeof(struct test_filter));
  23. char *effect_file;
  24. obs_enter_graphics();
  25. effect_file = obs_module_file("test.effect");
  26. tf->source = source;
  27. tf->whatever = gs_effect_create_from_file(effect_file, NULL);
  28. bfree(effect_file);
  29. if (!tf->whatever) {
  30. filter_destroy(tf);
  31. return NULL;
  32. }
  33. obs_leave_graphics();
  34. UNUSED_PARAMETER(settings);
  35. return tf;
  36. }
  37. static void filter_render(void *data, gs_effect_t *effect)
  38. {
  39. struct test_filter *tf = data;
  40. obs_source_process_filter(tf->source, tf->whatever, 0, 0, GS_RGBA,
  41. OBS_ALLOW_DIRECT_RENDERING);
  42. UNUSED_PARAMETER(effect);
  43. }
  44. struct obs_source_info test_filter = {
  45. .id = "test_filter",
  46. .type = OBS_SOURCE_TYPE_FILTER,
  47. .output_flags = OBS_SOURCE_VIDEO,
  48. .get_name = filter_getname,
  49. .create = filter_create,
  50. .destroy = filter_destroy,
  51. .video_render = filter_render
  52. };