Mercurial > hg > svapp
comparison framework/SVFileReader.cpp @ 72:4aa40182321f
* Merge from transforms branch -- switch over to using Transform object
properly
author | Chris Cannam |
---|---|
date | Fri, 07 Dec 2007 16:47:31 +0000 |
parents | 215b8b1b0308 |
children | 2da0999dac1d |
comparison
equal
deleted
inserted
replaced
70:716e9d2f91c7 | 72:4aa40182321f |
---|---|
29 #include "data/model/SparseOneDimensionalModel.h" | 29 #include "data/model/SparseOneDimensionalModel.h" |
30 #include "data/model/SparseTimeValueModel.h" | 30 #include "data/model/SparseTimeValueModel.h" |
31 #include "data/model/NoteModel.h" | 31 #include "data/model/NoteModel.h" |
32 #include "data/model/TextModel.h" | 32 #include "data/model/TextModel.h" |
33 #include "data/model/ImageModel.h" | 33 #include "data/model/ImageModel.h" |
34 | |
35 #include "plugin/transform/TransformFactory.h" | |
34 | 36 |
35 #include "view/Pane.h" | 37 #include "view/Pane.h" |
36 | 38 |
37 #include "Document.h" | 39 #include "Document.h" |
38 | 40 |
51 m_currentPane(0), | 53 m_currentPane(0), |
52 m_currentDataset(0), | 54 m_currentDataset(0), |
53 m_currentDerivedModel(0), | 55 m_currentDerivedModel(0), |
54 m_currentDerivedModelId(-1), | 56 m_currentDerivedModelId(-1), |
55 m_currentPlayParameters(0), | 57 m_currentPlayParameters(0), |
58 m_currentTransformSource(0), | |
56 m_datasetSeparator(" "), | 59 m_datasetSeparator(" "), |
57 m_inRow(false), | 60 m_inRow(false), |
58 m_inLayer(false), | 61 m_inLayer(false), |
59 m_inView(false), | 62 m_inView(false), |
60 m_rowNumber(0), | 63 m_rowNumber(0), |
134 // model | 137 // model |
135 // point | 138 // point |
136 // row | 139 // row |
137 // view | 140 // view |
138 // window | 141 // window |
142 // plugin | |
143 // transform | |
144 // selections | |
145 // selection | |
146 // measurement | |
139 | 147 |
140 if (name == "sv") { | 148 if (name == "sv") { |
141 | 149 |
142 // nothing needed | 150 // nothing needed |
143 ok = true; | 151 ok = true; |
209 ok = readSelection(attributes); | 217 ok = readSelection(attributes); |
210 | 218 |
211 } else if (name == "measurement") { | 219 } else if (name == "measurement") { |
212 | 220 |
213 ok = readMeasurement(attributes); | 221 ok = readMeasurement(attributes); |
222 | |
223 } else if (name == "transform") { | |
224 | |
225 ok = readTransform(attributes); | |
226 | |
227 } else if (name == "parameter") { | |
228 | |
229 ok = readParameter(attributes); | |
214 | 230 |
215 } else { | 231 } else { |
216 std::cerr << "WARNING: SV-XML: Unexpected element \"" | 232 std::cerr << "WARNING: SV-XML: Unexpected element \"" |
217 << name.toLocal8Bit().data() << "\"" << std::endl; | 233 << name.toLocal8Bit().data() << "\"" << std::endl; |
218 } | 234 } |
284 std::cerr << "WARNING: SV-XML: Derivation has existing model " | 300 std::cerr << "WARNING: SV-XML: Derivation has existing model " |
285 << m_currentDerivedModelId | 301 << m_currentDerivedModelId |
286 << " as target, not regenerating" << std::endl; | 302 << " as target, not regenerating" << std::endl; |
287 } else { | 303 } else { |
288 m_currentDerivedModel = m_models[m_currentDerivedModelId] = | 304 m_currentDerivedModel = m_models[m_currentDerivedModelId] = |
289 m_document->addDerivedModel(m_currentTransformer, | 305 m_document->addDerivedModel |
290 m_currentTransformerSource, | 306 (m_currentTransform, |
291 m_currentTransformerContext, | 307 ModelTransformer::Input(m_currentTransformSource, |
292 m_currentTransformerConfiguration); | 308 m_currentTransformChannel)); |
293 } | 309 } |
294 } else { | 310 } else { |
295 m_document->addDerivedModel(m_currentTransformer, | 311 m_document->addDerivedModel |
296 m_currentTransformerSource, | 312 (m_currentTransform, |
297 m_currentTransformerContext, | 313 ModelTransformer::Input(m_currentTransformSource, |
298 m_currentDerivedModel, | 314 m_currentTransformChannel), |
299 m_currentTransformerConfiguration); | 315 m_currentDerivedModel); |
300 } | 316 } |
301 | 317 |
302 m_addedModels.insert(m_currentDerivedModel); | 318 m_addedModels.insert(m_currentDerivedModel); |
303 m_currentDerivedModel = 0; | 319 m_currentDerivedModel = 0; |
304 m_currentDerivedModelId = -1; | 320 m_currentDerivedModelId = -1; |
305 m_currentTransformer = ""; | 321 m_currentTransformSource = 0; |
306 m_currentTransformerConfiguration = ""; | 322 m_currentTransform = Transform(); |
323 m_currentTransformChannel = -1; | |
307 | 324 |
308 } else if (name == "row") { | 325 } else if (name == "row") { |
309 m_inRow = false; | 326 m_inRow = false; |
310 } else if (name == "layer") { | 327 } else if (name == "layer") { |
311 m_inLayer = false; | 328 m_inLayer = false; |
991 if (!modelOk) { | 1008 if (!modelOk) { |
992 std::cerr << "WARNING: SV-XML: No model id specified for derivation" << std::endl; | 1009 std::cerr << "WARNING: SV-XML: No model id specified for derivation" << std::endl; |
993 return false; | 1010 return false; |
994 } | 1011 } |
995 | 1012 |
996 QString transform = attributes.value("transform"); | |
997 | |
998 if (haveModel(modelId)) { | 1013 if (haveModel(modelId)) { |
999 m_currentDerivedModel = m_models[modelId]; | 1014 m_currentDerivedModel = m_models[modelId]; |
1000 } else { | 1015 } else { |
1001 // we'll regenerate the model when the derivation element ends | 1016 // we'll regenerate the model when the derivation element ends |
1002 m_currentDerivedModel = 0; | 1017 m_currentDerivedModel = 0; |
1007 int sourceId = 0; | 1022 int sourceId = 0; |
1008 bool sourceOk = false; | 1023 bool sourceOk = false; |
1009 sourceId = attributes.value("source").trimmed().toInt(&sourceOk); | 1024 sourceId = attributes.value("source").trimmed().toInt(&sourceOk); |
1010 | 1025 |
1011 if (sourceOk && haveModel(sourceId)) { | 1026 if (sourceOk && haveModel(sourceId)) { |
1012 m_currentTransformerSource = m_models[sourceId]; | 1027 m_currentTransformSource = m_models[sourceId]; |
1013 } else { | 1028 } else { |
1014 m_currentTransformerSource = m_document->getMainModel(); | 1029 m_currentTransformSource = m_document->getMainModel(); |
1015 } | 1030 } |
1016 | 1031 |
1017 m_currentTransformer = transform; | 1032 m_currentTransform = Transform(); |
1018 m_currentTransformerConfiguration = ""; | |
1019 | |
1020 m_currentTransformerContext = PluginTransformer::ExecutionContext(); | |
1021 | 1033 |
1022 bool ok = false; | 1034 bool ok = false; |
1023 int channel = attributes.value("channel").trimmed().toInt(&ok); | 1035 int channel = attributes.value("channel").trimmed().toInt(&ok); |
1024 if (ok) m_currentTransformerContext.channel = channel; | 1036 if (ok) m_currentTransformChannel = channel; |
1025 | 1037 else m_currentTransformChannel = -1; |
1026 int domain = attributes.value("domain").trimmed().toInt(&ok); | 1038 |
1027 if (ok) m_currentTransformerContext.domain = Vamp::Plugin::InputDomain(domain); | 1039 QString type = attributes.value("type"); |
1040 | |
1041 if (type == "transform") { | |
1042 m_currentTransformIsNewStyle = true; | |
1043 return true; | |
1044 } else { | |
1045 m_currentTransformIsNewStyle = false; | |
1046 std::cerr << "NOTE: SV-XML: Reading old-style derivation element" | |
1047 << std::endl; | |
1048 } | |
1049 | |
1050 QString transformId = attributes.value("transform"); | |
1051 | |
1052 m_currentTransform.setIdentifier(transformId); | |
1028 | 1053 |
1029 int stepSize = attributes.value("stepSize").trimmed().toInt(&ok); | 1054 int stepSize = attributes.value("stepSize").trimmed().toInt(&ok); |
1030 if (ok) m_currentTransformerContext.stepSize = stepSize; | 1055 if (ok) m_currentTransform.setStepSize(stepSize); |
1031 | 1056 |
1032 int blockSize = attributes.value("blockSize").trimmed().toInt(&ok); | 1057 int blockSize = attributes.value("blockSize").trimmed().toInt(&ok); |
1033 if (ok) m_currentTransformerContext.blockSize = blockSize; | 1058 if (ok) m_currentTransform.setBlockSize(blockSize); |
1034 | 1059 |
1035 int windowType = attributes.value("windowType").trimmed().toInt(&ok); | 1060 int windowType = attributes.value("windowType").trimmed().toInt(&ok); |
1036 if (ok) m_currentTransformerContext.windowType = WindowType(windowType); | 1061 if (ok) m_currentTransform.setWindowType(WindowType(windowType)); |
1062 | |
1063 if (!m_currentTransformSource) return true; | |
1037 | 1064 |
1038 QString startFrameStr = attributes.value("startFrame"); | 1065 QString startFrameStr = attributes.value("startFrame"); |
1039 QString durationStr = attributes.value("duration"); | 1066 QString durationStr = attributes.value("duration"); |
1040 | 1067 |
1041 size_t startFrame = 0; | 1068 size_t startFrame = 0; |
1048 if (durationStr != "") { | 1075 if (durationStr != "") { |
1049 duration = durationStr.trimmed().toInt(&ok); | 1076 duration = durationStr.trimmed().toInt(&ok); |
1050 if (!ok) duration = 0; | 1077 if (!ok) duration = 0; |
1051 } | 1078 } |
1052 | 1079 |
1053 m_currentTransformerContext.startFrame = startFrame; | 1080 m_currentTransform.setStartTime |
1054 m_currentTransformerContext.duration = duration; | 1081 (RealTime::frame2RealTime |
1082 (startFrame, m_currentTransformSource->getSampleRate())); | |
1083 | |
1084 m_currentTransform.setDuration | |
1085 (RealTime::frame2RealTime | |
1086 (duration, m_currentTransformSource->getSampleRate())); | |
1055 | 1087 |
1056 return true; | 1088 return true; |
1057 } | 1089 } |
1058 | 1090 |
1059 bool | 1091 bool |
1117 if (m_currentDerivedModelId < 0 && !m_currentPlayParameters) { | 1149 if (m_currentDerivedModelId < 0 && !m_currentPlayParameters) { |
1118 std::cerr << "WARNING: SV-XML: Plugin found outside derivation or play parameters" << std::endl; | 1150 std::cerr << "WARNING: SV-XML: Plugin found outside derivation or play parameters" << std::endl; |
1119 return false; | 1151 return false; |
1120 } | 1152 } |
1121 | 1153 |
1154 if (!m_currentPlayParameters && m_currentTransformIsNewStyle) { | |
1155 return true; | |
1156 } | |
1157 | |
1122 QString configurationXml = "<plugin"; | 1158 QString configurationXml = "<plugin"; |
1123 | 1159 |
1124 for (int i = 0; i < attributes.length(); ++i) { | 1160 for (int i = 0; i < attributes.length(); ++i) { |
1125 configurationXml += QString(" %1=\"%2\"") | 1161 configurationXml += QString(" %1=\"%2\"") |
1126 .arg(attributes.qName(i)) | 1162 .arg(attributes.qName(i)) |
1130 configurationXml += "/>"; | 1166 configurationXml += "/>"; |
1131 | 1167 |
1132 if (m_currentPlayParameters) { | 1168 if (m_currentPlayParameters) { |
1133 m_currentPlayParameters->setPlayPluginConfiguration(configurationXml); | 1169 m_currentPlayParameters->setPlayPluginConfiguration(configurationXml); |
1134 } else { | 1170 } else { |
1135 m_currentTransformerConfiguration += configurationXml; | 1171 TransformFactory::getInstance()-> |
1136 } | 1172 setParametersFromPluginConfigurationXml(m_currentTransform, |
1137 | 1173 configurationXml); |
1174 } | |
1175 | |
1176 return true; | |
1177 } | |
1178 | |
1179 bool | |
1180 SVFileReader::readTransform(const QXmlAttributes &attributes) | |
1181 { | |
1182 if (m_currentDerivedModelId < 0) { | |
1183 std::cerr << "WARNING: SV-XML: Transform found outside derivation" << std::endl; | |
1184 return false; | |
1185 } | |
1186 | |
1187 m_currentTransform.setFromXmlAttributes(attributes); | |
1188 return true; | |
1189 } | |
1190 | |
1191 bool | |
1192 SVFileReader::readParameter(const QXmlAttributes &attributes) | |
1193 { | |
1194 if (m_currentDerivedModelId < 0) { | |
1195 std::cerr << "WARNING: SV-XML: Parameter found outside derivation" << std::endl; | |
1196 return false; | |
1197 } | |
1198 | |
1199 QString name = attributes.value("name"); | |
1200 if (name == "") { | |
1201 std::cerr << "WARNING: SV-XML: Ignoring nameless transform parameter" | |
1202 << std::endl; | |
1203 return false; | |
1204 } | |
1205 | |
1206 float value = attributes.value("value").trimmed().toFloat(); | |
1207 | |
1208 m_currentTransform.setParameter(name, value); | |
1138 return true; | 1209 return true; |
1139 } | 1210 } |
1140 | 1211 |
1141 bool | 1212 bool |
1142 SVFileReader::readSelection(const QXmlAttributes &attributes) | 1213 SVFileReader::readSelection(const QXmlAttributes &attributes) |