diff -r 0fd27995241b -r 9ac0a0a7da70 javauis/mmapi_qt/baseline/inc.nga/cmmasurfacewindow.h --- a/javauis/mmapi_qt/baseline/inc.nga/cmmasurfacewindow.h Tue May 11 16:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,364 +0,0 @@ -/* -* Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: This class implements MMMADisplayWindow functionality -* in graphics surface based displays for Helix engine. -* -*/ - -#ifndef CMMASURFACEWINDOW_H -#define CMMASURFACEWINDOW_H - - -// INCLUDES -#include -//#include -#include -#include -#include - -#include -#include -#include "mmmadisplaywindow.h" -#include "mmafunctionserver.h" -#include "cmmaplayer.h" -#include "cmmacanvasdisplay.h" - -// FORWARD DECLARATIONS -class RWsSession; -class CWsScreenDevice; -class RWindowBase; -class MMMADisplay; - -// CONSTANTS -const TInt KMMAVideoMinDimension = 32; // minimum video width and height - -// CLASS DECLARATION -/** -* This class implements MMMADisplayWindow functionality -* in video display to graphics surface based displays for Helix engine. -*/ -NONSHARABLE_CLASS(CMMASurfaceWindow): public CBase, - public MMMADisplayWindow/*, - public MUiEventConsumer*/ -{ -public: - /** - * indicates what method needs to be called in UI thread context. - */ - enum TUiCallbackType - { - ERemoveSurface = 1, - ESetDrawRect, - EInitVideoDisplay, - EResetSurfaceParameters, - ESetChangedSurfaceParameters, - ECleanVideoDisplay, - EDestroyWindow - }; - -private: - /** - * indicates different video display initialization states - * - * video display state transition can happen in following order: - * 1. when MIDlet code is: - * Player player = Manager.createPlayer(..); - * player.realize(); - * VideoControl vc = (VideoControl)player.getControl("VideoControl"); - * vc.initDisplayMode(..); - * player.start(); - * - * EUIResourcesAndSurfaceParametersNotSet - * EUIResourcesSetAndSurfaceParametersNotSet - * EUIResourcesAndSurfaceParametersSet - * - * OR - * - * 2. when MIDlet code is: - * Player player = Manager.createPlayer(..); - * player.start(); - * VideoControl vc = (VideoControl)player.getControl("VideoControl"); - * vc.initDisplayMode(..); - * - * EUIResourcesAndSurfaceParametersNotSet - * ESurfaceParametersSetAndUIResourcesNotSet - * EUIResourcesAndSurfaceParametersSet - * - * InitVideoDisplayL() should be called only after EUIResourcesAndSurfaceParametersSet - * state is reached. ie both UI resources and surface parameters becomes available. - * - * 3. for below mentioned MIDlet code case: - * Player player = Manager.createPlayer(..); - * player.start(); // state transition is - * - * EUIResourcesAndSurfaceParametersNotSet - * ESurfaceParametersSetAndUIResourcesNotSet - * note that InitVideoDisplayL() is not called and video is not displayed in this case. - */ - enum TVideoDisplayInitState - { - /** - * indicates ui resources and surface parameters are not yet set. - * UI resources are RWindowBase, CWsScreenDevice and RWsSession. - * Surface parameters are TSurfaceId, TRect and TVideoAspectRatio. - */ - EUIResourcesAndSurfaceParametersNotSet = 1, - /** - * indicates UI resources are set and surface parameters not yet set. - * UI resources are set when initDisplayMode() is called and RWindow becomes available. - */ - EUIResourcesSetAndSurfaceParametersNotSet, - /** - * indicates UI resources are not yet set and surface parameters are set. - * Surface parameters are set when player.start() is called. - */ - ESurfaceParametersSetAndUIResourcesNotSet, - /** - * indicates UI resources and surface parameters are set. - */ - EUIResourcesAndSurfaceParametersSet - }; - -public: // Constructors and destructors - static CMMASurfaceWindow* NewL( - MMAFunctionServer* aEventSource, - CMMAPlayer* aPlayer); - - virtual ~CMMASurfaceWindow(); - -private: // Constructors and destructors - CMMASurfaceWindow( - MMAFunctionServer* aEventSource, - CMMAPlayer* aPlayer); - -public: // Methods derived from MMMADisplayWindow - void SetDestinationBitmapL(CFbsBitmap* aBitmap); - void DrawFrameL(const CFbsBitmap* aBitmap); - void SetDrawRect(const TRect& aRect); - void SetDrawRectThread(const TRect& aRect); - const TRect& DrawRect(); - TSize WindowSize(); - void SetPosition(const TPoint& aPosition); - void SetVisible(TBool aVisible, TBool aUseEventServer = ETrue); - void SetWindowRect(const TRect& aRect,MMMADisplay::TThreadType aThreadType); - void SetVideoCropRegion(const TRect& aRect); - void SetRWindowRect(const TRect& aRect, MMMADisplay::TThreadType aThreadType); - const TRect& WindowRect(); - void ContainerDestroyed(); - void ContainerSet(); -/* -public: // from base class MUiEventConsumer - void MdcDSAResourcesCallback(RWsSession &aWs, - CWsScreenDevice &aScreenDevice, - RWindowBase &aWindow); - -*/ - void UICallback(TInt aCallbackId); - public: - virtual void ProcureWindowResourcesFromQWidget(RWsSession * aWs, - CWsScreenDevice* aScreenDevice, - RWindowBase* aWindow); - - virtual CMMAPlayer* UiPlayer(); - -public: // New methods - TBool IsVisible() const; - void SetDisplay(MMMADisplay *aDisplay); - - /** - * copies surface paramaters and intializes video display if - * RWindow is already set, ie if intDisplayMode already called in midlet. - * invokes InitVideoDisplayL() in UI thread context. - * - * @params aSurfaceId, aCropRect, aPixelAspectRatio surface paramaters. - */ - void SetSurfaceParameters(const TSurfaceId& aSurfaceId, - const TRect& aCropRect, - const TVideoAspectRatio& aPixelAspectRatio); - - /** - * invokes DoRemoveSurface() in UI thread context. - */ - void RemoveSurface(); - - /** - * updates members variables with new surface parameters and invokes - * DoSetChangedSurfaceParameters() in UI thread context. - * - * @params aSurfaceId, aCropRect, aPixelAspectRatio surface paramaters. - */ - void SetChangedSurfaceParameters(const TSurfaceId& aSurfaceId, - const TRect& aCropRect, - const TVideoAspectRatio& aPixelAspectRatio); - -private: // New methods - /** - * scales video to the required size. - * This method must always be executed in UI-Thread context. - * - * @param aRect rectangular size to which the video has to be scaled. - */ - void ScaleVideoL(const TRect& aRect); - - /** - * starts video rendering to a graphics surface. - * restarts video rendering to a graphics surafce with changed parameters. - * This method must always be executed in UI-Thread context. - */ - void RedrawVideoL(); - - /** - * utility function to invoke RedrawVideoL() function with in a TRAP harness. - * - * @param aSurfaceWindow reference to CMMASurfaceWindow instance on which RedrawVideoL() - * has to be invoked - * @return TInt Symbian OS error code, KErrNone if no error - */ - static TInt StaticRedrawVideo(CMMASurfaceWindow& aSurfaceWindow); - - /** - * creates new instance of CMediaClientVideoDisplay and intializes it with - * surfaces and windows. - * This method must always be executed in UI-Thread context. - */ - void InitVideoDisplayL(); - - /** - * updates CMediaClientVideoDisplay instance with new surface parameters. - * This method must always be executed in UI-Thread context. - */ - void DoSetChangedSurfaceParameters(); - - /** - * resets CMediaClientVideoDisplay instance with new surface parameters. - * This method must always be executed in UI-Thread context. - */ - void DoResetSurfaceParameters(); - - /** - * Removes Surface from RWindow - * This method must always be executed in UI-Thread context. - */ - void DoRemoveSurface(); - - /** - * removes surfaces and windows from CMediaClientVideoDisplay instance - * and deletes the instance. - * This method must always be executed in UI-Thread context. - */ - void CleanVideoDisplay(); - - /** - * Deletes this object. - * - * @since S60 v5.2 - */ - void Destroy(); - -private: // Data - /** - * drawing area where video is rendered. - */ - TRect iContentRect; - - /** - * parent rectangle used for positioning contentRect. - */ - TRect iParentRect; - - /** - * Symbian RWindow rect - */ - TRect iRWindowRect; - - /** - * not owned, used for switching from UI thread to MMA thread - */ - MMAFunctionServer* iEventSource; - - /** - * We must depend on player's state because direct screen access may - * not be resumed before player is started. - * not owned. - */ - CMMAPlayer* iPlayer; - - /** - * crop rectangle of video - */ - TRect iVideoCropRegion; - - /** - * owned, used for video display on surface - * this instance is created & accessed in UI thread only. - */ - CMediaClientVideoDisplay* iMediaClientVideoDisplay; - - /** - * Display instance used to invoke UI callbacks. - * Not owned. - */ - MMMADisplay* iDisplay; - - /** - * Window server session used by UI thread. - * Adjustable and usable from UI thread only. - * Not owned. - */ - RWsSession* iWs; - - /** - * Screen device used by UI thread. - * Adjustable and usable from UI thread only. - * Not owned. - */ - CWsScreenDevice* iScreenDevice; - - /** - * Window where video is displayed. - * Adjustable and usable from UI thread only. - * From UI thread. - * Not owned. - */ - RWindowBase* iWindow; - - /** - * The surface to be created for composition. - */ - TSurfaceId iSurfaceId; - - /** - * The dimensions of the crop rectangle, relative to the video image. - */ - TRect iCropRect; - - /** - * The pixel aspect ratio to display video picture. - */ - TVideoAspectRatio iPixelAspectRatio; - - /** - * indicates the video display initialization state. - * - */ - TVideoDisplayInitState iVideoDisplayInitState; - - /** - * Indicates if content need to be drawn. - */ - TBool iVisible; - -}; - -#endif // CMMASURFACEWINDOW_H