camerauis/cameraapp/generic/src/cameracontroller/camimagedecoder.cpp
branchRCL_3
changeset 12 8c55c525d5d7
parent 0 1ddebce53859
child 20 38fb6f7eacd5
equal deleted inserted replaced
11:792dfc98fb3b 12:8c55c525d5d7
    14 * Description:  Implementation of Camera image decoder
    14 * Description:  Implementation of Camera image decoder
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 
    19 
       
    20 
       
    21 #include <imageconversion.h>
    19 #include <imageconversion.h>
    22 #include <ExifRead.h>
    20 #include <ExifRead.h>
    23 #include <ecam.h> // MCameraBuffer
    21 #include <ecam.h> // MCameraBuffer
    24 
    22 
    25 #include <eikenv.h>
    23 #include <eikenv.h>
       
    24 #include <SvgCodecImageConstants.hrh>
    26 
    25 
    27 #include "camlogging.h"
    26 #include "camlogging.h"
    28 #include "camfilesaveutility.h"
    27 #include "camfilesaveutility.h"
    29 #include "cambuffershare.h"
    28 #include "cambuffershare.h"
    30 
    29 
    77   Cancel();
    76   Cancel();
    78 
    77 
    79   delete iDecoder;
    78   delete iDecoder;
    80 
    79 
    81   SetImageData( NULL );
    80   SetImageData( NULL );
    82  if(iDecodedBitmap)
    81   if(iDecodedBitmap)
    83   	{
    82   	{
    84   	delete iDecodedBitmap;
    83   	delete iDecodedBitmap;
    85   	iDecodedBitmap = NULL;
    84   	iDecodedBitmap = NULL;
    86   	}
    85   	}
       
    86   if ( iDecodedMask )
       
    87      {
       
    88      delete iDecodedMask;
       
    89      iDecodedMask = NULL;
       
    90      }
       
    91  
    87   iFs.Close();
    92   iFs.Close();
    88   PRINT( _L("Camera <= ~CCamImageDecoder") );
    93   PRINT( _L("Camera <= ~CCamImageDecoder") );
    89   }
    94   }
    90 
    95 
    91 // ===========================================================================
    96 // ===========================================================================
   148 
   153 
   149   PRINT( _L("Camera <= CCamImageDecoder::StartConversionL") );
   154   PRINT( _L("Camera <= CCamImageDecoder::StartConversionL") );
   150   }
   155   }
   151 
   156 
   152 
   157 
       
   158 void CCamImageDecoder::StartIconConversionL( TDesC* aFilePath )
       
   159   {
       
   160   PRINT( _L("Camera => CCamImageDecoder::StartConversionL 2") );
       
   161 
       
   162   // Data for CImageDecoder must be available throughout the conversion.
       
   163   // Need to stop any outstanding operation before deleting the descriptor.
       
   164   Cancel();
       
   165 
       
   166   PRINT( _L("Camera <> CCamImageDecoder: Creating decoder..") );
       
   167 
       
   168   delete iDecoder;
       
   169   iDecoder = NULL;
       
   170   
       
   171   CImageDecoder::TOptions options = (CImageDecoder::TOptions) (CImageDecoder::EOptionNoDither );
       
   172   iDecoder = CImageDecoder::FileNewL( iFs, *aFilePath , options, KImageTypeSVGUid );
       
   173 
       
   174   if( iDecoder->FrameCount() > 0 )
       
   175     {
       
   176     const TFrameInfo& info( iDecoder->FrameInfo() );
       
   177 
       
   178 #ifdef _DEBUG   
       
   179     TSize size = info.iOverallSizeInPixels;
       
   180     PRINT2( _L("Camera <> CCamImageDecoder: Bmp size(%d,%d)"), size.iWidth, size.iHeight );
       
   181     PRINT1( _L("Camera <> CCamImageDecoder: Bmp dispmode(%d)"), info.iFrameDisplayMode );
       
   182 #endif
       
   183 
       
   184     PRINT( _L("Camera <> CCamImageDecoder: Create bitmap for snapshot..") );
       
   185     if( !iDecodedBitmap ) iDecodedBitmap = new (ELeave) CFbsBitmap;
       
   186     else                  iDecodedBitmap->Reset();
       
   187     
       
   188     if( !iDecodedMask ) iDecodedMask = new (ELeave) CFbsBitmap;
       
   189     else                iDecodedMask->Reset();
       
   190 
       
   191     TRAPD ( createError, 
       
   192             {
       
   193             iDecodedBitmap->Create( info.iOverallSizeInPixels, info.iFrameDisplayMode );
       
   194             iDecodedMask->Create( info.iOverallSizeInPixels, EGray256 );
       
   195             } );
       
   196     if( KErrNone != createError )
       
   197       {
       
   198       delete iDecodedBitmap;
       
   199       iDecodedBitmap = NULL;
       
   200       delete iDecodedMask;
       
   201       iDecodedMask = NULL;
       
   202       User::Leave( createError );
       
   203       }
       
   204 
       
   205     PRINT( _L("Camera <> CCamImageDecoder: start conversion..") );
       
   206     iRetryCounter = 0;
       
   207     iDecoder->Convert( &iStatus, *iDecodedBitmap, *iDecodedMask, 0 );
       
   208     SetActive();
       
   209     }
       
   210   else
       
   211     {
       
   212     PRINT( _L("Camera <> CCamImageDecoder: No frame provided, leave..") );
       
   213     User::Leave( KErrNotFound );    
       
   214     }
       
   215 
       
   216   PRINT( _L("Camera <= CCamImageDecoder::StartConversionL 2") );
       
   217   }
       
   218 
   153 // ---------------------------------------------------------------------------
   219 // ---------------------------------------------------------------------------
   154 // ---------------------------------------------------------------------------
   220 // ---------------------------------------------------------------------------
   155 //
   221 //
   156 TDesC8*
   222 TDesC8*
   157 CCamImageDecoder::GetImageDataL()
   223 CCamImageDecoder::GetImageDataL()
   251     case KErrNone :
   317     case KErrNone :
   252       {
   318       {
   253       // CImageDecoder has finished using the data,
   319       // CImageDecoder has finished using the data,
   254       // so we are able to free it.
   320       // so we are able to free it.
   255       SetImageData( NULL );
   321       SetImageData( NULL );
   256       iObserver.ImageDecoded( iStatus.Int(), iDecodedBitmap );
   322       iObserver.ImageDecoded( iStatus.Int(), iDecodedBitmap, iDecodedMask );
   257       break;
   323       break;
   258       }
   324       }
   259     case KErrUnderflow :
   325     case KErrUnderflow :
   260       {
   326       {
   261       // Decoder did not have enough data to convert.
   327       // Decoder did not have enough data to convert.
   296   PRINT1( _L("Camera => CCamImageDecoder::RunError(%d)"), aError );
   362   PRINT1( _L("Camera => CCamImageDecoder::RunError(%d)"), aError );
   297 
   363 
   298   SetImageData( NULL );
   364   SetImageData( NULL );
   299   // Leave has occurred in RunL.
   365   // Leave has occurred in RunL.
   300   // Notify observer with error.
   366   // Notify observer with error.
   301   iObserver.ImageDecoded( aError, NULL );
   367   iObserver.ImageDecoded( aError, NULL, NULL );
   302 
   368 
   303   PRINT( _L("Camera <= CCamImageDecoder::RunError") );
   369   PRINT( _L("Camera <= CCamImageDecoder::RunError") );
   304   return KErrNone;
   370   return KErrNone;
   305   }
   371   }
   306 
   372