Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

vuSphericLightfieldFile.cpp

Go to the documentation of this file.
00001 #include "vuSphericLightfieldFile.h"
00002 
00003 template <int S, class T>
00004 vuSphericLightfieldFile<S,T>::vuSphericLightfieldFile() : vuLightfieldFile()
00005 {
00006 }
00007 
00008 template <int S, class T>
00009 vuSphericLightfieldFile<S,T>::vuSphericLightfieldFile(const char *fileName)  :
00010   vuLightfieldFile(fileName, false)
00011 {
00012   m_Width         = 0;                  // unknown
00013   m_Height        = 0;                  // unknown
00014   m_NumberOfViews = 0;                  // unknown
00015 }
00016 
00017 template <int S, class T>
00018 vuSphericLightfieldFile<S,T>::vuSphericLightfieldFile(dword width, dword height, dword views, const char *fileName) : vuLightfieldFile(fileName, true)
00019 {
00020   m_Width         = width;
00021   m_Height        = height;
00022   m_NumberOfViews = views;
00023   m_DataSize      = vuSphericView<S,T>::getSizeInByte(width, height);
00024   m_DataSize     *= m_NumberOfViews;
00025 }
00026 
00027 template <int S, class T>
00028 vuSphericLightfieldFile<S,T>::~vuSphericLightfieldFile()
00029 {
00030 }
00031 
00032 template <int S, class T>
00033 vuSphericLightfieldFile<S,T>::vuSphericLightfieldFile(const vuSphericLightfieldFile<S,T> &other)
00034 {
00035   throw "vuSphericLightfieldFile:: The copy constructor is not implemented";
00036 }
00037 
00038 template <int S, class T>
00039 bool vuSphericLightfieldFile<S,T>::readHeader()
00040 {
00041   if (!vuLightfieldFile::readHeader()) return false;
00042 
00043   char str[64];
00044 
00045   m_FileStream->get(str, 8);
00046   if (strcmp(str, "SPHERIC") != 0)
00047     return _setErrorMessage("No spheric lightfield file");
00048 
00049   *m_FileStream >> m_Width;
00050   *m_FileStream >> m_Height;
00051   *m_FileStream >> m_NumberOfViews;
00052 
00053   if (m_Width         == 0) return _setErrorMessage("No width set");
00054   if (m_Height        == 0) return _setErrorMessage("No height set");
00055   if (m_NumberOfViews == 0) return _setErrorMessage("No views set");
00056 
00057   m_FileStream->getline(str,32); // get newline
00058   m_FileStream->get(str, 10);
00059   if (strcmp(str, "DATA_SIZE") != 0)
00060     return _setErrorMessage("No DATA_SIZE specified");
00061 
00062   *m_FileStream >> m_DataSize;
00063   if (!_isDataSizeValid(m_DataSize))
00064     return _setErrorMessage("Data size is not valid");
00065 
00066   m_FileStream->getline(str,32); // get newline
00067   m_FileStream->get(str,8);
00068   if (strcmp(str, "FIELDS ") != 0)
00069     return _setErrorMessage("No FIELDS specified");
00070 
00071   m_FileStream->get(str, 64, ' ');
00072   m_DataName = vuString(str);
00073   if (m_DataName.isEmpty())
00074     return _setErrorMessage("No data name set");
00075 
00076   int size;
00077   *m_FileStream >> size;
00078   if (size != S)
00079     return _setErrorMessage("Wrong data type size");
00080   m_FileStream->get(); // read space
00081   m_FileStream->get(str,32);
00082   if ((strcmp(str, "byte") == 0) && (sizeof(T) == 1));       // T=byte
00083   else if ((strcmp(str, "float") == 0) && (sizeof(T) == 4)); // T=float
00084   else return _setErrorMessage("Unsupported data type");        // unknown
00085 
00086   m_FileStream->getline(str, 32); // read newline
00087   m_FileStream->getline(str,32);
00088   if (strcmp(str, "LOOKUP_TABLE default") != 0)
00089     return _setErrorMessage("Not default LOOKUP_TABLE used");
00090 
00091   m_IsHeaderDone = true;
00092   return true;
00093 }
00094 
00095 template <int S, class T>
00096 bool vuSphericLightfieldFile<S,T>::writeHeader()
00097 {
00098   if (!vuLightfieldFile::writeHeader()) return false;
00099 
00100   if (m_Width         == 0)  return _setErrorMessage("No width set");
00101   if (m_Height        == 0)  return _setErrorMessage("No height set");
00102   if (m_NumberOfViews == 0)  return _setErrorMessage("No views set");
00103   if (!_isDataSizeValid(m_DataSize))
00104     return _setErrorMessage("Data size is not valid");
00105     
00106   *m_FileStream << "SPHERIC " << m_Width << " " << m_Height;
00107   *m_FileStream << " " << m_NumberOfViews << endl;
00108     
00109   *m_FileStream << "DATA_SIZE " << m_DataSize << endl;
00110   *m_FileStream << "FIELDS "    <<  m_DataName << " " << S << " ";
00111   if (sizeof(T) == 1)
00112     *m_FileStream << "byte";
00113   else if (sizeof(T) == 4)
00114     *m_FileStream << "float";
00115   else
00116     return _setErrorMessage("Unsupported data type");
00117     
00118   *m_FileStream << endl << "LOOKUP_TABLE default" << endl;
00119 
00120   m_IsHeaderDone = true;
00121   return true;
00122 }
00123 
00124 template <int S, class T>
00125 bool vuSphericLightfieldFile<S,T>::readView(vuSphericView<S,T> *view)
00126 {
00127   if (!_isReadyForReading())
00128     return false;
00129   else if (!m_IsHeaderDone)
00130     return _setErrorMessage("Header is not read yet");
00131   else if (view == NULL)
00132     return _setErrorMessage("Can't read into NULL pointer");
00133 
00134   if (!view->readFromFileStream(m_FileStream, m_Width, m_Height))
00135     return _setErrorMessage("Could not read view");
00136   else
00137     return true;
00138 }
00139 
00140 template <int S, class T>
00141 bool vuSphericLightfieldFile<S,T>::writeView(vuSphericView<S,T> *view)
00142 {
00143   if (!_isReadyForWriting()) return false;
00144   else if (!m_IsHeaderDone)
00145     return _setErrorMessage("Header is not written yet");
00146   else if (view == NULL)
00147     return _setErrorMessage("Can't write NULL pointer");
00148 
00149   if (!view->writeToFileStream(m_FileStream))
00150     return _setErrorMessage("Could not write view");
00151   else {
00152     m_FileStream->sync();
00153     return true;
00154   }
00155 }
00156 
00157 /* ------------------------------------------------------------------------ */
00158 /* --- accessors ---------------------------------------------------------- */
00159 /* ------------------------------------------------------------------------ */
00160 
00161 template <int S, class T>
00162 dword vuSphericLightfieldFile<S,T>::getNumberOfViews()
00163 {
00164   return m_NumberOfViews;
00165 }
00166 
00167 template <int S, class T>
00168 dword vuSphericLightfieldFile<S,T>::getWidth()
00169 {
00170   return m_Width;
00171 }
00172 
00173 template <int S, class T>
00174 dword vuSphericLightfieldFile<S,T>::getHeight()
00175 {
00176   return m_Height;
00177 }
00178 
00179 
00180 /* ------------------------------------------------------------------------ */
00181 /* --- private methods ---------------------------------------------------- */
00182 /* ------------------------------------------------------------------------ */
00183 
00184 template <int S, class T>
00185 bool vuSphericLightfieldFile<S,T>::_isDataSizeValid(dword dataSize)
00186 {
00187   dword size = vuSphericView<S,T>::getSizeInByte(m_Width, m_Height);
00188   return (dataSize == (size * m_NumberOfViews));
00189 }

Generated on Wed Dec 15 21:20:37 2004 for vuVolume by  doxygen 1.3.9.1