--- a/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp Fri Jul 03 15:54:40 2009 +0100
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp Thu Aug 27 07:44:59 2009 +0300
@@ -41,6 +41,7 @@
}
using namespace WebCore;
+CSynDecodeThread *CAnimationDecoder::iSyncDecodeThread = NULL;
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
@@ -55,7 +56,6 @@
, iCurLoopCount( -1 )
, iSyncBitmapHandle(-1)
, iSyncMaskHandle(-1)
- , iSyncDecodeThread(NULL)
, iDecodeInProgress(ETrue)
{
if (CActiveScheduler::Current())
@@ -96,7 +96,6 @@
delete iDecoder, iDecoder = NULL;
}
- delete iSyncDecodeThread; iSyncDecodeThread = NULL;
delete iAnimationBitmap, iAnimationBitmap = NULL;
delete iDestination, iDestination = NULL;
if(iDrmContent)
@@ -115,23 +114,16 @@
iRawDataComplete = ETrue;
delete iDestination;
iDestination = NULL;
- delete iSyncDecodeThread;
- iSyncDecodeThread = NULL;
- iSyncDecodeThread = CSynDecodeThread::NewL();
+ if(!iSyncDecodeThread) { // first time, create decoder thread
+ iSyncDecodeThread = CSynDecodeThread::NewL();
+ }
- TRequestStatus status;
- if (iSyncDecodeThread->Decode( aData, &status ) == KErrNone) {
- User::WaitForRequest(status);
- if( status == KErrNone ) {
- iSyncDecodeThread->Handle(iSyncBitmapHandle, iSyncMaskHandle);
- iSizeAvailable = ETrue;
- }
- }
- if (!iSizeAvailable) {
- delete iSyncDecodeThread;
- iSyncDecodeThread = NULL;
- }
+ if (iSyncDecodeThread->Decode(aData) == KErrNone) {
+ iSyncDecodeThread->Handle(iSyncBitmapHandle, iSyncMaskHandle);
+ Destination(); // duplicate bitmap handles
+ iSizeAvailable = ETrue;
+ }
}
CMaskedBitmap* CAnimationDecoder::Destination()
@@ -151,8 +143,7 @@
iSyncBitmapHandle = -1;
iSyncMaskHandle = -1;
}
- delete iSyncDecodeThread;
- iSyncDecodeThread = NULL;
+
return iDestination;
}
//=============================================================================
@@ -242,7 +233,7 @@
iRawDataComplete = aIsComplete;
- if(iDecoder->ValidDecoder() && iDecoder->IsImageHeaderProcessingComplete())
+ if(iDecoder && iDecoder->ValidDecoder() && iDecoder->IsImageHeaderProcessingComplete())
StartDecodingL();
else
// remove me when incremental image rendering gets supported