amrwb_dec/ariamrwbdecmmfcodec/inc/ariamrwbdecmmfcodec.h
changeset 0 bb31fbe78861
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/amrwb_dec/ariamrwbdecmmfcodec/inc/ariamrwbdecmmfcodec.h	Fri Jul 23 16:58:44 2010 +0100
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2009 Aricent and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* Aricent - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Plugin class for AmrWb decoder. This class inherits CMMFCodec 
+* class and implements the pure virtual functions of CMMFCodec.
+* The class also has a few private funtions.
+*
+*/
+
+
+#ifndef ARIAMRWBDECMMFCODEC_H	
+#define ARIAMRWBDECMMFCODEC_H
+
+// User includes
+#include <mmfcodec.h>
+// Forward declaration
+class CAriAmrWbDecWrapper;
+
+// Class declaration
+class CAriAmrWbDecMmfCodec:public CMMFCodec
+{
+public: //constructors and destructors
+	/**
+	 * Two-phased constructor.
+	 * @return an instance of CMMFCodec
+	 */
+	static CMMFCodec* NewL();
+
+	/**> Destructor */
+	~CAriAmrWbDecMmfCodec();
+
+public: // From CMMFCodec
+
+	/**
+	 * From CMMFCodec
+	 * Sets codec configuration.
+	 * The configuration data is passed in as a descriptor of type TDesC8.
+	 * @param aConfigType
+	 * The UID of the configuration data. 
+	 * @param aParam
+	 * Descriptor with frame info parameters in the form of RArray
+	 */
+	 virtual void ConfigureL(TUid aConfigType, const TDesC8& aParam);
+
+
+	 /**
+	  * From CMMFCodec
+	  * Codec reset function used to flush out status information when a 
+	  *	reposition occurs. 
+	  *	This is used if the codec requires resetting prior to use.
+	  */
+	 virtual void ResetL();
+
+
+	 /**
+	  * From CMMFCodec
+	  * 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. The source buffer is converted to the appropriate 
+	  * coding type in the destination buffer. The buffers can be of any 
+	  * size, therefore there is no guarantee that all the source buffer can 
+	  * be processed to fill the destination buffer or that all the source 
+	  * buffer may be processed before the destination is full. This function
+	  * therefore returns the number of source, and destination, bytes 
+	  * processed along with a process result code indicating completion 
+	  * status.This function is synchronous, when the function returns the 
+	  * data has been processed. The source buffer is converted to the 
+	  * appropriate coding type in the destination buffer. The buffers can be
+	  * of any size, therefore there is no guarantee that all the source 
+	  * buffer can be processed to fill the destination buffer or that all 
+	  * the source buffer may be processed before the destination is full. 
+	  * This function therefore returns the number of source,and destination,
+	  * bytes processed along with a process result code indicating completion
+	  * status.The aSource and aSink buffers passed in are derived from 
+	  * CMMFBuffer. The buffer type (e.g. a CMMFDataBuffer) passed in should 
+	  * be supported by the codec otherwise this function should leave with 
+	  * KErrNotSupported. The position of the source buffer should be checked
+	  * by calling the source buffer's Position() member which indicates the 
+	  * current source read position in bytes. The codec should start 
+	  * processing from the current source buffer read position. The position
+	  * of the destination buffer should be checked by calling the destination
+	  * buffer's Position() method which indicates the current destination 
+	  * write position in bytes. The codec should start writing to the 
+	  * destination buffer at the current destination buffer write position.
+	  * This is a virtual function that each derived class must implement.
+	  * @see enum TCodecProcessResult 
+	  * @param  aSource
+	  *         The source buffer containing data to encode or decode.
+	  *	@param  aDestination 
+	  *         The destination buffer to hold the data after encoding or 
+	  *         decoding.
+	  * @return The result of the processing.
+	  * @pre    The function ConfigureL() should have been called.
+	  */
+
+	 virtual TCodecProcessResult ProcessL(const CMMFBuffer& aSource, 
+												 CMMFBuffer& aDestination);
+
+private:
+	
+	/**
+	 *  Default Constructor
+	 */
+	CAriAmrWbDecMmfCodec();
+	/**
+	 *  Symbian 2nd phase constructor .
+	 */
+	void ConstructL();
+	/**
+	 * Update the result with result status, source bytes consumed
+	 * and destination bytes added.
+	 * @param 	aStatus
+	 * 		  	status of the result like EProcessComplete
+	 * @param 	aSrcBytesConsumed
+	 * 			total bytes consumed from the source buffer
+	 * @param	aDstBytesAdded
+	 * 			total bytes added to the destination buffer
+	 * @return	result of the processing
+	 */	
+	TCodecProcessResult Result(
+			TCodecProcessResult::TCodecProcessResultStatus aStatus,
+			TInt aSrcBytesConsumed,TInt aDstBytesAdded);
+	
+	/**
+	 * Copy the bytes from internal output buffer to destination buffer
+	 * @param	aDst
+	 * 			pointer to the destination buffer
+	 * @param	aDstBytesConsumed
+	 * 			total bytes added to the destination buffer
+	 * @return 	number of bytes copied to the destination buffer.
+	 */
+	TInt CopyToDstBuffer( CMMFDataBuffer* aDst, TInt& aDstBytesConsumed);
+	
+	/**
+	 * Copy the bytes from the source buffer to the internal input burrer
+	 * @param	aSrc
+	 * 			pointer to the source buffer
+	 * @param	aSrcBytesConsumed
+	 * 			total bytes consumed from the source buffer
+	 * @return 	number bytes copied from the source buffer
+	 */
+	TInt CopyFromSrcBuffer(const CMMFDataBuffer* aSrc,
+						TInt& aSrcBytesConsumed);
+	/**
+	 * Shifts the data in the input internal buffer to start position
+	 * @param	aFromPos
+	 * 			position from where data has to shift
+	 * @param	aToPos
+	 * 			position to where data has to shift
+	 */
+	void ShiftData( TInt aFromPos, TInt aToPos );
+private:
+	
+	// wrapper instance handle
+	CAriAmrWbDecWrapper* iCodec;
+	// internal input buffer
+	TUint8* 	iInternalInputBuffer;
+	// internal output buffer
+	TUint8*		iInternalOutputBuffer;
+	// internal input residual length
+	TInt 		iInternalInputBufferResidueLen;
+	// internal output residual length
+	TInt		iInternalOutputBufferResidueLen;
+	// internal output buffer position
+	TInt 		iInternalOutputBufferPos;	
+
+};
+
+
+#endif /* ARIAMRWBDECMMFCODEC_H  */