//////////////////////////////////////////////////////////////// // // 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" ); }
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); }