Mercurial > hg > piper-cpp
comparison vamp-json/VampJson.h @ 188:90c962b68d7f
Merge pull request #2 from piper-audio/dev/step-and-block-size
Pull step & block size out into framing struct, return in config
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Mon, 06 Feb 2017 12:04:25 +0000 |
parents | 3eb00e5c76c4 |
children | d2a32436bf09 |
comparison
equal
deleted
inserted
replaced
184:150cfa0c71e1 | 188:90c962b68d7f |
---|---|
692 if (c.currentProgram != "") { | 692 if (c.currentProgram != "") { |
693 jo["currentProgram"] = c.currentProgram; | 693 jo["currentProgram"] = c.currentProgram; |
694 } | 694 } |
695 | 695 |
696 jo["channelCount"] = c.channelCount; | 696 jo["channelCount"] = c.channelCount; |
697 jo["stepSize"] = c.stepSize; | 697 |
698 jo["blockSize"] = c.blockSize; | 698 json11::Json::object framing; |
699 framing["stepSize"] = c.framing.stepSize; | |
700 framing["blockSize"] = c.framing.blockSize; | |
701 jo["framing"] = framing; | |
699 | 702 |
700 return json11::Json(jo); | 703 return json11::Json(jo); |
701 } | 704 } |
702 | 705 |
703 static PluginConfiguration | 706 static PluginConfiguration |
704 toPluginConfiguration(json11::Json j, std::string &err) { | 707 toPluginConfiguration(json11::Json j, std::string &err) { |
705 | 708 |
706 if (!j.has_shape({ | 709 if (!j.has_shape({ |
707 { "channelCount", json11::Json::NUMBER }, | 710 { "channelCount", json11::Json::NUMBER } }, err)) { |
711 err = "malformed plugin configuration: " + err; | |
712 return {}; | |
713 } | |
714 | |
715 if (!j["framing"].has_shape({ | |
708 { "stepSize", json11::Json::NUMBER }, | 716 { "stepSize", json11::Json::NUMBER }, |
709 { "blockSize", json11::Json::NUMBER } }, err)) { | 717 { "blockSize", json11::Json::NUMBER } }, err)) { |
710 err = "malformed plugin configuration: " + err; | 718 err = "malformed framing: " + err; |
711 return {}; | 719 return {}; |
712 } | 720 } |
713 | 721 |
714 if (!j["parameterValues"].is_null() && | 722 if (!j["parameterValues"].is_null() && |
715 !j["parameterValues"].is_object()) { | 723 !j["parameterValues"].is_object()) { |
716 err = "object expected for parameter values"; | 724 err = "object expected for parameter values"; |
717 return {}; | 725 return {}; |
718 } | 726 } |
731 } | 739 } |
732 | 740 |
733 PluginConfiguration config; | 741 PluginConfiguration config; |
734 | 742 |
735 config.channelCount = int(round(j["channelCount"].number_value())); | 743 config.channelCount = int(round(j["channelCount"].number_value())); |
736 config.stepSize = int(round(j["stepSize"].number_value())); | 744 config.framing.stepSize = int(round(j["framing"]["stepSize"].number_value())); |
737 config.blockSize = int(round(j["blockSize"].number_value())); | 745 config.framing.blockSize = int(round(j["framing"]["blockSize"].number_value())); |
738 | 746 |
739 for (auto &pv : j["parameterValues"].object_items()) { | 747 for (auto &pv : j["parameterValues"].object_items()) { |
740 config.parameterValues[pv.first] = float(pv.second.number_value()); | 748 config.parameterValues[pv.first] = float(pv.second.number_value()); |
741 } | 749 } |
742 | 750 |
961 json11::Json::array outs; | 969 json11::Json::array outs; |
962 for (auto &d: cr.outputs) { | 970 for (auto &d: cr.outputs) { |
963 outs.push_back(fromOutputDescriptor(d)); | 971 outs.push_back(fromOutputDescriptor(d)); |
964 } | 972 } |
965 jo["outputList"] = outs; | 973 jo["outputList"] = outs; |
974 | |
975 json11::Json::object framing; | |
976 framing["stepSize"] = cr.framing.stepSize; | |
977 framing["blockSize"] = cr.framing.blockSize; | |
978 jo["framing"] = framing; | |
966 | 979 |
967 return json11::Json(jo); | 980 return json11::Json(jo); |
968 } | 981 } |
969 | 982 |
970 static ConfigurationResponse | 983 static ConfigurationResponse |
971 toConfigurationResponse(json11::Json j, | 984 toConfigurationResponse(json11::Json j, |
972 const PluginHandleMapper &pmapper, std::string &err) { | 985 const PluginHandleMapper &pmapper, std::string &err) { |
973 | 986 |
974 ConfigurationResponse cr; | 987 ConfigurationResponse cr; |
975 | 988 |
976 cr.plugin = pmapper.handleToPlugin(j["handle"].int_value()); | 989 if (!j["framing"].has_shape({ |
990 { "stepSize", json11::Json::NUMBER }, | |
991 { "blockSize", json11::Json::NUMBER } }, err)) { | |
992 err = "malformed framing: " + err; | |
993 return {}; | |
994 } | |
977 | 995 |
978 if (!j["outputList"].is_array()) { | 996 if (!j["outputList"].is_array()) { |
979 err = "array expected for output list"; | 997 err = "array expected for output list"; |
980 return {}; | 998 return {}; |
981 } | 999 } |
1000 | |
1001 cr.plugin = pmapper.handleToPlugin(j["handle"].int_value()); | |
982 | 1002 |
983 for (const auto &o: j["outputList"].array_items()) { | 1003 for (const auto &o: j["outputList"].array_items()) { |
984 cr.outputs.push_back(toOutputDescriptor(o, err)); | 1004 cr.outputs.push_back(toOutputDescriptor(o, err)); |
985 if (failed(err)) return {}; | 1005 if (failed(err)) return {}; |
986 } | 1006 } |
987 | 1007 |
1008 cr.framing.stepSize = int(round(j["framing"]["stepSize"].number_value())); | |
1009 cr.framing.blockSize = int(round(j["framing"]["blockSize"].number_value())); | |
1010 | |
988 return cr; | 1011 return cr; |
989 } | 1012 } |
990 | 1013 |
991 static json11::Json | 1014 static json11::Json |
992 fromProcessRequest(const ProcessRequest &r, | 1015 fromProcessRequest(const ProcessRequest &r, |