mmserv/thumbnailengine/TneAPIInc/TNEVideoClipInfoImp.h
changeset 0 71ca22bcf22a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/thumbnailengine/TneAPIInc/TNEVideoClipInfoImp.h	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,292 @@
+/*
+* Copyright (c) 2006 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:   TNE Video Clip Info Implementation
+*
+*/
+
+
+
+
+#ifndef __TNEVIDEOCLIPINFOIMP_H__
+#define __TNEVIDEOCLIPINFOIMP_H__
+
+
+#include <e32base.h>
+
+#include "TNEProcessor.h"
+
+#include <TNEVideoClipInfo.h>
+
+
+/*
+ *  Forward declarations.
+ */
+// cannot include bitmap.h since video processor includes
+// this file and fails to compile due to a strange compiler error
+// "operator delete must return type void" if bitmap.h
+// is included
+class CFbsBitmap;  
+                   
+class CTNEVideoClipInfo;
+class CTNEVideoClipInfoOperation;
+class CTNEVideoClipThumbOperation;
+
+
+/**
+ *  class for getting information about video clip files and generating thumbnails.
+ */
+class CTNEVideoClipInfoImp : public CTNEVideoClipInfo
+    {
+public:
+
+    static CTNEVideoClipInfo* NewL(const RFile& aFileHandle, 
+                                    MTNEVideoClipInfoObserver& aObserver);
+    /**
+     * Destroys the object and releases all resources.
+     */    
+    ~CTNEVideoClipInfoImp();
+    
+    
+    /* General property methods. */
+
+    /**
+     * Returns the file name of the clip. Panics if there is no file 
+     * associated with this clip or info is not yet ready for reading.
+     * 
+     * @return  file name of the clip
+     */
+     TPtrC FileName() const;
+    
+    /**
+     * Returns the resolution clip. Panics if the
+     * info is not yet ready for reading.
+     * 
+     * @return  TSize of the clip
+     */
+     TSize GetResolution() const;
+    
+    /* Thumb methods. */
+   
+    /**
+     * Returns the number of video frames in this clip. Panics if info
+     * is not yet ready for reading.
+     * 
+     * @return  number of video frames in this clip
+     */
+    TInt VideoFrameCount() const;
+
+    /* Thumbnail methods. */
+
+    /**
+     * Generates a bitmap of the given frame from video clip.
+     * The frame bitmap is scaled to the specified resolution and converted
+     * to the specified display mode. This method is asynchronous. The frame
+     * is generated in background and the observer is notified when the frame
+     * is complete. This method panics if info is not yet ready for reading or 
+     * the resolution is illegal.
+     * 
+     * Possible leave codes:
+     *  - <code>KErrNoMemory</code> if memory allocation fails
+     *  - <code>KErrNotSupported</code>, if the specified combination of 
+     *                                   parameters is not supported
+     *
+     * @param aObserver    observer to be notified when the frame is completed
+     * @param aIndex       index of frame, or KFrameIndexBestThumb to look for
+     *                     most suitable thumbnail frame.
+     * @param aResolution  resolution of the desired frame bitmap, or
+     *                     <code>NULL</code> if the frame should be
+     *                     in the original resolution
+     * @param aDisplayMode desired display mode; or <code>ENone</code> if 
+     *                     any display mode is acceptable
+     * @param aEnhance     apply image enhancement algorithms to improve
+     *                     frame quality; note that this may considerably
+     *                     increase the processing time needed to prepare
+     *                     the frame
+     * @param aPriority    priority of the frame generation
+     */
+
+    void GetThumbL(MTNEVideoClipThumbObserver& aObserver,
+                            TInt aIndex,
+                            TSize* const aResolution,
+                            TDisplayMode aDisplayMode,
+                            TBool aEnhance,
+                            TInt aPriority);
+                            
+     /**
+     * Cancels Thumbnail generation. If no thumb is currently being 
+     * generated, the function does nothing.
+     */
+    void CancelThumb();
+
+
+private:
+    CTNEVideoClipInfoImp();
+
+    /**
+     * Constructor for CTNEVideoClipInfoImp using RFile handle.
+     */    
+    void ConstructL(const RFile& aFileHandle,
+                    MTNEVideoClipInfoObserver& aObserver);
+
+    /**
+     * Constructor for CTNEVideoClipInfoImp using file name.
+     */    
+    void ConstructL(const TDesC& aFileName,
+                    MTNEVideoClipInfoObserver& aObserver);
+private:
+    // Member variables
+
+    // Get video info operation.
+    CTNEVideoClipInfoOperation* iInfoOperation;
+   
+    // Flag to indicate then info is available
+    TBool iReady;
+      
+	// Duplicate RFile handle for the video clip
+	RFile iFileHandle;
+	   
+    // Vídeo format.
+    TTNEVideoFormat iFormat;
+   
+    // Video type/codec.
+    TTNEVideoType iVideoType;
+   
+    // Resolution of video clip.
+    TSize iResolution;    
+   
+    // Frame count of video
+    TInt iVideoFrameCount;
+    
+    // Operation to retrieve thumbnail of video clip.
+    CTNEVideoClipThumbOperation* iThumbOperation;
+
+	// These are for supporting TNE requests which send filename
+	// internally we open a RFile handle to the file.
+    RFs*        iFs;
+
+    friend class CTNEVideoClipInfoOperation;
+    friend class CTNEVideoClipThumbOperation;
+    friend class CTNEVideoClipInfo;
+    };
+
+
+
+/**
+ * Internal class for reading information from a video clip file.
+ * Also implements a simple active object to notify the video clip info 
+ * observer when reading has been completed.
+ */
+class CTNEVideoClipInfoOperation : public CActive
+    {
+public:
+    /* Static constructor */
+    static CTNEVideoClipInfoOperation* NewL(CTNEVideoClipInfoImp* aInfo,
+                                        MTNEVideoClipInfoObserver& aObserver);
+protected:
+    /*
+    * From CActive
+    * Standard active object RunL 
+    */
+    void RunL();
+
+    /*
+    * From CActive
+    * Standard active object DoCancel
+    */
+    void DoCancel();
+
+private:
+    /* Default constructor */
+    CTNEVideoClipInfoOperation(CTNEVideoClipInfoImp* aInfo, 
+                               MTNEVideoClipInfoObserver& aObserver);
+    /* Standard Symbian OS two phased constructor */
+    void ConstructL();
+    /* Destructor */
+    ~CTNEVideoClipInfoOperation();
+
+private:
+    // Class to contain video clip info.
+    CTNEVideoClipInfoImp* iInfo;
+    
+    // Observer of video clip info operation.
+    MTNEVideoClipInfoObserver* iObserver;
+    
+    // Error code from TNEprosessor.
+    TInt iTNEProcessorError;
+
+    friend class CTNEVideoClipInfoImp;
+    };
+
+/**
+ * Internal class for generating a thumb from a video clip file.
+ */
+class CTNEVideoClipThumbOperation : public CActive
+    {
+public:
+    /* Static constructor */
+    static CTNEVideoClipThumbOperation* NewL(CTNEVideoClipInfoImp* iInfo);
+
+protected:
+    /*
+    * From CActive
+    * Standard active object RunL 
+    */
+    void RunL();
+
+    /*
+    * From CActive
+    * Standard active object DoCancel
+    */
+    void DoCancel();
+
+private:
+    /* Default constructor */
+    CTNEVideoClipThumbOperation(CTNEVideoClipInfoImp* iInfo);
+    /* Standard Symbian OS two phased constructor */
+    void ConstructL();
+    /* Destructor */
+    ~CTNEVideoClipThumbOperation();
+
+    /*
+    * Start thumb operation.
+    *
+    * @aparam aObserver Observer of thumbnail operation.
+    * @aparam aIndex Index of frame that is converted to thumbnail.
+    * @aparam aResolution Wanted resolution of thumbnail.
+    * @aparam aPriority Priority of active object.
+    */
+    void StartL(MTNEVideoClipThumbObserver& aObserver,
+                TInt aIndex, TSize* const aResolution, 
+                TDisplayMode aDisplayMode, TBool aEnhance, TInt aPriority);
+
+private:
+    // Pointer to info class this thumbnail operation is part of.
+    
+    CTNEVideoClipInfoImp* iInfo;
+    
+    // Index of the wanted frame.
+    TInt iIndex;
+
+    // Observer of the thumbnail operation.
+    MTNEVideoClipThumbObserver* iObserver;
+
+    TBool iThumbRequestPending;
+
+    CTNEProcessor* iTNEProcessor;
+
+    friend class CTNEVideoClipInfoImp;
+    };
+
+#endif // __TNEVIDEOCLIPINFOIMP_H__
+