lb_stream_header.h

00001 #ifndef LB_STREAM_HEADER_H
00002 #define LB_STREAM_HEADER_H
00003 // Class that decodes the Ladybug stream header
00004 #include<string>
00005 #include<vector>
00006 
00007 #pragma GCC visibility push(default)
00008 
00009 // Define for MAC OS xcode build
00010 //#define LB_MACOSX
00011 
00012 namespace GRASP
00013 {
00014   namespace Ladybug
00015   {
00016     enum LadybugStippledFormat
00017       {
00018         LADYBUG_BGGR,
00019         LADYBUG_GBRG,
00020         LADYBUG_GRBG,
00021         LADYBUG_RGGB    
00022       };
00023     
00025     void VerifySignature(const uint8_t *data);
00026 
00032     class StreamHeader
00033     {
00034     public:
00036       StreamHeader(const uint8_t *data);
00037       StreamHeader();
00039       virtual ~StreamHeader() {};
00040 
00042       void InitHeader(const uint8_t *data);
00043       
00045       void Print() const;
00046       uint32_t GetVersionNumber() const         { return version_number_; }
00047       uint32_t GetFrameRate() const             { return frame_rate_;}
00048       uint32_t GetBaseSerialNumber() const      { return base_serial_number_;}
00049       uint32_t GetHeadSerialNumber() const      { return head_serial_number_;}
00050       uint32_t GetPaddingBlockSize() const      { return padding_block_size_;}
00051       uint32_t GetDataFormat() const            { return data_format_;}
00052       uint32_t GetResolution() const            { return resolution_;}
00053       uint32_t GetStippledFormat() const        { return stippled_format_;}
00054       uint32_t GetConfigurationDataSize() const { return configuration_data_size_;}
00055       uint32_t GetNumberOfImages() const        { return number_of_images_;}
00056       uint32_t GetNumberOfIndexEntried() const  { return number_of_index_entries_;}
00057       uint32_t GetIncrement() const             { return increment_;}
00058       uint32_t GetStreamDataOffset() const      { return stream_data_offset_;}
00059       uint32_t GetGpsSummaryDataOffset() const  { return gps_summary_data_offset_;}
00060       uint32_t GetGpsSummaryDataSize() const    { return gps_summary_data_size_;}
00061     protected:
00062       uint32_t version_number_;
00063       uint32_t frame_rate_;
00064       uint32_t base_serial_number_;
00065       uint32_t head_serial_number_;
00066       uint32_t padding_block_size_;
00067       uint32_t data_format_;
00068       uint32_t resolution_;
00069       uint32_t stippled_format_;
00070       uint32_t configuration_data_size_;
00071       uint32_t number_of_images_;
00072       uint32_t number_of_index_entries_;
00073       uint32_t increment_;
00074       uint32_t stream_data_offset_;
00075       uint32_t gps_summary_data_offset_;
00076       uint32_t gps_summary_data_size_;
00077       std::vector<uint32_t> index_;
00078     };
00079 
00085     class ImageHeader
00086     {
00087     public: 
00088       ImageHeader();
00089       ImageHeader(const uint8_t *,fpos_t offset_in_file);
00090       ~ImageHeader() {};
00091       
00093       void Init(const uint8_t *,fpos_t offset_in_file);
00094       
00096       void Print() const;
00097       
00098       uint32_t GetDataSize()  const              { return data_size_; }
00099       uint32_t GetFingerprint() const            { return fingerprint_; }
00100       uint32_t GetVersionNumber() const          { return version_number_; }
00101       uint32_t GetTimeSeconds() const            { return time_s_; }
00102       uint32_t GetTimeMicroseconds() const       { return time_us_; }
00103       uint32_t GetSequenceId() const             { return sequence_id_; }
00104       uint32_t GetRefreshRate() const            { return refresh_rate_; }
00105       uint32_t GetGain(uint32_t camera) const    { if (camera<6) return gain_[camera];  else throw "Bad camera number"; }
00106       uint32_t GetWhiteBalance() const           { return white_balance_; }
00107       uint32_t GetBayerGain() const              { return bayer_gain_; }
00108       uint32_t GetBayerMap() const               { return bayer_map_; }
00109       uint32_t GetBrightness() const             { return brightness_; }
00110       uint32_t GetGamma() const                  { return gamma_; }
00111       uint32_t GetHeadSerialNumber() const       { return head_serial_number_; }
00112       uint32_t GetShutter(uint32_t camera) const { if (camera<6) return shutter_[camera]; else throw "Bad camera number"; }
00114       uint32_t GetJpegDataOffset(int plane) const{ return jpeg_data_offset[plane]; }
00116       uint32_t GetJpegDataSize(int plane) const  { return jpeg_data_size[plane]; }
00117       
00118       fpos_t GetImageOffset() const              { return offset_in_file_; }
00119     protected:
00120       uint32_t timestamp_;
00121       uint32_t data_size_;
00122       uint32_t fingerprint_;
00123       uint32_t version_number_;
00124       uint32_t time_s_;
00125       uint32_t time_us_;
00126       uint32_t sequence_id_;
00127       uint32_t refresh_rate_;
00128       uint32_t gain_[6];
00129       uint32_t white_balance_;
00130       uint32_t bayer_gain_;
00131       uint32_t bayer_map_;
00132       uint32_t brightness_;
00133       uint32_t gamma_;
00134       uint32_t head_serial_number_;
00135       uint32_t shutter_[6];
00136       uint32_t jpeg_data_offset[24];
00137       uint32_t jpeg_data_size[24];
00138       fpos_t offset_in_file_;
00139     };
00140     
00141     class GpsSummaryData
00142     {
00143     public:
00144       GpsSummaryData(uint32_t number_of_items);
00145       GpsSummaryData(const std::vector<uint8_t> &data);
00146       
00147       double GetLatitude(uint32_t image_number) const { return latitude_[image_number]; }
00148 
00149       double GetLongitude(uint32_t image_number) const { return longitude_[image_number]; }
00150       double GetAltitude(uint32_t image_number) const { return altitude_[image_number]; }
00151 
00152       uint32_t GetNumberOfItems() const { return number_of_items_; }
00153       uint32_t GetItemSize() const { return item_data_size_; }
00154 
00155       uint32_t GetSizeBytes() const { return data_.size(); }
00156 
00157       void SetGpsImage(uint32_t image_number, 
00158                       double lat, 
00159                       double lng, 
00160                       double alt);
00161 
00162       void SetLatitude(uint32_t image_number);
00163       void SetLongitude(uint32_t image_number);
00164       void SetAltitude(uint32_t image_number);
00165 
00166     protected:
00167       uint32_t number_of_items_;
00168       uint32_t item_data_size_;
00169       std::vector<double> latitude_;
00170       std::vector<double> longitude_;
00171       std::vector<double> altitude_;
00172       std::vector<uint8_t> data_;
00173     };
00174 
00180     class StreamFile : public StreamHeader
00181     {
00182     public:
00188       StreamFile(std::string &file_name, bool read_calibration=true);
00189       StreamFile();
00190 
00191       virtual ~StreamFile();
00192 
00194       void InitStream(std::string &file_name,bool read_calibration);
00195 
00199       std::string GetCalibrationData() const { return calibration_data_;}
00200 
00212       ImageHeader GetImagePlanesJpeg(uint32_t image_number,uint32_t camera_number,
00213                               std::vector<uint8_t> &C0,
00214                               std::vector<uint8_t> &C1,
00215                               std::vector<uint8_t> &C2,
00216                               std::vector<uint8_t> &C3) const;
00218       void GetCalibrationData(std::string &calib_str) const { calib_str=calibration_data_; }
00219 
00221       void CopyInsertGps(GpsSummaryData &gps, std::string &pgr_file_name) const;
00222     protected:
00224       void GetFrame(ImageHeader &image,uint32_t image_number) const;
00225 
00231       void GetBayerPlaneJpeg(const GRASP::Ladybug::ImageHeader &image,
00232                          uint32_t camera_number,uint32_t plane_number,
00233                          std::vector<uint8_t> &plane) const;
00234 
00235       std::string calibration_data_;
00236       FILE * stream_p_;
00237       uint8_t * header_p_;
00238       std::vector<uint8_t> image_header_;
00239       
00240       GpsSummaryData *gps_summary_data_;
00241     };
00242     
00243   }
00244 
00245 }
00246 #pragma GCC visibility pop
00247 #endif
00248 

Generated on Tue May 19 13:50:32 2009 by  doxygen 1.5.3