1 /*=========================================================================
4 Module: $RCSfile: gdcmJPEGFragmentsInfo.cxx,v $
6 Date: $Date: 2005/01/31 04:00:04 $
7 Version: $Revision: 1.15 $
9 Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
10 l'Image). All rights reserved. See Doc/License.txt or
11 http://www.creatis.insa-lyon.fr/Public/Gdcm/License.html for details.
13 This software is distributed WITHOUT ANY WARRANTY; without even
14 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 PURPOSE. See the above copyright notices for more information.
17 =========================================================================*/
19 #include "gdcmJPEGFragmentsInfo.h"
20 #include "gdcmDebug.h"
27 JPEGFragmentsInfo::JPEGFragmentsInfo()
33 * \brief Default destructor
35 JPEGFragmentsInfo::~JPEGFragmentsInfo()
37 for(JPEGFragmentsList::iterator it = Fragments.begin();
38 it != Fragments.end();
48 * @param os Stream to print to.
49 * @param indent Indentation string to be prepended during printing.
51 void JPEGFragmentsInfo::Print( std::ostream &os, std::string const &indent )
55 << "----------------- JPEG fragments --------------------------------"
56 << std::endl << std::endl;
58 << "Total number of fragments : " << Fragments.size()
60 int fragmentNumber = 0;
61 for(JPEGFragmentsList::iterator it = Fragments.begin();
62 it != Fragments.end();
66 << " fragment number :" << fragmentNumber++;
67 (*it)->Print( os, indent + " ");
73 * \brief Calculate sum of all fragments length and return total
74 * @return Total size of JPEG fragments length
76 size_t JPEGFragmentsInfo::GetFragmentsLength()
78 // Loop on the fragment[s] to get total length
79 size_t totalLength = 0;
80 JPEGFragmentsList::const_iterator it;
81 for( it = Fragments.begin();
82 it != Fragments.end();
85 totalLength += (*it)->GetLength();
91 void JPEGFragmentsInfo::DecompressJPEGFramesFromFile(std::ifstream *fp, uint8_t *buffer, int nBits, int , int )
93 // Pointer to the Raw image
94 uint8_t *localRaw = buffer;
96 // Loop on the fragment[s]
97 JPEGFragmentsList::const_iterator it;
98 for( it = Fragments.begin();
99 it != Fragments.end();
102 //(*it)->pimage = localRaw;
103 (*it)->DecompressJPEGFramesFromFile(fp, localRaw, nBits, StateSuspension);
104 // update pointer to image after some scanlines read:
105 localRaw = (*it)->GetImage();
106 // Advance to next free location in Raw
107 // for next fragment decompression (if any)
109 //localRaw += length * numBytes;
110 //std::cerr << "Used to increment by: " << length * numBytes << std::endl;
114 void JPEGFragmentsInfo::AddFragment(JPEGFragment *fragment)
116 Fragments.push_back(fragment);
119 JPEGFragment *JPEGFragmentsInfo::GetFirstFragment()
121 ItFragments = Fragments.begin();
122 if (ItFragments != Fragments.end())
127 JPEGFragment *JPEGFragmentsInfo::GetNextFragment()
129 gdcmAssertMacro (ItFragments != Fragments.end());
132 if (ItFragments != Fragments.end())
137 unsigned int JPEGFragmentsInfo::GetFragmentCount()
139 return Fragments.size();
142 } // end namespace gdcm