webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.cpp
changeset 10 a359256acfc6
parent 0 dd21522fd290
child 11 c8a366e56285
--- 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