refinery
RAW file processor

include/refinery/camera.h

00001 #ifndef _REFINERY_CAMERA_H
00002 #define _REFINERY_CAMERA_H
00003 
00004 namespace refinery {
00005 
00006 class ExifData;
00007 
00019 class Camera {
00020 public:
00024   struct ColorConversionData {
00025     short black; 
00026     short maximum; 
00027     double xyzToCamera[4][3]; 
00028     double rgbToCamera[4][3]; 
00029     double cameraToRgb[3][4]; 
00030     double cameraToXyz[3][4]; 
00031     double cameraMultipliers[4]; 
00032     double scalingMultipliers[4]; 
00033   };
00034 
00040   virtual const char* make() const = 0;
00041 
00047   virtual const char* model() const = 0;
00048 
00054   virtual const char* name() const = 0;
00055 
00061   virtual unsigned int colors() const = 0;
00062 
00073   virtual unsigned int rawWidth(const ExifData& exifData) const = 0;
00074 
00085   virtual unsigned int rawHeight(const ExifData& exifData) const = 0;
00086 
00092   virtual ColorConversionData colorConversionData() const = 0;
00093 
00100   virtual unsigned int orientation(const ExifData& exifData) const = 0;
00101 
00138   virtual unsigned int filters(const ExifData& exifData) const = 0;
00139 
00146   virtual bool canHandle(const ExifData& exifData) const = 0;
00147 };
00148 
00158 class CameraData {
00159   const Camera& mCamera;
00160   const ExifData& mExifData;
00161 
00162 public:
00172   CameraData(const Camera& camera, const ExifData& exifData)
00173       : mCamera(camera), mExifData(exifData) {}
00174 
00182   CameraData(const CameraData& rhs)
00183       : mCamera(rhs.camera()), mExifData(rhs.exifData()) {}
00184 
00188   const Camera& camera() const { return mCamera; }
00189 
00193   const ExifData& exifData() const { return mExifData; }
00194 
00198   unsigned int orientation() const;
00199 
00235   virtual unsigned int filters() const;
00236 
00240   unsigned int colors() const;
00241 
00251   unsigned int rawWidth() const;
00252 
00262   unsigned int rawHeight() const;
00263 
00267   Camera::ColorConversionData colorConversionData() const;
00268 };
00269 
00283 class CameraFactory {
00284 private:
00285   CameraFactory();
00286   ~CameraFactory();
00287 
00288 public:
00292   static CameraFactory& instance();
00293 
00308   const Camera& detectCamera(const ExifData& exifData) const;
00309 };
00310 
00324 class CameraDataFactory {
00325 public:
00329   static CameraDataFactory& instance();
00330 
00339   CameraData getCameraData(const ExifData& exifData) const;
00340 };
00341 
00342 } // namespace refinery
00343 
00344 #endif /* _REFINERY_CAMERA_H */
 All Classes Functions Variables Typedefs Enumerations Enumerator