test-filter.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "test-filter.h"
  2. const char *test_getname(const char *locale)
  3. {
  4. return "Test";
  5. }
  6. struct test_filter *test_create(const char *settings, obs_source_t source)
  7. {
  8. struct test_filter *tf = bmalloc(sizeof(struct test_filter));
  9. char *effect_file;
  10. memset(tf, 0, sizeof(struct test_filter));
  11. gs_entercontext(obs_graphics());
  12. effect_file = obs_find_plugin_file("test-input/test.effect");
  13. tf->source = source;
  14. tf->whatever = gs_create_effect_from_file(effect_file, NULL);
  15. bfree(effect_file);
  16. if (!tf->whatever) {
  17. test_destroy(tf);
  18. return NULL;
  19. }
  20. tf->texrender = texrender_create(GS_RGBA, GS_ZS_NONE);
  21. gs_leavecontext();
  22. return tf;
  23. }
  24. void test_destroy(struct test_filter *tf)
  25. {
  26. if (tf) {
  27. gs_entercontext(obs_graphics());
  28. effect_destroy(tf->whatever);
  29. texrender_destroy(tf->texrender);
  30. bfree(tf);
  31. gs_leavecontext();
  32. }
  33. }
  34. uint32_t test_get_output_flags(struct test_filter *tf)
  35. {
  36. return SOURCE_VIDEO;
  37. }
  38. void test_video_tick(struct test_filter *tf, float seconds)
  39. {
  40. texrender_reset(tf->texrender);
  41. }
  42. void test_video_render(struct test_filter *tf)
  43. {
  44. obs_source_process_filter(tf->source, tf->texrender, tf->whatever,
  45. 0, 0, ALLOW_DIRECT_RENDERING);
  46. }