harvester/harvesterplugins/VideoPlugin/inc/harvestervideoplugin.h
changeset 0 c53acadfccc6
child 8 6752808b2036
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/harvester/harvesterplugins/VideoPlugin/inc/harvestervideoplugin.h	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2006-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:  Harvests meta data from video file.*
+*/
+
+
+#ifndef __CHARVESTERVIDEOPLUGIN_H__
+#define __CHARVESTERVIDEOPLUGIN_H__
+
+#include <e32base.h>
+#include "harvesterplugin.h"
+
+#include "mimetypemapping.h"
+
+// FORWARD DECLARATION
+class CMdEObjectDef;
+class CMdEPropertyDef;
+class CMdEObject;
+class CHarvesterData;
+
+class TVideoMetadataHandling
+	{
+	public:
+		enum TVideoMetadataHandlingLibrary
+			{
+			EMp4LibHandling,
+			EHexilMetadataHandling
+			};
+
+		TVideoMetadataHandlingLibrary iLibrary;
+		TPtrC iObjectDef;
+		TPtrC iVideoMime;
+		TPtrC iAudioMime;
+
+		TVideoMetadataHandling()
+			{		
+			}
+		
+		TVideoMetadataHandling(TVideoMetadataHandlingLibrary aLibrary, 
+				TPtrC aObjectDef, TPtrC aVideoMime, TPtrC aAudioMime) :
+			iLibrary( aLibrary ), iObjectDef( aObjectDef ),
+			iVideoMime( aVideoMime ), iAudioMime( aAudioMime ) 
+			{		
+			}
+		
+		TVideoMetadataHandling(const TVideoMetadataHandling& aHandling) :
+			iLibrary( aHandling.iLibrary ), iObjectDef( aHandling.iObjectDef ),
+			iVideoMime( aHandling.iVideoMime ), iAudioMime( aHandling.iAudioMime )
+			{
+			}
+	};
+
+typedef TMimeTypeMapping<TVideoMetadataHandling> THarvestingHandling;
+	
+/**
+* A data transfer class for harvested video metadata.
+*/
+class CVideoHarvestData : public CBase
+    {
+    public:
+    	TBool iVideoObject; // Is object video or audio
+
+    	TTime iModified;
+    	TInt64 iFileSize; // in bytes
+        TReal32 iDuration; // in seconds
+        TReal32 iFrameRate; // in frames per second
+        TReal32 iSamplingFrequency; // in kHz 
+        TInt iVideoBitrate; // in kbps
+        TInt iAudioBitrate; // in kbps
+        TInt iClipBitrate; // in kbps
+        TInt16 iFrameWidth;
+        TInt16 iFrameHeight;
+        HBufC* iCopyright;
+        HBufC* iAuthor;
+        HBufC* iGenre;
+        HBufC* iPerformer; // Artist
+        HBufC* iDescription;
+
+        HBufC* iMimeBuf;
+        TUint32 iCodec;
+
+        CVideoHarvestData() : CBase()
+        	{
+        	}
+
+        ~CVideoHarvestData()
+        	{
+        	delete iCopyright;
+            delete iAuthor;
+            delete iGenre;
+            delete iPerformer;
+            delete iDescription;
+
+        	delete iMimeBuf;
+        	}
+    };
+
+/**
+ * Helper class to hold all property definitions 
+ * (pointers are not owned) used in harvester video plug-in.
+ */
+class CHarvesterVideoPluginPropertyDefs : public CBase
+	{
+	public:
+		// Common property definitions
+		CMdEPropertyDef* iCreationDatePropertyDef;
+		CMdEPropertyDef* iLastModifiedDatePropertyDef;
+		CMdEPropertyDef* iSizePropertyDef;
+		CMdEPropertyDef* iTimeOffsetPropertyDef;
+		CMdEPropertyDef* iItemTypePropertyDef;
+	
+		// Media property definitions
+		CMdEPropertyDef* iReleaseDatePropertyDef;
+		CMdEPropertyDef* iCaptureDatePropertyDef;
+		CMdEPropertyDef* iDurationPropertyDef;
+		CMdEPropertyDef* iWidthPropertyDef;
+		CMdEPropertyDef* iHeightPropertyDef;
+		CMdEPropertyDef* iBitratePropertyDef;
+		CMdEPropertyDef* iCopyrightPropertyDef;
+		CMdEPropertyDef* iAuthorPropertyDef;
+		CMdEPropertyDef* iGenrePropertyDef;
+		CMdEPropertyDef* iArtistPropertyDef;
+		CMdEPropertyDef* iDescriptionPropertyDef;
+		
+		CMdEPropertyDef* iAudioFourCCDef;
+	
+		// Video property definitions
+		CMdEPropertyDef* iFrameratePropertyDef;
+	
+		// Audio property definitions
+		CMdEPropertyDef* iSamplingFrequencyPropertyDef;
+	
+	private:
+		CHarvesterVideoPluginPropertyDefs();
+	
+		void ConstructL(CMdEObjectDef& aObjectDef);
+
+	public:	
+		static CHarvesterVideoPluginPropertyDefs* NewL(CMdEObjectDef& aObjectDef);
+	};
+
+class CHarvesterVideoPlugin : public CHarvesterPlugin
+  	{
+	public:
+		/**
+		* Constructs a new CHarvesterVideoPlugin implementation.
+		*
+		* @return A pointer to the new CHarvesterVideoPlugin implementation
+		*/
+		static CHarvesterVideoPlugin* NewL();
+		
+		/**
+		* Destructor
+		*/
+		virtual ~CHarvesterVideoPlugin();
+		
+		void GetObjectType( const TDesC& aUri, TDes& aObjectType );
+
+		/**
+		* Harvests several files. Inherited from CHarvestPlugin.
+		*
+		* @param aHarvesterData  CHarvesterData datatype containing needed harvest data
+ 		* @param aClientData  TAny* to client specific data
+		*/
+		void HarvestL( CHarvesterData* aHD );
+				
+	private:
+		/**
+		* C++ constructor - not exported;
+		* implicitly called from NewL()
+		*
+		* @return an instance of CHarvesterVideoPlugin.
+		*/
+		CHarvesterVideoPlugin();
+		
+		/**
+		* 2nd phase construction, called by NewLC()
+		*/
+		void ConstructL();
+		
+		/**
+        * Gathers data from file to meta data object.
+        *
+        * @param aMetadataObject  A reference to meta data object to gather the data.
+        * @param aHarvestData  An object to store harvested video file data.
+        */
+        void GatherDataL( CMdEObject& aMetadataObject, CVideoHarvestData& aHarvestData );
+		
+        /**
+         * Handle addition of new mde video objects.
+         *
+         * @param aMetadataObject  A reference to meta data object to gather the data.
+         * @param aHarvestData  An object containing harvested video file data.
+         */
+        void HandleObjectPropertiesL( CHarvesterData& aHD, CVideoHarvestData& aVHD, TBool aIsAdd );
+          
+	private:
+		void GetMp4Type( RFile64& aFile, TDes& aType );
+		
+		void GetRmTypeL( RFile64& aFile, TDes& aType );
+	
+		const THarvestingHandling* FindHandler( const TDesC& aUri );
+		
+		void CheckForCodecSupport( HBufC* aMimeBuffer, CVideoHarvestData& aVHD );
+		
+	private:
+		RArray<THarvestingHandling> iMimeTypeMappings;
+		
+		CHarvesterVideoPluginPropertyDefs* iPropDefs;
+	};
+
+#endif // __CHARVESTERVIDEOPLUGIN_H__