nvafx-load.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include <Windows.h>
  2. #include <stdio.h>
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. #include <stdint.h>
  6. #include <util/platform.h>
  7. #define NVAFX_API
  8. #ifdef LIBNVAFX_ENABLED
  9. static HMODULE nv_audiofx = NULL;
  10. /** Denoiser Effect */
  11. #define NVAFX_EFFECT_DENOISER "denoiser"
  12. /** Parameter selectors */
  13. /** Denoiser parameters. @ref NvAFX_ParameterSelector */
  14. /** Denoiser filter model path (char*) */
  15. #define NVAFX_PARAM_DENOISER_MODEL_PATH "denoiser_model_path"
  16. /** Denoiser sample rate (unsigned int). Currently supported sample rate(s): 48000 */
  17. #define NVAFX_PARAM_DENOISER_SAMPLE_RATE "sample_rate"
  18. /** Denoiser number of samples per frame (unsigned int). This is immutable parameter */
  19. #define NVAFX_PARAM_DENOISER_NUM_SAMPLES_PER_FRAME "num_samples_per_frame"
  20. /** Denoiser number of channels in I/O (unsigned int). This is immutable parameter */
  21. #define NVAFX_PARAM_DENOISER_NUM_CHANNELS "num_channels"
  22. /** Denoiser noise suppression factor (float) */
  23. #define NVAFX_PARAM_DENOISER_INTENSITY_RATIO "intensity_ratio"
  24. typedef enum {
  25. /** Success */
  26. NVAFX_STATUS_SUCCESS = 0,
  27. /** Failure */
  28. NVAFX_STATUS_FAILED = 1,
  29. /** Handle invalid */
  30. NVAFX_STATUS_INVALID_HANDLE = 2,
  31. /** Parameter value invalid */
  32. NVAFX_STATUS_INVALID_PARAM = 3,
  33. /** Parameter value immutable */
  34. NVAFX_STATUS_IMMUTABLE_PARAM = 4,
  35. /** Insufficient data to process */
  36. NVAFX_STATUS_INSUFFICIENT_DATA = 5,
  37. /** Effect not supported */
  38. NVAFX_STATUS_EFFECT_NOT_AVAILABLE = 6,
  39. /** Given buffer length too small to hold requested data */
  40. NVAFX_STATUS_OUTPUT_BUFFER_TOO_SMALL = 7,
  41. /** Model file could not be loaded */
  42. NVAFX_STATUS_MODEL_LOAD_FAILED = 8,
  43. /** (32 bit SDK only) COM server was not registered, please see user manual for details */
  44. NVAFX_STATUS_32_SERVER_NOT_REGISTERED = 9,
  45. /** (32 bit SDK only) COM operation failed */
  46. NVAFX_STATUS_32_COM_ERROR = 10,
  47. /** GPU supported. The SDK requires Turing and above GPU with Tensor cores */
  48. NVAFX_STATUS_GPU_UNSUPPORTED = 11,
  49. } NvAFX_Status;
  50. typedef const char *NvAFX_EffectSelector;
  51. typedef const char *NvAFX_ParameterSelector;
  52. typedef void *NvAFX_Handle;
  53. typedef NvAFX_Status
  54. NVAFX_API (*NvAFX_GetEffectList_t)(int *num_effects,
  55. NvAFX_EffectSelector *effects[]);
  56. typedef NvAFX_Status
  57. NVAFX_API (*NvAFX_CreateEffect_t)(NvAFX_EffectSelector code,
  58. NvAFX_Handle *effect);
  59. typedef NvAFX_Status NVAFX_API (*NvAFX_DestroyEffect_t)(NvAFX_Handle effect);
  60. typedef NvAFX_Status
  61. NVAFX_API (*NvAFX_SetU32_t)(NvAFX_Handle effect,
  62. NvAFX_ParameterSelector param_name,
  63. unsigned int val);
  64. typedef NvAFX_Status
  65. NVAFX_API (*NvAFX_SetString_t)(NvAFX_Handle effect,
  66. NvAFX_ParameterSelector param_name,
  67. const char *val);
  68. typedef NvAFX_Status NVAFX_API (*NvAFX_SetFloat_t)(
  69. NvAFX_Handle effect, NvAFX_ParameterSelector param_name, float val);
  70. typedef NvAFX_Status
  71. NVAFX_API (*NvAFX_GetU32_t)(NvAFX_Handle effect,
  72. NvAFX_ParameterSelector param_name,
  73. unsigned int *val);
  74. typedef NvAFX_Status
  75. NVAFX_API (*NvAFX_GetString_t)(NvAFX_Handle effect,
  76. NvAFX_ParameterSelector param_name,
  77. char *val, int max_length);
  78. typedef NvAFX_Status NVAFX_API (*NvAFX_GetFloat_t)(
  79. NvAFX_Handle effect, NvAFX_ParameterSelector param_name, float *val);
  80. typedef NvAFX_Status NVAFX_API (*NvAFX_Load_t)(NvAFX_Handle effect);
  81. typedef NvAFX_Status NVAFX_API (*NvAFX_Run_t)(NvAFX_Handle effect,
  82. const float **input,
  83. float **output,
  84. unsigned num_samples,
  85. unsigned num_channels);
  86. static NvAFX_GetEffectList_t NvAFX_GetEffectList = NULL;
  87. static NvAFX_CreateEffect_t NvAFX_CreateEffect = NULL;
  88. static NvAFX_DestroyEffect_t NvAFX_DestroyEffect = NULL;
  89. static NvAFX_SetU32_t NvAFX_SetU32 = NULL;
  90. static NvAFX_SetString_t NvAFX_SetString = NULL;
  91. static NvAFX_SetFloat_t NvAFX_SetFloat = NULL;
  92. static NvAFX_GetU32_t NvAFX_GetU32 = NULL;
  93. static NvAFX_GetString_t NvAFX_GetString = NULL;
  94. static NvAFX_GetFloat_t NvAFX_GetFloat = NULL;
  95. static NvAFX_Load_t NvAFX_Load = NULL;
  96. static NvAFX_Run_t NvAFX_Run = NULL;
  97. void release_lib(void)
  98. {
  99. NvAFX_GetEffectList = NULL;
  100. NvAFX_CreateEffect = NULL;
  101. NvAFX_DestroyEffect = NULL;
  102. NvAFX_SetU32 = NULL;
  103. NvAFX_SetString = NULL;
  104. NvAFX_SetFloat = NULL;
  105. NvAFX_GetU32 = NULL;
  106. NvAFX_GetString = NULL;
  107. NvAFX_GetFloat = NULL;
  108. NvAFX_Load = NULL;
  109. NvAFX_Run = NULL;
  110. if (nv_audiofx) {
  111. FreeLibrary(nv_audiofx);
  112. nv_audiofx = NULL;
  113. }
  114. }
  115. static bool nvafx_get_sdk_path(char *buffer, const size_t len)
  116. {
  117. DWORD ret =
  118. GetEnvironmentVariableA("NVAFX_SDK_DIR", buffer, (DWORD)len);
  119. if (!ret || ret >= len - 1)
  120. return false;
  121. return true;
  122. }
  123. static bool load_lib(void)
  124. {
  125. char path[MAX_PATH];
  126. if (!nvafx_get_sdk_path(path, sizeof(path)))
  127. return false;
  128. SetDllDirectoryA(path);
  129. nv_audiofx = LoadLibrary(L"NVAudioEffects.dll");
  130. SetDllDirectoryA(NULL);
  131. return !!nv_audiofx;
  132. }
  133. #endif