X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=ChangeLog;h=9e9c5b05d526d0160b466197a8c3cc56475a3f90;hb=864a539efcd809529bf7f1d6aad6727fd40ace66;hp=37ca0b884335ecbcd0ce874e1e787c88cc88fefd;hpb=19c54f9be7d29dcdd8fbb56b6308e55ed230441d;p=gdcm.git diff --git a/ChangeLog b/ChangeLog index 37ca0b88..9e9c5b05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,326 @@ +2004-06-28 Eric Boix + * Test/TestWriteRead.cxx and TestReadWrite.cxx merged (because of + redundancy) to added Test/TestReadWriteReadCompare.cxx + * Test/CmakeList.txt: because the compare test of + Test/TestReadWriteReadCompare.cxx fails, the following images are + black listed: - 8BitsUncompressedColor.dcm + - OT-PAL-8-face.dcm + - US-PAL-8-10x-echo.dcm + * src/gdcmDocument.cxx: for broken (non DICOM V3 conformal) images + (e.g. gdcm-JPEG-LossLess3a.dcm see comments in + gdcm/gdcmPython/testSuite.py for details) ::FindDocLengthOB() had + and ad-hoc kludge. This kludge is now removed, and on encountering + such an image (OB field brain damaged) we set errno. Then in + ::FindDocLength() we "fix" the length as being ALL what remains + in the file (until EOF). We then proceed, hoping for the best... + This fixes a SegFault in ShowDicom when trying to write such an + image. + * Test/CmakeList.txt: 8BitsRunLengthColor.dcm is now blacklisted + (because TestWriteRead breaks on it, after a non conformal commit?). + ctest now runs properly, except for MakeDicomDir (which was allways + broken) and the Python related stuff (still not fixed). + +2004-06-24 Jean-Pierre Roux + ADD : Examples/WriteRead, that acts like the former Test/TestWriteRead + FIX : Test/TestReadWrite now iterates on all the file names + (instead of infinite loop) + ENH : Test/TestWriteRead now iterates on all the file names + +2004-06-28 Eric Boix + * Test/TestReadWrite.cxx: now uses all the images of gdcmData. + +2004-06-24 Jean-Pierre Roux + FIX : - now Write drops LUT Descriptors and LUTs (if any) + when SamplesPerPixel =3 + - now Write is no longer confused by + 'BitsAllocated = 12" and 'BitsStored=12" + - "UN" value representation Elements are now written correctly + (their legth is stored on 4 bytes -just like OB, OW, and SQ-) + ENH : - now gdcmHeader has its own Write methods + (in order to split the job that has not to be done + for gdcmDicomDir) + +2004-06-23 Eric Boix + * Test/PrintAllDocument.cxx: looping on files is now effective. It used to + loop on the same image until memory went out. + Note: this means we still have gobs of memory loss in PrintDocument + * src/gdcmDocument.cxx: fixes problem on parsing on file + gdcmData/16BitsJpegLosslessGrayScale.dcm. + +2004-06-24 Jean-Pierre Roux + FIX : Write - All the Sequences and Sequence Item are now written + as 'no length' stuff, and a Sequence Delimitor aor an Item Delimitor + is added a the end, when necessary. + - A lot of brain-damaged images, that were read correctly are + now written correctly + - length compatible BinEntry are now loaded correctly + (even for odd groups) + Note : only Explicit Value Representation was checked. + (question : is implicit VR really necessary for gdcm ?) + +2004-06-23 Eric Boix + * DEVELOPPER: added a proposition of coding style. + * src/gdcmDocEntry.h: removed every inline declaration (for test of + coding style). + +2004-06-23 Eric Boix + * gdcmDocEntry::PrintCommonPart() and ::WriteCommonPart() removed. + Use the gdcmDocEntry::Print() and Write() instead. + * src/gdcmDocument.cxx: bug fix. + +2004-06-22 Jean-Pierre Roux + FIX : gdcmDocument.cxx + - Now we do recognize the JpegLossLess format (there was a misstyping in + code 'beautyfication' :-( + - Now we automaticaticaly load the Luts, if any + +2004-06-22 Jean-Pierre Roux + In order : to write Sequences, whatever their imbrication level, + : to allow user to create his own Sequences + a lot of modif where necessary (adding, moving, or virtualising methods) + +WARNING : save your own sources *before* cvs up ! + + - gdcmBinEntry + ADD virtual void Write(FILE *fp, FileType filetype); + + - gdcmDocEntry + ADD virtual void Write(FILE *fp, FileType filetype); + ADD void gdcmDocEntry::WriteCommonPart(FILE *fp, FileType filetype); + + - gdcmDocEntrySet + ADD virtual void Write (FILE *fp, FileType filetype)=0; + ADD virtual gdcmDocEntry *GetDocEntryByNumber(guint16 group,guint16 element) = 0; + ADD gdcmDocEntry *GetDocEntryByName(std::string name); + ADD virtual std::string GetEntryByNumber(guint16 group,guint16 element) = 0; + ADD std::string GetEntryByName(TagName name); + ADD gdcmDictEntry *NewVirtualDictEntry(guint16 group, + guint16 element, + std::string vr = "unkn", + std::string fourth = "unkn", + std::string name = "unkn"); + ADD gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element); + ADD gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element); + ADD gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element); + ADD gdcmDocEntry *NewDocEntryByName (std::string Name); + ADD gdcmDictEntry *GetDictEntryByName (std::string Name); + ADD gdcmDictEntry *GetDictEntryByNumber(guint16, guint16); + REM virtual gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element)=0; + REM virtual gdcmDocEntry *NewDocEntryByName (std::string Name)=0; + + - gdcmDocument + ADD virtual bool WriteF(FileType type); // New stuff, with recursive exploration + ADD virtual std::string GetEntryByName (TagName tagName); + ADD virtual std::string GetEntryVRByName (TagName tagName); + REM virtual bool Write(FILE *, FileType); + REM virtual void WriteEntryTagVRLength(gdcmDocEntry *tag, + FILE *_fp, FileType type); + REM virtual void WriteEntryValue(gdcmDocEntry *tag,FILE *_fp,FileType type); + REM virtual bool WriteEntry(gdcmDocEntry *tag,FILE *_fp,FileType type); + REM virtual bool WriteEntries(FILE *_fp,FileType type); + REM virtual std::string GetEntryByName (std::string tagName); + REM virtual std::string GetEntryVRByName (std::string tagName); + REM gdcmDictEntry *GetDictEntryByName (std::string Name); + REM gdcmDictEntry *GetDictEntryByNumber(guint16, guint16); + REM gdcmDictEntry *NewVirtualDictEntry(guint16 group, + guint16 element, + std::string vr = "unkn", + std::string fourth = "unkn", + std::string name = "unkn"); + REM gdcmDocEntry *NewDocEntryByNumber(guint16 group, guint16 element); + REM gdcmDocEntry *NewDocEntryByName (std::string Name); + REM gdcmValEntry *NewValEntryByNumber(guint16 group, guint16 element); + REM gdcmBinEntry *NewBinEntryByNumber(guint16 group, guint16 element); + + - gdcmElementSet + ADD virtual void Write(FILE *fp, FileType filetype); + + - gdcmSeqEntry + ADD virtual void Write(FILE *fp,FileType filetype); + + - gdcmSQItem + ADD virtual void Write(FILE *fp, FileType filetype); + ADD virtual std::string GetEntryByNumber(guint16 group, guint16 element); + REM std::string GetEntryByNumber(guint16 group, guint16 element); + REM std::string GetEntryByName(TagName name); + + - gdcmValEntry + ADD virtual void gdcmValEntry::Write(FILE *fp, FileType filetype); + +2004-06-21 Eric Boix + * Test/TestWriteSimple.cxx: fix to gdcmHeader-gdcmHeaderHelper revamping. + The default constructor invoked by the line + gdcmHeader *f1 = new gdcmHeader( header ); + was gdcmHeader::gdcmHeader(bool) instead of the expected + gdcmHeader::gdcmHeader(std::string const &, bool = false, bool, bool). + Hence the parsing wasn't executed... See also below. + * src/gdcmHeader.h: the declaration of gdcmHeader::gdcmHeader(bool) + as explicit constructor didn't do the trick to fix the above problem. + Could anyone explain why ? + * src/gdcmBinEntry.cxx, gdcmValEntry.cxx: gdcmBinEntry::Print() now + properly calls gdcmValEntry::Print() (that was weed out from + code related to gdcmBinEntry). + +2004-06-20 Eric Boix + * In order to fix memory leaks: + - Test/TestWriteSimple.cxx: added cleaning of free store through + some delete calls. + - src/gdcmBinEntry.cxx: fix to avoid SegFault. + - src/gdcmDicomDir.[cxx|h]: fixed initialisation in constructor + gdcmDicomDir::gdcmDicomDir(bool) [either the constructor itself + (through the call to ::AddDicomDirMeta()) or the destructor + would crash when deleting uninitialized ::metaElems]. + - src/gdcmDictEntry.cxx: annotation of ununderstood memory leak. + - src/gdcmDocument.cxx: + -- ::~gdcmDocument() destructor now cleans up all dictionary entries + from dynamic stores. + -- ::ParseDES() misplaced deletion of temporary NewDocEntry + was causing memory leaks. + - src/gdcmSQItem.cxx: + -- ::~gdcmSQItem() dummy code cleaned (learned that deletion is + cleanly handled with polymophism: sorry but my milage is low). + -- ::SetEntryByNumber(string, guint16, guint16) now cleanly allocates + a gdcmValENtry, and makes no assumption on type (gdcmDocEntry, + gdcmSeqEntry vs gdcmValEntry) of existing entry (when present). + This avoids SegFaulting. + - src/gdcmSQItem.h: coding style. + * Conclusion: + - Test/TestWriteSimple still severely sucks. The output image content + (when $(GDCMDATA_HOME)/012345.002.050.dcm in input) is brain + damaged when displayed with vtkgdcmViewer. + - on memory leaks: TestWriteSimple leaks really less (see entry + of 2004-06-18 in Changelog file for the call to valgrind). + - on segfaults: ctest now passes all the tests but one (no more + segfaults). + * Erroneous leading white fix: + - src/gdcmDict.cxx: getline(from,xxx) doesn't remove the leading + white[s] (as opposed to from >> xxx, that removes it [them]. + - src/gdcmTS.cxx: ditto. + - gdcmPython/testSuite.py: dirty related kludge removed. + * src/*: remaining references to gdcmParser removed. + * src/*[cxx|h]: added copy[way]left header. + + +2004-06-18 Eric Boix + * In order to fix writing of dicom files: + - Test/TestWriteSimple.cxx: a simpler example of writing. + - Test/CMakeLists.txt changed accordingly. + - src/gdcmDocument.cxx: + -- The destructor now recursilvely removes potential sequences. + -- Bug fix in ::IsJPEG2000() + -- ::ReplaceOrCreateByNumber(std::string, guint16, guint16) + now handles promotion of gdcmDocEntry to gdcmValEntry in a cleaner + manner. + -- ::GetValEntryByNumber(guint16, guint16) now defined (as opposed + to only declared) and build on top of + ::GetDocEntryByNumber(guint16, guint16). + -- ::SetEntryByNumber() now uses GetValEntryByNumber(group, element) + - src/gdcmElementSet.[h|cxx]: added ::RemoveEntry(gdcmDocEntry *) + for usage in destructor and treatement of promotion in + ::ReplaceOrCreateByNumber(). + - src/gdcmSQItem.cxx: destructor should better handle his job. + Test/TestWriteSimple now runs (or at least it DOES something). + * We can now start hutting memory links. A good starting point is: + valgrind -q --skin=memcheck --leak-check=yes --leak-resolution=high + --num-callers=100 --show-reachable=yes gdcmTests TestWriteSimple + $(GDCMDATA_HOME)/012345.002.050.dcm foo.dcm + +2004-06-18 Eric Boix + * Valgrind note: after Mathieu Malaterre teached me how to read + the valgrind FAQ ;-] (see http://valgrind.kde.org/faq.html), I + learned that: + Using gcc, you can force the STL to use malloc and to free memory as + soon as possible by globally disabling memory caching. + With 3.2.2 and later, you should export the environment variable + GLIBCPP_FORCE_NEW before running your program. + By setting GLIBCPP_FORCE_NEW, STL related memory leak messages of gdcm + simply vanish (it is still not clear to me, whether this means that + STL std::string leaks or if valgrind believes it leaks...). + * Fixing of SegFault of Test/makeDicomDir (as shown by ctest or by + running bin/gdcmTests makeDicomDir): + - src/gdcmDicomDir.cxx: dynamic casting used + clean up. + - Test/makeDicomDir.cxx now properly traps empty lists and returns + with 1. + NOW, makeDicomDir cleanly fails (in ctest terminology) instead of + SegFaulting (I drowned in DicomDir related code when trying to + understand why the list is empty...). + * src/gdcmDocument.h: first BSD license header try. + * Doc/License.txt added. + +2004-06-15 Eric Boix + * src/gdcmDocument.[h|cxx]: + - Clean up of the Transfer related predicates. They are now all based + on new method isGivenTransferSyntax, that (should) handle properly + the padding problem. + - general clean up, simplification, and coding style. + - Specific clean up of Parse7FE0() (umproperly named actually). + * gdcmPython/testSuite.py: an odd temporary kludge introduced. + +2004-06-14 Jean-Pierre Roux + * gdcmSeqEntry.cxx + - fix the display of Sequence Delimitor (SQDepthLevel pb) + - fix the display of SQItem ordinal number + - add the GetSQItemByOrdinalNumber method + - remove some useless never written private methods + +2004-06-14 Jean-Pierre Roux + * gdcmBinEntry.cxx + - adding a constructor taking a gdcmDocEntry as an input param + - ReplaceOrCreateByNumber now returns : + a gdcmBinEntry * if a Binary (void *) value is passed as a param + a gdcmValEntry * if a string value is passed as a param + * dcmDocument.cxx + - SetEntryByNumber now allows setting gdcmValEntry or gdcmBinEntry, + according to the param type (no longer sets a gdcmDocEntry) + - GetValEntryByNumber, GetBinEntryByNumber added + - NewValEntryByNumber and NewBinEntryByNumber added + * gdcmFile.cxx + - Pixel Data are now linked to the (7fe0,0010) elements, after reading + * gdcmSQItem.h + - GetSQItemNumber and SetSQItemNumber added, to provide + a (relative) Item identier inside a given Sequence + \warning : some pb remaining around this number + will be solved asap + - AddEntry now takes the Item Number as a param + * gdcmValEntry.cxx + - adding a constructor taking a gdcmDocEntry as an input param + +2004-06-14 Eric Boix + * Memory leak hunt with the following command: + valgrind --leak-check=yes --leak-resolution=high --num-callers=40 + --show-reachable=yes gdcmTests PrintDocument + It looks like many (all?) leaks are due to the STL (or a bad usage + of the STL. The lines producing the leaks now have a comment with + a "MEMORY LEAK" tag: you can retrieve them with + grep "MEMORY LEAK" src/* + Here are two typical examples which I can't help fixing: + ----- + #include + int main() { + std::string name; + char * test = "babo"; + name = test; //// <--- valgrind detects 960 bytes lost in + //// call to std::string::operator=(char const*) + name.clear(); //// Doesn't help ! + return 0; + } + ----- + #include + #include + int main() { + std::string line; + std::cout << "Type a bunch of characters followed by RETURN: "; + getline(std::cin, line); //// <--- valgrind dectects a loss + //// of 1320 bytes in call to + /// std::basic_istream<>& std::getline<> + return 0; + } + ----- + + 2004-06-10 Eric Boix * src/gdcmHeader.[cxx|h]: - - Predicates on the Transfer syntax (of the form Is[JPEF|RLE]*) + - Predicates on the Transfer syntax (of the form Is[JPEG|RLE]*) and related, moved away to gdcmDocument. - Accessors (on the form [Get|Set]Entry*) set up to expose publicly the corresponding protected accessors of inherited class @@ -13,7 +333,7 @@ * src/gdcmDocument.h: - gdcmFile is now a friend class (in order to take into account the changes to gdcmHeader.h). - - Predicates on the Transfer syntax (of the form Is[JPEF|RLE]*) added + - Predicates on the Transfer syntax (of the form Is[JPEG|RLE]*) added (see changes to gdcmHeader.h). - Accessors (reading on the form GetEntry*) are now public. - Clean up of undefined or unused methods. @@ -128,12 +448,12 @@ 2. Tests as mentionned smarter 3. Some clean up 4. Add a new method in gdcmDict that return the PubDict by name - this is interesting for 3rd party lib like ITK, - where we could set the institution name / patient name... + this is interesting for 3rd party lib like ITK, + where we could set the institution name / patient name... * ENH: 1. Now the test suite is working for real 2. All binaries are now output in the gdcm-bin directory - (this was not true before) + (this was not true before) 2004-04-28 Jean-Pierre Roux * ENH add the provisional gdcmHeader::SQDepthLevel to allow