--- /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 */