Coverage Report

Created: 2025-06-09 07:07

/src/gdal/frmts/ceos2/ceossar.c
Line
Count
Source (jump to first uncovered line)
1
/******************************************************************************
2
 *
3
 * Project:  ASI CEOS Translator
4
 * Purpose:  Functions related to CeosSARVolume_t.
5
 * Author:   Paul Lahaie, pjlahaie@atlsci.com
6
 *
7
 ******************************************************************************
8
 * Copyright (c) 2000, Atlantis Scientific Inc
9
 *
10
 * SPDX-License-Identifier: MIT
11
 ****************************************************************************/
12
13
#include "ceos.h"
14
15
extern Link_t *RecipeFunctions;
16
17
void InitCeosSARVolume(CeosSARVolume_t *volume, int32 file_name_convention)
18
0
{
19
0
    volume->Flavor = volume->Sensor = volume->ProductType = 0;
20
21
0
    volume->FileNamingConvention = file_name_convention;
22
23
0
    volume->VolumeDirectoryFile = volume->SARLeaderFile =
24
0
        volume->SARTrailerFile = volume->NullVolumeDirectoryFile =
25
0
            volume->ImageDesc.ImageDescValid = FALSE;
26
27
0
    volume->RecordList = NULL;
28
0
}
29
30
void CalcCeosSARImageFilePosition(CeosSARVolume_t *volume, int channel,
31
                                  int line, int *record, int *file_offset)
32
0
{
33
0
    struct CeosSARImageDesc *ImageDesc;
34
0
    int TotalRecords = 0, TotalBytes = 0;
35
36
0
    if (record)
37
0
        *record = 0;
38
0
    if (file_offset)
39
0
        *file_offset = 0;
40
41
0
    if (volume)
42
0
    {
43
0
        if (volume->ImageDesc.ImageDescValid)
44
0
        {
45
0
            ImageDesc = &(volume->ImageDesc);
46
47
0
            switch (ImageDesc->ChannelInterleaving)
48
0
            {
49
0
                case CEOS_IL_PIXEL:
50
0
                    TotalRecords = (line - 1) * ImageDesc->RecordsPerLine;
51
0
                    TotalBytes = (TotalRecords) * (ImageDesc->BytesPerRecord);
52
0
                    break;
53
0
                case CEOS_IL_LINE:
54
0
                    TotalRecords =
55
0
                        (ImageDesc->NumChannels * (line - 1) + (channel - 1)) *
56
0
                        ImageDesc->RecordsPerLine;
57
0
                    TotalBytes = (TotalRecords) * (ImageDesc->BytesPerRecord);
58
0
                    break;
59
0
                case CEOS_IL_BAND:
60
0
                    TotalRecords = (((channel - 1) * ImageDesc->Lines) *
61
0
                                    ImageDesc->RecordsPerLine) +
62
0
                                   (line - 1) * ImageDesc->RecordsPerLine;
63
0
                    TotalBytes = (TotalRecords) * (ImageDesc->BytesPerRecord);
64
0
                    break;
65
0
            }
66
0
            if (file_offset)
67
0
                *file_offset = ImageDesc->FileDescriptorLength + TotalBytes;
68
0
            if (record)
69
0
                *record = TotalRecords + 1;
70
0
        }
71
0
    }
72
0
}
73
74
int32 GetCeosSARImageData(CPL_UNUSED CeosSARVolume_t *volume,
75
                          CPL_UNUSED CeosRecord_t *processed_data_record,
76
                          CPL_UNUSED int channel, CPL_UNUSED int xoff,
77
                          CPL_UNUSED int xsize, CPL_UNUSED int bufsize,
78
                          CPL_UNUSED uchar *buffer)
79
0
{
80
0
    return 0;
81
0
}
82
83
void DetermineCeosSARPixelOrder(CPL_UNUSED CeosSARVolume_t *volume,
84
                                CPL_UNUSED CeosRecord_t *record)
85
0
{
86
0
}
87
88
void GetCeosSAREmbeddedInfo(CPL_UNUSED CeosSARVolume_t *volume,
89
                            CPL_UNUSED CeosRecord_t *processed_data_record,
90
                            CPL_UNUSED CeosSAREmbeddedInfo_t *info)
91
0
{
92
0
}
93
94
void DeleteCeosSARVolume(CeosSARVolume_t *volume)
95
0
{
96
0
    Link_t *Links;
97
98
0
    if (volume)
99
0
    {
100
0
        if (volume->RecordList)
101
0
        {
102
0
            for (Links = volume->RecordList; Links != NULL; Links = Links->next)
103
0
            {
104
0
                if (Links->object)
105
0
                {
106
0
                    DeleteCeosRecord(Links->object);
107
0
                    Links->object = NULL;
108
0
                }
109
0
            }
110
0
            DestroyList(volume->RecordList);
111
0
        }
112
0
        HFree(volume);
113
0
    }
114
0
}