diff --git a/spa/include/spa/interfaces/audio/aec.h b/spa/include/spa/interfaces/audio/aec.h index e68224057..9fb109df2 100644 --- a/spa/include/spa/interfaces/audio/aec.h +++ b/spa/include/spa/interfaces/audio/aec.h @@ -71,7 +71,9 @@ struct spa_audio_aec_methods { int (*init) (void *object, const struct spa_dict *args, const struct spa_audio_info_raw *info); int (*run) (void *object, const float *rec[], const float *play[], float *out[], uint32_t n_samples); int (*set_props) (void *object, const struct spa_dict *args); + /* since 0.3.58, version 1:1 */ int (*activate) (void *object); + /* since 0.3.58, version 1:1 */ int (*deactivate) (void *object); }; diff --git a/src/modules/module-echo-cancel.c b/src/modules/module-echo-cancel.c index e9d426f2e..42caf780b 100644 --- a/src/modules/module-echo-cancel.c +++ b/src/modules/module-echo-cancel.c @@ -1024,8 +1024,16 @@ int pipewire__module_init(struct pw_impl_module *module, const char *args) } impl->aec = iface; impl->spa_handle = handle; - pw_log_info("loaded aec plugin %s with interface version %d, using interface version %d", - impl->aec->name, impl->aec->iface.version, SPA_VERSION_AUDIO_AEC); + + if (impl->aec->iface.version > SPA_VERSION_AUDIO_AEC) { + pw_log_error("codec plugin %s has incompatible ABI version (%d > %d)", + SPA_NAME_AEC, impl->aec->iface.version, SPA_VERSION_AUDIO_AEC); + res = -ENOENT; + goto error; + } + + pw_log_info("Using plugin AEC %s with version %d", impl->aec->name, + impl->aec->iface.version); if ((str = pw_properties_get(props, "aec.args")) != NULL) aec_props = pw_properties_new_string(str);