00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "itemfactory.h"
00023
00024 #include <QVApplication>
00025 #include <QVMPlayerCamera>
00026 #include <QVWorker>
00027 #include "qvworkers/qvfilterselectorworker.h"
00028 #include "qvworkers/qvimageretarderworker.h"
00029 #include "qvworkers/qvimagemeansworker.h"
00030 #include "qvworkers/qvgraphsworker.h"
00031 #include "qvworkers/qvpointworker.h"
00032 #include <QVImageCanvas>
00033 #include <QVNumericPlot>
00034 #include <QVHistogramPlot>
00035 #include <QVCPUPlot>
00036 #include <QVYUV4MPEG2Recorder>
00037 #include <QVYUV4MPEG2CameraWorker>
00038 #include <QVSynchronizerWorker>
00039
00041 ItemFactory::ItemFactory(): QObject()
00042 {
00043 inputItems.append("QVMPlayerCamera");
00044 inputItems.append("QVPointWorker");
00045
00046 outputItems.append("QVImageCanvas");
00047 outputItems.append("QVNumericPlot");
00048 outputItems.append("QVHistogramPlot");
00049 outputItems.append("QVCPUPlot");
00050 middleItems.append("QVGraphsWorker");
00051 middleItems.append("QVFilterSelectorWorker<uchar,1>");
00052 middleItems.append("QVFilterSelectorWorker<uchar,3>");
00053 middleItems.append("QVImageRetarderWorker<uchar,3>");
00054 middleItems.append("QVImageRetarderWorker<uchar,1>");
00055 middleItems.append("QVImageMeans<uChar,1>");
00056 middleItems.append("QVImageMeans<uChar,3>");
00057 outputItems.append("QVYUV4MPEG2Recorder");
00058 outputItems.append("QVYUV4MPEG2Camera");
00059 outputItems.append("QVSynchronizer");
00060
00061 foreach(QString qvippWorkerName, getQVIPPWorkersNames())
00062 middleItems.append(qvippWorkerName);
00063
00064
00065
00066
00067
00068
00069
00070 }
00071
00072 QList<QString> ItemFactory::getItemTypes() const
00073 {
00074 return inputItems + middleItems + outputItems;
00075 }
00076
00077 QList<QString> ItemFactory::getInputItemTypes() const
00078 {
00079 return inputItems;
00080 }
00081
00082 QList<QString> ItemFactory::getMiddleItemTypes() const
00083 {
00084 return middleItems;
00085 }
00086
00087 QList<QString> ItemFactory::getOutputItemTypes() const
00088 {
00089 return outputItems;
00090 }
00091
00092 QVPropertyContainer *ItemFactory::createContainer(QString type, QString name) const
00093 {
00094 QVPropertyContainer *qvippWorker = newQVIPPWorker(type, name);
00095 if (qvippWorker != NULL)
00096 return qvippWorker;
00097 else if (type == "QVMPlayerCamera") {
00098 QVMPlayerCamera* mpc = new QVMPlayerCamera(name);
00099 if (mpc->getPropertyValue<QString>("URL").isEmpty())
00100 mpc->setPropertyValue("URL", QString("http://perception.inf.um.es/public_data/videos/misc/penguin.dv"));
00101 return mpc;
00102 }
00103 else if (type == "QVYUV4MPEG2Camera") return new QVYUV4MPEG2CameraWorker(name);
00104 else if (type == "QVYUV4MPEG2Recorder") return new QVYUV4MPEG2Recorder(name);
00105 else if (type == "QVImageCanvas") return new QVImageCanvas(name);
00106 else if (type == "QVNumericPlot") return new QVNumericPlot(name);
00107 else if (type == "QVHistogramPlot") return new QVHistogramPlot(name);
00108 else if (type == "QVCPUPlot") return new QVCPUPlot(name);
00109 else if (type == "QVGraphsWorker") return new QVGraphsWorker(name);
00110 else if (type == "QVFilterSelectorWorker<uchar,1>") return new QVFilterSelectorWorker<uchar, 1>(name);
00111 else if (type == "QVFilterSelectorWorker<uchar,3>") return new QVFilterSelectorWorker<uchar, 3>(name);
00112 else if (type == "QVImageRetarderWorker<uchar,3>") return new QVImageRetarderWorker<uchar, 3>(name);
00113 else if (type == "QVImageRetarderWorker<uchar,1>") return new QVImageRetarderWorker<uchar, 1>(name);
00114 else if (type == "QVImageMeans<uChar,1>") return new QVImageMeans<uChar, 1>(name);
00115 else if (type == "QVImageMeans<uChar,3>") return new QVImageMeans<uChar, 3>(name);
00116 else if (type == "QVPointWorker") return new QVPointWorker(name);
00117 else if (type == "QVSynchronizer") return new QVSynchronizer(name);
00118 else if (userWorkers.contains(type)) {
00119 QVWorker * newWorker = (QVWorker *)QMetaType::construct(userWorkers.value(type), (void *)0);
00120 newWorker->setName(name);
00121 return newWorker;
00122 }
00123 return 0;
00124 }
00125
00126 bool ItemFactory::deleteContainer(QVPropertyContainer *cont) const
00127 {
00128
00129 QString type = typeName(cont);
00130
00131
00132
00133
00134
00135
00136
00137 delete cont;
00138
00139 return TRUE;
00140 }
00141
00142 QString ItemFactory::containerType(QVPropertyContainer *cont) const
00143 {
00144
00145 return QString(typeName(cont));
00146 }
00147
00148 const QString ItemFactory::registerUserWorker(QVWorker * worker)
00149 {
00150 const char * choptypeidname = typeName(worker);
00151
00152
00153 QString typeString(choptypeidname);
00154 int type = QMetaType::type(choptypeidname);
00155
00156
00157 if ( (type != 0) && (!middleItems.contains(typeString)) ) {
00158 middleItems.append(typeString);
00159 userWorkers.insert(typeString, type);
00160 return typeString;
00161 }
00162 return QString();
00163 }
00164
00165 bool ItemFactory::isUserType(QString type) const
00166 {
00167 return userWorkers.contains(type);
00168 }
00169
00170 const char *ItemFactory::typeName(QVPropertyContainer *cont) const
00171 {
00172 char *qvippWorkerName = QVIPPWorkerName(cont);
00173 if (qvippWorkerName != NULL)
00174 return qvippWorkerName;
00175
00176 if(dynamic_cast<QVYUV4MPEG2CameraWorker*>(cont) != NULL) return "QVYUV4MPEG2Camera";
00177 else if(dynamic_cast<QVYUV4MPEG2Recorder*>(cont) != NULL) return "QVYUV4MPEG2Recorder";
00178 else if(dynamic_cast<QVImageCanvas*>(cont) != NULL) return "QVImageCanvas";
00179 else if(dynamic_cast<QVNumericPlot*>(cont) != NULL) return "QVNumericPlot";
00180 else if(dynamic_cast<QVHistogramPlot*>(cont) != NULL) return "QVHistogramPlot";
00181 else if(dynamic_cast<QVCPUPlot*>(cont) != NULL) return "QVCPUPlot";
00182 else if(dynamic_cast<QVGraphsWorker*>(cont) != NULL) return "QVGraphsWorker";
00183 else if(dynamic_cast<QVFilterSelectorWorker<uchar,1>*>(cont) != NULL) return "QVFilterSelectorWorker<uchar,1>";
00184 else if(dynamic_cast<QVFilterSelectorWorker<uchar,3>*>(cont) != NULL) return "QVFilterSelectorWorker<uchar,3>";
00185 else if(dynamic_cast<QVImageRetarderWorker<uchar,3>*>(cont) != NULL) return "QVImageRetarderWorker<uchar,3>";
00186 else if(dynamic_cast<QVImageRetarderWorker<uchar,1>*>(cont) != NULL) return "QVImageRetarderWorker<uchar,1>";
00187 else if(dynamic_cast<QVImageMeans<uChar,1>*>(cont) != NULL) return "QVImageMeans<uChar,1>";
00188 else if(dynamic_cast<QVImageMeans<uChar,3>*>(cont) != NULL) return "QVImageMeans<uChar,3>";
00189 else if(dynamic_cast<QVPointWorker*>(cont) != NULL) return "QVPointWorker";
00190 else if(dynamic_cast<QVSynchronizer*>(cont) != NULL) return "QVSynchronizer";
00191
00192
00193 const char * typeidname = typeid(*cont).name();
00194
00195
00196 int i = 0;
00197 while ( (typeidname[i] != '\0') && ((typeidname[i] == '0') || (typeidname[i] == '1') || (typeidname[i] == '2') || (typeidname[i] == '3') ||
00198 (typeidname[i] == '4') || (typeidname[i] == '5') || (typeidname[i] == '6') || (typeidname[i] == '7') || (typeidname[i] == '8') ||
00199 (typeidname[i] == '9')) ) {
00200 i++;
00201 }
00202 return (typeidname + i*(sizeof(char)));
00203 }
00204
00205