diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccshared/inc/streamformatter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccshared/inc/streamformatter.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,240 @@ +/* +* Copyright (c) 2004-2005 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: Formatter classes for encoding/decoding of a bit stream. +* +*/ + + + +#ifndef STREAMFORMATTER_H +#define STREAMFORMATTER_H + +// INCLUDES +#include + +// CONSTS +const TInt KBitsIn1Byte = 8; + +// CLASS DECLARATION + +/** +* The formatter class that sequentially encodes a bit stream. +* +* @lib Mccamrplformat.lib +* @since Series 60 3.0 +*/ +class TStreamEncoder + { + public: + + /** + * Constructor. + */ + TStreamEncoder() : iBuffer( NULL ), iByteIndex( 0 ), iBitIndex( 0 ) + { }; + + /** + * Destructor. + */ + virtual ~TStreamEncoder() { iBuffer = NULL; }; + + public: + + /** + * Initialize the stream encoder. + * This function must be called before calling any other functions. + * @since Series 60 3.0 + * @param aBuffer - [input] Pointer to the bit-stream buffer. + * @param aByteIndex - [input] Starting byte index ( starts from zero ). + * @param aBitIndex - [input] Starting bit index ( starts from zero ). + * @return void + */ + void Initialize( TUint8* aBuffer, TInt aByteIndex, TInt aBitIndex ); + + /** + * Put a number of bit values ( up to 32 bits ) into the bit-stream + * buffer at current location. Bits are put starting from MSB of the + * buffer byte and advancing to LSB. + * @since Series 60 3.0 + * @param aValue - [input] Value to put. + * @param aBitCount - [input] Number of bits to put; between 1 and 32, + * both inclusive. + */ + void Encode( TUint32 aValue, TInt aBitCount ); + + /** + * Put a number of bit values into the bit-stream buffer at current + * location. + * @since Series 60 3.0 + * @param aFromBuffer - [input] Buffer to get byte values from. + * @param aByteIndex - [input] Starting byte index ( starts from + * zero ). + * @param aBitIndex - [input] Starting bit index ( starts from zero ). + * @param aBitCount - [input] Number of bits to put. + */ + void Encode( const TUint8* aFromBuffer, TInt aFromByteIndex, + TInt aFromBitIndex, TInt aBitCount ); + + /** + * Get the current byte index value. + * @since Series 60 3.0 + * @return TInt - Current byte index value. + */ + inline TInt ByteIndex() const + { return iByteIndex; }; + + /** + * Get the current bit index value. + * @since Series 60 3.0 + * @return TInt - Current bit index value. + */ + inline TInt BitIndex() const + { return iBitIndex; }; + + /** + * Set the current byte index value. + * @since Series 60 3.0 + * @param aByteIndex New byte index + */ + inline void SetByteIndex( TInt aByteIndex ) + { iByteIndex = aByteIndex; }; + + /** + * Set the current bit index value. + * @since Series 60 3.0 + * @param aBitIndex New bit index + */ + inline void SetBitIndex( TInt aBitIndex ) + { iBitIndex = aBitIndex; }; + + private: + + // Pointer to the bit-stream buffer. + TUint8* iBuffer; + + // Current byte index ( starts from zero ) + TInt iByteIndex; + + // Current bit index ( starts from zero ) + TInt iBitIndex; + }; + +/** +* The formatter class that sequentially decodes a bit stream. +* +* @lib Mccamrplformat.lib +* @since Series 60 3.0 +*/ +class TStreamDecoder + { + public: + + /** + * Constructor. + */ + TStreamDecoder() : iBuffer( NULL ), iByteIndex( 0 ), iBitIndex( 0 ) + { }; + + /** + * Destructor. + */ + virtual ~TStreamDecoder() { iBuffer = NULL; }; + + public: + + /** + * Initialize the stream decoder. + * This function must be called before calling any other functions. + * @since Series 60 3.0 + * @param aBuffer - [input] Pointer to the bit-stream buffer. + * @param aByteIndex - [input] Starting byte index ( starts from + * zero ). + * @param aBitIndex - [input] Starting bit index ( starts from zero ). + */ + void Initialize( const TUint8* aBuffer, TInt aByteIndex, + TInt aBitIndex ); + + /** + * Get a number of bit values ( up to 32 bits ) from the bit-stream + * buffer at current location. Bits are extracted starting from MSB of + * the buffer byte and advancing to LSB. + * Returned value: ( MSB )-> bit31, bit30 .... bit1, bit0 <-( LSB, full ) + * If aBitCount < 32, vacant MSB bits of the returned value are filled + * with zeros. + * @since Series 60 3.0 + * @param aBitCount - [input] Number of bits to get; between 1 and 32, + * both inclusive. + * @return TUint32 - Bit values extracted from the buffer; zero if + * aBitCount is out of range. + */ + TUint32 Decode( TInt aBitCount ); + + /** + * Get a number of byte values from the bit-stream buffer at current + * location. + * @since Series 60 3.0 + * @param aToBuffer - [output] Buffer to store byte values. + * @param aByteIndex - [input] Starting byte index ( starts from + * zero ). + * @param aBitIndex - [input] Starting bit index ( starts from zero ). + * @param aBitCount - [input] Number of bits to put. + */ + void Decode( TUint8* aToBuffer, TInt aToByteIndex, TInt aToBitIndex, + TInt aBitCount ); + + /** + * Get the current byte index value. + * @since Series 60 3.0 + * @return TInt - Current byte index value. + */ + inline TInt ByteIndex() const + { return iByteIndex; }; + + /** + * Get the current bit index value. + * @since Series 60 3.0 + * @return TInt - Current bit index value. + */ + inline TInt BitIndex() const + { return iBitIndex; }; + + /** + * Set the current byte index value. + * @since Series 60 3.0 + * @param aByteIndex New byte index + */ + inline void SetByteIndex( TInt aByteIndex ) + { iByteIndex = aByteIndex; }; + + /** + * Set the current bit index value. + * @since Series 60 3.0 + * @param aBitIndex New bit index + */ + inline void SetBitIndex( TInt aBitIndex ) + { iBitIndex = aBitIndex; }; + + private: + + // Pointer to the bit-stream buffer. + const TUint8* iBuffer; + + // Current byte index ( starts from zero ) + TInt iByteIndex; + + // Current bit index ( starts from zero ) + TInt iBitIndex; + }; + +#endif // STREAMFORMATTER_H