Compare commits

...

2 commits

Author SHA1 Message Date
crocodileGena bab1614dc8
Merge bb14630d94 into 6cc0e2b803 2024-06-26 13:57:48 +10:00
Crocodile Gena bb14630d94 obs-vst: Use uniqueID instead of MD5 2023-02-16 11:57:04 +02:00
3 changed files with 24 additions and 9 deletions

View file

@ -372,6 +372,11 @@ void VSTPlugin::closeEditor()
editorWidget->close();
}
int32_t VSTPlugin::getUniqueID()
{
return effect ? effect->uniqueID : 0;
}
std::string VSTPlugin::getEffectPath()
{
return pluginPath;

View file

@ -99,6 +99,7 @@ public:
obs_audio_data *process(struct obs_audio_data *audio);
bool openInterfaceWhenActive = false;
bool vstLoaded();
int32_t getUniqueID();
bool isEditorOpen();
void onEditorClosed();

View file

@ -130,14 +130,25 @@ static void vst_update(void *data, obs_data_t *settings)
}
vstPlugin->loadEffectFromPath(std::string(path));
std::string hash = getFileMD5(path);
const char *chunkHash = obs_data_get_string(settings, "chunk_hash");
const int32_t unique_id = vstPlugin->getUniqueID();
const int32_t chunk_unique_id =
obs_data_get_int(settings, "chunk_unique_id");
const char *chunkData = obs_data_get_string(settings, "chunk_data");
bool chunkHashesMatch = chunkHash && *chunkHash &&
hash.compare(chunkHash) == 0;
if (chunkData && *chunkData &&
(chunkHashesMatch || !chunkHash || !*chunkHash)) {
bool isChunkMatch =
(0 != chunk_unique_id && unique_id == chunk_unique_id);
// Fall back to support older sessions saved with MD5 hash.
if (!isChunkMatch) {
std::string hash = getFileMD5(path);
const char *chunkHash =
obs_data_get_string(settings, "chunk_hash");
isChunkMatch = chunkHash && *chunkHash &&
hash.compare(chunkHash) == 0;
}
if (chunkData && *chunkData && isChunkMatch) {
vstPlugin->setChunk(std::string(chunkData));
}
}
@ -155,9 +166,7 @@ static void vst_save(void *data, obs_data_t *settings)
VSTPlugin *vstPlugin = (VSTPlugin *)data;
obs_data_set_string(settings, "chunk_data",
vstPlugin->getChunk().c_str());
obs_data_set_string(
settings, "chunk_hash",
getFileMD5(vstPlugin->getEffectPath().c_str()).c_str());
obs_data_set_int(settings, "chunk_unique_id", vstPlugin->getUniqueID());
}
static struct obs_audio_data *vst_filter_audio(void *data,