tvout/tvoutengine/inc/glxhdmisurfaceupdater.h
branchRCL_3
changeset 59 8e5f6eea9c9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tvout/tvoutengine/inc/glxhdmisurfaceupdater.h	Tue Aug 31 15:14:51 2010 +0300
@@ -0,0 +1,330 @@
+/* Copyright (c) 2008-2009 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:    Handles & propogates UI state change notifications.
+*
+*/
+
+#ifndef GLXHDMISURFACEUPDATER_H_
+#define GLXHDMISURFACEUPDATER_H_
+
+#include <w32std.h>
+#include <fbs.h>
+
+// GCE Surface
+#include "graphics/surfacemanager.h"
+#include "graphics/surface.h"
+#include "graphics/surfaceupdateclient.h"
+#include <graphics/surfaceconfiguration.h>
+
+// forward decleration
+class CGlxActiveCallBack;
+class CGlxHdmiDecoderAO;
+class CImageDecoder;
+class CAlfCompositionSource;
+class TSurfaceConfiguration;
+
+class MGlxGenCallback
+    {
+public:
+    virtual void DoGenCallback() = 0;
+    };
+
+/**
+ * Class Description
+ * This is the main class which processes images to the surface
+ *
+ */        
+
+class CGlxHdmiSurfaceUpdater: public CBase
+    {
+public:
+    /**
+     * NewL
+     * @param aWindow RWindow
+     * @param aImageFile Image File path
+     * @param aFsBitmap Fullscreen bitmap (if FS not available,make sure to send grid or default bitmap
+     * else it would appear white screen on TV )
+     * @param aCallBack MGlxGenCallback instance
+     * @param aEffectsOn If Effects should be on
+     */
+    static CGlxHdmiSurfaceUpdater* NewL(RWindow* aWindow, const TDesC& aImageFile, 
+            CFbsBitmap* aFsBitmap, MGlxGenCallback* aCallBack,TBool aEffectsOn);
+
+    /**
+     * Destructor
+     */
+    ~CGlxHdmiSurfaceUpdater();
+
+public:
+    /**
+     * This is to cancel the active object from decoding 
+     */
+    void HandleRunL(TRequestStatus& aStatus);
+
+    /**
+     * This updates the new image.
+     * @param aImageFile image path
+     * @param aFsBitmap Fullscreen Bitmap
+     * 
+     * NOTE : if FS not available,make sure to send grid or default bitmap
+     * else it would appear white screen on TV 
+     */
+    void UpdateNewImageL(const TDesC& aImageFile,CFbsBitmap* aFsBitmap);
+
+    /**
+     * Activate Zoom 
+     * @param aAutoZoomOut if it should auto zoom out
+     */
+    void ActivateZoom(TBool aAutoZoomOut);
+    
+    /**
+     * Deactivate Zoom 
+     */
+    void DeactivateZoom();
+
+    /**
+     * ShiftToCloningMOde
+     */
+    void ShiftToCloningMode();
+
+    /**
+     * ShiftToPostingMode
+     */
+    void ShiftToPostingMode();
+
+    /**
+     * Fadeing of the Surface
+     * @param aFadeInOut ETrue - FadeIn ( as in gaining brightness )
+     *                   EFalse - FadeOut ( as in loosing brightness ) 
+     */
+    void FadeTheSurface(TBool aFadeInOut);
+
+private:
+    /**
+     * Constructor 
+     * @param aWindow RWindow
+     * @param aCallBack MGlxGenCallback instance
+     * @param aEffectsOn if effects should be on
+     */
+    CGlxHdmiSurfaceUpdater(RWindow* aWindow, MGlxGenCallback* aCallBack,TBool aEffectsOn);
+
+    /**
+     * ConstructL
+     * @param aFsBitmap Fullscreen Bitmap
+     * @param aImageFile image file path
+     */
+    void ConstructL(CFbsBitmap* aFsBitmap,const TDesC& aImageFile);   
+
+    /**
+     * Create a New surface with given size
+     */
+    void CreateSurfaceL();
+
+    /**
+     * MapSurfaceL
+     */
+    void MapSurfaceL();
+
+    /**
+     * This fundtion wont be called , could be used if double buffering is planned in future
+     * to start the second decoder AO and update the surface with a new session. 
+     */
+    static TInt SurfBuffer0Ready(TAny* aObject);    
+    
+    /**
+     * Call a refresh on the screen  
+     */
+    void Refresh();
+
+    /**
+     * Dump the buffer on to the surface stride 
+     */
+    void SwapBuffers();
+
+    /**
+     * Release contents 
+     */
+    void ReleaseContent();
+
+    /**
+     * Create bitmap  
+     */
+    void CreateBitmapL();
+
+    /**
+     * Create an image decoder with given file
+     */
+    void CreateImageDecoderL();
+
+    /**
+     * Creating all enablers for HDMI
+     * @param aCreateSurface if creating a surface is required, 
+     *                       by default it is not required
+     */
+    void CreateHdmiL(TBool aCreateSurface = ETrue);
+
+    /**
+     * Zoom in our out depending on parameter 
+     * @param aZoom if should be zoomed
+     */
+    void Zoom(TBool aZoom);
+
+    /**
+     * This if for zoom timer timeout
+     */
+    static TInt TimeOut(TAny* aSelf);
+    
+    /**
+     * Animation time out timer
+     */
+    static TInt AnimationTimeOut(TAny* aSelf);
+    
+    /**
+     * ModifySurface positions of the surface to be displayed on screen
+     */
+    void ModifySurfacePostion();
+
+    /**
+     * Process the image for TV 
+     */
+    void ProcessTvImage();
+
+    /**
+     * Shows the FS thumbnail first before showing 
+     * Decoded HD image 
+     */
+    void ShowFsThumbnailL();
+
+    /**
+     * Recalculate the size for png/bmp as decoder fails to 
+     * decode for desired size 
+     * @return the Size of the desired image supported by the decoder 
+     */
+    TSize ReCalculateSizeL();
+
+    /**
+     * If the image format is non jpeg, then we need to calculate as per
+     * reduction factor and reduced size as what the decoder is going to return us
+     * This function returns if that needs to be done. 
+     * 
+     * @return check the image mime type and return True if the recaulation of size needs
+     * to be done else return false 
+     */
+    TBool DoesMimeTypeNeedsRecalculateL();
+
+    /**
+     * If the image format is non jpeg, then we need to scale the bitmap after it is
+     * decoded, as the return value would not fit the screen
+     * @param  
+     */
+    void ScaleDecodedBitmapL(TInt aBitmapIndex);
+
+    /**
+     * InitiateHDMI
+     * @param aFsBitmap Fullscreen Bitmap  
+     * @param aImageFile Image path
+     */
+    void InitiateHdmiL(CFbsBitmap* aFsBitmap,const TDesC& aImageFile);
+
+    /**
+     * Animate untill loop is complete 
+     */
+    void Animate();
+
+private:
+    /// window object
+    RWindow*            iWindow;                    
+    /// FS bitmap
+    CFbsBitmap*         iFsBitmap;                  
+    /// callback to the HdmiContainer window
+    MGlxGenCallback*    iCallBack;                  
+    /// To store the image uri path
+    HBufC*              iImagePath;                 
+    TBool               iEffectsOn;
+
+    /// If the Fs thumbnail is to be shown before decoding HD images
+    TBool       iShwFsThumbnail;                    
+    /// If the item is non jpeg
+    TBool       iIsNonJpeg;                         
+    /// If FadeIn or Out for only SLideshow animation
+    TBool       iFadeIn;                            
+    
+    /// GCE Surface
+    RSurfaceUpdateSession iSurfUpdateSession;
+    /// TSurfaceId
+    TSurfaceId              iSurfId;                                             
+    /// RSurfaceManager
+    RSurfaceManager*        iSurfManager;           
+    /// RChunk
+    RChunk*                 iSurfChunk;             
+    /// surface stride
+    TInt                    iSurfaceStride;         
+    /// surface configuration for zoom
+    TSurfaceConfiguration   iConfig;                
+
+    /** Array of Decoded bitmaps of the focussed image
+     * 1 - contains FS/Grid Thumbnail, 2- HD image,
+     * (optional)3-Scaled png/bmp images 
+     */
+    CFbsBitmap*         iDecodedBitmap[3];         
+
+    /// Surface buffer
+    void*               iSurfBuffer;               
+    /// Surface buffer AO
+    CGlxActiveCallBack* iSurfBufferAO;              
+
+    CAlfCompositionSource* ialfCompositionSurface;
+
+    /// Internal Image decoder AO
+    CGlxHdmiDecoderAO*  iGlxDecoderAO;                            
+    /// Image Decoder
+    CImageDecoder*      iImageDecoder;              
+    /// RFs
+    RFs                 iFsSession;                 
+
+    TPoint      iLeftCornerForZoom;                   
+    /// Timer for Zoom
+    CPeriodic*  iTimer;                              
+    /// Timer for Animation
+    CPeriodic*  iAnimTimer;                         
+    TInt        iAnimCounter;
+
+    /// Various objects to store sizes and count
+    /// to store the Tv screen size
+    TSize       iTvScreenSize;                      
+    /// To Store the target bitmap size to display(as per Aspect Ratio)
+    TSize       iTargetBitmapSize;                  
+    
+    /// Various flags to store values
+    /// Is zoomed
+    TBool       iZoom;                              
+    /// If the bitmap is decoded and ready
+    TBool       iBitmapReady;                       
+    /// If the UI has asked for auto zoomout
+    TBool       iAutoZoomOut;                       
+    /// If surface session is connected
+    TBool       iSurfSessionConnected;            
+    /// If it is set to shift to cloning mode
+	TBool       iShiftToCloning;
+#ifdef _DEBUG
+    TTime iStartTime;
+    TTime iStopTime;
+#endif   
+	/// The bitmap index in the array of bitmaps
+    enum {
+        EFSBitmapIndex = 0,
+        EJpgDecodedBitmapIndex,
+		ENonJpgDecodedBitmapIndex
+        };
+    };
+#endif /* GLXHDMISURFACEUPDATER_H_ */