X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src%2FgdcmJPEGFragment.cxx;h=709d4a54c07727acc22b035c0f3bbb17dad6bf3d;hb=c2975ffb8c79fa4d745368d8d1c317c5a313dd0a;hp=188f82266e7f7b2187468947d888e65a690aa5c5;hpb=fefb49a4c17b2c2134cf23edf1ecf230c5e309d1;p=gdcm.git diff --git a/src/gdcmJPEGFragment.cxx b/src/gdcmJPEGFragment.cxx index 188f8226..709d4a54 100644 --- a/src/gdcmJPEGFragment.cxx +++ b/src/gdcmJPEGFragment.cxx @@ -3,8 +3,8 @@ Program: gdcm Module: $RCSfile: gdcmJPEGFragment.cxx,v $ Language: C++ - Date: $Date: 2005/01/17 03:05:55 $ - Version: $Revision: 1.4 $ + Date: $Date: 2005/11/28 17:24:21 $ + Version: $Revision: 1.17 $ Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de l'Image). All rights reserved. See Doc/License.txt or @@ -21,30 +21,17 @@ namespace gdcm { - +//------------------------------------------------------------------------- // For JPEG 2000, body in file gdcmJpeg2000.cxx -bool gdcm_read_JPEG2000_file (std::ifstream* fp, void* image_buffer); - -// For JPEG 8 Bits, body in file gdcmJpeg8.cxx -bool gdcm_read_JPEG_file8 (std::ifstream *fp, void *image_buffer); -bool gdcm_read_JPEG_memory8 (const JOCTET *buffer, const size_t buflen, - void *image_buffer, - size_t *howManyRead, size_t *howManyWritten); -// -// For JPEG 12 Bits, body in file gdcmJpeg12.cxx -bool gdcm_read_JPEG_file12 (std::ifstream *fp, void *image_buffer); -bool gdcm_read_JPEG_memory12 (const JOCTET *buffer, const size_t buflen, - void *image_buffer, - size_t *howManyRead, size_t *howManyWritten); +// Not yet made +bool gdcm_read_JPEG2000_file (std::ifstream *fp, void *image_buffer); -// For JPEG 16 Bits, body in file gdcmJpeg16.cxx -// Beware this is misleading there is no 16bits DCT algorithm, only -// jpeg lossless compression exist in 16bits. -bool gdcm_read_JPEG_file16 (std::ifstream *fp, void *image_buffer); -bool gdcm_read_JPEG_memory16 (const JOCTET *buffer, const size_t buflen, - void* image_buffer, - size_t *howManyRead, size_t *howManyWritten); +// For JPEG-LS, body in file gdcmJpegLS.cxx +// Not yet made +bool gdcm_read_JPEGLS_file (std::ifstream *fp, void *image_buffer); +//------------------------------------------------------------------------- +// Constructor / Destructor /** * \brief Default constructor. */ @@ -52,156 +39,74 @@ JPEGFragment::JPEGFragment() { Offset = 0; Length = 0; -} -/** - * \brief Print self. - * @param os Stream to print to. - * @param indent Indentation string to be prepended during printing. - */ -void JPEGFragment::Print( std::ostream &os, std::string indent ) -{ - os << indent - << "JPEG fragment: offset : " << Offset - << " length : " << Length - << std::endl; + pImage = 0; + } +//----------------------------------------------------------------------------- +// Public /** * \brief Decompress 8bits JPEG Fragment + * @param fp ifstream to write to * @param buffer output (data decompress) * @param nBits 8/12 or 16 bits jpeg + * @param statesuspension state suspension */ -void JPEGFragment::DecompressJPEGFramesFromFile(std::ifstream *fp, uint8_t *buffer, int nBits) +void JPEGFragment::DecompressJPEGFramesFromFile(std::ifstream *fp, + uint8_t *buffer, int nBits, + int &statesuspension) { // First thing need to reset file to proper position: fp->seekg( Offset, std::ios::beg); if ( nBits == 8 ) { - // JPEG Lossy : call to IJG 6b - if ( ! gdcm_read_JPEG_file8( fp, buffer) ) - { - //return false; - } + // JPEG Lossy : call to IJG 6b - 8 bits + ReadJPEGFile8( fp, buffer, statesuspension); } else if ( nBits <= 12 ) { - // Reading Fragment pixels - if ( ! gdcm_read_JPEG_file12 ( fp, buffer) ) - { - //return false; - } + // JPEG Lossy : call to IJG 6b - 12 bits + ReadJPEGFile12 ( fp, buffer, statesuspension); } else if ( nBits <= 16 ) { - // Reading Fragment pixels - if ( ! gdcm_read_JPEG_file16 ( fp, buffer) ) - { - //return false; - } + // JPEG Lossy : call to IJG 6b - 16 bits + ReadJPEGFile16 ( fp, buffer, statesuspension); //gdcmAssertMacro( IsJPEGLossless ); } else { + // FIXME : only the bits number is checked, + // NOT the compression method + // other JPEG lossy not supported gdcmErrorMacro( "Unknown jpeg lossy compression "); - //return false; } - } -void JPEGFragment::DecompressJPEGSingleFrameFragmentsFromFile(JOCTET *buffer, size_t totalLength, uint8_t* raw, int nBits) -{ - size_t howManyRead = 0; - size_t howManyWritten = 0; - - if ( nBits == 8) - { - if ( ! gdcm_read_JPEG_memory8( buffer, totalLength, raw, - &howManyRead, &howManyWritten ) ) - { - gdcmErrorMacro( "Failed to read jpeg8 "); - delete [] buffer; - //return false; - } - } - else if ( nBits <= 12) - { - if ( ! gdcm_read_JPEG_memory12( buffer, totalLength, raw, - &howManyRead, &howManyWritten ) ) - { - gdcmErrorMacro( "Failed to read jpeg12 "); - delete [] buffer; - //return false; - } - } - else if ( nBits <= 16) - { - - if ( ! gdcm_read_JPEG_memory16( buffer, totalLength, raw, - &howManyRead, &howManyWritten ) ) - { - gdcmErrorMacro( "Failed to read jpeg16 "); - delete [] buffer; - //return false; - } - } - else - { - // other JPEG lossy not supported - gdcmErrorMacro( "Unsupported jpeg lossy compression "); - delete [] buffer; - //return false; - } +//----------------------------------------------------------------------------- +// Protected -} +//----------------------------------------------------------------------------- +// Private -void JPEGFragment::DecompressJPEGFragmentedFramesFromFile(JOCTET *buffer, uint8_t* raw, int nBits, size_t &howManyRead, size_t &howManyWritten, size_t totalLength) +//----------------------------------------------------------------------------- +// Print +/** + * \brief Print self. + * @param os Stream to print to. + * @param indent Indentation string to be prepended during printing. + */ +void JPEGFragment::Print( std::ostream &os, std::string const &indent ) { - if ( nBits == 8 ) - { - if ( ! gdcm_read_JPEG_memory8( buffer+howManyRead, totalLength-howManyRead, - raw+howManyWritten, - &howManyRead, &howManyWritten ) ) - { - gdcmErrorMacro( "Failed to read jpeg8"); - //delete [] buffer; - //return false; - } - } - else if ( nBits <= 12 ) - { - - if ( ! gdcm_read_JPEG_memory12( buffer+howManyRead, totalLength-howManyRead, - raw+howManyWritten, - &howManyRead, &howManyWritten ) ) - { - gdcmErrorMacro( "Failed to read jpeg12"); - //delete [] buffer; - //return false; - } - } - else if ( nBits <= 16 ) - { - - if ( ! gdcm_read_JPEG_memory16( buffer+howManyRead, totalLength-howManyRead, - raw+howManyWritten, - &howManyRead, &howManyWritten ) ) - { - gdcmErrorMacro( "Failed to read jpeg16 "); - //delete [] buffer; - //return false; - } - } - else - { - // other JPEG lossy not supported - gdcmErrorMacro( "Unsupported jpeg lossy compression "); - //delete [] buffer; - //return false; - } + os << indent + << "JPEG fragment: offset : " << Offset + << " length : " << Length + << std::endl; } +//----------------------------------------------------------------------------- } // end namespace gdcm