00001 #include "vuSphericLightfieldConverter.h"
00002 #include "../vuFixelType.h"
00003
00004 template <int SI, class TI, int SO, class TO>
00005 vuSphericLightfieldConverter<SI,TI,SO,TO>::vuSphericLightfieldConverter()
00006 {
00007 }
00008
00009 template <int SI, class TI, int SO, class TO> vuFixel<SO,TO>
00010 vuSphericLightfieldConverter<SI,TI,SO,TO>::_fixel(vuFixel<SI,TI> in)
00011 {
00012 vuFixel<SO,TO> result;
00013
00014 if (SI == SO) {
00015 for (dword i=0; i<SO; i++)
00016 result[i] = vuFixelTypeConverter<TI,TO>::getValue(in[i]);
00017 }
00018 else if (SI == 1) {
00019 for (dword i=0; i<SO; i++)
00020 result[i] = vuFixelTypeConverter<TI,TO>::getValue(in[0]);
00021 }
00022 else if (SO == 1) {
00023
00024
00025
00026
00027
00028 result[0] = vuFixelTypeConverter<TI,TO>::getValue(in[0]);
00029 }
00030 else if (SI < SO) {
00031 cerr << "not-so-many to many is not supported in the moment" << endl;
00032 exit(0);
00033 }
00034 else {
00035 cerr << "many to not-so-many is not supported in the moment" << endl;
00036 exit(0);
00037 }
00038 return result;
00039 }
00040
00041
00042 template <int SI, class TI, int SO, class TO> void
00043 vuSphericLightfieldConverter<SI,TI,SO,TO>::_convert(vuSphericView<SI,TI> *in, vuSphericView<SO,TO> *out)
00044 {
00045 if (!_areViewsValid(in, out)) return;
00046
00047 dword width = in->getWidth();
00048 dword height = in->getHeight();
00049
00050 vuFixelMap<SI,TI> *inMap = in->getMap();
00051 vuFixelMap<SO,TO> *outMap = out->getMap();
00052
00053 for (dword j=0; j<height; j++) {
00054 for (dword i=0; i<width; i++) {
00055 outMap->setFixel(i, j , _fixel(inMap->getFixel(i,j)));
00056 }
00057 }
00058 }
00059
00060 vuBasicLightfieldConverter
00061 *vuSphericLightfieldConverterFactory::getConverter(vuString &name)
00062 {
00063 if (name == "1B1B")
00064 return new vuSphLFConverter1B1B();
00065 else if (name == "1B2B")
00066 return new vuSphLFConverter1B2B();
00067 else if (name == "1B3B")
00068 return new vuSphLFConverter1B3B();
00069 else if (name == "2B1B")
00070 return new vuSphLFConverter2B1B();
00071 else if (name == "2B2B")
00072 return new vuSphLFConverter2B2B();
00073 else if (name == "2B3B")
00074 return new vuSphLFConverter2B3B();
00075 else if (name == "3B1B")
00076 return new vuSphLFConverter3B1B();
00077 else if (name == "3B2B")
00078 return new vuSphLFConverter3B2B();
00079 else if (name == "3B3B")
00080 return new vuSphLFConverter3B3B();
00081
00082 else if (name == "1F1F")
00083 return new vuSphLFConverter1F1F();
00084 else if (name == "1F2F")
00085 return new vuSphLFConverter1F2F();
00086 else if (name == "1F3F")
00087 return new vuSphLFConverter1F3F();
00088 else if (name == "2F1F")
00089 return new vuSphLFConverter2F1F();
00090 else if (name == "2F2F")
00091 return new vuSphLFConverter2F2F();
00092 else if (name == "2F3F")
00093 return new vuSphLFConverter2F3F();
00094 else if (name == "3F1F")
00095 return new vuSphLFConverter3F1F();
00096 else if (name == "3F2F")
00097 return new vuSphLFConverter3F2F();
00098 else if (name == "3F3F")
00099 return new vuSphLFConverter3F3F();
00100
00101 else if (name == "1F1B")
00102 return new vuSphLFConverter1F1B();
00103 else if (name == "1F2B")
00104 return new vuSphLFConverter1F2B();
00105 else if (name == "1F3B")
00106 return new vuSphLFConverter1F3B();
00107 else if (name == "2F1B")
00108 return new vuSphLFConverter2F1B();
00109 else if (name == "2F2B")
00110 return new vuSphLFConverter2F2B();
00111 else if (name == "2F3B")
00112 return new vuSphLFConverter2F3B();
00113 else if (name == "3F1B")
00114 return new vuSphLFConverter3F1B();
00115 else if (name == "3F2B")
00116 return new vuSphLFConverter3F2B();
00117 else if (name == "3F3B")
00118 return new vuSphLFConverter3F3B();
00119
00120 else if (name == "1B1F")
00121 return new vuSphLFConverter1B1F();
00122 else if (name == "1B2F")
00123 return new vuSphLFConverter1B2F();
00124 else if (name == "1B3F")
00125 return new vuSphLFConverter1B3F();
00126 else if (name == "2B1F")
00127 return new vuSphLFConverter2B1F();
00128 else if (name == "2B2F")
00129 return new vuSphLFConverter2B2F();
00130 else if (name == "2B3F")
00131 return new vuSphLFConverter2B3F();
00132 else if (name == "3B1F")
00133 return new vuSphLFConverter3B1F();
00134 else if (name == "3B2F")
00135 return new vuSphLFConverter3B2F();
00136 else if (name == "3B3F")
00137 return new vuSphLFConverter3B3F();
00138
00139 else
00140 return NULL;
00141 }