mf-common.hpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include <obs-module.h>
  3. #include <mfapi.h>
  4. #include <functional>
  5. #include <comdef.h>
  6. #include <chrono>
  7. #ifndef MF_LOG
  8. #define MF_LOG(level, format, ...) \
  9. blog(level, "[Media Foundation encoder]: " format, ##__VA_ARGS__)
  10. #endif
  11. #ifndef MF_LOG_ENCODER
  12. #define MF_LOG_ENCODER(format_name, encoder, level, format, ...) \
  13. blog(level, "[Media Foundation %s: '%s']: " format, \
  14. format_name, obs_encoder_get_name(encoder), \
  15. ##__VA_ARGS__)
  16. #endif
  17. #ifndef MF_LOG_COM
  18. #define MF_LOG_COM(level, msg, hr) MF_LOG(level, \
  19. msg " failed, %S (0x%08lx)", \
  20. _com_error(hr).ErrorMessage(), hr)
  21. #endif
  22. #ifndef HRC
  23. #define HRC(r) \
  24. if(FAILED(hr = (r))) { \
  25. MF_LOG_COM(LOG_ERROR, #r, hr); \
  26. goto fail; \
  27. }
  28. #endif
  29. #ifndef HR_CHECK
  30. #define HR_CHECK(level, r) \
  31. if(FAILED(hr = (r))) { \
  32. MF_LOG_COM(level, #r, hr); \
  33. goto fail; \
  34. }
  35. #endif
  36. #ifndef HRL
  37. #define HRL(r) \
  38. if(FAILED(hr = (r))) \
  39. MF_LOG_COM(LOG_WARNING, #r, hr);
  40. #endif
  41. namespace MF {
  42. enum Status {
  43. FAILURE,
  44. SUCCESS,
  45. NOT_ACCEPTING,
  46. NEED_MORE_INPUT
  47. };
  48. bool LogMediaType(IMFMediaType *mediaType);
  49. }