OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
ossimCcfHead.cpp
Go to the documentation of this file.
1 //---
2 //
3 // License: MIT
4 //
5 // Author: David Burken
6 //
7 // Description:
8 //
9 // Contains class definition for CcfHead.
10 //
11 //---
12 // $Id$
13 
15 #include <ossim/base/ossimIrect.h>
19 #include <ossim/base/ossimNotify.h>
22 #include <ossim/base/ossimTrace.h>
23 
24 #include <sstream>
25 #include <iostream>
26 #include <fstream>
27 
28 static ossimTrace traceDebug("ossimCcfHead:debug");
29 
31  :
32  m_connectionString(),
33  theNumberOfBands(1),
34  thePixelType(OSSIM_UCHAR),
35  theFileType(),
36  theVersionNumber(0),
37  theLinesPerChip(0),
38  theSamplesPerChip(0),
39  theLineChipsPerChunk(0),
40  theSampleChipsPerChunk(0),
41  theRectInFullImageStartLine(0),
42  theRectInFuleImageStartSample(0),
43  theRectInFullImageStopLine(0),
44  theRectInFuleImageStopSample(0),
45  theNumberOfValidImageVertices(0),
46  theValidImageVertices(1),
47  theFirstBandHeaderPointer(0),
48  theRadiometryString(),
49  theBytesPerPixel(0),
50  theBytesPerChip(0),
51  theBytesPerChunk(0),
52  theCompressionType(),
53  theNumberOfRLevels(0),
54  theOccupiedFlag(1),
55  theStartOfData(1),
56  theNumberOfLines(1),
57  theNumberOfSamples(1),
58  theChunksInLineDir(1),
59  theChunksInSampleDir(1)
60 {}
61 
62 //***************************************************************************
63 // Public Constructor:
64 //***************************************************************************
65 ossimCcfHead::ossimCcfHead(const char* ccf_file)
66  :
67  m_connectionString(ccf_file),
68  theNumberOfBands(1),
69  thePixelType(OSSIM_UCHAR),
70  theFileType(),
71  theVersionNumber(0),
72  theLinesPerChip(0),
73  theSamplesPerChip(0),
74  theLineChipsPerChunk(0),
75  theSampleChipsPerChunk(0),
76  theRectInFullImageStartLine(0),
77  theRectInFuleImageStartSample(0),
78  theRectInFullImageStopLine(0),
79  theRectInFuleImageStopSample(0),
80  theNumberOfValidImageVertices(0),
81  theValidImageVertices(1),
82  theFirstBandHeaderPointer(0),
83  theRadiometryString(""),
84  theBytesPerPixel(0),
85  theBytesPerChip(0),
86  theBytesPerChunk(0),
87  theCompressionType(),
88  theNumberOfRLevels(0),
89  theOccupiedFlag(1),
90  theStartOfData(1),
91  theNumberOfLines(1),
92  theNumberOfSamples(1),
93  theChunksInLineDir(1),
94  theChunksInSampleDir(1)
95 {
96  static const char MODULE[] = "ossimCcfHead::ossimCcfHead";
97 
98  if (!parseCcfHeader(ccf_file))
99  {
101 
102  if (traceDebug())
103  {
105  << MODULE << " ERROR!"
106  << "\nError initializing from ccf_file: " << ccf_file
107  << "\nReturning...\n";
108  }
109  }
110 }
111 
112 ossimCcfHead::ossimCcfHead(std::shared_ptr<ossim::istream>& str,
113  const std::string& connectionString)
114 {
115  static const char MODULE[] = "ossimCcfHead::ossimCcfHead";
116  if(!str)
117  {
119  }
120  else if (!parseCcfHeader(str, connectionString))
121  {
123 
124  if (traceDebug())
125  {
127  << MODULE << " ERROR!"
128  << "\nError initializing from ccf_file: " << connectionString
129  << "\nReturning...\n";
130  }
131  }
132 
133 }
134 //***************************************************************************
135 // Destructor:
136 //***************************************************************************
138 {}
139 
140 //***************************************************************************
141 // Public Method:
142 //***************************************************************************
143 bool ossimCcfHead::parseCcfHeader(const char* ccf_file)
144 {
145  static const char MODULE[] = "ossimCcfHead::parseCcfHeader";
146  bool result = false;
147 
148  std::string connectionString = ccf_file;
149  std::shared_ptr<ossim::istream> str = ossim::StreamFactoryRegistry::instance()->
150  createIstream( connectionString, std::ios_base::in|std::ios_base::binary);
151  if ( str )
152  {
153  result = parseCcfHeader(str, connectionString);
154  }
155  else
156  {
158  if (traceDebug())
159  {
161  << MODULE << " ERROR!"
162  << "\nCannot open file: " << m_connectionString << "\n";
163  }
164  }
165  return result;
166 }
167 
168 bool ossimCcfHead::parseCcfHeader(std::shared_ptr<ossim::istream>& str,
169  const std::string& connectionString)
170 {
171  static const char MODULE[] = "ossimCcfHead::parseossimCcfHeader";
172 
173  bool result = false;
174 
175  if ( str )
176  {
177  str->clear();
178  str->seekg(0);
179 
180  const ossim_uint32 MAX_LEN = 256;
181  char tmp[MAX_LEN];
182 
183  // Check the first string should be "CCF" else get out...
184  // this might hang so I changed it to not use the
185  // >> operator unless it is a ccf file. If it is another
186  // file we might not be guranteed a whitespace or \n character
187  // will exist and therefore the entrie file could have
188  // been read in.
189  //
190  char type[4];
191  str->read(type, 3);
192  type[3] = '\0';
193  theFileType = type;
194  if (theFileType == "CCF")
195  {
196  m_ccfStr = str;
197  m_connectionString = connectionString;
198 
199  // Check the version number.
200  (*m_ccfStr) >> tmp >> theVersionNumber;
201 
202  //---
203  // Call the appropriate method for the version. Currently only version 6
204  // supported as that was all I had in-house. Feel free to add your own
205  // version reader!
206  //---
207  switch(theVersionNumber)
208  {
209  case 5:
210  {
211  result = parseV5CcfHeader(*m_ccfStr);
212  break;
213  }
214  case 6:
215  {
216  result = parseV6CcfHeader(*m_ccfStr);
217  break;
218  }
219  default:
220  {
221  m_ccfStr = 0;
222  // Version type not supported...
223  if (traceDebug())
224  {
226  << MODULE << " ERROR!"
227  << "\nUsupported version: " << theVersionNumber
228  << " Returning...\n";
229  }
230  }
231  break;
232  }
233  }
234 
235  if ( result )
236  {
237  //---
238  // Parse the radiometry string. This will initialize "theNumberOfBands"
239  // and the pixel type.
240  //---
241  parseRadString();
242  }
243  else
244  {
245  str->clear();
246  str->seekg(0);
247  }
248  }
249 
250  return result;
251 }
252 
253 //***************************************************************************
254 // Private Method:
255 //***************************************************************************
257 {
258  static const char MODULE[] = "CcfHead::parseV5CcfHeader";
259 
260  // Check the stream.
261  if ( !is )
262  {
263  if (traceDebug())
264  {
266  << MODULE << " Bad Stream passed to method!"
267  << "\nReturning...\n";
268  }
269 
270  return false;
271  }
272 
273  const ossim_uint32 MAX_LEN = 256;
274  char tmp[MAX_LEN];
275 
276  //---
277  // These are all fixed/not used so just skip...
278  //---
279  is.read(tmp, 1); // eat the '\n'
280  is.getline(tmp, MAX_LEN-1, '\n'); // skip "ccf_maker"
281 
282  is >> tmp // "LinesPerChip"
283  >> theLinesPerChip
284  >> tmp // "SamplesPerChip"
286  >> tmp // "LineChipsPerChunk"
288  >> tmp // "SampleChipsPerChunk"
290 
291  is.read(tmp, 1); // eat the '\n'
292  is.getline(tmp, MAX_LEN-1, '\n'); // skip "NumberOfBands"
293  is.getline(tmp, MAX_LEN-1, '\n'); // skip "RectInFullImageSpace"
294 
295  is >> tmp // skip "StartLine"
297  >> tmp // skip "StartSample"
299  >> tmp // skip "StopLine"
301  >> tmp // skip "StopSample"
303 
304  // No valid image vertices in this version.
307 
308  is.read(tmp, 1); // eat the '\n'
309  is.getline(tmp, MAX_LEN-1, '\n'); // skip blank line
310 
311  is >> tmp // skip "FirstBandHeaderPointer"
312  >> theFirstBandHeaderPointer; // Offset to band header.
313 
314  // Seek to the band header record.
315  is.seekg(theFirstBandHeaderPointer, std::ios_base::beg);
316 
317  is.getline(tmp, MAX_LEN-1, '\n'); // skip "BAND" line
318  is.getline(tmp, MAX_LEN-1, '\n'); // skip "NextBandHeaderPointer" line
319  is.getline(tmp, MAX_LEN-1, '\n'); // skip "ChunkMapPointer" line
320 
321  is >> tmp; // skip "Radiometry"
322 
323  is.getline(tmp, MAX_LEN-1, '\n'); // Get the radiometry string.
324  const char* rad = tmp;
325  while ( *rad && (*rad == ' ')) rad++; // Eat the whitespaces...
326  theRadiometryString = rad;
327 
328  is >> tmp // skip "BytesPerPixel"
330  >> tmp // skip "BytesPerChip"
331  >> theBytesPerChip
332  >> tmp // skip "BytesPerChunk"
334  >> tmp // skip "CompressionType"
336  >> tmp // skip "NumberOfRLevels"
338 
340  {
341  // Resize all the vectors.
348  }
349 
350  is.read(tmp, 1); // eat the '\n'
351  is.getline(tmp, MAX_LEN-1, '\n'); // skip blank line
352 
353  ossim_uint32 i;
354  for (i=0; i<theNumberOfRLevels; i++)
355  {
356  is.getline(tmp, MAX_LEN-1, '\n'); // skip the Rlevel line
357 
358  ossim_uint32 tmp_long;
359 
360  is >> tmp // skip "Occupied"
361  >> tmp_long;
362 
363  theOccupiedFlag[i] = tmp_long;
364 
365  is >> tmp // skip "StartOfData"
366  >> tmp_long;
367 
368  theStartOfData[i] = tmp_long;
369 
370  is >> tmp // skip "NumberOfLines"
371  >> tmp_long;
372 
373  theNumberOfLines[i] = tmp_long;
374 
375  is >> tmp // skip "NumberOfSamples"
376  >> tmp_long;
377 
378  theNumberOfSamples[i] = tmp_long;
379 
380  is >> tmp // skip "ChunksInLineDir"
381  >> tmp_long;
382 
383  theChunksInLineDir[i] = tmp_long;
384 
385  is >> tmp // skip "ChunksInSampleDir"
386  >> tmp_long;
387 
388  theChunksInSampleDir[i] = tmp_long;
389 
390  is.getline(tmp, MAX_LEN-1, '\n'); // skip "LineOffset" line
391  is.getline(tmp, MAX_LEN-1, '\n'); // skip "LineDecimation" line
392  is.getline(tmp, MAX_LEN-1, '\n'); // skip "SampleOffset" line
393  is.getline(tmp, MAX_LEN-1, '\n'); // skip "SampleDecimation" line
394  is.read(tmp, 1); // Eat the '\n'
395  is.getline(tmp, MAX_LEN-1, '\n'); // skip blank line
396  is.read(tmp, 1); // Eat the '\n'
397  }
398 
399  // Note: The caller will close the stream.
400 
401  return true;
402 }
403 
404 //***************************************************************************
405 // Private Method:
406 //***************************************************************************
408 {
409  static const char MODULE[] = "CcfHead::parseV6CcfHeader";
410 
411  // Check the stream.
412  if (!is)
413  {
414  if (traceDebug())
415  {
417  << MODULE << " Bad Stream passed to method!"
418  << "\nReturning...\n";
419  }
420 
421  return false;
422  }
423 
424  const ossim_uint32 MAX_LEN = 256;
425  char tmp[MAX_LEN];
426 
427  //***
428  // These are all fixed/not used so just skip...
429  //***
430  is.read(tmp, 1); // eat the '\n'
431  is.getline(tmp, MAX_LEN-1, '\n'); // skip "ccf_maker"
432 
433  is >> tmp // "LinesPerChip"
434  >> theLinesPerChip
435  >> tmp // "SamplesPerChip"
437  >> tmp // "LineChipsPerChunk"
439  >> tmp // "SampleChipsPerChunk"
441 
442  is.read(tmp, 1); // eat the '\n'
443  is.getline(tmp, MAX_LEN-1, '\n'); // skip "NumberOfBands"
444  is.getline(tmp, MAX_LEN-1, '\n'); // skip "RectInFullImageSpace"
445 
446  is >> tmp // skip "StartLine"
448  >> tmp // skip "StartSample"
450  >> tmp // skip "StopLine"
452  >> tmp // skip "StopSample"
454  >> tmp // skip "ValidImageVertices"
456 
457  // Get the valid image vertices.
458  ossim_uint32 i;
459 
461  {
463  }
464 
465  for (i=0; i<theNumberOfValidImageVertices; i++)
466  {
467  ossimString tmp_dbl; // Can be doubles in header.
468 
469  is >> tmp // skip "Vertex"
470  >> tmp // skip Vertex number
471  >> tmp_dbl; // line
472 
473  theValidImageVertices[i].y = static_cast<int>(tmp_dbl.toDouble());
474  tmp_dbl = "";
475  is >> tmp_dbl; // sample
476 
477  theValidImageVertices[i].x = static_cast<int>(tmp_dbl.toDouble());
478  }
479 
480  is.read(tmp, 1); // eat the '\n'
481  is.getline(tmp, MAX_LEN-1, '\n'); // skip blank line
482 
483  is >> tmp // skip "FirstBandHeaderPointer"
484  >> theFirstBandHeaderPointer; // Offset to band header.
485 
486  // Seek to the band header record.
487  is.seekg(theFirstBandHeaderPointer, std::ios_base::beg);
488 
489  is.getline(tmp, MAX_LEN-1, '\n'); // skip "BAND" line
490  is.getline(tmp, MAX_LEN-1, '\n'); // skip "NextBandHeaderPointer" line
491  is.getline(tmp, MAX_LEN-1, '\n'); // skip "ChunkMapPointer" line
492 
493  is >> tmp; // skip "Radiometry"
494 
495  is.getline(tmp, MAX_LEN-1, '\n'); // Get the radiometry string.
496 
497  const char* rad = tmp;
498  while ( *rad && (*rad == ' ')) rad++; // Eat the whitespaces...
499  theRadiometryString = rad;
500 
501  is >> tmp // skip "BytesPerPixel"
503  >> tmp // skip "BytesPerChip"
504  >> theBytesPerChip
505  >> tmp // skip "BytesPerChunk"
507  >> tmp // skip "CompressionType"
509  >> tmp // skip "NumberOfRLevels"
511 
512  if (theNumberOfRLevels > theOccupiedFlag.size())
513  {
514  // Resize all the vectors.
521  }
522 
523  is.read(tmp, 1); // eat the '\n'
524  is.getline(tmp, MAX_LEN-1, '\n'); // skip blank line
525 
526  for (i=0; i<theNumberOfRLevels; i++)
527  {
528  is.getline(tmp, MAX_LEN-1, '\n'); // skip the Rlevel line
529 
530  ossim_uint32 tmp_long;
531 
532  is >> tmp // skip "Occupied"
533  >> tmp_long;
534 
535  theOccupiedFlag[i] = tmp_long;
536 
537  is >> tmp // skip "StartOfData"
538  >> tmp_long;
539 
540  theStartOfData[i] = tmp_long;
541 
542  is >> tmp // skip "NumberOfLines"
543  >> tmp_long;
544 
545  theNumberOfLines[i] = tmp_long;
546 
547  is >> tmp // skip "NumberOfSamples"
548  >> tmp_long;
549 
550  theNumberOfSamples[i] = tmp_long;
551 
552  is >> tmp // skip "ChunksInLineDir"
553  >> tmp_long;
554 
555  theChunksInLineDir[i] = tmp_long;
556 
557  is >> tmp // skip "ChunksInSampleDir"
558  >> tmp_long;
559 
560  theChunksInSampleDir[i] = tmp_long;
561 
562  is.getline(tmp, MAX_LEN-1, '\n'); // skip "LineOffset" line
563  is.getline(tmp, MAX_LEN-1, '\n'); // skip "LineDecimation" line
564  is.getline(tmp, MAX_LEN-1, '\n'); // skip "SampleOffset" line
565  is.getline(tmp, MAX_LEN-1, '\n'); // skip "SampleDecimation" line
566  is.read(tmp, 1); // Eat the '\n'
567  is.getline(tmp, MAX_LEN-1, '\n'); // skip blank line
568  is.read(tmp, 1); // Eat the '\n'
569  }
570 
571  // Note: The caller will close the stream.
572 
573  return true;
574 }
575 
576 //***************************************************************************
577 // Public Method:
578 //***************************************************************************
580 {
581  static const char MODULE[] = "ossimCcfHead::print";
582 
583  out << MODULE
584  << "\ntheErrorStatus: " << theErrorStatus
585  << "\ntheCcfFile: " << m_connectionString
586  << "\ntheNumberOfBands: " << theNumberOfBands
587  << "\nthePixelType: "
589  << "\ntheFileType: " << theFileType
590  << "\ntheVersionNumber: " << theVersionNumber
591  << "\ntheLinesPerChip: " << theLinesPerChip
592  << "\ntheSamplesPerChip: " << theSamplesPerChip
593  << "\ntheLineChipsPerChunk: " << theLineChipsPerChunk
594  << "\ntheSampleChipsPerChunk: " << theSampleChipsPerChunk
595  << "\ntheRectInFullImageStartLine: " << theRectInFullImageStartLine
596  << "\ntheRectInFuleImageStartSample: " << theRectInFuleImageStartSample
597  << "\ntheRectInFullImageStopLine: " << theRectInFullImageStopLine
598  << "\ntheRectInFuleImageStopSample: " << theRectInFuleImageStopSample
599  << "\ntheNumberOfValidImageVertices: "
601 
602  ossim_uint32 i;
603 
604  for (i=0; i<theNumberOfValidImageVertices; i++)
605  {
606  out << "\ntheValidImageVertices[" << i << "]: "
607  << theValidImageVertices[i];
608  }
609 
610  out << "\ntheFirstBandHeaderPointer: " << theFirstBandHeaderPointer
611  << "\ntheRadiometryString: " << theRadiometryString
612  << "\ntheBytesPerPixel: " << theBytesPerPixel
613  << "\ntheBytestPerChip: " << theBytesPerChip
614  << "\ntheBytesPerChunk: " << theBytesPerChunk
615  << "\ntheCompressionType: " << theCompressionType
616  << "\ntheNumberOfRLevels: " << theNumberOfRLevels;
617 
618  for (i=0; i<theNumberOfRLevels; i++)
619  {
620  out << "\ntheOccupiedFlag[" << i << "]: " << theOccupiedFlag[i]
621  << "\ntheStartOfData[" << i << "]: " << theStartOfData[i]
622  << "\ntheNumberOfLines[" << i << "]: " << theNumberOfLines[i]
623  << "\ntheNumberOfSamples[" << i << "]: " << theNumberOfSamples[i]
624  << "\ntheChunksInLineDir[" << i << "]: " << theChunksInLineDir[i]
625  << "\ntheChunksInSampleDir[" << i << "]: "
626  << theChunksInSampleDir[i];
627  }
628 
629  out << std::endl;
630 
632 }
633 
634 //***************************************************************************
635 // Public Method:
636 //***************************************************************************
638 {
639  static const char MODULE[] = "ossimCcfHead::numberOfLines";
640 
641  if (reduced_res_level > highestReducedResSet() )
642  {
644  << MODULE << " ERROR!"
645  << "\nInvalid reduced res level: " << reduced_res_level
646  << "\nHighest reduced res level available: "
647  << highestReducedResSet() << std::endl;
648  return 0;
649  }
650 
651  return theNumberOfLines[reduced_res_level];
652 }
653 
654 //***************************************************************************
655 // Public Method:
656 //***************************************************************************
658 {
659  static const char MODULE[] = "ossimCcfHead::numberOfSamples";
660 
661  if (reduced_res_level > highestReducedResSet() )
662  {
664  << MODULE << " ERROR!"
665  << "\nInvalid reduced res level: " << reduced_res_level
666  << "\nHighest reduced res level available: "
667  << highestReducedResSet() << std::endl;
668  return 0;
669  }
670 
671  return theNumberOfSamples[reduced_res_level];
672 }
673 
674 //***************************************************************************
675 // Public Method:
676 //***************************************************************************
678 {
679  static const char MODULE[] = "ossimCcfHead::chunksInLineDir";
680 
681  if (reduced_res_level > highestReducedResSet() )
682  {
684  << MODULE << " ERROR!"
685  << "\nInvalid reduced res level: " << reduced_res_level
686  << "\nHighest reduced res level available: "
687  << highestReducedResSet() << std::endl;
688  return 0;
689  }
690 
691  return theChunksInLineDir[reduced_res_level];
692 }
693 
694 //***************************************************************************
695 // Public Method:
696 //***************************************************************************
698 {
699  static const char MODULE[] = "ossimCcfHead::chunksInSampleDir";
700 
701  if (reduced_res_level > highestReducedResSet() )
702  {
704  << MODULE << " ERROR!"
705  << "\nInvalid reduced res level: " << reduced_res_level
706  << "\nHighest reduced res level available: "
707  << highestReducedResSet() << std::endl;
708  return 0;
709  }
710 
711  return theChunksInSampleDir[reduced_res_level];
712 }
713 
714 
715 //***************************************************************************
716 // Public Method:
717 //***************************************************************************
718 std::streampos ossimCcfHead::startOfData(ossim_uint32 reduced_res_level) const
719 {
720  static const char MODULE[] = "ossimCcfHead::startOfData";
721 
722  if (reduced_res_level > highestReducedResSet() )
723  {
724  ossimNotify(ossimNotifyLevel_WARN) << MODULE << " ERROR!"
725  << "\nInvalid reduced res level: " << reduced_res_level
726  << "\nHighest reduced res level available: "
727  << highestReducedResSet() << std::endl;
728  return 0;
729  }
730 
731  return theStartOfData[reduced_res_level];
732 }
733 
734 //***************************************************************************
735 // Public Method:
736 //***************************************************************************
738 {
739  static const char MODULE[] = "ossimCcfHead::imageRect";
740 
741  if (reduced_res_level > highestReducedResSet() )
742  {
743  ossimNotify(ossimNotifyLevel_WARN) << MODULE << " ERROR!"
744  << "\nInvalid reduced res level: " << reduced_res_level
745  << "\nHighest reduced res level available: "
746  << highestReducedResSet() << std::endl;
747  return ossimIrect(0,0,0,0);
748  }
749 
750  return ossimIrect(0,
751  0,
752  numberOfSamples(reduced_res_level) - 1,
753  numberOfLines(reduced_res_level) - 1);
754 }
755 
756 //***************************************************************************
757 // Public Method:
758 //***************************************************************************
760 {
761  static const char MODULE[] = "ossimCcfHead::parseRadString";
762 
763  if (theRadiometryString.contains("RadiomNBand"))
764  {
765  //***
766  // Complex string, must parse. Should look like:
767  // "RadiomNBand (3 3 Linear8 )"
768  //***
769  char tmp[80];
771 
772  is >> tmp; // Skip the "RadiomNBand" string.
773  is.get(tmp, 3); // Eat the space and the '('.
774  is >> theNumberOfBands; // Get the number of bands.
775  }
776 
777  if (theRadiometryString.contains("8"))
778  {
780  }
781  else if(theRadiometryString.contains("16"))
782  {
784  }
785  else if (theRadiometryString.contains("11"))
786  {
788  }
789  else if (theRadiometryString.contains("12"))
790  {
792  }
793  else if (theRadiometryString.contains("13"))
794  {
796  }
797  else if (theRadiometryString.contains("14"))
798  {
800  }
801  else if (theRadiometryString.contains("15"))
802  {
804  }
805  else
806  {
808  << MODULE << " Unknown radiometry!"
809  << "\ntheRadiometryString: " << theRadiometryString << std::endl;
810  }
811 
812  if (traceDebug())
813  {
815  << MODULE
816  << "\ntheRadiometryString: " << theRadiometryString
817  << "\ntheNumberOfBands: " << theNumberOfBands
818  << "\nthePixelType: "
820  << "\n";
821  }
822 }
16 bit unsigned integer (15 bits used)
bool parseV5CcfHeader(std::istream &is)
ossim_uint32 theNumberOfBands
Definition: ossimCcfHead.h:162
ossimScalarType thePixelType
Definition: ossimCcfHead.h:163
ossim_uint32 theLinesPerChip
Definition: ossimCcfHead.h:166
ossim_uint32 theRectInFullImageStopLine
Definition: ossimCcfHead.h:172
ossim_uint32 theNumberOfRLevels
Definition: ossimCcfHead.h:182
ossim_uint32 theRectInFullImageStartLine
Definition: ossimCcfHead.h:170
ossim_uint32 theBytesPerPixel
Definition: ossimCcfHead.h:178
ossim_uint32 chunksInLineDir(ossim_uint32 reduced_res_level) const
virtual ossimString getEntryString(ossim_int32 entry_number) const
std::vector< ossim_uint32 > theNumberOfSamples
Definition: ossimCcfHead.h:186
bool contains(char aChar) const
Definition: ossimString.h:58
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
virtual std::ostream & print(std::ostream &out) const
Outputs theErrorStatus as an ossimErrorCode and an ossimString.
std::vector< ossim_uint32 > theNumberOfLines
Definition: ossimCcfHead.h:185
16 bit unsigned integer (14 bits used)
static const ossimErrorCode OSSIM_ERROR
16 bit unsigned integer (13 bits used)
static StreamFactoryRegistry * instance()
ossim_uint32 theLineChipsPerChunk
Definition: ossimCcfHead.h:168
std::vector< ossim_uint32 > theChunksInSampleDir
Definition: ossimCcfHead.h:188
static ossimScalarTypeLut * instance()
Returns the static instance of an ossimScalarTypeLut object.
ossimString theRadiometryString
Definition: ossimCcfHead.h:177
ossim_uint32 chunksInSampleDir(ossim_uint32 reduced_res_level) const
bool parseCcfHeader(const char *ccf_file)
ossimString theCompressionType
Definition: ossimCcfHead.h:181
std::vector< ossimIpt > theValidImageVertices
Definition: ossimCcfHead.h:175
unsigned int ossim_uint32
ossim_uint32 theRectInFuleImageStartSample
Definition: ossimCcfHead.h:171
std::string m_connectionString
Definition: ossimCcfHead.h:161
std::vector< std::streampos > theStartOfData
Definition: ossimCcfHead.h:184
std::vector< ossim_uint32 > theChunksInLineDir
Definition: ossimCcfHead.h:187
ossim_uint32 numberOfSamples(ossim_uint32 reduced_res_level) const
std::streampos startOfData(ossim_uint32 reduced_res_level) const
ossimString theFileType
Definition: ossimCcfHead.h:164
ossim_uint32 theFirstBandHeaderPointer
Definition: ossimCcfHead.h:176
ossim_uint32 theNumberOfValidImageVertices
Definition: ossimCcfHead.h:174
16 bit unsigned integer (11 bits used)
std::basic_istream< char > istream
Base class for char input streams.
Definition: ossimIosFwd.h:20
ossim_uint32 numberOfLines(ossim_uint32 reduced_res_level) const
std::shared_ptr< ossim::istream > m_ccfStr
Definition: ossimCcfHead.h:160
ossim_uint32 theRectInFuleImageStopSample
Definition: ossimCcfHead.h:173
ossimIrect imageRect(ossim_uint32 reduced_res_level) const
ossim_uint32 theSamplesPerChip
Definition: ossimCcfHead.h:167
ossim_uint32 theSampleChipsPerChunk
Definition: ossimCcfHead.h:169
ossim_uint32 theBytesPerChunk
Definition: ossimCcfHead.h:180
ossim_uint32 highestReducedResSet() const
Definition: ossimCcfHead.h:71
ossim_uint32 theBytesPerChip
Definition: ossimCcfHead.h:179
std::basic_istringstream< char > istringstream
Class for char input memory streams.
Definition: ossimIosFwd.h:32
void parseRadString()
16 bit unsigned iteger
bool parseV6CcfHeader(std::istream &is)
OSSIMDLLEXPORT std::ostream & ossimNotify(ossimNotifyLevel level=ossimNotifyLevel_WARN)
std::basic_ostream< char > ostream
Base class for char output streams.
Definition: ossimIosFwd.h:23
8 bit unsigned iteger
std::vector< bool > theOccupiedFlag
Definition: ossimCcfHead.h:183
16 bit unsigned integer (12 bits used)
ossim_uint32 theVersionNumber
Definition: ossimCcfHead.h:165