mmfenh/enhancedmediaclient/Client/src/Components/StreamControl/ClientStreamControl.cpp
changeset 12 5a06f39ad45b
parent 0 71ca22bcf22a
child 16 43d09473c595
--- a/mmfenh/enhancedmediaclient/Client/src/Components/StreamControl/ClientStreamControl.cpp	Tue Feb 02 01:08:46 2010 +0200
+++ b/mmfenh/enhancedmediaclient/Client/src/Components/StreamControl/ClientStreamControl.cpp	Fri Apr 16 15:29:42 2010 +0300
@@ -211,12 +211,17 @@
     {
     TInt status(KErrNotReady);
     // Get the observer from effect
-    CEffectControlBase* effectBase =
+    if(&aEffect)
+       {
+       CEffectControlBase* effectBase =
             dynamic_cast<CEffectControlBase*>(&aEffect);
 
     // Remove the effect from the array
     TInt index(KErrNotFound);
-    index = iAssociatedEffects.Find(effectBase);
+    if(effectBase)
+       {
+       index = iAssociatedEffects.Find(effectBase);
+        
     if (index != KErrNotFound)
         {
         MControlObserver* observer;
@@ -229,9 +234,11 @@
         iAssociatedEffects.Remove(index);
         status = effectBase->RemovedFromStreamControl(*this);
         RETURN_IF_ERROR( status );
+         }
         }
-
+       }
     return status;
+        
     }
 
 TInt CStreamControl::AddEffect(MEffectControl& aEffect)
@@ -525,7 +532,10 @@
     if (iSourceControl)
         {
         CSourceBase* sourcebase = dynamic_cast<CSourceBase*>(iSourceControl);
-        sourcebase->ServerSourceDeleted();
+        if (sourcebase)
+            sourcebase->ServerSourceDeleted();
+        else
+            return status;
         }
 
     SetStreamState(EStreamClosed, KErrNone);
@@ -627,10 +637,13 @@
             // seperate function and call function here...
 
             // Signal the source that server side source is unloaded
+        if (iSourceControl)
+            {
             CSourceBase* sourcebase =
                     dynamic_cast<CSourceBase*>(iSourceControl);
-            sourcebase->ServerSourceDeleted();
-
+             if (sourcebase)
+                 sourcebase->ServerSourceDeleted();
+            }
             if (iControllerEventMonitor)
                 {
                 iControllerEventMonitor->Cancel();
@@ -666,11 +679,18 @@
             // Save the uid of controller loaded.
             iControllerUid = aControllerUid;
             // Signal the source that server side source is loaded
-            CSourceBase* sourcebase =
+            if (iSourceControl)
+                {
+                CSourceBase* sourcebase =
                     dynamic_cast<CSourceBase*>(iSourceControl);
-            sourcebase->ServerSourceCreated( *iCMCustomCommand,
+               if (sourcebase)
+                   sourcebase->ServerSourceCreated( *iCMCustomCommand,
                     *aSourceHandle);
-
+              else
+                 {
+                 SetStreamState(EStreamClosed, aError);
+                 }
+                }
             if (iStreamState == EStreamOpening)
                 {
                 iPrimeController = ETrue;
@@ -699,7 +719,7 @@
 
 TInt CStreamControl::LaunchController()
     {
-    TInt status(KErrNone);
+    TInt status(KErrNotReady);
     // KUidMediaTypeAudio need to be part of source
     ConfigureControllerLoader(KUidMediaTypeAudio,
             CMMFFindAndOpenController::EPlayback);
@@ -707,9 +727,25 @@
 
     if (!iSourceControl || !iSinkControl)
         return KErrNotReady;
+   CSourceBase *sourceBase=(dynamic_cast<CSourceBase*>(iSourceControl));
+   TUid sourceUID ;
 
-    TUid sourceUID = (dynamic_cast<CSourceBase*>(iSourceControl))->GetSourceUid();
-    TUid sinkUID = (dynamic_cast<CSinkBase*>(iSinkControl))->GetSinkUid();
+   if (sourceBase)
+      {
+       sourceUID = sourceBase->GetSourceUid();
+      }
+   else
+       {
+       return KErrNotReady;
+       }
+
+   CSinkBase *sinkBase=(dynamic_cast<CSinkBase*>(iSinkControl));
+   TUid sinkUID;
+
+   if(sinkBase)
+      sinkUID = sinkBase ->GetSinkUid();
+   else
+      return KErrNotReady;
 
     if (iSourceControl->Type() == KDataBufferSourceControl)
         {
@@ -755,7 +791,7 @@
             HBufC8* mimeType = HBufC8::NewLC(KMaxMimeLength);
             TPtr8 mimeTypePtr = mimeType->Des();
 
-            TInt status = iSourceControl->GetMimeType(mimeTypePtr);
+            status = iSourceControl->GetMimeType(mimeTypePtr);
 
             iFindAndOpenController->ConfigureSourceSink(
                     TMMFileSource(fileNamePtr,
@@ -806,7 +842,7 @@
         HBufC8* mimeType = HBufC8::NewLC(KMaxMimeLength);
         TPtr8 mimeTypePtr = mimeType->Des();
 
-        TInt status = iSourceControl->GetMimeType(mimeTypePtr);
+        status = iSourceControl->GetMimeType(mimeTypePtr);
 
         iFindAndOpenController->ConfigureSourceSink(
                 CMMFFindAndOpenController::TSourceSink(sourceUID,