From afeb558e50ad8d80f044439d39193d1cbc566580 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Fri, 1 May 2020 17:25:08 +0800 Subject: Fixed visualization viewport randomly reverting to default. Fixed unexpected pitch wheel activity in rendered video. Remove type checking in the option syntax. --- visualization/renderer/main.cpp | 2 +- visualization/renderer/qmppluginapistub.cpp | 4 ++ visualization/renderer/qmpsettingsro.cpp | 58 ++--------------------------- visualization/renderer/qmpvisrendercore.cpp | 4 ++ visualization/renderer/qmpvisrendercore.hpp | 1 + 5 files changed, 13 insertions(+), 56 deletions(-) (limited to 'visualization/renderer') diff --git a/visualization/renderer/main.cpp b/visualization/renderer/main.cpp index cca8a12..c15d846 100644 --- a/visualization/renderer/main.cpp +++ b/visualization/renderer/main.cpp @@ -25,9 +25,9 @@ int main(int argc,char **argv) qmpVisRenderCore core(&clp); if(clp.positionalArguments().empty()) clp.showHelp(1); + core.loadSettings(); if(!core.loadVisualizationLibrary()) return 1; - core.loadSettings(); if(clp.positionalArguments().size()) core.setMIDIFile(clp.positionalArguments().front().toStdString().c_str()); core.startRender(); diff --git a/visualization/renderer/qmppluginapistub.cpp b/visualization/renderer/qmppluginapistub.cpp index d37e191..1be4880 100644 --- a/visualization/renderer/qmppluginapistub.cpp +++ b/visualization/renderer/qmppluginapistub.cpp @@ -79,12 +79,16 @@ int qmpPluginAPIStub::registerUIHook(std::string e, callback_t cb, void *userdat { if(e=="main.start") core->startcb=cb; + if(e=="main.reset") + core->resetcb=cb; return 0; } void qmpPluginAPIStub::unregisterUIHook(std::string e, int hook) { if(e=="main.start") core->startcb=nullptr; + if(e=="main.reset") + core->resetcb=nullptr; } void qmpPluginAPIStub::registerMidiOutDevice(qmpMidiOutDevice *dev, std::string name){} diff --git a/visualization/renderer/qmpsettingsro.cpp b/visualization/renderer/qmpsettingsro.cpp index a66943b..bf8096f 100644 --- a/visualization/renderer/qmpsettingsro.cpp +++ b/visualization/renderer/qmpsettingsro.cpp @@ -168,59 +168,7 @@ void qmpSettingsRO::load(const char *path) void qmpSettingsRO::setopt(std::string key, std::string val) { - if(options.find(key)==options.end()) - { - std::string nkey="Visualization/"+key; - if(options.find(nkey)==options.end()) - { - qDebug("invalid option key %s",key.c_str()); - return; - } - else key=nkey; - } - char *rptr; - switch(options[key].type) - { - case qmpOptionR::ParameterType::parameter_int: - { - long long v=strtoll(val.c_str(),&rptr,10); - if(rptr==val.c_str()||v>INT_MAX||v(v)); - } - break; - case qmpOptionR::ParameterType::parameter_uint: - { - long long v=strtoll(val.c_str(),&rptr,10); - if(rptr==val.c_str()||v>UINT32_MAX||v<0) - qDebug("invalid value for option %s",key.c_str()); - setOptionUint(key,static_cast(v)); - } - break; - case qmpOptionR::ParameterType::parameter_double: - { - errno=0; - double v=strtod(val.c_str(),&rptr); - if(rptr==val.c_str()||errno) - qDebug("invalid value for option %s",key.c_str()); - setOptionDouble(key,v); - } - break; - case qmpOptionR::ParameterType::parameter_bool: - { - if(val!="true"&&val!="false") - qDebug("invalid value for option %s",key.c_str()); - setOptionBool(key,val=="true"); - } - break; - case qmpOptionR::ParameterType::parameter_str: - case qmpOptionR::ParameterType::parameter_url: - setOptionString(key,val); - break; - case qmpOptionR::ParameterType::parameter_enum: - setOptionEnumIntOptName(key,val); - break; - default: - break; - } + settings.insert(QString(key.c_str()),QString(val.c_str())); + if(key.find("Visualization/")!=0) + settings.insert("Visualization/"+QString(key.c_str()),QString(val.c_str())); } diff --git a/visualization/renderer/qmpvisrendercore.cpp b/visualization/renderer/qmpvisrendercore.cpp index a2733a7..d4acea9 100644 --- a/visualization/renderer/qmpvisrendercore.cpp +++ b/visualization/renderer/qmpvisrendercore.cpp @@ -36,6 +36,7 @@ bool qmpVisRenderCore::loadVisualizationLibrary() vp=getintf(api); switchmode(&qmpVisRenderCore::framefunc,!clp->isSet("show-window")); vp->init(); + resetcb(nullptr,nullptr); return true; } @@ -53,7 +54,10 @@ void qmpVisRenderCore::loadSettings() { int sp=o.indexOf('='); if(!~sp) + { qDebug("invalid option pair: %s",o.toStdString().c_str()); + continue; + } QString key=o.left(sp); QString value=o.mid(sp+1); msettings->setopt(key.toStdString(),value.toStdString()); diff --git a/visualization/renderer/qmpvisrendercore.hpp b/visualization/renderer/qmpvisrendercore.hpp index 27337ba..d32e4d7 100644 --- a/visualization/renderer/qmpvisrendercore.hpp +++ b/visualization/renderer/qmpvisrendercore.hpp @@ -33,6 +33,7 @@ private: qmpPluginIntf *vp; qmpFuncBaseIntf *vf; callback_t startcb; + callback_t resetcb; void *mp; qmpPluginAPIStub *api; CMidiPlayer *player; -- cgit v1.2.3