Esempio n. 1
0
////////////////////////////////////////////////////////////////
//
// CPixelsManager::GetPixelsFormat
//
// Auto detect PNG, JPEG or PLAIN
//
////////////////////////////////////////////////////////////////
EPixelsFormatType CPixelsManager::GetPixelsFormat ( const CPixels& pixels )
{
    uint uiDataSize = pixels.GetSize ();
    const char* pData = pixels.GetData ();

    // Check if png
    if ( IsPng ( pData, uiDataSize ) )
        return EPixelsFormat::PNG;

    // Check if jpeg
    if ( IsJpeg ( pData, uiDataSize ) )
        return EPixelsFormat::JPEG;

    // Check if plain
    if ( uiDataSize >= 8 )
    {
        uint uiWidth, uiHeight;
        if ( GetPlainDimensions ( pixels, uiWidth, uiHeight ) )
            return EPixelsFormat::PLAIN;
    }

    return EPixelsFormat::UNKNOWN;
}
// -----------------------------------------------------------------------------
// CThumbnailImageDecoder::CreateDecoderL
// Creates image decoder
// -----------------------------------------------------------------------------
//
void CThumbnailImageDecoder::CreateDecoderL( CThumbnailManager::TThumbnailQualityPreference
    aFlags )
    {
    TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() start" );
    OstTrace0( TRACE_NORMAL, CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - start" );
    
    TBool thumbFound( EFalse );
    
    // If the image is in jpeg format, try to get thumbnail from EXIF data (if EOptimizeForQuality not set)
    if ( IsJpeg() && !( aFlags == CThumbnailManager::EOptimizeForQuality ))
        {
        TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() create exif decoder" );
        OstTrace0( TRACE_NORMAL, DUP1_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - create exif decoder" );
        TRAPD( err, CreateExifDecoderL( aFlags ));
        thumbFound = ( err == KErrNone );
        iEXIF = ETrue;
        }

    if ( !thumbFound )
        {
        iEXIF = EFalse;
        TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() create normal decoder" );
        OstTrace0( TRACE_NORMAL, DUP2_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - create normal decoder" );
        
        delete iDecoder;
        iDecoder = NULL;
        
        TFileName fullName;
        if ( !iBuffer )
            {
            iFile.FullName( fullName );
            }
        
        CImageDecoder::TOptions options;
        if ( aFlags == CThumbnailManager::EOptimizeForQuality )
            {
            options = ( CImageDecoder::TOptions )( CImageDecoder
                ::EOptionNoDither );
            }
        else
            {
            options  = ( CImageDecoder::TOptions )( CImageDecoder
                ::EOptionNoDither | CImageDecoder::EPreferFastDecode );
            }

        if ( IsSvg())
            {
            if ( !iBuffer )
                {
                iDecoder = CImageDecoder::FileNewL( iFile, ContentAccess::EPeek, 
                        options, KImageTypeSVGUid, KNullUid, KNullUid );
                
                TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder created" );
                OstTrace0( TRACE_NORMAL, DUP3_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder created" );
                }
            else
                {
                TRAPD( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, options, KImageTypeSVGUid ) );
                
                if ( decErr != KErrNone )
                    {
                    TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - error 1" );
                    OstTrace0( TRACE_NORMAL, DUP4_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - error 1" );
                    
                    User::Leave( decErr );
                    }
                
                TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder created" );
                OstTrace0( TRACE_NORMAL, DUP5_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder created" );
                }
            }
        else if ( !IsJpeg())
            {
            if ( !iBuffer )
                {
                iDecoder = CImageDecoder::FileNewL( iFile, ContentAccess::EPeek, options );
                
                TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder created" );
                OstTrace0( TRACE_NORMAL, DUP6_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder created" );
                }
            else
                {
                TRAPD( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, iMimeType.Des8(), options) );
                
                if ( decErr != KErrNone )
                    {                        
                    TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder error %d", decErr );
                    OstTrace1( TRACE_NORMAL, DUP7_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder error;decErr=%d", decErr );
                    LeaveIfCorruptL(decErr);
                    
                    // don't force any mime type
                    TRAPD( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, options ) );
                    
                    if ( decErr != KErrNone )
                        {                        
                        TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder no mime error %d", decErr );
                        OstTrace1( TRACE_NORMAL, DUP8_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder no mime error;decErr=%d", decErr );
                        
                        User::Leave( decErr );
                        }
                    }
                
                TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder created" );
                OstTrace0( TRACE_NORMAL, DUP9_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder created" );
                }
            }
        else
            {
            if ( !iBuffer )
                {
                TRAPD( decErr, iDecoder = CExtJpegDecoder::FileNewL(
                        CExtJpegDecoder::EHwImplementation, iFs, fullName, options) );
                
                if ( decErr != KErrNone )
                    {
                    TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - HW CExtJpegDecoder failed %d", decErr);
                    OstTrace1( TRACE_NORMAL, DUP10_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL;decErr=%d - HW CExtJpegDecoder failed ", decErr );
                    LeaveIfCorruptL(decErr);
                    
                    TRAP( decErr, iDecoder = CExtJpegDecoder::FileNewL(
                            CExtJpegDecoder::ESwImplementation, iFs, fullName, options) );
                    
                    if ( decErr != KErrNone )
                        {
                        TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - SW CExtJpegDecoder failed %d", decErr);
                        OstTrace1( TRACE_NORMAL, DUP11_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - SW CExtJpegDecoder failed;decErr=%d", decErr );
                        LeaveIfCorruptL(decErr);
                        
                        TRAP( decErr, iDecoder = CImageDecoder::FileNewL( iFile, ContentAccess::EPeek, options ));
                        
                        if( decErr != KErrNone)
                            {
                            TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder failed %d", decErr);
                            OstTrace1( TRACE_NORMAL, DUP12_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder failed ;decErr=%d", decErr );
                            User::Leave( decErr );
                            }
                        
                        TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder created" );
                        OstTrace0( TRACE_NORMAL, DUP13_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder created" );
                        }
                    else
                        {
                        TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - SW CExtJpegDecoder created" );
                        OstTrace0( TRACE_NORMAL, DUP14_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - SW CExtJpegDecoder created" );
                        }
                    }
                else 
                    {
                    TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - HW CExtJpegDecoder created" );
                    OstTrace0( TRACE_NORMAL, DUP15_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL" );
                    }
                }
            else
                {
                TRAPD( decErr, iDecoder = CExtJpegDecoder::DataNewL(
                        CExtJpegDecoder::EHwImplementation, iFs, *iBuffer, options ));
                
                if ( decErr != KErrNone )
                    {
                    TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - HW CExtJpegDecoder failed %d", decErr);
                    OstTrace1( TRACE_NORMAL, DUP16_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - HW CExtJpegDecoder failed;decErr=%d", decErr );
                    LeaveIfCorruptL(decErr);
                    
                    TRAP( decErr, iDecoder = CExtJpegDecoder::DataNewL(
                            CExtJpegDecoder::ESwImplementation, iFs, *iBuffer, options ));
                    
                    if ( decErr != KErrNone )
                        {                       
                        TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - SW CExtJpegDecoder failed %d", decErr);
                        OstTrace1( TRACE_NORMAL, DUP17_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - SW CExtJpegDecoder failed;decErr=%d", decErr );
                        LeaveIfCorruptL(decErr);
                        TRAPD( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, iMimeType.Des8(), options) );
                        
                        if ( decErr != KErrNone )
                            {                        
                            TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder failed %d", decErr);
                            OstTrace1( TRACE_NORMAL, DUP18_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder failed;decErr=%d", decErr );
                            LeaveIfCorruptL(decErr);
                            // don't force any mime type
                            TRAPD( decErr, iDecoder = CImageDecoder::DataNewL( iFs, *iBuffer, options ) );

                            if ( decErr != KErrNone )
                                {                                
                                TN_DEBUG2( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder no mime failed %d", decErr);
                                OstTrace1( TRACE_NORMAL, DUP19_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder no mime failed;decErr=%d", decErr );
                                User::Leave( decErr );
                                }
                            }
                        
                        TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - CImageDecoder created" );
                        OstTrace0( TRACE_NORMAL, DUP20_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - CImageDecoder created" );
                        }
                    else
                        {
                        TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - SW CExtJpegDecoder created" );
                        OstTrace0( TRACE_NORMAL, DUP21_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - SW CExtJpegDecoder created" );
                        }               
                    }
                else
                    {
                    TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() - HW CExtJpegDecoder created" );
                    OstTrace0( TRACE_NORMAL, DUP22_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - HW CExtJpegDecoder created" );
                    }               
                }
            }
        }
    
    TN_DEBUG1( "CThumbnailImageDecoder::CreateDecoderL() end" );
    OstTrace0( TRACE_NORMAL, DUP23_CTHUMBNAILIMAGEDECODER_CREATEDECODERL, "CThumbnailImageDecoder::CreateDecoderL - end" );
    }
Esempio n. 3
0
bool XSpriteBatchNode::initWithFile( const char* fileImage, unsigned int capacity )
{
	XFUNC_START();
	bool bRes;
	do 
	{
		//¼ÓÈë¼ÓÔضÓÁÐ
		int nLen = strlen(fileImage);
		if (IsPng(fileImage, nLen) || IsJpg(fileImage, nLen) || IsJpeg(fileImage, nLen))
		{
			unsigned short wResId = XResLoader::Instance().AddResLoad(XResType::ePng, (XEventObj*)this, 
				(FUNC_HANDEL)&XSpriteBatchNode::ResHandle, fileImage, NULL);
			if (wResId == 0xFFFF)
			{
				break;
			}
			XResType* pResType = XResLoader::Instance().GetResByID(wResId);
			if (!pResType)
			{
				break;
			}
			XResPNG* pRes = dynamic_cast<XResPNG*>(pResType);
			if (!pRes)
			{
				break;
			}			
			XTexture2D* &pTex = pRes->m_pTexture;
			if (!pTex)
			{
				break;
			}
			bRes = initWithTexture(pTex, capacity);
			if (!bRes)
			{
				break;
			}
			//printf("[ref:%d]%s\n", pTex->retainCount(), fileImage);
		}
		else
		{
			break;
			//// ѹËõÎÆÀí
			//unsigned short wResId = XResLoader::Instance().AddResLoad(XResType::eTexCompressed, (XEventObj*)this, 
			//	(FUNC_HANDEL)&XSpriteBatchNode::ResHandle, fileImage, NULL);
			//if (wResId == 0xFFFF)
			//{
			//	break;
			//}
			//XResType* pResType = XResLoader::Instance().GetResByID(wResId);
			//if (!pResType)
			//{
			//	break;
			//}
			//XResCompressed* pRes = dynamic_cast<XResCompressed*>(pResType);
			//if (!pRes)
			//{
			//	break;
			//}			
			//XTexture2D* &pTex = pRes->m_pTexture;
			//if (!pTex)
			//{
			//	break;
			//}
			//bRes = initWithTexture(pTex, capacity);
			//if (!bRes)
			//{
			//	break;
			//}
		}

		//static unsigned long dwReq = 0;
		//CCLOG("XSpriteBatchNode::initWithFile [%d] %s", dwReq++, fileImage);

		_bResLoaded = false;
		return true;
		
	} while (false);
	CCLOG("[ERROR]XSpriteBatchNode::initWithFile %s failed!", fileImage);
	XFUNC_END_RETURN(bool, res, false);
}