File: ceossar.c

package info (click to toggle)
gdal 3.11.3%2Bdfsg-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 89,016 kB
  • sloc: cpp: 1,165,048; ansic: 208,864; python: 26,958; java: 5,972; xml: 4,611; sh: 3,776; cs: 2,508; yacc: 1,306; makefile: 213
file content (114 lines) | stat: -rw-r--r-- 3,715 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/******************************************************************************
 *
 * Project:  ASI CEOS Translator
 * Purpose:  Functions related to CeosSARVolume_t.
 * Author:   Paul Lahaie, pjlahaie@atlsci.com
 *
 ******************************************************************************
 * Copyright (c) 2000, Atlantis Scientific Inc
 *
 * SPDX-License-Identifier: MIT
 ****************************************************************************/

#include "ceos.h"

extern Link_t *RecipeFunctions;

void InitCeosSARVolume(CeosSARVolume_t *volume, int32 file_name_convention)
{
    volume->Flavor = volume->Sensor = volume->ProductType = 0;

    volume->FileNamingConvention = file_name_convention;

    volume->VolumeDirectoryFile = volume->SARLeaderFile =
        volume->SARTrailerFile = volume->NullVolumeDirectoryFile =
            volume->ImageDesc.ImageDescValid = FALSE;

    volume->RecordList = NULL;
}

void CalcCeosSARImageFilePosition(CeosSARVolume_t *volume, int channel,
                                  int line, int *record, int *file_offset)
{
    struct CeosSARImageDesc *ImageDesc;
    int TotalRecords = 0, TotalBytes = 0;

    if (record)
        *record = 0;
    if (file_offset)
        *file_offset = 0;

    if (volume)
    {
        if (volume->ImageDesc.ImageDescValid)
        {
            ImageDesc = &(volume->ImageDesc);

            switch (ImageDesc->ChannelInterleaving)
            {
                case CEOS_IL_PIXEL:
                    TotalRecords = (line - 1) * ImageDesc->RecordsPerLine;
                    TotalBytes = (TotalRecords) * (ImageDesc->BytesPerRecord);
                    break;
                case CEOS_IL_LINE:
                    TotalRecords =
                        (ImageDesc->NumChannels * (line - 1) + (channel - 1)) *
                        ImageDesc->RecordsPerLine;
                    TotalBytes = (TotalRecords) * (ImageDesc->BytesPerRecord);
                    break;
                case CEOS_IL_BAND:
                    TotalRecords = (((channel - 1) * ImageDesc->Lines) *
                                    ImageDesc->RecordsPerLine) +
                                   (line - 1) * ImageDesc->RecordsPerLine;
                    TotalBytes = (TotalRecords) * (ImageDesc->BytesPerRecord);
                    break;
            }
            if (file_offset)
                *file_offset = ImageDesc->FileDescriptorLength + TotalBytes;
            if (record)
                *record = TotalRecords + 1;
        }
    }
}

int32 GetCeosSARImageData(CPL_UNUSED CeosSARVolume_t *volume,
                          CPL_UNUSED CeosRecord_t *processed_data_record,
                          CPL_UNUSED int channel, CPL_UNUSED int xoff,
                          CPL_UNUSED int xsize, CPL_UNUSED int bufsize,
                          CPL_UNUSED uchar *buffer)
{
    return 0;
}

void DetermineCeosSARPixelOrder(CPL_UNUSED CeosSARVolume_t *volume,
                                CPL_UNUSED CeosRecord_t *record)
{
}

void GetCeosSAREmbeddedInfo(CPL_UNUSED CeosSARVolume_t *volume,
                            CPL_UNUSED CeosRecord_t *processed_data_record,
                            CPL_UNUSED CeosSAREmbeddedInfo_t *info)
{
}

void DeleteCeosSARVolume(CeosSARVolume_t *volume)
{
    Link_t *Links;

    if (volume)
    {
        if (volume->RecordList)
        {
            for (Links = volume->RecordList; Links != NULL; Links = Links->next)
            {
                if (Links->object)
                {
                    DeleteCeosRecord(Links->object);
                    Links->object = NULL;
                }
            }
            DestroyList(volume->RecordList);
        }
        HFree(volume);
    }
}