videoeditorengine/audioeditorengine/inc/AudClipInfo.h
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/audioeditorengine/inc/AudClipInfo.h	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,369 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:  
+*
+*/
+
+
+
+#ifndef __AUDCLIPINFO_H__
+#define __AUDCLIPINFO_H__
+
+
+#include <e32base.h>
+#include <MdaAudioSamplePlayer.h>
+
+#include "AudCommon.h"
+#include "AudObservers.h"
+
+
+
+/*
+*    Forward declarations.
+*/
+class CAudClipInfoOperation;
+class CAudProcessor;
+
+/**
+* Utility class for getting information about audio clip files.
+*/
+class CAudClipInfo : public CBase    
+
+    {
+    
+public:
+    
+    /* Constructors & destructor. */
+    
+    /**
+    * Constructs a new CAudClipInfo object to get information
+    * about the specified audio clip file. The specified observer
+    * is notified when info is ready for reading. This method
+    * may leave if no resources are available to construct 
+    * a new object.
+    * 
+    * Possible leave codes:
+    *    - <code>KErrNoMemory</code> if memory allocation fails
+    *  - <code>KErrNotSupported</code> if the given file format is not supported 
+    * or is invalid
+    *
+    * @param aFileName  name of audio clip file
+    * @param aObserver  observer to notify when info is ready for reading
+    *
+    * @return  pointer to a new CAudClipInfo instance
+    */
+    IMPORT_C static CAudClipInfo* NewL(const TDesC& aFileName, MAudClipInfoObserver& aObserver);
+    
+    /**
+    * Constructs a new CAudClipInfo object to get information
+    * about the specified audio clip file. The constructed object
+    * is left in the cleanup stack. The specified observer
+    * is notified when info is ready for reading. This method
+    * may leave if no resources are available to construct a new
+    * object.
+    * 
+    * Possible leave codes:
+    *    - <code>KErrNoMemory</code> if memory allocation fails
+    *  - <code>KErrNotSupported</code> if the given file format is not supported 
+    *    or is invalid
+    *
+    * @param aFileName  name of video clip file
+    * @param aObserver  observer to notify when info is ready for reading
+    *
+    * @return  pointer to a new CAudClipInfo instance
+    */
+    IMPORT_C static CAudClipInfo* NewLC(const TDesC& aFileName, MAudClipInfoObserver& aObserver);
+    
+    
+    /**
+    * Returns the properties of this audio file
+    * 
+    * @return  properties
+    */
+    IMPORT_C TAudFileProperties Properties() const;
+    
+    /**
+    * Generates a visualization of the current clip. 
+    * 
+    * Asynchronous operation; MAudVisualizationObserver::NotifyClipVisualizationCompleted
+    * is called as soon as the visualization process has completed. This method leads to
+    * memory reservation, so once NotifyClipVisualizationCompleted has occurred, 
+    * the caller is responsible for memory releasing.
+    * 
+    * Possible leave codes:
+    *    - <code>KErrNoMemory</code> if memory allocation fails
+    *
+    * @param aObserver            observer to be notified when visualization is completed
+    * @param aSize                the size of aVisualization array (time resolution). 
+    * @param aPriority            priority
+    *
+    */
+    IMPORT_C void GetVisualizationL(MAudVisualizationObserver& aObserver,
+        TInt aSize, TInt aPriority) const;
+    
+    /**
+    * Cancels visualization generation. If no visualization is currently being 
+    * generated, the function does nothing.
+    */
+    IMPORT_C void CancelVisualization();
+    
+    /**
+     * Returns the file name of the clip. Panics if info
+     * is not yet ready for reading.
+     * 
+     * @return  file name
+     */
+    IMPORT_C TPtrC FileName() const;
+
+    /**
+    * Destroys the object and releases all resources.
+    */    
+    IMPORT_C ~CAudClipInfo();
+    
+    /**
+    * Constructs a new CAudClipInfo object to get information
+    * about the specified audio clip file. The specified observer
+    * is notified when info is ready for reading. This method
+    * may leave if no resources are available to construct 
+    * a new object.
+    * 
+    * Possible leave codes:
+    *    - <code>KErrNoMemory</code> if memory allocation fails
+    *  - <code>KErrNotSupported</code> if the given file format is not supported 
+    * or is invalid
+    *
+    * @param aFileHandle file handle of audio clip file
+    * @param aObserver  observer to notify when info is ready for reading
+    *
+    * @return  pointer to a new CAudClipInfo instance
+    */
+    IMPORT_C static CAudClipInfo* NewL(RFile* aFileHandle, MAudClipInfoObserver& aObserver);
+    
+    /**
+    * Constructs a new CAudClipInfo object to get information
+    * about the specified audio clip file. The constructed object
+    * is left in the cleanup stack. The specified observer
+    * is notified when info is ready for reading. This method
+    * may leave if no resources are available to construct a new
+    * object.
+    * 
+    * Possible leave codes:
+    *    - <code>KErrNoMemory</code> if memory allocation fails
+    *  - <code>KErrNotSupported</code> if the given file format is not supported 
+    *    or is invalid
+    *
+    * @param aFileHandle file handle of audio clip file    
+    * @param aObserver  observer to notify when info is ready for reading
+    *
+    * @return  pointer to a new CAudClipInfo instance
+    */
+    IMPORT_C static CAudClipInfo* NewLC(RFile* aFileHandle, MAudClipInfoObserver& aObserver);
+    
+    /**
+     * Returns the file handle of the clip. Panics if info
+     * is not yet ready for reading.
+     * 
+     * @return  file name
+     */
+    IMPORT_C RFile* FileHandle() const;
+    
+    
+private:
+    
+    // C++ constructor
+    CAudClipInfo();
+    
+    // ConstructL
+    // parameters: see NewL()
+    void ConstructL(const TDesC& aFileName, MAudClipInfoObserver& aObserver);
+    
+    void ConstructL(RFile* aFileHandle, MAudClipInfoObserver& aObserver);
+    
+private:
+
+    // properties of this clip
+    TAudFileProperties* iProperties;
+    
+    // file name of this clip
+    HBufC* iFileName;
+    
+    // file handle of this clip
+    RFile* iFileHandle;
+    
+    // flag to indicate whether info class is ready
+    TBool iInfoReady;
+
+    // operation class
+    CAudClipInfoOperation* iOperation;
+    
+    // friends
+    friend class CAudClipInfoOperation;
+    friend class CAudClip;
+
+    
+    };
+
+
+
+/**
+ * Observer for notifying that audio clip info
+ * is ready for reading.
+ *
+ */
+class MProcClipInfoObserver
+    {
+public:
+    /**
+     * Called to notify that audio clip info is ready
+     * for reading.
+     *
+     * Possible error codes:
+     *    - <code>KErrNotFound</code> if there is no file with the specified name
+     *    in the specified directory (but the directory exists)
+     *    - <code>KErrPathNotFound</code> if the specified directory
+     *    does not exist
+     *    - <code>KErrUnknown</code> if the specified file is of unknown type
+     *
+     * @param aError  <code>KErrNone</code> if info is ready
+     *                for reading; one of the system wide
+     *                error codes if reading file failed
+     */
+    virtual void NotifyClipInfoReady(TInt aError) = 0;
+    };
+
+
+
+/**
+ * Internal class for reading information from the audio clip file.
+ * Implements a simple object 
+ * to report to the audio clip info observer certain common error conditions 
+ * that would otherwise leave.
+ */
+class CAudClipInfoOperation :    public CBase, 
+                                public MProcClipInfoObserver, 
+                                public MAudVisualizationObserver
+    {
+    
+public:
+
+
+    /*
+    * Constructor
+    *
+    *
+    * @param aInfo        CAudClipInfo class that owns this object
+    * @param aObserver    observer for callbacks
+    */
+
+    static CAudClipInfoOperation* NewL(CAudClipInfo* aInfo,
+                                            MAudClipInfoObserver& aObserver);
+
+    /*
+    * Destructor
+    */
+    ~CAudClipInfoOperation();
+    
+    
+    // from base class MProcClipInfoObserver
+    void NotifyClipInfoReady(TInt aError);
+
+    // from base class MAudVisualizationObserver
+
+    void NotifySongVisualizationCompleted(const CAudSong& aSong, 
+        TInt aError, 
+        TInt8* aVisualization,
+        TInt aSize);
+
+    void NotifyClipInfoVisualizationCompleted(const CAudClipInfo& aClipInfo, 
+        TInt aError, 
+        TInt8* aVisualization,
+        TInt aSize);
+
+    void NotifySongVisualizationStarted(const CAudSong& aSong, 
+        TInt aError);
+
+    void NotifyClipInfoVisualizationStarted(const CAudClipInfo& aClipInfo, 
+        TInt aError);
+
+    void NotifySongVisualizationProgressed(const CAudSong& aSong, 
+        TInt aPercentage);
+
+    void NotifyClipInfoVisualizationProgressed(const CAudClipInfo& aClipInfo, 
+        TInt aPercentage);
+
+    /**
+    * Generates a visualization of the current clip. 
+    * 
+    * Asynchronous operation; MAudVisualizationObserver::NotifyClipVisualizationCompleted
+    * is called as soon as the visualization process has completed. This method leads to
+    * memory reservation, so once NotifyClipVisualizationCompleted has occurred, 
+    * the caller is responsible for memory releasing.
+    * 
+    * Possible leave codes:
+    *    - <code>KErrNoMemory</code> if memory allocation fails
+    *
+    * @param aObserver            observer to be notified when visualization is completed
+    * @param aSize                the size of aVisualization array (time resolution).
+    * @param aPriority            priority
+    *
+    */
+        
+    void StartVisualizationL(MAudVisualizationObserver& aObserver, TInt aSize, TInt aPriority);
+
+    /**
+    * Cancels visualization generation. If no visualization is currently being 
+    * generated, the function does nothing.
+    */
+        
+    void CancelVisualization();
+
+    /**
+     * Called to start getting file properties
+     *
+     * NotifyClipInfoReady is called as soon as the operation completes
+     */
+    void StartGetPropertiesL();
+
+
+private:
+    
+    CAudClipInfoOperation(CAudClipInfo* aInfo, 
+                               MAudClipInfoObserver& aObserver);
+    void ConstructL();
+    
+
+private:
+
+    // info class that owns this object
+    CAudClipInfo* iInfo;
+    
+    // observer for clip info callbacks
+    MAudClipInfoObserver* iObserver;
+    
+    // observer for visualization callbacks
+    MAudVisualizationObserver* iVisualizationObserver;
+    
+    // processor class owned by this object
+    CAudProcessor* iProcessor;
+
+    friend class CAudClipInfo;
+    friend class CAudClip;
+
+    };
+
+
+
+
+#endif