mmappfw_plat/harvester_metadata_extractor_api/inc/mpxmetadataextractor.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:55:47 +0200
changeset 0 a2952bb97e68
child 17 780c925249c1
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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:  Extracts metadata from a file
*
*/


#ifndef CMPXMETADATAEXTRACTOR_H
#define CMPXMETADATAEXTRACTOR_H

class CMPXMedia;
class CMPXCollectionPath;
class CMetaDataUtility;
class CMPXFileInfoUtility;
class CMPXDrmMediaUtility;
#include <thumbnailmanager.h>
#include <thumbnailmanagerobserver.h>

/**
 *  Extracts metadata from a file.
 *
 *  @lib mpxfilehandler.lib
 */
class CMPXMetadataExtractor : public CBase,
                            public MThumbnailManagerObserver
    {
    
public:
    /*
    * Two-Phased Constructor.
    	*@since 3.2.3
    */
    IMPORT_C static CMPXMetadataExtractor* NewL( RFs& aFs, 
                                                 RApaLsSession& aAppArc,
                                                 RPointerArray<CMPXCollectionType>& aTypes );

    /*
    * Virtual Destructor.
    	*@since 3.2.3
    */
    virtual ~CMPXMetadataExtractor();

public: // New Functions
    
    /*
    * Create a media object for a file.
    * @since 3.2.3
    * @param aFile a fullpath to the file.
    * @param aNewProperty on return a new media property will be created.
    * @param aMetadataOnly extract metadata only or not. Default EFalse
    */
    IMPORT_C void CreateMediaL( const TDesC& aFile,
                                CMPXMedia*& aNewProperty,
                                TBool aMetadataOnly = EFalse );

    /**
     * Extract album art from a file and add to thumbnail manager.
     * @since 5.0
     * @param aMedia MPX Media object to add album art attribute.
     * @return error id 
     */
    IMPORT_C TInt ExtractAlbumArtL( CMPXMedia* aMedia );
    
private: // New Functions:
    
    /**
    * Set default media properties.
    * @since 3.2.3
    * @param aMediaProp media properties to update
    */
    void SetDefaultL( CMPXMedia& aMediaProp );
    
    /**
    * Function to go through the metadata entries.
    * @since 3.2.3
    * @param aProp Media Properties to update.
    * @param aFile File name
    */
    void SetMediaPropertiesL( CMPXMedia& aProp, 
                              const TDesC& aFile );
    
    /**
    * Sets other media properties not found from metadata util.
    * @since 3.2.3
    * @param aProp Media Properties to update.
    * @param aFile file name.
    * @param aMetadataOnly extract metadata only or not Default EFalse.
    * @param aFileHandle file handle to the file. 
    * @param aFileErr file handle error if file could not be opened
    */
    void SetExtMediaPropertiesL( CMPXMedia& aProp, 
                                 const TDesC& aFile,
                                 TBool aMetadataOnly,
                                 RFile& aFileHandle,
                                 TInt aFileErr  );   
                                
    /**
    * Checks to see if a container type is supported.
    * @since 3.2.3
    * @param aFile file path.
    * @param aIndex index to the supported types array.
    * @return index to the mimetype
    */ 
    TInt SupportedContainerTypeL( const TDesC& aFile, TInt aIndex );

    // From MThumbnailManagerObserver 
    /**
    * Preview thumbnail generation or loading is complete.
     * @since S60 v5.0
     * @param aThumbnail     An object representing the resulting thumbnail.
     * @param aId            Request ID for the operation
    */
    void ThumbnailPreviewReady(
        MThumbnailData& aThumbnail, TThumbnailRequestId aId );
    
    /**
     * Final thumbnail bitmap generation or loading is complete.
     * @since S60 v5.0
     * @param aError         Error code.
     * @param aThumbnail     An object representing the resulting thumbnail.
     * @param aId            Request ID for the operation.
    */
    void ThumbnailReady(
        TInt aError, 
        MThumbnailData& aThumbnail, TThumbnailRequestId aId );

    /**
    * Stop the wait loop.
    */
    void StopWaitLoop();

    /**
     * Cancel timer. 
     */
    void CancelTimeoutTimer();
    
    /**
    * Callback when the timer times out.
    */
    static TInt TimeoutTimerCallback(TAny* aPtr);

    /**
     * Get album art metadata.
     * @since 5.0
     * @param aMedia
     * @return error ID 
     */
    TInt GetMediaAlbumArtL( CMPXMedia& aMedia,
                            const TDesC& aFile );
    
    /**
     * Add album art to media object.
     * @since 5.0
     * @param aMedia
     */
    void AddMediaAlbumArtL( CMPXMedia& aMedia,
                            const TDesC& aFile,
                            TDesC8& aValue);
    
private:

    /**
    * Private Two-Phased constuctor.
    * @since 3.2.3
    * @param aFs file path.
    * @param aAppArc address for the session application information.
    * @param array of supported types
    */ 
    CMPXMetadataExtractor( RFs& aFs, RApaLsSession& aAppArc,
                           RPointerArray<CMPXCollectionType>& aTypes );

    void ConstructL();

private: // data
    CMetaDataUtility*    iMetadataUtility;  // extract metadata from file
    CMPXDrmMediaUtility* iDrmMediaUtility;  // extra drm data from file
    CMPXFileInfoUtility* iFileInfoUtil;     // extract duration/bitrate etc from file
    RFs&                 iFs;
    RApaLsSession&       iAppArc;
    RPointerArray<CMPXCollectionType>& iSupportedTypes;  // not owned
    
    CThumbnailManager*    iTNManager;
    CActiveSchedulerWait* iTNSyncWait;  // wait loop use to sync thumbnail
    CPeriodic*            iTimer; // backup timer to stop wait loop
    TInt                  iOutstandingThumbnailRequest;
    TInt                  iTNMBlockCount;
    };

#endif // CMPXMETADATAEXTRACTOR_H