obs-outputs.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include <obs-module.h>
  2. #ifdef _WIN32
  3. #include <winsock2.h>
  4. #include <mbedtls/threading.h>
  5. #endif
  6. OBS_DECLARE_MODULE()
  7. OBS_MODULE_USE_DEFAULT_LOCALE("obs-outputs", "en-US")
  8. MODULE_EXPORT const char *obs_module_description(void)
  9. {
  10. return "OBS core RTMP/FLV/null/FTL outputs";
  11. }
  12. extern struct obs_output_info rtmp_output_info;
  13. extern struct obs_output_info null_output_info;
  14. extern struct obs_output_info flv_output_info;
  15. #if defined(FTL_FOUND)
  16. extern struct obs_output_info ftl_output_info;
  17. #endif
  18. #if defined(_WIN32) && defined(MBEDTLS_THREADING_ALT)
  19. void mbed_mutex_init(mbedtls_threading_mutex_t *m)
  20. {
  21. CRITICAL_SECTION *c = bzalloc(sizeof(CRITICAL_SECTION));
  22. *m = c;
  23. InitializeCriticalSection(c);
  24. }
  25. void mbed_mutex_free(mbedtls_threading_mutex_t *m)
  26. {
  27. CRITICAL_SECTION *c = *m;
  28. DeleteCriticalSection(c);
  29. bfree(*m);
  30. *m = NULL;
  31. }
  32. int mbed_mutex_lock(mbedtls_threading_mutex_t *m)
  33. {
  34. CRITICAL_SECTION *c = *m;
  35. EnterCriticalSection(c);
  36. return 0;
  37. }
  38. int mbed_mutex_unlock(mbedtls_threading_mutex_t *m)
  39. {
  40. CRITICAL_SECTION *c = *m;
  41. LeaveCriticalSection(c);
  42. return 0;
  43. }
  44. #endif
  45. bool obs_module_load(void)
  46. {
  47. #ifdef _WIN32
  48. WSADATA wsad;
  49. WSAStartup(MAKEWORD(2, 2), &wsad);
  50. #endif
  51. #if defined(_WIN32) && defined(MBEDTLS_THREADING_ALT)
  52. mbedtls_threading_set_alt(mbed_mutex_init, mbed_mutex_free,
  53. mbed_mutex_lock, mbed_mutex_unlock);
  54. #endif
  55. obs_register_output(&rtmp_output_info);
  56. obs_register_output(&null_output_info);
  57. obs_register_output(&flv_output_info);
  58. #if defined(FTL_FOUND)
  59. obs_register_output(&ftl_output_info);
  60. #endif
  61. return true;
  62. }
  63. void obs_module_unload(void)
  64. {
  65. #ifdef _WIN32
  66. #ifdef MBEDTLS_THREADING_ALT
  67. mbedtls_threading_free_alt();
  68. #endif
  69. WSACleanup();
  70. #endif
  71. }