diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccredpayloadformat/inc/mccredpayloadread.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccredpayloadformat/inc/mccredpayloadread.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,373 @@ +/* +* Copyright (c) 2005-2006 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: MMF Format Decode interface for redundancy payload plugin. +* +*/ + + + + + +#ifndef MCCREDPAYLOADREAD_H +#define MCCREDPAYLOADREAD_H + +// INCLUDES +#include +#include "mccredencdecbase.h" +#include "formatstatemachine.h" + +// FORWARD DECLARATIONS +class CMccRedDecoder; + +// CLASS DECLARATION +/** +* Defines configuration parameters to be used with configuration method. +* +* @lib mmccredplformat.dll +* @since Series 60 3.0 +*/ +class TMccRedPayloadReadConfig + { + public: + TMccRedPayloadReadConfig() : + iRedPayloadType(0), iRedBlockCount( 0 ), iMaxPayloadSize( 0 ), + iNumOfEncodings( 0 ), iEncPayloadTypes() + { } + + TMccRedPayloadReadConfig( TUint8 aRedPayloadType, TUint8 aRedBlockCount, + TUint8 aMaxPayloadSize, TUint8 aNumOfEncodings ) : + iRedPayloadType( aRedPayloadType ), iRedBlockCount( aRedBlockCount ), + iMaxPayloadSize( aMaxPayloadSize ), iNumOfEncodings( aNumOfEncodings ), + iEncPayloadTypes() + { } + + void InitPayloadTypes() + { + TInt ind( iEncPayloadTypes.Count() ); + while ( --ind ) + { + iEncPayloadTypes[ind] = KPayloadNotDefined; + } + } + + // RTP header payload type indicating redundancy format + TUint8 iRedPayloadType; + + // Number of redundant blocks included in one RTP packet + TUint8 iRedBlockCount; + + // Size of maximum packetization interval of codec data + TUint iMaxPayloadSize; + + // Number of encodings combined in RTP packet + TUint8 iNumOfEncodings; + + // Payload types for encodings to use + TFixedArray iEncPayloadTypes; + }; + +typedef TPckgBuf TMccRedPayloadReadPckg; + +/** +* Depacketizes RTP payload in redundancy format. +* +* @lib mmccredplformat.dll +* @since Series 60 3.0 +*/ +class CMccRedPayloadRead : public CPayloadFormatRead + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMccRedPayloadRead* NewL( MDataSource* aSource ); + + /** + * Destructor. + */ + virtual ~CMccRedPayloadRead(); + + public: // From CPayloadFormatRead + + /** + * Configures payload format with format spesific parameters. + * Leaves with KErrArgument if parameters are invalid. + * + * @since Series 60 3.0 + * @param aConfigParams Configuration parameters + * @return void + */ + void ConfigurePayloadFormatL( const TDesC8& aConfigParams ); + + /** + * Called after the data buffer is filled. Update the number of bytes + * read and the current read position for the next read operation. + * + * @since Series 60 3.0 + * @param aBuffer data buffer filled + * @param aRecvHeader RTP header + * @return void + */ + void DataBufferFilledL( CMMFBuffer* aBuffer, const TRtpRecvHeader& aRecvHeader ); + + public: // From CMMFFormatDecode + + /** + * From CMMFFormatDecode. Return number of audio streams for the given + * media. Raw audio files can only have 1 audio stream. + * + * @since Series 60 3.0 + * @param aMediaType KUidMediaTypeAudio or KUidMediaTypeVideo + * @return Number of audio streams + */ + TUint Streams( TUid aMediaType ) const; + + /** + * From CMMFFormatDecode. Return the frame time interval for the given + * media. + * + * @since Series 60 3.0 + * @param aMediaType KUidMediaTypeAudio or KUidMediaTypeVideo + * @return Time interval in micro seconds + */ + TTimeIntervalMicroSeconds FrameTimeInterval( TMediaId aMediaType) const; + + /** + * From CMMFFormatDeoce. NOT SUPPORTED. Return the clip duration for + * the given media. + * + * @since Series 60 3.0 + * @param aMediaType KUidMediaTypeAudio or KUidMediaTypeVideo + * @return Clip duration in micro seconds + */ + TTimeIntervalMicroSeconds Duration( TMediaId aMediaType ) const; + + public: // From MDataSource + + /** + * From MDataSource. Return the four CC code for the given media. + * + * @since Series 60 3.0 + * @param aMediaId KUidMediaTypeAudio or KUidMediaTypeVideo + * @return FourCC code + */ + TFourCC SourceDataTypeCode( TMediaId aMediaId ); + + /** + * From MDataSource. Set the source data type to the given four CC code + * for the given media. + * + * @since Series 60 3.0 + * @param aSourceFourCC fourCC code + * @param aMediaId contains the media type KUidMediaTypeAudio + * or KUidMediaTypeVideo + * + * @return KErrNotSupported if invalid media ID, else return KErrvoid + */ + TInt SetSourceDataTypeCode( TFourCC aSourceFourCC, + TMediaId aMediaId ); + + /** + * From MDataSource. Tests whether a source buffer can be created. + * + * @since Series 60 3.0 + * @return ETrue if a source buffer can be created. + */ + TBool CanCreateSourceBuffer(); + + /** + * From MDataSource. Create a source buffer for the given media + * + * @since Series 60 3.0 + * @param aMediaId contains the media type KUidMediaTypeAudio or + * KUidMediaTypeVideo + * @param aReference value of False is returned to caller if source + * buffer is created + * + * @return Pointer to source buffer created + */ + CMMFBuffer* CreateSourceBufferL( TMediaId aMediaId, + TBool &aReference ); + + /** + * From MDataSource. Read the next block of data from file into the + * given buffer. + * + * @since Series 60 3.0 + * @param aBuffer source data buffer for the AMR-NB data read + * @param aConsumer data sink pointer + * @param aMediaId contains the media type KUidMediaTypeAudio or + * KUidMediaTypeVideo + * + * @return void + */ + void FillBufferL( CMMFBuffer* aBuffer, + MDataSink* aConsumer, + TMediaId aMediaId ); + + /** + * From MDataSource. Log in to the source thread - this funtion merely + * passes the command to its source clip data source object. The source + * clip object will handle the thread log on procedures. + * + * @since Series 60 3.0 + * @param aEventHandler address of event handler + * + * @return error code returned by source clip + */ + TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * From MDataSource. Log out of the source thread - this funtion merely + * passes the command to its source clip data source object. The source + * clip object will handle the thread log off procedures. + * + * @since Series 60 3.0 + * @return void + */ + void SourceThreadLogoff(); + + /** + * From MDataSource. Primes the source. + * + * @since Series 60 3.0 + * @return void + */ + void SourcePrimeL(); + + /** + * From MDataSource. Plays the source. + * + * @since Series 60 3.0 + * @return void + */ + void SourcePlayL(); + + /** + * From MDataSource. Pauses the source. + * + * @since Series 60 3.0 + * @return void + */ + void SourcePauseL(); + + /** + * From MDataSource. Stops the source. + * + * @since Series 60 3.0 + * @return void + */ + void SourceStopL(); + + /** + * From MDataSource. Negotiates source. + * + * @since Series 60 3.0 + * @param aDataSink Data sink interested to receive data + * @return void + */ + void NegotiateSourceL( MDataSink& aDataSink ); + + /** + * From MDataSource. Used by the sink to suggest a source buffer size. + * + * @since Series 60 3.0 + * @param aSuggestedBufferSize A recommended buffer size + * @return void + */ + void SuggestSourceBufferSize( TUint aSuggestedBufferSize ); + + public: // From MDataSink + + /** + * From MDataSink. Gets the data type code for the sink specified by the + * media ID. Format decode may act in role of MDataSink. + * + * @since Series 60 3.0 + * @param aMediaId Media ID + * @return The data sink type code + */ + TFourCC SinkDataTypeCode( TMediaId aMediaId ); + + private: + + /** + * C++ default constructor. + */ + CMccRedPayloadRead(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( MDataSource* aSource ); + + /** + * Set payload types to accept as encodings. + * + * @since Series 60 3.0 + * @param aPayloadTypes Payload types + * @return System wide error code + */ + TInt SetPayloadTypes( RArray& aPayloadTypes ); + + /** + * Creates a buffer used in data transfer between format read and + * its datasource. + * + * @since Series 60 3.2 + * @param aSize Suggested buffer size + * @param aIsOwnBuffer Indicates ownership of the buffer + * @return Created buffer + */ + CMMFDataBuffer* CreateClipBufferL( TUint aSize, TBool& aIsOwnBuffer ); + + private: // Data + + // Decoder for redundancy payload + CMccRedDecoder* iRedDecoder; + + // Data sink for redundancy plugin + MDataSink* iDataSink; + + // The fourCC indicating data type used as redundant data + TFourCC iFourCC; + + // Buffer holding redundancy data got from far end + CMMFDataBuffer* iSourceBuffer; + + // Indicates whether plugin owns it's source buffer + TBool iSourceBufOwnership; + + // Pointer to the buffer passed with FillBufferL + CMMFDataBuffer* iSinkBuffer; // Uses + + // Encapsulates payload decoding parameters + TMccRedPayloadReadConfig iPLConfig; + + // Suggeste source buffer size + TUint iSuggestedBufSize; + + private: // Friend classes + + // Friend class for testing + #ifdef TEST_EUNIT + friend class UT_CMccRedPayloadRead; + #endif + + }; + +#endif // MCCREDPAYLOADREAD_H + +// End of File