]> Creatis software - gdcm.git/blobdiff - src/gdcmPixelReadConvert.cxx
ENH: Ok dashboard looks clean enough turning MPEG on
[gdcm.git] / src / gdcmPixelReadConvert.cxx
index 19317dbfac06611cf78495a6fc0e7955d99227d5..bb8d4e7f4fe83e06f6c5e95a2b0cd860c15360c8 100644 (file)
@@ -3,8 +3,8 @@
   Program:   gdcm
   Module:    $RCSfile: gdcmPixelReadConvert.cxx,v $
   Language:  C++
-  Date:      $Date: 2005/10/26 07:15:31 $
-  Version:   $Revision: 1.90 $
+  Date:      $Date: 2005/11/08 16:35:54 $
+  Version:   $Revision: 1.97 $
                                                                                 
   Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
   l'Image). All rights reserved. See Doc/License.txt or
@@ -31,7 +31,7 @@
 namespace gdcm
 {
 
-//bool ReadMPEGFile (std::ifstream *fp, void *image_buffer, size_t lenght);
+bool ReadMPEGFile (std::ifstream *fp, char *inputdata, size_t lenght); 
 bool gdcm_read_JPEG2000_file (void* raw, 
                               char *inputdata, size_t inputlength);
 //-----------------------------------------------------------------------------
@@ -114,7 +114,7 @@ void PixelReadConvert::GrabInformationsFromFile( File *file )
    //PixelSize       = file->GetPixelSize();  Useless
    PixelSign       = file->IsSignedPixelData();
    SwapCode        = file->GetSwapCode();
-   
    if (! file->IsDicomV3() )  // Should be ACR-NEMA file
    {
       IsRaw = true;
@@ -126,35 +126,40 @@ void PixelReadConvert::GrabInformationsFromFile( File *file )
    }
    else
    {
-      std::string ts  = file->GetTransferSyntax();
+      std::string ts = file->GetTransferSyntax();
 
-   
-//   if ( ts == GDCM_UNKNOWN )
-//   {
-//     gdcmErrorMacro( "Could someone tell me how in the world could this happen !" );
-// -->
-//--> on ALL acr-nema images ! JPRx
-//-->
-//     abort(); // DO NOT REMOVE.  WE SHOULD NEVER READ SUCH IMAGE EVER (only gdcm can write such broekn dicom file)
-//   }
-
-      IsRaw =
-           ( ! file->IsDicomV3() )  // Should be ACR-NEMA file
-        || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRLittleEndian
-        || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRBigEndianPrivateGE
-        || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRLittleEndian
-        || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRBigEndian
-        || Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::DeflatedExplicitVRLittleEndian;
-     
+      IsRaw = false;
+      while (true)
+      {
+         // mind the order : check the most usual first.
+         if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRLittleEndian)         break;
+         if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRLittleEndian )        break;
+         if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ExplicitVRBigEndian)            break;
+         if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRBigEndianPrivateGE)   break;
+         if( IsRaw = Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::DeflatedExplicitVRLittleEndian) break;
+         break;
+      }
+          
       IsPrivateGETransferSyntax = 
                 ( Global::GetTS()->GetSpecialTransferSyntax(ts) == TS::ImplicitVRBigEndianPrivateGE );
 
-      IsMPEG          = Global::GetTS()->IsMPEG(ts);
-      IsJPEG2000      = Global::GetTS()->IsJPEG2000(ts);
-      IsJPEGLS        = Global::GetTS()->IsJPEGLS(ts);
-      IsJPEGLossy     = Global::GetTS()->IsJPEGLossy(ts);
-      IsJPEGLossless  = Global::GetTS()->IsJPEGLossless(ts);
-      IsRLELossless   = Global::GetTS()->IsRLELossless(ts);
+      IsMPEG =  IsJPEG2000 =  IsJPEGLS =  IsJPEGLossy =  IsJPEGLossless = IsRLELossless = false;  
+
+      if (!IsRaw)
+      {     
+         while(true)
+         {
+            // mind the order : check the most usual first.
+            if( IsJPEGLossy     = Global::GetTS()->IsJPEGLossy(ts) )    break;
+            if( IsJPEGLossless  = Global::GetTS()->IsJPEGLossless(ts) ) break;
+            if( IsRLELossless   = Global::GetTS()->IsRLELossless(ts) )  break;
+            if( IsJPEG2000      = Global::GetTS()->IsJPEG2000(ts) )     break;
+            if( IsMPEG          = Global::GetTS()->IsMPEG(ts) )         break;
+            if( IsJPEGLS        = Global::GetTS()->IsJPEGLS(ts) )       break;
+            gdcmWarningMacro("Unexepected Transfer Syntax :[" << ts << "]");
+            break;
+         } 
+      }
    }
 
    PixelOffset     = file->GetPixelOffset();
@@ -179,7 +184,7 @@ void PixelReadConvert::GrabInformationsFromFile( File *file )
       LutGreenDescriptor = file->GetEntryString( 0x0028, 0x1102 );
       LutBlueDescriptor  = file->GetEntryString( 0x0028, 0x1103 );
    
-      // The following comment is probabely meaningless, since LUT are *always*
+      // FIXME : The following comment is probabely meaningless, since LUT are *always*
       // loaded at parsing time, whatever their length is.
          
       // Depending on the value of Document::MAX_SIZE_LOAD_ELEMENT_VALUE
@@ -296,7 +301,7 @@ bool PixelReadConvert::ReadAndDecompressPixelData( std::ifstream *fp )
       //gdcmWarningMacro( "Sorry, MPEG not yet taken into account" );
       //return false;
       // fp has already been seek to start of mpeg
-      //ReadMPEGFile(fp, Raw, PixelDataLength); 
+      ReadMPEGFile(fp, (char*)Raw, PixelDataLength); 
       return true;
    }
    else
@@ -821,8 +826,6 @@ void PixelReadConvert::ConvertSwapZone()
    // 'ImplicitVR BigEndian PrivateGE Transfer Syntax', then GDCM needs to switch
    // the byte swapping code when entering the pixel data.
 
-/* //Let me check something.
-   //I wait for the Dashboard !   
    if ( IsPrivateGETransferSyntax )
    {
       // PrivateGETransferSyntax only exists for 'true' Dicom images
@@ -837,7 +840,7 @@ void PixelReadConvert::ConvertSwapZone()
             break;
       }  
    }
-*/   
+  
    if ( BitsAllocated == 16 )
    {
       uint16_t *im16 = (uint16_t*)Raw;
@@ -1238,13 +1241,13 @@ void PixelReadConvert::ConvertHandleColor()
    // - [Planar 1] AND [Photo C] handled with ConvertYcBcRPlanesToRGBPixels()
    // - [Planar 2] OR  [Photo D] requires LUT intervention.
 
-   gdcmWarningMacro("--> ConvertHandleColor"
+   gdcmDebugMacro("--> ConvertHandleColor "
                     << "Planar Configuration " << PlanarConfiguration );
 
    if ( ! IsRawRGB() )
    {
       // [Planar 2] OR  [Photo D]: LUT intervention done outside
-      gdcmWarningMacro("--> RawRGB : LUT intervention done outside");
+      gdcmDebugMacro("--> RawRGB : LUT intervention done outside");
       return;
    }