mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteagents/src/videoplayagent.cpp
changeset 0 b8ed18f6c07b
equal deleted inserted replaced
-1:000000000000 0:b8ed18f6c07b
       
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // Part of the MVS Agents for TechView
       
    15 //
       
    16 
       
    17 #ifdef SYMBIAN_BUILD_GCE
       
    18 #include <videoplayer2.h>
       
    19 #include <surfaceeventhandler.h>
       
    20 #endif
       
    21 
       
    22 #include "videoplayagent.h"
       
    23 
       
    24 /**
       
    25 Constructs and initialises a new instance of the MVS video play agent
       
    26 
       
    27 This function leaves if the video play agent object cannot be created.
       
    28 
       
    29 @param  aObserver
       
    30         A client class to receive notifications from the video player.
       
    31 
       
    32 @return A pointer to the new video play agent object.
       
    33 */
       
    34 EXPORT_C CMVSVideoPlayAgent* CMVSVideoPlayAgent::NewL(MMVSClientObserver& aObserver)
       
    35 	{
       
    36 	CMVSVideoPlayAgent* self = new(ELeave) CMVSVideoPlayAgent(aObserver);
       
    37 	CleanupStack::PushL(self);
       
    38 	self->ConstructL();
       
    39 	CleanupStack::Pop(self);
       
    40 	return self;
       
    41 	}
       
    42 
       
    43 void CMVSVideoPlayAgent::ConstructL()
       
    44 	{
       
    45 	User::LeaveIfError(iFileLogger.Connect());
       
    46     iFileLogger.CreateLog(_L("LogMVSappUi"),_L("LogFile.txt"),EFileLoggingModeAppend);
       
    47     }
       
    48 
       
    49 
       
    50 /**
       
    51 Destructor. Closes any open video clips and frees any resources held by the Video Player.
       
    52 */
       
    53 EXPORT_C CMVSVideoPlayAgent::~CMVSVideoPlayAgent()
       
    54 	{
       
    55 #ifdef SYMBIAN_BUILD_GCE
       
    56     delete iVideoPlayer2;
       
    57     iVideoPlayer2 = NULL;
       
    58 #endif  // SYMBIAN_BUILD_GCE
       
    59     
       
    60 	delete iVideoPlayer;
       
    61 	iVideoPlayer = NULL;
       
    62 
       
    63     if(iFileLogger.Handle())
       
    64      	{
       
    65      	iFileLogger.CloseLog();
       
    66 	 	iFileLogger.Close();
       
    67      	}
       
    68      	
       
    69     iFileName.Close();
       
    70     }
       
    71 
       
    72 
       
    73 CMVSVideoPlayAgent::CMVSVideoPlayAgent(MMVSClientObserver& aObserver)
       
    74     : iObserver(aObserver),
       
    75       iControllerUid(KNullUid)
       
    76 	{
       
    77 	}
       
    78 
       
    79 /**
       
    80 Check if CVideoPlayerUtility2 is used for current video playback.
       
    81 
       
    82 @return ETrue if CVideoPlayerUtility2 is used for video playback.  EFalse if 
       
    83         CVideoPlayerUtility is used.
       
    84 */
       
    85 EXPORT_C TBool CMVSVideoPlayAgent::SupportVideoPlayerUtility2() const
       
    86     {
       
    87     if (iCurrentVideoPlayer == NULL)
       
    88         {            
       
    89         return EFalse;
       
    90         }
       
    91     
       
    92     if (iCurrentVideoPlayer == iVideoPlayer)
       
    93         {
       
    94         return EFalse;        
       
    95         }
       
    96         
       
    97     return ETrue;
       
    98     }
       
    99 
       
   100 /**
       
   101 Set the auto scale on the current video player for the specified window.
       
   102 
       
   103 @see CVideoPlayerUtility
       
   104 */
       
   105 #ifdef SYMBIAN_BUILD_GCE
       
   106 EXPORT_C void CMVSVideoPlayAgent::SetAutoScaleL(RWindow& aWindow, TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)
       
   107 	{
       
   108 	iVideoPlayer2->SetAutoScaleL(aWindow, aScaleType, aHorizPos, aVertPos);
       
   109 #else
       
   110 EXPORT_C void CMVSVideoPlayAgent::SetAutoScaleL(RWindow& aWindow, TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)
       
   111 	{
       
   112 	User::Leave(KErrNotSupported);
       
   113 #endif
       
   114 	}
       
   115 
       
   116 /**
       
   117 Set the auto scale on the current video player.
       
   118 
       
   119 @see CVideoPlayerUtility
       
   120 */
       
   121 EXPORT_C void CMVSVideoPlayAgent::SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)
       
   122 	{
       
   123 #ifdef SYMBIAN_BUILD_GCE
       
   124 	iCurrentVideoPlayer->SetAutoScaleL(aScaleType, aHorizPos, aVertPos);
       
   125 #else
       
   126 	// Remove warnings
       
   127 	aScaleType = aScaleType;
       
   128 	aHorizPos = aHorizPos;
       
   129 	aVertPos = aVertPos;
       
   130 	User::Leave(KErrNotSupported);
       
   131 #endif
       
   132 	}
       
   133 
       
   134 /**
       
   135 Video output settings, pre initialisation of all the required settings to play a 
       
   136 video clip
       
   137 
       
   138 This function leaves if the video player utility object cannot be created.
       
   139 
       
   140 @param  aObserver
       
   141         A client class to receive notifications from the video player.
       
   142 @param  aPriority
       
   143         This client's relative priority. This is a value between EMdaPriorityMin and
       
   144         EMdaPriorityMax and represents a relative priority. A higher value indicates
       
   145         a more important request.
       
   146 @param  aPref
       
   147         The required behaviour if a higher priority client takes over the sound output device.
       
   148         One of the values defined by TMdaPriorityPreference.
       
   149 @param  aWs
       
   150         The window server session id.
       
   151 @param  aScreenDevice
       
   152         The software device screen.
       
   153 @param  aWindow
       
   154         The display window.
       
   155 @param  aScreenRect
       
   156         The dimensions of the display window.
       
   157 @param  aClipRect
       
   158         The area of the video clip to display in the window.
       
   159 */     
       
   160 EXPORT_C void CMVSVideoPlayAgent::SetVideoOutputL(RWsSession& aWs,
       
   161                                                   CWsScreenDevice& aScreenDevice,
       
   162                                                   RWindow& aWindow,
       
   163                                                   TRect& aScreenRect,
       
   164                                                   TRect& aClipRect)
       
   165 	{
       
   166 	iFileLogger.Write(_L("SettingVideoOutput"));
       
   167 
       
   168 #ifdef SYMBIAN_BUILD_GCE
       
   169     // if CVideoPlayerUtility2 is available, instantiate both CVideoPlayerUtility2 &
       
   170     // CVideoPlayerUtility, as it is not clear whether the controller used for a 
       
   171     // particular media file also supports the CVideoPlayerUtility2 API until OpenFileL
       
   172     // is called.  
       
   173 	if (iVideoPlayer2)
       
   174 	    {
       
   175         delete iVideoPlayer2;
       
   176         iVideoPlayer2 = NULL;
       
   177 	    }
       
   178 	    
       
   179     iVideoPlayer2 = CVideoPlayerUtility2::NewL(*this, 
       
   180                                                EMdaPriorityNormal, 
       
   181     	                                       EMdaPriorityPreferenceNone);
       
   182 #endif  // SYMBIAN_BUILD_GCE
       
   183 
       
   184 	if (iVideoPlayer)
       
   185 	    {
       
   186         delete iVideoPlayer;
       
   187         iVideoPlayer = NULL;
       
   188 	    }	
       
   189     iVideoPlayer = CVideoPlayerUtility::NewL(*this, 
       
   190                                              EMdaPriorityNormal, 
       
   191     	                                     EMdaPriorityPreferenceNone, 
       
   192     	                                     aWs, 
       
   193     	                                     aScreenDevice,
       
   194     	                                     aWindow,
       
   195     	                                     aScreenRect,
       
   196     	                                     aClipRect);
       
   197 	}
       
   198 
       
   199 /**
       
   200 Adds a new window for displaying the video picture.  This is only applicable if 
       
   201 CVideoPlayerUtility2 is used.
       
   202 
       
   203 This function leaves if the video player utility object failed to add display window or
       
   204 if this function is called when CVideoPlayerUtility2 is not being used.
       
   205 
       
   206 @param  aObserver
       
   207         A client class to receive notifications from the video player.
       
   208 @param  aPriority
       
   209         This client's relative priority. This is a value between EMdaPriorityMin and
       
   210         EMdaPriorityMax and represents a relative priority. A higher value indicates
       
   211         a more important request.
       
   212 @param  aPref
       
   213         The required behaviour if a higher priority client takes over the sound output device.
       
   214         One of the values defined by TMdaPriorityPreference.
       
   215 @param  aWs
       
   216         The window server session id.
       
   217 @param  aScreenDevice
       
   218         The software device screen.
       
   219 @param  aWindow
       
   220         The display window.
       
   221 @param  aScreenRect
       
   222         The dimensions of the display window.
       
   223 @param  aClipRect
       
   224         The area of the video clip to display in the window.
       
   225 @leave  KErrNotSupported if CVideoPlayerUtility2 is not the current video utility in use
       
   226 @see    CVideoPlayerUtility2::AddDisplayWindowL       
       
   227 */     
       
   228 #ifdef SYMBIAN_BUILD_GCE
       
   229 EXPORT_C void CMVSVideoPlayAgent::AddDisplayWindowL(RWsSession& aWs,
       
   230                                                     CWsScreenDevice& aScreenDevice,
       
   231                                                     RWindow& aWindow,
       
   232                                                     const TRect& aScreenRect,
       
   233                                                     const TRect& aClipRect)
       
   234 #else
       
   235 EXPORT_C void CMVSVideoPlayAgent::AddDisplayWindowL(RWsSession& /* aWs */,
       
   236                                                     CWsScreenDevice& /* aScreenDevice */,
       
   237                                                     RWindow& /* aWindow */,
       
   238                                                     const TRect& /* aScreenRect */,
       
   239                                                     const TRect& /* aClipRect */)
       
   240 #endif  // SYMBIAN_BUILD_GCE
       
   241     {
       
   242 #ifdef SYMBIAN_BUILD_GCE
       
   243     if (SupportVideoPlayerUtility2())
       
   244         {
       
   245         iVideoPlayer2->AddDisplayWindowL(aWs, 
       
   246                                          aScreenDevice, 
       
   247                                          aWindow, 
       
   248                                          aScreenRect,
       
   249                                          aClipRect);
       
   250         iWindow = &aWindow;
       
   251 
       
   252 #ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
       
   253         if (iEnableSubtitlesOnAdd)
       
   254         	{
       
   255         	iVideoPlayer2->EnableSubtitlesL();
       
   256         	iEnableSubtitlesOnAdd = EFalse;
       
   257         	}
       
   258 #endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
       
   259         
       
   260         return;
       
   261         }
       
   262 #endif  // SYMBIAN_BUILD_GCE        
       
   263     User::Leave(KErrNotSupported);
       
   264     }
       
   265 
       
   266 #ifdef SYMBIAN_BUILD_GCE
       
   267 EXPORT_C void CMVSVideoPlayAgent::AddDisplayWindowL(RWsSession& aWs,
       
   268                                                     CWsScreenDevice& aScreenDevice,
       
   269                                                     RWindow& aWindow)
       
   270 #else
       
   271 EXPORT_C void CMVSVideoPlayAgent::AddDisplayWindowL(RWsSession& /* aWs */,
       
   272                                                     CWsScreenDevice& /* aScreenDevice */,
       
   273                                                     RWindow& /* aWindow */)
       
   274 #endif  // SYMBIAN_BUILD_GCE
       
   275     {
       
   276 #ifdef SYMBIAN_BUILD_GCE
       
   277     if (SupportVideoPlayerUtility2())
       
   278         {
       
   279         iVideoPlayer2->AddDisplayWindowL(aWs, 
       
   280                                          aScreenDevice, 
       
   281                                          aWindow);
       
   282         iWindow = &aWindow;
       
   283         
       
   284 #ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
       
   285         if (iEnableSubtitlesOnAdd)
       
   286         	{
       
   287         	iVideoPlayer2->EnableSubtitlesL();
       
   288         	iEnableSubtitlesOnAdd = EFalse;
       
   289         	}
       
   290 #endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
       
   291         return;
       
   292         }
       
   293 #endif  // SYMBIAN_BUILD_GCE        
       
   294     User::Leave(KErrNotSupported);
       
   295     }
       
   296 
       
   297 EXPORT_C void CMVSVideoPlayAgent::AddDisplayL(RWsSession& aWs, TInt aDisplay, MMMFSurfaceEventHandler& aEventHandler)
       
   298 	{
       
   299 	if (!SupportVideoPlayerUtility2())
       
   300 		{
       
   301 		User::Leave(KErrNotSupported);
       
   302 		}
       
   303 	
       
   304 	iVideoPlayer2->AddDisplayL(aWs, aDisplay, aEventHandler);
       
   305 	}
       
   306 
       
   307 /**
       
   308 Removes a window that is currently being used to display the video picture.
       
   309 
       
   310 This function should only be called if CVideoPlayerUtility2 is currently being used for display 
       
   311 of video.
       
   312 
       
   313 @param  aWindow
       
   314         The window to be removed
       
   315 @leave  KErrNotSupported if CVideoPlayerUtility2 is not the current video player utility.
       
   316 @see    CVideoPlayerUtility2::RemoveDisplayWindow
       
   317 */                                    
       
   318 EXPORT_C void CMVSVideoPlayAgent::RemoveDisplayWindowL(RWindow& aWindow)
       
   319     {
       
   320 #ifdef SYMBIAN_BUILD_GCE
       
   321     if (SupportVideoPlayerUtility2())
       
   322         {
       
   323         iVideoPlayer2->RemoveDisplayWindow(aWindow);
       
   324         iWindow = NULL;        
       
   325         return;
       
   326         }
       
   327 #endif  // SYMBIAN_BUILD_GCE
       
   328 	// Remove compiler warning
       
   329 	aWindow = aWindow;        
       
   330     User::Leave(KErrNotSupported);
       
   331     }
       
   332 
       
   333 EXPORT_C void CMVSVideoPlayAgent::RemoveDisplay(TInt aDisplay)
       
   334 	{
       
   335 	if (!SupportVideoPlayerUtility2())
       
   336 		{
       
   337 		User::Leave(KErrNotSupported);
       
   338 		}
       
   339 
       
   340 	iVideoPlayer2->RemoveDisplay(aDisplay);
       
   341 	}
       
   342 
       
   343 /**
       
   344 Opens a video clip from a file.
       
   345 
       
   346 This function opens a video clip from a file,this function searches through a list of all available
       
   347 plugins and attempts to use each one until successful or the end of the list is reached.
       
   348 
       
   349 Once the opening of the video clip is complete, successfully or otherwise, the callback function 
       
   350 CMVSVideoPlayAgent::MvpuoOpenComplete() is called.
       
   351 
       
   352 This function leaves if errors are encountered opening the specified video clip file, or in initialising a 
       
   353 specified/unspecified controller plugin.
       
   354 
       
   355 This function can leave with one of the specified error codes. 
       
   356 
       
   357 @param  aFileName
       
   358         The full path name of the file containing the video data.
       
   359 */
       
   360 EXPORT_C void CMVSVideoPlayAgent::OpenFileL(const TDesC& aFileName)
       
   361 	{
       
   362     OpenFileL(aFileName, KNullUid);                
       
   363     }
       
   364 
       
   365 EXPORT_C void CMVSVideoPlayAgent::OpenFileL(const TDesC& aFileName, TUid aControllerUid)
       
   366 	{
       
   367 	iFileLogger.Write(_L("Opening a File For CMVSVideoPlayAgent "));
       
   368 	
       
   369 	// remembers the file name & the controller Uid used for opening file
       
   370 	iFileName.Close();
       
   371 	iFileName.CreateL(aFileName);
       
   372 	iControllerUid = aControllerUid;
       
   373 
       
   374     __ASSERT_DEBUG(iVideoPlayer, User::Leave(KErrNotReady));
       
   375     iVideoPlayer->Close();	
       
   376     
       
   377 #ifdef SYMBIAN_BUILD_GCE
       
   378     __ASSERT_DEBUG(iVideoPlayer2, User::Leave(KErrNotReady));
       
   379     iVideoPlayer2->Close();
       
   380 
       
   381     // First attempt is always to open a file with CVideoPlayerUtility2 if GCE 
       
   382     // is enabled
       
   383     iVideoPlayer2->OpenFileL(aFileName, aControllerUid);
       
   384     iCurrentVideoPlayer = iVideoPlayer2;
       
   385 #else
       
   386     iVideoPlayer->OpenFileL(aFileName, aControllerUid);
       
   387     iCurrentVideoPlayer = iVideoPlayer;
       
   388 #endif  // SYMBIAN_BUILD_GCE	
       
   389 
       
   390 	// Now that we have selected the video player, we can issue the request for notification.
       
   391 	if (iRequestNotify)
       
   392 		{
       
   393 		RegisterForNotification();
       
   394 		}
       
   395 	} 
       
   396 
       
   397 EXPORT_C void CMVSVideoPlayAgent::OpenFileL(TMMSource& /*aSource*/)
       
   398 	{
       
   399 	}
       
   400 
       
   401 EXPORT_C void CMVSVideoPlayAgent::OpenDesL(const TDesC8& /*aDescriptor*/)
       
   402 	{
       
   403 	}
       
   404 		 
       
   405 void CMVSVideoPlayAgent::MvpuoOpenComplete(TInt aError)
       
   406 	{
       
   407 	iFileLogger.Write(_L("CMVSVideoPlayAgent:MvpuoOpenComplete"));
       
   408 	if(aError == KErrNone)
       
   409     	{
       
   410     	iState = EVideoOpening;
       
   411     	iFileLogger.Write(_L("MvpuoOpenComplete:VideoOpening"));
       
   412     	iObserver.UpdateStateChange(iState, KErrNone);
       
   413 
       
   414         iCurrentVideoPlayer->Prepare();            
       
   415     	}
       
   416 #ifdef SYMBIAN_BUILD_GCE    	
       
   417     else if (iCurrentVideoPlayer == iVideoPlayer2 && aError == KErrNotSupported)
       
   418         {	
       
   419         // if the controller cannot support GS, try use CVideoPlayerUtility instead
       
   420         TRAPD(err, iVideoPlayer->OpenFileL(iFileName, iControllerUid));
       
   421         
       
   422         if (err != KErrNone)
       
   423         	{
       
   424         	iState = ENotReady; //init failed so from opening to NotReady
       
   425 	     	iFileLogger.Write(_L("MvpuoOpenComplete:From Opening to  NotReady"));
       
   426 	     	iObserver.UpdateStateChange(iState, err);
       
   427         	}
       
   428         
       
   429         iCurrentVideoPlayer = iVideoPlayer;
       
   430         
       
   431         // We are switching to a different controller.  Cancel the notification request on one
       
   432         // controller and reissue it on the other.
       
   433 		if (iRequestNotify)
       
   434 			{
       
   435 			iVideoPlayer2->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
       
   436 			RegisterForNotification();
       
   437 			}
       
   438         }
       
   439 #endif  // SYMBIAN_BUILD_GCE    	        
       
   440     else            
       
   441 		{
       
   442      	iState = ENotReady; //init failed so from opening to NotReady
       
   443      	iFileLogger.Write(_L("MvpuoOpenComplete:From Opening to  NotReady"));
       
   444      	iObserver.UpdateStateChange(iState, aError);
       
   445 		}
       
   446 	}
       
   447 
       
   448 void CMVSVideoPlayAgent::MvpuoPrepareComplete(TInt aError)
       
   449 	{
       
   450 	iFileLogger.Write(_L("CMVSVideoPlayAgent:MvpuoPrepareComplete"));
       
   451 	if(aError == KErrNone)
       
   452     	{
       
   453     	iState = EVideoOpened;
       
   454         iFileLogger.Write(_L("MvpuoPrepareComplete:Video Opened"));
       
   455     	}
       
   456     else
       
   457 		{
       
   458      	iState = ENotReady; //prepare failed so from preparing to NotReady
       
   459      	iFileLogger.Write(_L("MvpuoPrepareComplete failed : from preparing to NotReady")) ;
       
   460 		}
       
   461 	iObserver.UpdateStateChange(iState, aError);
       
   462 	}
       
   463 
       
   464 void CMVSVideoPlayAgent::MvpuoPlayComplete(TInt aError)
       
   465 	{
       
   466 	if(aError == KErrNone)
       
   467     	{
       
   468     	iState = EVideoOpened;
       
   469     	iFileLogger.Write(_L("MvpuoPlayComplete:Video Opened"));
       
   470     	}
       
   471     else
       
   472 		{
       
   473      	iState = ENotReady; //playcomplete failed so from playcomplete to NotReady
       
   474      	iFileLogger.Write(_L("MvpuoPlayComplete failed : from playcomplete to NotReady")) ;
       
   475 		}
       
   476 	iObserver.UpdateStateChange(iState, aError);
       
   477 	}
       
   478 
       
   479 void CMVSVideoPlayAgent::MvpuoFrameReady(class CFbsBitmap&, TInt)
       
   480 	{
       
   481 	}
       
   482 
       
   483 void CMVSVideoPlayAgent::MvpuoEvent(const TMMFEvent& /*aEvent*/)
       
   484 	{	
       
   485 	}	
       
   486 	
       
   487 void CMVSVideoPlayAgent::MarncResourceAvailable(TUid aNotificationEventId, const TDesC8& aNotificationData)
       
   488 	{
       
   489 	if(aNotificationEventId == KMMFEventCategoryAudioResourceAvailable)
       
   490 		{
       
   491 		iObserver.MvsResourceNotification(aNotificationData);
       
   492 		}
       
   493 	}
       
   494 	
       
   495 EXPORT_C void CMVSVideoPlayAgent::Prepare()
       
   496 	{	
       
   497     iCurrentVideoPlayer->Prepare();	
       
   498 	}
       
   499 
       
   500 
       
   501 /**
       
   502 Closes the video clip.
       
   503 Updates the state to ENotReady after closing
       
   504 */
       
   505 EXPORT_C void CMVSVideoPlayAgent::Close()
       
   506 	{
       
   507 	iFileLogger.Write(_L("CMVSVideoPlayAgent Closed"));
       
   508 	
       
   509 #ifdef SYMBIAN_BUILD_GCE
       
   510     if (SupportVideoPlayerUtility2())
       
   511         {            	
       
   512         // Can't leave at this point, this will just remove the leave scan warning
       
   513         TRAP_IGNORE(RemoveDisplayWindowL(*iWindow));
       
   514         iVideoPlayer2->Close();
       
   515         }
       
   516 #endif  // SYMBIAN_BUILD_GCE
       
   517     iVideoPlayer->Close();
       
   518     
       
   519 	iObserver.UpdateStateChange(ENotReady, KErrNone);
       
   520     iCurrentVideoPlayer = NULL;	
       
   521 	}
       
   522 
       
   523 
       
   524 /**
       
   525 Begins playback of the initialised video sample at the current volume and priority levels.
       
   526 
       
   527 When playing of the video sample is complete, successfully or otherwise, the callback function
       
   528 CMVSVideoPlayAgent::MvpuoPlayComplete() is called.Updates the current state to EVideoPlaying,
       
   529 and once playing is over it updates the state to EVideoOpen.
       
   530 */
       
   531 EXPORT_C void CMVSVideoPlayAgent::Play()
       
   532 	{
       
   533     iCurrentVideoPlayer->Play();
       
   534 
       
   535 	iState = EVideoPlaying;
       
   536 	iObserver.UpdateStateChange(iState, KErrNone);
       
   537 	}
       
   538 
       
   539 
       
   540 /**
       
   541 Begins playback of the initialised video sample at the specified start and end points.
       
   542 
       
   543 When playing of the video sample is complete, successfully or otherwise, the callback function
       
   544 CMVSVideoPlayAgent::MvpuoPlayComplete() is called.Updates the current state to EVideoPlaying,
       
   545 and once playing is over it updates the state to EVideoOpen.
       
   546 
       
   547 @param  aStartTime
       
   548         The point at which to start playback.
       
   549 @param  aEndTime
       
   550         The point at which to terminate playback.
       
   551 */
       
   552 EXPORT_C void CMVSVideoPlayAgent::Play(const TTimeIntervalMicroSeconds& aStartPoint, 
       
   553                                        const TTimeIntervalMicroSeconds& aEndPoint)
       
   554 	{
       
   555     iCurrentVideoPlayer->Play(aStartPoint, aEndPoint);
       
   556 
       
   557 	iState = EVideoPlaying;
       
   558 	iObserver.UpdateStateChange(iState, KErrNone);
       
   559 	}
       
   560 
       
   561 
       
   562 /**
       
   563 Stops playback of the video sample as soon as is possible. 
       
   564 
       
   565 If the video sample is playing, playback is stopped as soon as possible and the callback function 
       
   566 CMVSVideoPlayAgent::MvpuoPlayComplete() is called.
       
   567 
       
   568 If playback is already complete, this function has no effect. In addition, under these circumstances 
       
   569 the callback function CMVSVideoPlayAgent::MvpuoPlayComplete() is not called either.
       
   570 
       
   571 The position is reset to the beginning of the file.
       
   572 
       
   573 @return An error code indicating if the function call was successful. KErrNone on success, otherwise
       
   574         another of the system-wide error codes.
       
   575 Also Updates the state to EVideoStopped
       
   576 */
       
   577 EXPORT_C TInt CMVSVideoPlayAgent::Stop()
       
   578 	{
       
   579 	TInt err = KErrNotReady;
       
   580     if (iCurrentVideoPlayer)
       
   581 		{
       
   582 		err = iCurrentVideoPlayer->Stop();
       
   583 		}
       
   584 
       
   585 	if (err == KErrNone)
       
   586 		{
       
   587 		iState = EVideoStopped;
       
   588 		iFileLogger.Write(_L("CMVSVideoPlayAgent Stopped"));
       
   589 		}
       
   590 	else
       
   591 		{
       
   592 		iState = ENotReady;
       
   593 		}
       
   594     iObserver.UpdateStateChange(iState, err);
       
   595     
       
   596     return err;
       
   597 	}
       
   598 
       
   599 
       
   600 /**
       
   601 Video playback is paused. The current position is maintained and playback can be
       
   602 resumed by calling Play.
       
   603 */
       
   604 EXPORT_C void CMVSVideoPlayAgent::PauseL()
       
   605 	{
       
   606     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
   607 	
       
   608     TRAPD(err, iCurrentVideoPlayer->PauseL());
       
   609 	if(err == KErrNone)
       
   610 		{
       
   611 		iState = EVideoPaused;
       
   612 		iFileLogger.Write(_L("CMVSVideoPlayAgent Paused "));
       
   613 		}
       
   614 	else
       
   615 		{
       
   616 		iState = ENotReady;
       
   617 		iFileLogger.Write(_L("CMVSVideoPlayAgent Not Ready"));	
       
   618 		}	
       
   619 	iObserver.UpdateStateChange(iState, err);
       
   620 	}
       
   621 	
       
   622 
       
   623 /**
       
   624 Sends custom command to the plugin controller.
       
   625 Passes handle and size of the drawable window.
       
   626 
       
   627 Sets the display window. This is used to provide the video controller with an area of
       
   628 the display to render the current video frame.
       
   629 
       
   630 @param  aWs
       
   631         The window server session ID.
       
   632 @param  aScreenDevice
       
   633         The software device screen.
       
   634 @param  aWindowRect
       
   635         The window to display.
       
   636 @param  aScreenRect
       
   637         The dimensions of the display window.
       
   638 @param  aClipRect
       
   639         The area of the video clip to display in the window.
       
   640 */	
       
   641 EXPORT_C void CMVSVideoPlayAgent::SetDisplayWindowL(RWsSession &aWs, CWsScreenDevice &aScreenDevice, RWindow &aWindow, const TRect &aWindowRect, const TRect &aClipRect)
       
   642 	{
       
   643     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
   644 	
       
   645 	iFileLogger.Write(_L("SettingDisplayWindow"));	
       
   646     iCurrentVideoPlayer->SetDisplayWindowL(aWs, aScreenDevice, aWindow, aWindowRect, aClipRect);
       
   647 	}
       
   648 	
       
   649 
       
   650 /**
       
   651 Sets the video frame rate.
       
   652 
       
   653 @param  aFramesPerSecond
       
   654         The number of frames per second to request.
       
   655 */
       
   656 EXPORT_C void CMVSVideoPlayAgent::SetVideoFrameRateL(TReal32 aFramesPerSecond)
       
   657 	{
       
   658     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
   659 	
       
   660 	iFileLogger.Write(_L("SettingVedioFrameRate "));
       
   661     iCurrentVideoPlayer->SetVideoFrameRateL(aFramesPerSecond);
       
   662 	}
       
   663 
       
   664 
       
   665 /**
       
   666 Sets the playback volume for the audio track of the video clip.
       
   667 
       
   668 The volume can be changed before or during playback and is effective immediately. The volume can
       
   669 be set to any value between zero (mute) and the maximum permissible volume
       
   670 (determined using MaxVolume()).
       
   671 
       
   672 To determine if the current video clip contains an audio track, use AudioEnabledL().
       
   673 
       
   674 
       
   675 @param  aVolume
       
   676         The volume, between 0 and MaxVolume().
       
   677 */
       
   678 EXPORT_C void CMVSVideoPlayAgent::SetVolumeL(TInt aVolume)
       
   679 	{
       
   680     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));			
       
   681 	
       
   682 	iFileLogger.Write(_L("Setting CMVSVideoPlayAgent's Volume "));
       
   683 	iCurrentVideoPlayer->SetVolumeL(aVolume);
       
   684 	}
       
   685 	
       
   686 
       
   687 /**
       
   688 Sets the current playback balance for the audio track of the video clip.
       
   689 
       
   690 The balance can be any value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight,
       
   691 the default value being KMMFBalanceCenter.
       
   692 
       
   693 @param  aBalance
       
   694         The balance value to set.
       
   695 */
       
   696 EXPORT_C void CMVSVideoPlayAgent::SetBalanceL(TInt aBalance)
       
   697 	{
       
   698     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));				
       
   699 	
       
   700 	iFileLogger.Write(_L("Setting CMVSVideoPlayAgent's Balance"));
       
   701 	iCurrentVideoPlayer->SetBalanceL(aBalance);
       
   702 	}
       
   703 	
       
   704 
       
   705 /**
       
   706 Sets the playback priority. 
       
   707 
       
   708 This is used to arbitrate between multiple objects simultaneously trying to accesses
       
   709 the sound hardware.
       
   710 
       
   711 @param  aPriority
       
   712         The priority level to apply, EMdaPriorityMin client can be interrupted by any other 
       
   713         client, EMdaPriorityNormal client can only be interrupted by a client with a higher 
       
   714         priority or EMdaPriorityMax client cannot be interrupted by other clients.
       
   715 @param  aPref
       
   716         The time and quality preferences to apply, enumerated in TMdaPriorityPreference.
       
   717 */
       
   718 EXPORT_C void CMVSVideoPlayAgent::SetPriorityL(TInt aPriority, TMdaPriorityPreference aPref)
       
   719 	{
       
   720     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));				
       
   721 	
       
   722 	iFileLogger.Write(_L("Setting Priority of CMVSVideoPlayAgent"));
       
   723 	iCurrentVideoPlayer->SetPriorityL(aPriority, aPref);
       
   724 	}
       
   725 	
       
   726 
       
   727 /**
       
   728 Sets the position within the video clip from where to start playback.
       
   729 
       
   730 @param  aPosition
       
   731         Position from start of clip in microseconds.
       
   732 */
       
   733 EXPORT_C void CMVSVideoPlayAgent::SetPositionL(const TTimeIntervalMicroSeconds &aPosition)
       
   734     {
       
   735     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));					
       
   736 
       
   737     iFileLogger.Write(_L("Setting Position of CMVSVideoPlayAgent"));
       
   738     iCurrentVideoPlayer->SetPositionL(aPosition);
       
   739     }
       
   740 	
       
   741 
       
   742 /**
       
   743 Rotates the video image on the screen.
       
   744 
       
   745 @param  aRotation
       
   746         The desired rotation to apply in 90 degree increments.
       
   747 */
       
   748 EXPORT_C void CMVSVideoPlayAgent::SetRotationL(TVideoRotation aRotation)
       
   749 	{
       
   750     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));					
       
   751 		
       
   752 	iFileLogger.Write(_L("Setting Rotations of CMVSVideoPlayAgent"));
       
   753     iCurrentVideoPlayer->SetRotationL(aRotation);
       
   754 	}
       
   755 	
       
   756 
       
   757 
       
   758 /**
       
   759 Scales the video image to a specified percentage of its original size.
       
   760 
       
   761 @param  aWidthPercentage
       
   762         The percentage (100 = original size) to be used to scale the width of the video image
       
   763 @param  aHeightPercentage
       
   764         The percentage (100 = original size) to be used to scale the height of the video image. 
       
   765         If this is not equal to aWidthPercentage then the image may be distorted.
       
   766 @param  aAntiAliasFiltering
       
   767         A boolean specifying if anti-aliasing should be used. True if anti-aliasing filtering 
       
   768         should be used.  If the plugin does not	support this kind of processing, 
       
   769         this value will be ignored.
       
   770 */
       
   771 EXPORT_C void CMVSVideoPlayAgent::SetScaleFactorL(TReal32 aWidthPercentage, TReal32 aHeightPercentage, TBool aAntiAliasFiltering)
       
   772 	{
       
   773     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));					
       
   774 		
       
   775 	iFileLogger.Write(_L("Setting ScaleFactor of CMVSVideoPlayAgent"));
       
   776 	iCurrentVideoPlayer->SetScaleFactorL(aWidthPercentage, aHeightPercentage, aAntiAliasFiltering);
       
   777 	}
       
   778 
       
   779 
       
   780 /**
       
   781 Selects a region of the video image to be displayed.
       
   782 
       
   783 @param  aCropRegion
       
   784         The dimensions of the crop region, relative to the video image.
       
   785 @see   GetCropRegionL
       
   786 */
       
   787 EXPORT_C void CMVSVideoPlayAgent::SetCropRegionL(const TRect& aCropRegion)
       
   788 	{
       
   789     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));					
       
   790 	
       
   791 	iFileLogger.Write(_L("Setting CorpRegion of CMVSVideoPlayAgent"));
       
   792     iCurrentVideoPlayer->SetCropRegionL(aCropRegion);
       
   793 	}
       
   794 
       
   795 /**
       
   796 Selects the video extent on the screen, relative to the window.
       
   797 
       
   798 @param  aVideoExtent
       
   799         The new video extent, relative to the window
       
   800 @leave  KErrNotSupport if CVideoPlayerUtility is used for video playback
       
   801 */
       
   802 #ifdef SYMBIAN_BUILD_GCE
       
   803 EXPORT_C void CMVSVideoPlayAgent::SetVideoExtentL(const TRect& aVideoExtent)
       
   804 #else
       
   805 EXPORT_C void CMVSVideoPlayAgent::SetVideoExtentL(const TRect& /* aVideoExtent */)
       
   806 #endif  // SYMBIAN_BUILD_GCE
       
   807 	{
       
   808 	iFileLogger.Write(_L("Setting VideoExtent of CMVSVideoPlayAgent"));
       
   809 	
       
   810 #ifdef SYMBIAN_BUILD_GCE	
       
   811 	if(SupportVideoPlayerUtility2())
       
   812 		{
       
   813 		if (iWindow)
       
   814 		    {		        
       
   815 		    iVideoPlayer2->SetVideoExtentL(*iWindow, aVideoExtent);
       
   816 		    }            		    
       
   817         else 
       
   818             {
       
   819 		    iFileLogger.Write(_L("WARNING - Display Window has not been set.  Caller should save these values to be set again later."));
       
   820             }
       
   821 		return;
       
   822 		}
       
   823 #endif  // SYMBIAN_BUILD_GCE		
       
   824 
       
   825 	User::Leave(KErrNotSupported);
       
   826 	}
       
   827 
       
   828 /**
       
   829 Selects the window clipping rectangle, relative to the window
       
   830 
       
   831 @param  aWindowClipRect
       
   832         The new window clipping rectangle, relative to the window
       
   833 @leave  KErrNotSupport if CVideoPlayerUtility is used for video playback
       
   834 */
       
   835 #ifdef SYMBIAN_BUILD_GCE
       
   836 EXPORT_C void CMVSVideoPlayAgent::SetWindowClipRectL(const TRect& aWindowClipRect)
       
   837 #else
       
   838 EXPORT_C void CMVSVideoPlayAgent::SetWindowClipRectL(const TRect& /* aWindowClipRect */)
       
   839 #endif  // SYMBIAN_BUILD_GCE
       
   840 	{
       
   841     iFileLogger.Write(_L("Setting WindowClippingRect of CMVSVideoPlayAgent"));
       
   842 	
       
   843 #ifdef SYMBIAN_BUILD_GCE
       
   844     if (SupportVideoPlayerUtility2())
       
   845         {            	
       
   846         if (iWindow)
       
   847             {                
       
   848             iVideoPlayer2->SetWindowClipRectL(*iWindow, aWindowClipRect);	
       
   849             }
       
   850         else 
       
   851             {
       
   852 		    iFileLogger.Write(_L("WARNING - Display Window has not been set.  Caller should save these values to be set again later."));
       
   853             }
       
   854         return;
       
   855         }
       
   856 #endif  // SYMBIAN_BUILD_GCE        														
       
   857 
       
   858     User::Leave(KErrNotSupported);
       
   859 	}
       
   860 
       
   861 
       
   862 /**
       
   863 Gets the current frame. The current frame is requested, and will be sent to
       
   864 the client asynchrynously.
       
   865 
       
   866 @param  aDisplayMode
       
   867         The display mode for the retrieved frame.
       
   868 */
       
   869 EXPORT_C void CMVSVideoPlayAgent::GetFrameL(TDisplayMode aDisplayMode)
       
   870 	{
       
   871     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));						
       
   872 	iCurrentVideoPlayer->GetFrameL(aDisplayMode);
       
   873 	}
       
   874 
       
   875 
       
   876 /**
       
   877 Gets the current frame. The current frame is requested, and will be sent to
       
   878 the client asynchrynously.
       
   879 
       
   880 @param  aDisplayMode
       
   881         The display mode for the retrieved frame.
       
   882 @param  aIntent
       
   883         The DRM Intent to pass to the controller.
       
   884 */
       
   885 EXPORT_C void CMVSVideoPlayAgent::GetFrameL(TDisplayMode aDisplayMode, ContentAccess::TIntent aIntent)
       
   886 	{
       
   887     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));							
       
   888 	iCurrentVideoPlayer->GetFrameL(aDisplayMode, aIntent);
       
   889 	}
       
   890 
       
   891 
       
   892 /**
       
   893 Returns the video frame rate in frames/second.
       
   894 
       
   895 @return The video frame rate (frames/second).
       
   896 */
       
   897 EXPORT_C TReal32 CMVSVideoPlayAgent::VideoFrameRateL()
       
   898 	{
       
   899     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));							
       
   900 	
       
   901 	iFileLogger.Write(_L("Getting VideoFrameRate for CMVSVideoPlayAgent"));
       
   902 	return iCurrentVideoPlayer->VideoFrameRateL();
       
   903 	}
       
   904 
       
   905 
       
   906 /**
       
   907 Gets the video frame size.
       
   908 
       
   909 @param  aSize
       
   910         The video frame size
       
   911 */
       
   912 EXPORT_C void CMVSVideoPlayAgent::VideoFrameSizeL(TSize &aSize) 
       
   913 	{
       
   914     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));								
       
   915 	
       
   916 	iFileLogger.Write(_L("Getting VideoFrameFrameSize for CMVSVideoPlayAgent"));	
       
   917 	iCurrentVideoPlayer->VideoFrameSizeL(aSize);
       
   918 	}
       
   919 
       
   920 
       
   921 /**
       
   922 Returns the video format's MIME type.
       
   923 
       
   924 @return The video clip's MIME type.
       
   925 */
       
   926 EXPORT_C const TDesC8& CMVSVideoPlayAgent::VideoFormatMimeType() 
       
   927 	{
       
   928     if (iCurrentVideoPlayer)
       
   929         {
       
   930 	    return iCurrentVideoPlayer->VideoFormatMimeType();            
       
   931         }
       
   932     else 
       
   933         {            
       
   934         return KNullDesC8;								
       
   935         }
       
   936 	}
       
   937 
       
   938 
       
   939 /**
       
   940 Returns the video bit rate.
       
   941 
       
   942 @return The video bit rate in bits/second.
       
   943 */
       
   944 EXPORT_C TInt CMVSVideoPlayAgent::VideoBitRateL() 
       
   945 	{
       
   946     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));									
       
   947 	
       
   948 	iFileLogger.Write(_L("Getting VideoBitRate for CMVSVideoPlayAgent"));
       
   949 	return iCurrentVideoPlayer->VideoBitRateL();
       
   950 	}
       
   951 
       
   952 
       
   953 /**
       
   954 Returns the audio bit rate in bits/second.
       
   955 
       
   956 @return The audio bit rate (bits/second).
       
   957 */
       
   958 EXPORT_C TInt CMVSVideoPlayAgent::AudioBitRateL()
       
   959 	{
       
   960     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));									
       
   961 		
       
   962 	iFileLogger.Write(_L("Getting AudioBitRate for CMVSVideoPlayAgent"));	
       
   963 	return iCurrentVideoPlayer->AudioBitRateL();
       
   964 	}
       
   965 
       
   966 
       
   967 /**
       
   968 Returns the codec used for the audio component of the video clip.
       
   969 
       
   970 @return The four character code representing the audio codec.
       
   971 */
       
   972 EXPORT_C TFourCC CMVSVideoPlayAgent::AudioTypeL()
       
   973 	{
       
   974     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));										
       
   975 	
       
   976 	iFileLogger.Write(_L("Getting AudioType for CMVSVideoPlayAgent"));
       
   977 	return iCurrentVideoPlayer->AudioTypeL();
       
   978 	}
       
   979 
       
   980 
       
   981 /**
       
   982 Returns whether the current clip has an audio stream.
       
   983 
       
   984 @return Boolean indication the presence of an audio stream. ETrue if an audio track is present,
       
   985         otherwise EFalse.
       
   986 */
       
   987 EXPORT_C TBool CMVSVideoPlayAgent::AudioEnabledL() 
       
   988 	{
       
   989     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));
       
   990 	
       
   991 	iFileLogger.Write(_L("CMVSVideoPlayAgent's Audio Enabled"));
       
   992 	return iCurrentVideoPlayer->AudioEnabledL();
       
   993 	}
       
   994 
       
   995 
       
   996 /**
       
   997 Returns the current playback position.
       
   998 
       
   999 @return The current position from the start of the clip in microseconds.
       
  1000 */
       
  1001 EXPORT_C TTimeIntervalMicroSeconds CMVSVideoPlayAgent::PositionL() 
       
  1002 	{
       
  1003     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));
       
  1004 	return iCurrentVideoPlayer->PositionL();
       
  1005 	}
       
  1006 
       
  1007 
       
  1008 /**
       
  1009 Returns the duration of video clip in mircoseconds.
       
  1010 
       
  1011 @return The duration of clip in microseconds.
       
  1012 */
       
  1013 EXPORT_C TTimeIntervalMicroSeconds CMVSVideoPlayAgent::DurationL() 
       
  1014 	{
       
  1015     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));	
       
  1016 	return iCurrentVideoPlayer->DurationL();
       
  1017 	}
       
  1018 
       
  1019 
       
  1020 /**
       
  1021 Returns the current playback volume for the audio track of the video clip.
       
  1022 
       
  1023 @return A value between 0 (mute) and the maximum volume returned by MaxVolume().
       
  1024 */
       
  1025 EXPORT_C TInt CMVSVideoPlayAgent::Volume() 
       
  1026 	{
       
  1027 	return iCurrentVideoPlayer->Volume();
       
  1028 	}
       
  1029 
       
  1030 
       
  1031 /**
       
  1032 Get the current playback priority. This is used to arbitrate between simultaneous accesses of
       
  1033 the sound hardware.
       
  1034 
       
  1035 @param  aPriority
       
  1036         On return, contains the priority level, EMdaPriorityMin client can be interrupted by any
       
  1037         other client, EMdaPriorityNormal client can only be interrupted by a client with a higher 
       
  1038         priority or EMdaPriorityMax client cannot be interrupted by other clients.
       
  1039 @param  aPref
       
  1040         On return, contains the time and quality preferences, enumerated in TMdaPriorityPreference.
       
  1041 */
       
  1042 EXPORT_C void CMVSVideoPlayAgent::PriorityL(TInt &aPriority, TMdaPriorityPreference &aPref) 
       
  1043 	{
       
  1044     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
  1045 	iCurrentVideoPlayer->PriorityL(aPriority, aPref);
       
  1046 	}
       
  1047 
       
  1048 
       
  1049 /**
       
  1050 Returns the current balance setting for the audio track of the video clip.
       
  1051 
       
  1052 @return A balance value between KMMFBalanceMaxLeft and KMMFBalanceMaxRight.
       
  1053 */
       
  1054 EXPORT_C TInt CMVSVideoPlayAgent::Balance() 
       
  1055 	{
       
  1056 	return iCurrentVideoPlayer->Balance();	
       
  1057 	}
       
  1058 
       
  1059 	
       
  1060 /**
       
  1061 Query the rotation that is currently applied to the video image.
       
  1062 
       
  1063 @return The applied rotation
       
  1064 
       
  1065 @see   SetRotationL
       
  1066 */
       
  1067 EXPORT_C TVideoRotation CMVSVideoPlayAgent::RotationL() 
       
  1068 	{
       
  1069     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
  1070 	return iCurrentVideoPlayer->RotationL();
       
  1071 	}
       
  1072 
       
  1073 
       
  1074 /**
       
  1075 Gets the scale factor currently applied to the video image.
       
  1076 
       
  1077 @param  aWidthPercentage
       
  1078         On function return, contains the current scaling percentage applied to the width of the
       
  1079         video image (100 = original size).
       
  1080 @param  aHeightPercentage
       
  1081         On function return, contains the current scaling percentage applied to the height of the
       
  1082         of the video image (100 = original size).
       
  1083 @param  aAntiAliasFiltering
       
  1084         The boolean specifying if anit-aliasing is being used.
       
  1085 @see    SetScaleFactorL
       
  1086 */
       
  1087 EXPORT_C void CMVSVideoPlayAgent::GetScaleFactorL(TReal32 &aWidthPercentage, TReal32 &aHeightPercentage, TBool &aAntiAliasFiltering) 
       
  1088 	{
       
  1089     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
  1090 	iCurrentVideoPlayer->GetScaleFactorL(aWidthPercentage, 
       
  1091 	                                     aHeightPercentage, 
       
  1092 	                                     aAntiAliasFiltering);
       
  1093 	}
       
  1094 
       
  1095 
       
  1096 /**
       
  1097 Gets the crop region currently applied to the image.
       
  1098 
       
  1099 @param  aCropRegion
       
  1100         The dimensions of the crop region, relative to the video image. If no
       
  1101         crop region has been applied, the full dimensions of the video image will
       
  1102         be returned.
       
  1103 
       
  1104 @see   SetCropRegionL
       
  1105 */
       
  1106 EXPORT_C void CMVSVideoPlayAgent::GetCropRegionL(TRect &aCropRegion) 
       
  1107 	{
       
  1108     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
  1109 	iCurrentVideoPlayer->GetCropRegionL(aCropRegion);
       
  1110 	}
       
  1111 
       
  1112 
       
  1113 /**
       
  1114 Returns the number of meta data entries associated with this clip.
       
  1115 
       
  1116 @return The number of meta data entries.
       
  1117 */
       
  1118 EXPORT_C TInt CMVSVideoPlayAgent::NumberOfMetaDataEntriesL()
       
  1119 	{
       
  1120     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
  1121     return iCurrentVideoPlayer->NumberOfMetaDataEntriesL();
       
  1122 	}
       
  1123 
       
  1124 
       
  1125 /**
       
  1126 Returns an array containing the MetaDataEntry for the given audio clip
       
  1127 
       
  1128 @param  aMetaData
       
  1129         The meta data Array
       
  1130 
       
  1131 @leave	Leaves with KErrNotFound if the meta data entry does not exist or
       
  1132 		KErrNotSupported if the controller does not support meta data 
       
  1133 		information for this format. Other errors indicate more general system
       
  1134 		failure.
       
  1135 */
       
  1136 EXPORT_C void  CMVSVideoPlayAgent::GetMetaDataArrayL(RPointerArray<CMMFMetaDataEntry>& aMetaData)
       
  1137 	{
       
  1138     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
  1139 	
       
  1140 	//Reset the meta array
       
  1141     aMetaData.Reset();        
       
  1142     TInt entries = NumberOfMetaDataEntriesL();
       
  1143        
       
  1144     CMMFMetaDataEntry* entry = NULL;        
       
  1145   	for(TInt index= 0; index < entries; ++index)
       
  1146 		{
       
  1147         entry = iCurrentVideoPlayer->MetaDataEntryL(index);
       
  1148 		aMetaData.Append(entry);        
       
  1149         }
       
  1150 	}
       
  1151 
       
  1152 /**
       
  1153 Returns the controller implementation information associated with the current controller.
       
  1154 
       
  1155 @return The controller implementation structure
       
  1156 */	
       
  1157 EXPORT_C const CMMFControllerImplementationInformation& CMVSVideoPlayAgent::ControllerImplementationInformationL()
       
  1158 	{
       
  1159     __ASSERT_DEBUG(iCurrentVideoPlayer, User::Leave(KErrNotReady));		
       
  1160     	
       
  1161 	iFileLogger.Write(_L("Getting the ControllerImplementationInformation of CMVSVideoPlayAgent")) ;
       
  1162     return iCurrentVideoPlayer->ControllerImplementationInformationL();
       
  1163 	}
       
  1164 
       
  1165 
       
  1166 /**
       
  1167 Returns the current state of the CMVSAudioPlayAgent.
       
  1168 
       
  1169 @return The current state, iState.
       
  1170 */
       
  1171 EXPORT_C TMVSState CMVSVideoPlayAgent::GetState()
       
  1172 	{
       
  1173 	return iState;
       
  1174 	}
       
  1175 
       
  1176 /**
       
  1177 Sets the specified output screen to render the video.
       
  1178 
       
  1179 @return KErrNone,on success else any of the system wide error code.
       
  1180 */
       
  1181 EXPORT_C TInt CMVSVideoPlayAgent::SetScreenNumber(TInt aScreenNumber)
       
  1182 	{
       
  1183 	TInt err = KErrNone;
       
  1184 	
       
  1185     if (!iCurrentVideoPlayer)
       
  1186         {
       
  1187         err = iVideoPlayer->SetInitScreenNumber(aScreenNumber);
       
  1188         }
       
  1189     else
       
  1190     	{
       
  1191     	err = iCurrentVideoPlayer->SetInitScreenNumber(aScreenNumber);
       
  1192     	}
       
  1193     
       
  1194     if (err == KErrNone)
       
  1195 		{
       
  1196 	    iScreenNumber = aScreenNumber;
       
  1197 		}
       
  1198 		
       
  1199     return err;
       
  1200 	}
       
  1201 
       
  1202 /**
       
  1203 Registers for audio resource notification.
       
  1204 
       
  1205 @return KErrNone,on success else any of the system wide error code.
       
  1206 */
       
  1207 EXPORT_C TInt CMVSVideoPlayAgent::RegisterForNotification()
       
  1208 	{
       
  1209 	if (!iCurrentVideoPlayer)
       
  1210 	    {
       
  1211         // Set the request notify flag.  When we select which video player we are using we
       
  1212 	    // will issue the request for notification.
       
  1213 	    iRequestNotify = ETrue;
       
  1214         return KErrNone;			        
       
  1215 	    }
       
  1216 	
       
  1217     return iCurrentVideoPlayer->RegisterAudioResourceNotification(*this, KMMFEventCategoryAudioResourceAvailable);
       
  1218 	}
       
  1219 
       
  1220 /**
       
  1221 Cancels any existing registeration to audio resource notification.
       
  1222 
       
  1223 @return KErrNone,on success else any of the system wide error code.
       
  1224 */	
       
  1225 EXPORT_C TInt CMVSVideoPlayAgent::CancelNotification()
       
  1226 	{
       
  1227 	if (!iCurrentVideoPlayer)
       
  1228 	    {
       
  1229 	    iRequestNotify = EFalse;
       
  1230         return KErrNone;
       
  1231 	    }
       
  1232 	
       
  1233     return iCurrentVideoPlayer->CancelRegisterAudioResourceNotification(KMMFEventCategoryAudioResourceAvailable);
       
  1234 	}
       
  1235 	
       
  1236 EXPORT_C TInt CMVSVideoPlayAgent::WillResumePlay()
       
  1237 	{
       
  1238 	if (!iCurrentVideoPlayer)
       
  1239 	    {
       
  1240         return KErrNotReady;			        
       
  1241 	    }
       
  1242     return iCurrentVideoPlayer->WillResumePlay();
       
  1243 	}
       
  1244 
       
  1245 /**
       
  1246 Returns an integer representing the maximum volume that the audio track can support.
       
  1247 
       
  1248 This is the maximum value that can be passed to SetVolumeL(). This value is platform 
       
  1249 independent, but is always greater than or equal to one.
       
  1250 
       
  1251 @return The maximum playback volume.
       
  1252 */
       
  1253 EXPORT_C TInt CMVSVideoPlayAgent::MaxVolume() 
       
  1254     {
       
  1255 	if (!iCurrentVideoPlayer)
       
  1256 	    {
       
  1257         return iVideoPlayer->MaxVolume();
       
  1258 	    }
       
  1259 	
       
  1260     return iCurrentVideoPlayer->MaxVolume();
       
  1261     }
       
  1262     
       
  1263 #ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
       
  1264 EXPORT_C void CMVSVideoPlayAgent::EnableSubtitlesL()
       
  1265 	{
       
  1266 	__ASSERT_DEBUG(iVideoPlayer2, User::Leave(KErrNotReady));
       
  1267 	
       
  1268 	if (iWindow)
       
  1269 		{
       
  1270 		iVideoPlayer2->EnableSubtitlesL();
       
  1271 		}
       
  1272 	else
       
  1273 		{
       
  1274 		iEnableSubtitlesOnAdd = ETrue;
       
  1275 		}
       
  1276 	}
       
  1277 
       
  1278 EXPORT_C void CMVSVideoPlayAgent::DisableSubtitlesL()
       
  1279 	{
       
  1280 	__ASSERT_DEBUG(iVideoPlayer2, User::Leave(KErrNotReady));
       
  1281 	iVideoPlayer2->DisableSubtitles();
       
  1282 	iEnableSubtitlesOnAdd = EFalse;
       
  1283 	}
       
  1284 
       
  1285 EXPORT_C TBool CMVSVideoPlayAgent::SubtitlesAvailable()
       
  1286 	{
       
  1287 	if (iVideoPlayer2)
       
  1288 		{
       
  1289 		return iVideoPlayer2->SubtitlesAvailable();
       
  1290 		}
       
  1291 	
       
  1292 	return EFalse;
       
  1293 	}
       
  1294 
       
  1295 EXPORT_C void CMVSVideoPlayAgent::RenderSubtitle(const TRect& aRect)
       
  1296 	{
       
  1297 	if (iVideoPlayer2)
       
  1298 		{
       
  1299 		iVideoPlayer2->RedrawSubtitle(*iWindow, aRect);
       
  1300 		}
       
  1301 	}
       
  1302 
       
  1303 #endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT