refinery
RAW file processor
|
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 */