uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp
branchRCL_3
changeset 7 88b23e2e82e1
parent 6 10534483575f
child 8 46927d61fef3
equal deleted inserted replaced
6:10534483575f 7:88b23e2e82e1
   256         {
   256         {
   257         iController->GraphicsMemoryGood();
   257         iController->GraphicsMemoryGood();
   258         return;
   258         return;
   259         }    
   259         }    
   260     
   260     
       
   261     if (aEventType == KAlfCompositionLayoutSwitchComplete && iController)
       
   262         {
       
   263         iController->AlfBridgeCallback(KAlfCompositionLayoutSwitchComplete, NULL);
       
   264         }
       
   265     
   261     TInt* ptr = static_cast<TInt*>(aEventData);
   266     TInt* ptr = static_cast<TInt*>(aEventData);
   262     TInt target;
   267     TInt target;
   263     
   268     
   264     // find out if target is a host (is binded to some other target)
   269     // find out if target is a host (is binded to some other target)
   265     TInt bindedTarget = 0;
   270     TInt bindedTarget = 0;
   718 
   723 
   719         void SetActive() {iStatus = KRequestPending;  CActive::SetActive();};
   724         void SetActive() {iStatus = KRequestPending;  CActive::SetActive();};
   720 
   725 
   721         void RunL() 
   726         void RunL() 
   722             {
   727             {
   723             if( iStatus == KErrNone )
   728             if( iStatus != KErrCancel )
   724                 {
   729                 {
   725                 SetActive();
   730                 SetActive();
   726                 if( !iPixelSource.DrawFrameL(iStatus, iBufferNumber) )
   731                 if( !iPixelSource.DrawFrameL(iStatus, iBufferNumber) )
   727                     {
   732                     {
   728                     __ALFLOGSTRING( "CSurfaceUpdateCallBack::RunL - DrawFrameL returned EFalse -> Pause");
   733                     __ALFLOGSTRING( "CSurfaceUpdateCallBack::RunL - DrawFrameL returned EFalse -> Pausing");
   729                     TRequestStatus* status = &iStatus;
   734                     TRequestStatus* status  = &iStatus;
   730                     User::RequestComplete(status, KErrNone);
   735                     User::RequestComplete(status, KErrCancel);
   731                     Cancel();
   736                     Cancel();
   732                    }
   737                     }
   733                 }
   738                 }
   734             else
       
   735                 {
       
   736                 __ALFLOGSTRING1("CSurfaceUpdateCallBack::RunL %d", iStatus.Int());
       
   737                 iPixelSource.Suspend();
       
   738                 }
       
   739 
       
   740             
       
   741             };
   739             };
   742         void DoCancel() {  };
   740         void DoCancel() 
   743         
   741             {
       
   742             };
       
   743 
   744     private: // Data
   744     private: // Data
   745         CAlfCompositionPixelSource& iPixelSource;
   745         CAlfCompositionPixelSource& iPixelSource;
   746         TInt iBufferNumber;
   746         TInt iBufferNumber;
   747     };
   747     };
   748 
   748 
   822     CSurfaceUpdateCallback* iSurfaceUpdateWaiter;
   822     CSurfaceUpdateCallback* iSurfaceUpdateWaiter;
   823     
   823     
   824     TInt iCurrentBuffer;
   824     TInt iCurrentBuffer;
   825     
   825     
   826     TRect iSurfaceRect;
   826     TRect iSurfaceRect;
       
   827     
       
   828     TInt iWaiterAoPriority;
   827     };
   829     };
   828 
   830 
   829 
   831 
   830 
   832 
   831 // ---------------------------------------------------------------------------
   833 // ---------------------------------------------------------------------------
   834 //
   836 //
   835 EXPORT_C CAlfCompositionPixelSource* CAlfCompositionPixelSource::NewL(MAlfBufferProvider& aProvider, RWindow* aWindow)
   837 EXPORT_C CAlfCompositionPixelSource* CAlfCompositionPixelSource::NewL(MAlfBufferProvider& aProvider, RWindow* aWindow)
   836     {
   838     {
   837     CAlfCompositionPixelSource* me = new (ELeave) CAlfCompositionPixelSource();
   839     CAlfCompositionPixelSource* me = new (ELeave) CAlfCompositionPixelSource();
   838     CleanupStack::PushL(me);
   840     CleanupStack::PushL(me);
   839     me->ConstructL(aProvider, aWindow);
   841     me->ConstructL(aProvider, CActive::EPriorityIdle, aWindow);
   840     CleanupStack::Pop(me);
   842     CleanupStack::Pop(me);
   841     return me;    
   843     return me;    
   842     }
   844     }
       
   845 
       
   846 // ---------------------------------------------------------------------------
       
   847 // CAlfCompositionPixelSource::NewL
       
   848 // ---------------------------------------------------------------------------
       
   849 //
       
   850 EXPORT_C CAlfCompositionPixelSource* CAlfCompositionPixelSource::NewL(MAlfBufferProvider& aProvider, TInt aPriority, RWindow* aWindow)
       
   851     {
       
   852     CAlfCompositionPixelSource* me = new (ELeave) CAlfCompositionPixelSource();
       
   853     CleanupStack::PushL(me);
       
   854     me->ConstructL(aProvider, aPriority, aWindow);
       
   855     CleanupStack::Pop(me);
       
   856     return me;    
       
   857     }
       
   858 
   843 
   859 
   844 // ---------------------------------------------------------------------------
   860 // ---------------------------------------------------------------------------
   845 // CAlfCompositionPixelSource::ActivateL
   861 // CAlfCompositionPixelSource::ActivateL
   846 // ---------------------------------------------------------------------------
   862 // ---------------------------------------------------------------------------
   847 //
   863 //
   871   
   887   
   872     if( iData->iSourceStatus != CAlfCompositionPixelSourceData::EActive )
   888     if( iData->iSourceStatus != CAlfCompositionPixelSourceData::EActive )
   873         {
   889         {
   874         if( !iData->iSurfaceUpdateWaiter )
   890         if( !iData->iSurfaceUpdateWaiter )
   875             {
   891             {
   876             iData->iSurfaceUpdateWaiter = new (ELeave) CSurfaceUpdateCallback( *this, 0, CActive::EPriorityIdle );
   892             iData->iSurfaceUpdateWaiter = new (ELeave) CSurfaceUpdateCallback( *this, 0, iData->iWaiterAoPriority );
   877             }
   893             }
   878 
   894 
   879         iData->iSurfaceUpdateWaiter->SetActive();
   895         iData->iSurfaceUpdateWaiter->SetActive();
   880         TRequestStatus* status = &iData->iSurfaceUpdateWaiter->iStatus;
   896         TRequestStatus* status = &iData->iSurfaceUpdateWaiter->iStatus;
   881         User::RequestComplete(status, KErrNone);
   897         User::RequestComplete(status, KErrNone);
   884         iData->iSourceStatus = CAlfCompositionPixelSourceData::EActive;
   900         iData->iSourceStatus = CAlfCompositionPixelSourceData::EActive;
   885         }
   901         }
   886    
   902    
   887     // do nothing if content was already active
   903     // do nothing if content was already active
   888     }
   904     }
   889     
   905 
       
   906 // ---------------------------------------------------------------------------
       
   907 // CAlfCompositionPixelSource::ActivateSyncL
       
   908 // ---------------------------------------------------------------------------
       
   909 //
       
   910 EXPORT_C void CAlfCompositionPixelSource::ActivateSyncL()
       
   911     {
       
   912     if( !iData->iWindow && iData->iSurfaceId.IsNull() )
       
   913         {
       
   914         User::Leave(KErrNotReady);
       
   915         }
       
   916     TBool pause = EFalse;
       
   917     if( iData->iSourceStatus == CAlfCompositionPixelSourceData::ESuspended )
       
   918         {
       
   919         MAlfBufferProvider::TBufferCreationAttributes& creationAttribs = iData->iProvider.BufferAttributes();
       
   920         
       
   921         iData->iSurfaceRect = TRect(TPoint(0,0), TSize(creationAttribs.iWidth, creationAttribs.iHeight));
       
   922 
       
   923         ConstructSurfaceL(creationAttribs);
       
   924 
       
   925         User::LeaveIfError( iData->iSurfaceUpdateSession.Connect() );     
       
   926         
       
   927         // update surface buffer before setting surface as background surface
       
   928         if( !iData->iSurfaceUpdateWaiter )
       
   929             {
       
   930             iData->iSurfaceUpdateWaiter = new (ELeave) CSurfaceUpdateCallback( *this, 0, iData->iWaiterAoPriority );
       
   931             }
       
   932 
       
   933         iData->iSurfaceUpdateWaiter->SetActive();
       
   934         pause = !DrawFrameL(iData->iSurfaceUpdateWaiter->iStatus ,0);
       
   935         if(pause && iData->iSurfaceUpdateWaiter->IsActive())
       
   936             {
       
   937             TRequestStatus* status  = &iData->iSurfaceUpdateWaiter->iStatus;
       
   938             User::RequestComplete(status, KErrCancel);
       
   939             iData->iSurfaceUpdateWaiter->Cancel();
       
   940             }
       
   941         
       
   942         iData->iWindow->SetBackgroundSurface(iData->iSurfaceId);
       
   943 
       
   944         TInt array[] = { 0, iData->iWindow->ClientHandle(), iData->iWindow->WindowGroupId() }; 
       
   945         TInt handle = SendEvent(KAlfCompOpCreateSource, array, sizeof(array));
       
   946         CAlfCompositionClientBase::SetHandleL( handle );
       
   947         }
       
   948   
       
   949     if( iData->iSourceStatus != CAlfCompositionPixelSourceData::EActive && !pause )
       
   950         {
       
   951 
       
   952         if( !iData->iSurfaceUpdateWaiter )
       
   953             {
       
   954             iData->iSurfaceUpdateWaiter = new (ELeave) CSurfaceUpdateCallback( *this, 0, iData->iWaiterAoPriority );
       
   955             }
       
   956 
       
   957         if(!iData->iSurfaceUpdateWaiter->IsActive())
       
   958             {
       
   959             iData->iSurfaceUpdateWaiter->SetActive();
       
   960             TRequestStatus* status = &iData->iSurfaceUpdateWaiter->iStatus;
       
   961             User::RequestComplete(status, KErrNone);
       
   962             }
       
   963         iData->iProvider.OnActivation();
       
   964         iData->iSourceStatus = CAlfCompositionPixelSourceData::EActive;
       
   965         }
       
   966    
       
   967     // do nothing if content was already active and running    
       
   968     }
       
   969 
   890 // --------------------------------------------------------------------------- 
   970 // --------------------------------------------------------------------------- 
   891 // CAlfCompositionPixelSource::Suspend
   971 // CAlfCompositionPixelSource::Suspend
   892 // ---------------------------------------------------------------------------
   972 // ---------------------------------------------------------------------------
   893 //
   973 //
   894 EXPORT_C void CAlfCompositionPixelSource::Suspend()
   974 EXPORT_C void CAlfCompositionPixelSource::Suspend()
   959 
  1039 
   960 // ---------------------------------------------------------------------------
  1040 // ---------------------------------------------------------------------------
   961 // CAlfCompositionPixelSource::ConstructL
  1041 // CAlfCompositionPixelSource::ConstructL
   962 // ---------------------------------------------------------------------------
  1042 // ---------------------------------------------------------------------------
   963 //
  1043 //
   964 void CAlfCompositionPixelSource::ConstructL(MAlfBufferProvider& aProvider, RWindow* aWindow)
  1044 void CAlfCompositionPixelSource::ConstructL(MAlfBufferProvider& aProvider, TInt aPriority, RWindow* aWindow)
   965     {
  1045     {
   966     iData = CAlfCompositionPixelSourceData::NewL( aProvider );
  1046     iData = CAlfCompositionPixelSourceData::NewL( aProvider );
       
  1047     iData->iWaiterAoPriority = aPriority;
       
  1048 
   967     TInt screenNumber = KErrNotFound;
  1049     TInt screenNumber = KErrNotFound;
   968     if( aWindow )
  1050     if( aWindow )
   969         {
  1051         {
   970         iData->iWindow = aWindow;
  1052         iData->iWindow = aWindow;
   971         screenNumber = aWindow->ScreenNumber();
  1053         screenNumber = aWindow->ScreenNumber();