obs-filter: Update model for NVIDIA Audio FX

This updates the model when swapping effects with NVIDIA Audio Effects.
This fixes a bug where the model was not updated. :(

Signed-off-by: pkv <pkv@obsproject.com>
This commit is contained in:
pkv
2022-09-22 06:47:23 -07:00
committed by Jim
parent 3df0c61c8c
commit dba3401ceb
2 changed files with 32 additions and 7 deletions
+26 -7
View File
@@ -119,6 +119,7 @@ struct noise_suppress_data {
char *model;
bool nvafx_initialized;
const char *fx;
char *sdk_path;
/* Resampler */
audio_resampler_t *nvafx_resampler;
@@ -217,6 +218,7 @@ static void noise_suppress_destroy(void *data)
audio_resampler_destroy(ng->nvafx_resampler_back);
}
bfree(ng->model);
bfree(ng->sdk_path);
bfree((void *)ng->fx);
if (ng->nvafx_enabled) {
if (ng->use_nvafx)
@@ -425,7 +427,25 @@ static inline enum speaker_layout convert_speaker_layout(uint8_t channels)
return SPEAKERS_UNKNOWN;
}
}
#ifdef LIBNVAFX_ENABLED
static void set_model(void *data, const char *method)
{
struct noise_suppress_data *ng = data;
const char *file;
if (strcmp(NVAFX_EFFECT_DEREVERB, method) == 0)
file = NVAFX_EFFECT_DEREVERB_MODEL;
else if (strcmp(NVAFX_EFFECT_DEREVERB_DENOISER, method) == 0)
file = NVAFX_EFFECT_DEREVERB_DENOISER_MODEL;
else
file = NVAFX_EFFECT_DENOISER_MODEL;
size_t size = strlen(ng->sdk_path) + strlen(file) + 1;
char *buffer = (char *)bmalloc(size);
strcpy(buffer, ng->sdk_path);
strcat(buffer, file);
ng->model = buffer;
}
#endif
static void noise_suppress_update(void *data, obs_data_t *s)
{
struct noise_suppress_data *ng = data;
@@ -444,6 +464,8 @@ static void noise_suppress_update(void *data, obs_data_t *s)
strcmp(method, S_METHOD_NVAFX_DEREVERB) == 0 ||
strcmp(method, S_METHOD_NVAFX_DEREVERB_DENOISER) == 0;
#ifdef LIBNVAFX_ENABLED
if (nvafx_requested)
set_model(ng, method);
float intensity = (float)obs_data_get_double(s, S_NVAFX_INTENSITY);
if (ng->use_nvafx && ng->nvafx_initialized) {
if (intensity != ng->intensity_ratio &&
@@ -469,6 +491,7 @@ static void noise_suppress_update(void *data, obs_data_t *s)
bfree((void *)ng->fx);
ng->fx = bstrdup(method);
ng->intensity_ratio = intensity;
set_model(ng, method);
os_atomic_set_bool(&ng->reinit_done, false);
pthread_mutex_lock(&ng->nvafx_mutex);
for (int i = 0; i < (int)ng->channels; i++) {
@@ -736,13 +759,9 @@ static void *noise_suppress_create(obs_data_t *settings, obs_source_t *filter)
ng->nvafx_enabled = false;
do_log(LOG_ERROR, "NVAFX redist is not installed.");
} else {
const char *file = "\\models\\denoiser_48k.trtpkg";
size_t size = strlen(sdk_path) + strlen(file) + 1;
char *buffer = (char *)bmalloc(size);
strcpy(buffer, sdk_path);
strcat(buffer, file);
ng->model = buffer;
size_t size = sizeof(sdk_path) + 1;
ng->sdk_path = bmalloc(size);
strcpy(ng->sdk_path, sdk_path);
ng->nvafx_enabled = true;
ng->nvafx_initialized = false;
ng->nvafx_loading = false;
+6
View File
@@ -18,6 +18,12 @@ static HMODULE nv_cuda = NULL;
#define NVAFX_EFFECT_AEC "aec"
#define NVAFX_EFFECT_SUPERRES "superres"
/** Model paths */
#define NVAFX_EFFECT_DENOISER_MODEL "\\models\\denoiser_48k.trtpkg"
#define NVAFX_EFFECT_DEREVERB_MODEL "\\models\\dereverb_48k.trtpkg"
#define NVAFX_EFFECT_DEREVERB_DENOISER_MODEL \
"\\models\\dereverb_denoiser_48k.trtpkg"
#define NVAFX_CHAINED_EFFECT_DENOISER_16k_SUPERRES_16k_TO_48k \
"denoiser16k_superres16kto48k"
#define NVAFX_CHAINED_EFFECT_DEREVERB_16k_SUPERRES_16k_TO_48k \