mf-encoder-descriptor.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #pragma once
  2. #define WIN32_MEAN_AND_LEAN
  3. #include <Windows.h>
  4. #undef WIN32_MEAN_AND_LEAN
  5. #include <mfapi.h>
  6. #include <mfidl.h>
  7. #include <stdint.h>
  8. #include <vector>
  9. #include <util/windows/ComPtr.hpp>
  10. namespace MF {
  11. enum class EncoderType {
  12. H264_SOFTWARE,
  13. H264_QSV,
  14. H264_NVENC,
  15. H264_VCE,
  16. };
  17. static const char *typeNames[] = {
  18. "Software",
  19. "Quicksync",
  20. "NVENC",
  21. "AMD VCE",
  22. };
  23. class EncoderDescriptor {
  24. public:
  25. static std::vector<std::shared_ptr<EncoderDescriptor>> EncoderDescriptor::Enumerate();
  26. public:
  27. EncoderDescriptor(ComPtr<IMFActivate> activate_,
  28. const char *name_,
  29. const char *id_,
  30. GUID &guid_,
  31. const std::string &guidString_,
  32. bool isAsync_,
  33. bool isHardware_,
  34. EncoderType type_)
  35. : activate (activate_),
  36. name (name_),
  37. id (id_),
  38. guid (guid_),
  39. guidString (guidString_),
  40. isAsync (isAsync_),
  41. isHardware (isHardware_),
  42. type (type_)
  43. {}
  44. EncoderDescriptor(const EncoderDescriptor &) = delete;
  45. public:
  46. const char *Name() const { return name; }
  47. const char *Id() const { return id; }
  48. ComPtr<IMFActivate> &Activator() { return activate; }
  49. GUID &Guid() { return guid; }
  50. std::string GuidString() const { return guidString; }
  51. bool Async() const { return isAsync; }
  52. bool Hardware() const { return isHardware; }
  53. EncoderType Type() const { return type; }
  54. private:
  55. ComPtr<IMFActivate> activate;
  56. const char *name;
  57. const char *id;
  58. GUID guid;
  59. std::string guidString;
  60. bool isAsync;
  61. bool isHardware;
  62. EncoderType type;
  63. };
  64. };