* src/gdcmCommon.h, gdcmDict.cxx, gdcmTS.cxx : bug fix for msvc6 compilation
* src/gdcmDebug.[h|cxx] : bug fix for msvc6 compilation. Replace the dbg
variable (instance of gdcmDebug) by a definition macro, and the instance
is now in static in the gdcmDebug class
* src/gdcmSQItem.h : (FIXME) remove an undefined method
* Test/PrintAllDocument.cxx : bug fix in the result of the test
-- BeNours
* WARNING: ctest now depends more tightly on gdcmData. You should
check out gdcmData properly for things to run smoothly...
* src/gdcmDocument.cxx MAX_SIZE_LOAD_ELEMENT_VALUE is set back to 0xfff
(4096) for "ctest -R TestAllEntryVerify" to be able to run (i.e.
we need the pixels not be loaded in order to use the ValEntry
that displays position and size).
* Test/TestAllEntryVerify.cxx a new low level test now seems fair.
This is a C++ based equivalent of gdcmPython/testSuite.py that should
be deprecated. If you have any doubts about the advantages of a
modern scripting language (read Python) versus grass root C++ (i.e.
without lex + yacc, because of gdcm commitement to MS-VC++, sighhh),
I suggest you compare TestAllEntryVerify.cxx (639 lines, without the
reference file gdcmData/TestAllEntryVerifyReference.txt) and testSuite.py.
Anyhow, consider documenting the gdcmData images in
gdcmData/TestAllEntryVerifyReference.txt (and please run ctest before
commiting changes).
* Test/CMakeLists.txt:
- now uses TestAllEntryVerify.cxx
- specific comments on oldACR00001.ima (now renamed in gdcmData
to SIEMENS_GBS_III-16-ACR_NEMA_1.acr) moved away to
gdcmData/TestAllEntryVerifyReference.txt
* TODO updated.
- guint16 and guint32 removed. Use ISO C uint16_t, uint32_t instead.
- TagKey renamed to gdcmTagKey (for external usage)
- VRKey renamed to gdcmVRKey (for external usage)
- removal of typedef duplication.
- Removed all unecessary inline keyword from class inline definitions.
- Some method|function(void) declarations replaced with method|function().
* src/jpeg/libijg12/jdhuff12.c:
- printf polluting ctest removed.
- TAB removal for comminting
* Test:
- TestAllReadCompareDicom.cxx: added a test that compares all the
images in gdcmDataImages.h with corresponding images in
gdcmData/BaselineDicom/. When baseline images are not present
this test creates them.
Note: we need to validate each reference image, but before that
I'd like to rename them with a more explicit name...
- CMakeLists.txt: changed accordingly.
* Example/*.cxx: examples now only include gdcm.h (as opposed to
including each header needed).
* Test/*.cxx and Example/*.cxx: moved some examples away from the
test suite to the Example directory. Are concerned:
- PrintHeader.cxx
- TestDcm2Acr.cxx
- TestFindTags.cxx
- TestWrite.cxx was
- TestWriteSimple.cxx
* Test/CMakeLists.txt: added some comments on reasons for black listing
image gdcmData/oldACR00001.ima
frog [Wed, 30 Jun 2004 00:10:58 +0000 (00:10 +0000)]
* Test/CmakeList.txt: removed the following from black list (to be coherent
with removal from gdcmData):
- gdcm-MR-PHILIPS-16-Multi-Seq.fixed.dcm
- gdcm-MR-PHILIPS-16.dcm
- US.3405.1.dcm
Added the following because after last cvs update, they cause
ctest -R TestReadWriteReadCompare
to segfault:
- gdcm-MR-SIEMENS-16-1.acr
- oldACR00001.ima
frog [Tue, 29 Jun 2004 23:43:19 +0000 (23:43 +0000)]
* Test/TestReadWriteReadCompare.cxx was properly written (with a call
to gdcmFile::SetImageData()) BUT since gdcmFile is brain damaged (see
new comments in this file) we temporarily (sigh) move to a weaker
form of test...
* Test/CmakeList.txt: with the change to Test/TestReadWriteReadCompare.cxx
we don't need to black list the following images anymore:
- 8BitsUncompressedColor.dcm
- OT-PAL-8-face.dcm
- US-PAL-8-10x-echo.dcm
* src/gdcmDocument.[h|cxx]: RE-Reverting to version 1.42 with the proper
fixes and the beautified code ;-)
This fixes the bug introduced in version 1.42 (when beautifying)
that made the parsing of 8BitsRunLengthColor.dcm unproper.
Note: ctest was blind to this bug (this means we need to still
improve the test suite). The bug could be detected by using
gdcmbin/bin/PrintDocument $GDCM_DATA/8BitsRunLengthColor.dcm
or by using
gdcmbin/bin/ReadWrite $GDCM_DATA/8BitsRunLengthColor.dcm
and by displaying the (garbage) produced file temp.XDCM...
frog [Tue, 29 Jun 2004 14:00:37 +0000 (14:00 +0000)]
* 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
frog [Tue, 29 Jun 2004 11:27:13 +0000 (11:27 +0000)]
* 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).
jpr [Mon, 28 Jun 2004 09:30:58 +0000 (09:30 +0000)]
- now Write drops LUT Descriptors and LUTs (if any) when SamplesPerPixel =3
- now Write is no longer confused by 'BitsAllocated = 12" and 'BitsStored=12"
malaterre [Sat, 26 Jun 2004 04:09:32 +0000 (04:09 +0000)]
ENH: Some cosmetic cleanup of gdcmFile, main changes are: lgrTotal -> ImageDataSize / lgrTotaleRaw -> ImageDataSizeRaw, it matches then there accessors (simple et de bon gout in french).
* I also marked some lines as dangerous (mem leaks), and a comment for 12 bits images
* Added conversion table in DEVELOPPERS
* Also untabify, checkTabs is working :P
malaterre [Fri, 25 Jun 2004 20:48:25 +0000 (20:48 +0000)]
ENH: * 3'tabify
* Fix bug where gdcmHeader was passed a const char*
* use const_iterator where possible
* made some method const correct
* moved a method in class (inline)
...hopefully should be more readable
jpr [Fri, 25 Jun 2004 15:42:17 +0000 (15:42 +0000)]
Add a 'test' - reads an image
- writes it as an uncompressed, (RGB if necessary), Explicit VR
- reads it
- compares the PixelData Length and the Pixels.
- The, *we* cry :
frog [Fri, 25 Jun 2004 12:56:38 +0000 (12:56 +0000)]
* 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.
malaterre [Fri, 25 Jun 2004 03:06:37 +0000 (03:06 +0000)]
EMH: *Add PrintAllDocument, dog slow right now
*Moved PrintDocument as example instead
* vtkGdcmReader was free'ing instead of delete[]'ing
* 3'tabulify ShowDicom / PrintAllDocument
* Minor comments for -W -Wall compilation
jpr [Thu, 24 Jun 2004 18:03:14 +0000 (18:03 +0000)]
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 ?)
jpr [Wed, 23 Jun 2004 09:30:22 +0000 (09:30 +0000)]
gdcmDocument.cxx
- Now we do recognize the JpegLossLess format (there was a misstyping in
code 'beautyfication' :-(
- Now we automaticaticaly load the Luts, if any
jpr [Tue, 22 Jun 2004 13:47:33 +0000 (13:47 +0000)]
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)
frog [Mon, 21 Jun 2004 12:38:28 +0000 (12:38 +0000)]
* src/gdcmBinEntry.cxx, gdcmValEntry.cxx: gdcmBinEntry::Print() now
properly calls gdcmValEntry::Print() (that was weed out from
code related to gdcmBinEntry).
frog [Mon, 21 Jun 2004 08:47:13 +0000 (08:47 +0000)]
* 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 ? --- Frog
malaterre [Mon, 21 Jun 2004 04:43:01 +0000 (04:43 +0000)]
ENH: Ok second chunk of patch, tests seems to go smoothly
1. Compile with CMAKE_CXX_FLAGS (need to turn advanced ON) = -W -Wall -Werror
2. Add two virtual to destructor, with a bit of luck these were the leaks reported by frog
malaterre [Mon, 21 Jun 2004 04:18:23 +0000 (04:18 +0000)]
ENH:First chunk of patch:
1. Get rid of gdcmHeaderHelper, the class was only gdcmHeader with nice default values, no big deal
2. Left a legacy mode where you can still use the class gdcmHeaderHelper
3. Some minor clean up, but all the tests are passing
frog [Sun, 20 Jun 2004 18:08:46 +0000 (18:08 +0000)]
* 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. --- Frog
frog [Sat, 19 Jun 2004 23:51:03 +0000 (23:51 +0000)]
* 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).
frog [Fri, 18 Jun 2004 12:26:53 +0000 (12:26 +0000)]
* 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
frog [Fri, 18 Jun 2004 00:11:44 +0000 (00:11 +0000)]
* 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. --- Frog
frog [Tue, 15 Jun 2004 13:10:18 +0000 (13:10 +0000)]
* 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.
jpr [Tue, 15 Jun 2004 10:06:10 +0000 (10:06 +0000)]
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
jpr [Tue, 15 Jun 2004 08:41:09 +0000 (08:41 +0000)]
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
gdcmDocument.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