epoc32/include/mmf/server/mmfswcodecwrapper.h
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
--- a/epoc32/include/mmf/server/mmfswcodecwrapper.h	Wed Mar 31 12:27:01 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,270 +0,0 @@
-// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
-// All rights reserved.
-// This component and the accompanying materials are made available
-// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
-// which accompanies this distribution, and is available
-// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
-//
-// Initial Contributors:
-// Nokia Corporation - initial contribution.
-//
-// Contributors:
-//
-// Description:
-//
-
-#ifndef __MMFSWCODECWRAPPER_H__
-#define __MMFSWCODECWRAPPER_H__
-
-#include <mmf/server/mmfhwdevice.h>
-#include <mmf/server/mmfhwdevicesetup.h>
-
-class CMMFSwCodecDataPath; //forward reference
-
-/** 
-@publishedAll
-@released
-
-Class for a software codec used by the CMMFSwCodecWrapper class to make the CMMFSwCodec a 
-CMMFHwDevice plugin. The CMMFSwCodec processes source data in a certain fourCC coding type and
-converts it to a destination buffer of another fourCC coding type.
-
-A CMMFSwCodec object would usually not be instantiated directly
-but instead would be instantiated via the CMMFSwCodecWrapper class's Codec()
-method.
-
-The processing of the data is handled by the codecs ProcessL() member.
-The intention is that the source buffer for conversion is converted to the appropriate coding type
-in the destination buffer.  The size of the buffers passed in are determined by SourceBufferSize()
-and SinkBufferSize() methods.  The buffer sizes should be chosen such that
-the ProcessL() method can be guaranteed to have enough destination buffer to
-completely process one source buffer.
-
-The ProcessL should return a TCodecProcessResult returning the number of source bytes processed
-and the number of destination bytes processed along with a process result code defined thus:
-- EProcessComplete: the codec processed all the source data into the sink buffer
-- EProcessIncomplete: the codec filled sink buffer before all the source buffer was processed
-- EDstNotFilled: the codec processed the source buffer but the sink buffer was not filled
-- EEndOfData: the codec detected the end data - all source data in processed but sink may not be full
-- EProcessError: the codec process error condition
-
-Unlike the 7.0s CMMFCodec::ProcessL method, the CMMFSwCodec::ProcessL method
-should not return EProcessIncomplete as this case is not handled by the
-CMMFSwCodecWrapper.
-*/
-class CMMFSwCodec : public CBase
-	{
-public:
-	/**
-	@publishedAll
-	@released
-
-	Indicates the result of processing data from the source buffer to a destination buffer
-	and provides functions to compare the result code.
-	The CMMFSwCodec buffer sizes should be set to return EProcessComplete
-	The other return codes are to keep the ProcessL method compatible with
-	the 7.0s CMMFCodec API.
-	*/
-	class TCodecProcessResult
-		{
-	public:
-		/**
-		Flag to track the codec's processing status.
-		*/
-		enum TCodecProcessResultStatus
-			{
-			/** The codec has successfully completed its processing. */
-			EProcessComplete,
-			/** Could not empty the source buffer because the destination buffer became full. */
-			EProcessIncomplete,
-			/** Codec came across an end of data. */
-			EEndOfData,
-			/** Could not fill the destination buffer because the source buffer has been emptied. */
-			EDstNotFilled,
-			/** An error occured. */
-			EProcessError
-			};
-
-		/** Overloaded operator to test equality. */
-		TBool operator==(const TCodecProcessResultStatus aStatus) const {return (iCodecProcessStatus == aStatus);}
-		/** Overloaded operator to test inequality. */
-		TBool operator!=(const TCodecProcessResultStatus aStatus) const {return (iCodecProcessStatus != aStatus);}
-
-		/**
-		Default constructor.
-		*/
-		TCodecProcessResult()
-			:iCodecProcessStatus(EProcessError), iSrcBytesProcessed(0), iDstBytesAdded(0) {};
-
-		public:
-		/**
-		The codec's processing status
-
-		@see enum TCodecProcessResultStatus
-		*/
-		TCodecProcessResultStatus iCodecProcessStatus;
-
-		/** The number of source bytes processed */
-		TUint iSrcBytesProcessed;
-
-		/** The number of bytes added to the destination buffer */
-		TUint iDstBytesAdded;
-		};
-public:
-
-	/**
-	Processes the data in the specified source buffer and writes the processed data to
-	the specified destination buffer.
-
-	This function is synchronous, when the function returns the data has been processed.
-	This is a virtual function that each derived class must implement.
-
-	@param	aSource
-			The source buffer containing data to encode or decode.
-	@param	aDest
-	 		The destination buffer to hold the data after encoding or decoding.
-
-	@return	The result of the processing.
-
-	@see    TCodecProcessResult
-	*/
-	virtual TCodecProcessResult ProcessL(const CMMFBuffer& aSource, CMMFBuffer& aDest) = 0;
-
-	/**
-	Gets the max size of the source buffer passed into the
-	CMMFSwCodec::ProcessL function. 
-
-	Note that this means that this is the Max size of each buffer passed to the codec.  The actual 
-	size of the data could be less than the max size. This is a virtual function that each derived 
-	class must implement.
-
-	@return The max size of the source buffer in bytes.
-	*/
-	virtual TUint SourceBufferSize() = 0;
-
-	/**
-	Gets the max size of the sink (destination) buffer passed into the
-	CMMFSwCodec::ProcessL method.  
-
-	Note that this means that this is the Max size of each buffer passed to the codec.  The actual 
-	size of the data written to this buffer could be less than the max size. This is a virtual 
-	function that each derived class must implement.
-
-	@return The max size of the sink buffer in bytes.
-	*/
-	virtual TUint SinkBufferSize() = 0;
-
-	/**
-	@internalAll
-
-	Function that needs to be overriden if the codec is a 'Null' codec
-	ie. it does not perform any data type transformation.  The 'Null' codec
-	should override this to return ETrue and provide a dummy
-	ProcessL. The CMMFSwCodecWrapper will then use the same buffer
-	for both the source and the sink. Null codecs should return the same
-	buffer size for both the Source and SinkBufferSize methods.
-	Since most CMMFSwCodec implementations will not be null codecs
-	this method can be ignored.
-
-	Would not normally expect 3rd parties to have to implement this.
-	*/
-	virtual TBool IsNullCodec() {return EFalse;};
-	};
-
-/** 
-@publishedAll
-@released
-
-Class to make a CMMFSwCodec into a CMMFHwDevice ECOM plugin.
-
-Most of the code to make a CMMFSwCodec into a CMMFHwDevice ECOM plugin is provided
-in CMMFSwCodecWrapper.  Someone writing a plugin derrived from CMMFSwCodecWrapper
-only needs to provide the standard ECOM implementation code, constructors
-and destructors and implement the Codec() function which should return the
-appropriate CMMFSwCodec.
-
-Third parties using CMMFSwCodecWrapper that do not use the RMdaDevSound API
-to talk to the sound drivers would need to port the datapaths for their own
-sound drivers. Third parties would also need to change the custom interfaces
-where necessary.
-*/
-class CMMFSwCodecWrapper : public CMMFHwDevice
-	{
-public:
-	IMPORT_C virtual ~CMMFSwCodecWrapper();
-protected:
-	IMPORT_C CMMFSwCodecWrapper();
-	IMPORT_C virtual TInt Init(THwDeviceInitParams &aDevInfo);
-	IMPORT_C virtual TInt Start(TDeviceFunc aFuncCmd, TDeviceFlow aFlowCmd);
-	IMPORT_C virtual TInt Stop();
-	IMPORT_C virtual TInt Pause();
-	IMPORT_C virtual TAny* CustomInterface(TUid aInterfaceId);
-	IMPORT_C virtual TInt ThisHwBufferFilled(CMMFBuffer& aFillBufferPtr);
-	IMPORT_C virtual TInt ThisHwBufferEmptied(CMMFBuffer& aBuffer);
-	IMPORT_C virtual TInt SetConfig(TTaskConfig& aConfig);
-	IMPORT_C virtual TInt StopAndDeleteCodec();
-	IMPORT_C virtual TInt DeleteCodec();
-	/**
-	This method must return the CMMFSwCodec used by the derived
-	CMMFSwCodecWrapper class.  The method should create the CMMFSwCodec
-	if it hasn't done so already.
-
-	This is a virtual function that each derived class must implement.
-
-	@return The CMMFSwCodec used by the derrived CMMFSwCodecWrapper
-	*/
-	virtual CMMFSwCodec& Codec() = 0;
-	IMPORT_C void SetVbrFlag();
-private:
-	TInt StartEncode();
-	TInt StartDecode();
-	TInt StartConvert();
-	
-protected: 
-	/** 
-	The software codec used
-	*/
-	CMMFSwCodec* iCodec;
-	
-	/** 
-	The source buffer for the codec
-	*/
-	CMMFDataBuffer* iSourceBuffer;
-	
-	/** 
-	The sink buffer for the codec
-	*/
-	CMMFDataBuffer* iSinkBuffer;
-	
-	/** 
-	The datapath used to transfer the data
-	*/
-	CMMFSwCodecDataPath* iDataPath;
-	
-	/** 
-	The play custom interface
-	*/
-	MPlayCustomInterface* iPlayCustomInterface;
-	
-	/** 
-	The record custom interface
-	*/
-	MRecordCustomInterface* iRecordCustomInterface;
-	
-	/** 
-	The buffer size of the sound device
-	*/
-	TUint iDeviceBufferSize;
-	
-	/**
-	The sample rate of the sound device
-	*/
-	TInt iSampleRate;
-
-	/**
-	The number of channels of the sound device
-	*/
-	TInt iChannels;
-	};
-
-#endif