gdal/frmts/ceos2/ceos.h

343 строки
9.1 KiB
C

/******************************************************************************
* $Id$
*
* Project: ASI CEOS Translator
* Purpose: CEOS library prototypes
* Author: Paul Lahaie, pjlahaie@atlsci.com
*
******************************************************************************
* Copyright (c) 2000, Atlantis Scientific Inc
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/
#ifndef CEOS_H
#define CEOS_H
#include "cpl_conv.h"
CPL_C_START
#define int32 GInt32
#define TBool int
#define uchar unsigned char
typedef struct Link_t_struct
{
struct Link_t_struct *next;
void *object;
} Link_t;
#define HMalloc CPLMalloc
#define HFree CPLFree
#define HCalloc CPLCalloc
Link_t *ceos2CreateLink(void *pObject);
Link_t *InsertLink(Link_t *psList, Link_t *psLink);
void DestroyList(Link_t *psList);
Link_t *AddLink(Link_t *psList, Link_t *psLink);
/* Basic CEOS header defs */
#define SEQUENCE_OFF 0
#define TYPE_OFF 4
#define LENGTH_OFF 8
#define CEOS_HEADER_LENGTH 12
/* Defines for CEOS banding type */
#define CEOS_IL_PIXEL 1
#define CEOS_IL_LINE 2
#define CEOS_IL_BAND 3
/* Defines for CEOS data types */
#define CEOS_TYP_CHAR 1
#define CEOS_TYP_UCHAR 2
#define CEOS_TYP_SHORT 3
#define CEOS_TYP_USHORT 4
#define CEOS_TYP_LONG 5
#define CEOS_TYP_ULONG 6
#define CEOS_TYP_FLOAT 7
#define CEOS_TYP_DOUBLE 8
#define CEOS_TYP_COMPLEX_CHAR 9
#define CEOS_TYP_COMPLEX_UCHAR 10
#define CEOS_TYP_COMPLEX_SHORT 11
#define CEOS_TYP_COMPLEX_USHORT 12
#define CEOS_TYP_COMPLEX_LONG 13
#define CEOS_TYP_COMPLEX_ULONG 14
#define CEOS_TYP_COMPLEX_FLOAT 15
#define CEOS_TYP_CCP_COMPLEX_FLOAT 16 /* COMPRESSED CROSS PRODUCT */
#define CEOS_TYP_PALSAR_COMPLEX_SHORT 17 /* PALSAR - treat as COMPLEX SHORT*/
/* Defines for CEOS file names */
#define CEOS_VOLUME_DIR_FILE 0
#define CEOS_LEADER_FILE 1
#define CEOS_IMAGRY_OPT_FILE 2
#define CEOS_TRAILER_FILE 3
#define CEOS_NULL_VOL_FILE 4
#define CEOS_ANY_FILE -1
/* Defines for Recipe values */
#define CEOS_REC_NUMCHANS 1
#define CEOS_REC_INTERLEAVE 2
#define CEOS_REC_DATATYPE 3
#define CEOS_REC_BPR 4
#define CEOS_REC_LINES 5
#define CEOS_REC_TBP 6
#define CEOS_REC_BBP 7
#define CEOS_REC_PPL 8
#define CEOS_REC_LBP 9
#define CEOS_REC_RBP 10
#define CEOS_REC_BPP 11
#define CEOS_REC_RPL 12
#define CEOS_REC_PPR 13
#define CEOS_REC_IDS 14
#define CEOS_REC_FDL 15
#define CEOS_REC_PIXORD 16
#define CEOS_REC_LINORD 17
#define CEOS_REC_PRODTYPE 18
#define CEOS_REC_RECORDSIZE 19
#define CEOS_REC_SUFFIX_SIZE 20
#define CEOS_REC_PDBPR 21
/* Defines for Recipe Types */
#define CEOS_REC_TYP_A 1
#define CEOS_REC_TYP_B 2
#define CEOS_REC_TYP_I 3
/* Defines for SAR Embedded info */
#define CEOS_SAR_ACQ_YEAR 1
#define CEOS_SAR_ACQ_DAY 2
#define CEOS_SAR_ACQ_MSEC 4
#define CEOS_SAR_TRANS_POL 8
#define CEOS_SAR_PULSE_REP 16
#define CEOS_SAR_SLANT_FIRST 32
#define CEOS_SAR_SLANT_MID 64
#define CEOS_SAR_SLANT_LAST 128
/* Maximum size of LUT for Calibration records */
#define CEOS_RADAR_MAX_LUT 512
#define CEOS_RADAR_FLIP_DATE 19980101
#define CEOS_RADAR_FACILITY "CDPF-RSAT"
/* Defines for GCP Ordering mode */
#define CEOS_STD_MAPREC_GCP_ORDER 0
#define CEOS_ASF_MAPREC_GCP_ORDER 1
#define CEOS_ASF_FACREC_GCP_ORDER 2
typedef union
{
int32 Int32Code;
struct
{
uchar Subtype1;
uchar Type;
uchar Subtype2;
uchar Subtype3;
} UCharCode;
} CeosTypeCode_t;
typedef struct
{
int32 Sequence;
CeosTypeCode_t TypeCode;
int32 Length;
int32 Flavor;
int32 Subsequence;
int32 FileId;
uchar *Buffer;
} CeosRecord_t;
struct CeosSARImageDesc
{
TBool ImageDescValid;
int NumChannels;
int32 ChannelInterleaving;
int32 DataType;
int BytesPerRecord;
int Lines;
int TopBorderPixels;
int BottomBorderPixels;
int PixelsPerLine;
int LeftBorderPixels;
int RightBorderPixels;
int BytesPerPixel;
int RecordsPerLine;
int PixelsPerRecord;
int ImageDataStart;
int ImageSuffixData;
int FileDescriptorLength;
int32 PixelOrder;
int32 LineOrder;
int PixelDataBytesPerRecord;
};
typedef struct
{
int32 Flavor;
int32 Sensor;
int32 ProductType;
int32 FileNamingConvention;
TBool VolumeDirectoryFile;
TBool SARLeaderFile;
TBool ImagryOptionsFile;
TBool SARTrailerFile;
TBool NullVolumeDirectoryFile;
struct CeosSARImageDesc ImageDesc;
Link_t *RecordList;
} CeosSARVolume_t;
typedef struct
{
int ImageDescValue;
int Override;
int FileId;
struct
{
unsigned char Subtype1, Type, Subtype2, Subtype3;
} TypeCode;
int Offset;
int Length;
int Type;
} CeosRecipeType_t;
typedef struct
{
CeosRecipeType_t *Recipe;
} CeosSARImageDescRecipe_t;
typedef struct
{
int32 ValidFields;
TBool SensorUpdate;
int32 AcquisitionYear;
int32 AcquisitionDay;
int32 AcquisitionMsec;
int32 TransmittedPolarization;
int32 ReceivedPolarization;
int32 PulseRepetitionFrequency;
int32 SlantRangeFirstPixel;
int32 SlantRangeMidPixel;
int32 SlantRangeLastPixel;
} CeosSAREmbeddedInfo_t;
typedef struct
{
double Slant[6];
double Lut[512];
double SemiMajorAxis;
double PlatformLatitude;
double CalibrationScale;
int NumberOfSamples;
int Increment;
TBool PossiblyFlipped;
} CeosRadarCalibration_t;
/* Function prototypes */
void InitEmptyCeosRecord(CeosRecord_t *record, int32 sequence,
CeosTypeCode_t typecode, int32 length);
void InitCeosRecord(CeosRecord_t *record, uchar *buffer);
void InitCeosRecordWithHeader(CeosRecord_t *record, uchar *header,
uchar *buffer);
int DetermineCeosRecordBodyLength(const uchar *header);
void DeleteCeosRecord(CeosRecord_t *record);
void GetCeosRecordStruct(const CeosRecord_t *record, void *struct_ptr);
void PutCeosRecordStruct(CeosRecord_t *record, const void *struct_ptr);
void GetCeosField(CeosRecord_t *, int32, const char *, void *);
void SetCeosField(CeosRecord_t *record, int32 start_byte, const char *format,
int intValue, double dblValue);
void SetIntCeosField(CeosRecord_t *record, int32 start_byte, int32 length,
int32 value);
CeosRecord_t *FindCeosRecord(Link_t *record_list, CeosTypeCode_t typecode,
int32 fileid, int32 flavor, int32 subsequence);
void SerializeCeosRecordsToFile(Link_t *record_list, VSILFILE *fp);
void SerializeCeosRecordsFromFile(Link_t *record_list, VSILFILE *fp);
void InitCeosSARVolume(CeosSARVolume_t *volume, int32 file_name_convention);
void GetCeosSARImageDesc(CeosSARVolume_t *volume);
void GetCeosSARImageDescInfo(CeosSARVolume_t *volume,
CeosSARImageDescRecipe_t *recipe);
void CalcCeosSARImageFilePosition(CeosSARVolume_t *volume, int channel,
int line, int *record, int *file_offset);
int32 GetCeosSARImageData(CeosSARVolume_t *volume,
CeosRecord_t *processed_data_record, int channel,
int xoff, int xsize, int bufsize, uchar *buffer);
void DetermineCeosSARPixelOrder(CeosSARVolume_t *volume, CeosRecord_t *record);
void GetCeosSAREmbeddedInfo(CeosSARVolume_t *volume,
CeosRecord_t *processed_data_record,
CeosSAREmbeddedInfo_t *info);
void DeleteCeosSARVolume(CeosSARVolume_t *volume);
void RegisterRecipes(void);
void FreeRecipes(void);
void AddRecipe(int (*function)(CeosSARVolume_t *volume, const void *token),
const void *token, const char *name);
int CeosDefaultRecipe(CeosSARVolume_t *volume, const void *token);
int ScanSARRecipeFCN(CeosSARVolume_t *volume, const void *token);
/* ceoscalib.c function declarations */
CeosRadarCalibration_t *GetCeosRadarCalibration(CeosSARVolume_t *volume);
/* CEOS byte swapping stuff */
#if defined(CPL_MSB)
#define NativeToCeos(a, b, c, d) memcpy(a, b, c)
#define CeosToNative(a, b, c, d) memcpy(a, b, c)
#else
void NativeToCeos(void *dst, const void *src, const size_t len,
const size_t swap_unit);
#define CeosToNative(a, b, c, d) NativeToCeos(a, b, c, d)
#endif
/* Recipe defines */
CPL_C_END
#endif