diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccredpayloadformat/inc/mccredpayloadwrite.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccredpayloadformat/inc/mccredpayloadwrite.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,325 @@ +/* +* 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 Encode interface for redundancy payload plugin. +* +*/ + + + + + +#ifndef MCCREDPAYLOADWRITE_H +#define MCCREDPAYLOADWRITE_H + +// INCLUDES +#include +#include "rtpdatasink.h" +#include "mccredencdecbase.h" +#include "formatstatemachine.h" + + +// FORWARD DECLARATIONS +class CMccRedEncoder; +class TRtpSendHeader; + +// CLASS DECLARATION +/** +* Defines configuration parameters to be used with configuration method. +* +* @lib mmccredplformat.dll +* @since Series 60 3.0 +*/ +class TMccRedPayloadWriteConfig + { + public: + TMccRedPayloadWriteConfig() : + iRedPayloadType(0), iRedBlockCount( 0 ), iMaxPayloadSize( 0 ), + iNumOfEncodings( 0 ), iEncPayloadTypes() + { } + + TMccRedPayloadWriteConfig( 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 TMccRedPayloadWritePckg; + +/** +* CMMFFormatEncode interface for redundancy payload plugin. +* +* @lib mmccredplformat.dll +* @since Series 60 3.0 +*/ +class CMccRedPayloadWrite : public CPayloadFormatWrite, + public MMccRtpDataSink + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + static CMccRedPayloadWrite* NewL( MDataSink* aSink ); + + /** + * Destructor. + */ + virtual ~CMccRedPayloadWrite(); + + public: // New functions + + /** + * Configures payload format with format spesific parameters. + * Leaves with KErrArgument if parameters are invalid. + * + * @since Series 60 3.0 + * @param aConfigParams Configuration parameters + * @param aClock RTP media clock + * @return void + */ + virtual void ConfigurePayloadFormatL( const TDesC8& aConfigParams, + CMccRtpMediaClock& aClock ); + + public: // From CMMFFormatEncode + + /** + * From CMMFFormatEncode. 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; + + /** + * 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 MDataSink + + /** + * From MDataSink. Create a sink buffer for the given media + * + * @since Series 60 3.0 + * @param aMediaId media type KUidMediaTypeAudio or KUidMediaTypeVideo + * @param aReference False is returned if sink buffer is created + * @return Pointer to sink buffer created + */ + CMMFBuffer* CreateSinkBufferL( TMediaId aMediaId, + TBool &aReference ); + + /** + * From MDataSink. Returns the UID identifying the type of data sink. + * + * @since Series 60 3.0 + * @return The UID identifying the type of data sink + */ + TUid DataSinkType() const; + + /** + * From MDataSink. Return the sink four CC code for the given media + * + * @since Series 60 3.0 + * @param aMediaId media type KUidMediaTypeAudio or KUidMediaTypeVideo + * @return FourCC code for the mediaId + */ + TFourCC SinkDataTypeCode( TMediaId aMediaId ); + + /** + * From MDataSink. Set the sink data type to the given four CC code for + * the given media. + * + * @since Series 60 3.0 + * @param aSinkFourCC fourCC code + * @param aMediaId media type KUidMediaTypeAudio or KUidMediaTypeVideo + * @return KErrNotSupported if invalid media ID, else KErrNone + */ + TInt SetSinkDataTypeCode( TFourCC aSinkFourCC, + TMediaId aMediaId ); + + /** + * From MDataSink. Log on to the sink thread - this funtion merely + * passes the command to its sink clip data source object. The sink + * 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 SinkThreadLogon( MAsyncEventHandler& aEventHandler ); + + /** + * From MDataSink. Log out of the sink thread - this funtion merely + * passes the command to its sink clip data source object. The sink + * clip object will handle the thread log off procedures. + * + * @since Series 60 3.0 + * @return void + */ + void SinkThreadLogoff(); + + /** + * From MDataSink Primes the source. + * + * @since Series 60 3.0 + * @return void + */ + void SinkPrimeL(); + + /** + * From MDataSink Plays the source. + * + * @since Series 60 3.0 + * @return void + */ + void SinkPlayL(); + + /** + * From MDataSink Pauses the source. + * + * @since Series 60 3.0 + * @return void + */ + void SinkPauseL(); + + /** + * From MDataSink Stops the source. + * + * @since Series 60 3.0 + * @return void + */ + void SinkStopL(); + + /** + * From MDataSink. Empty the given source buffer. + * + * @param aBuffer data buffer to empty + * @param aSupplier data source pointer + * @param aMediaId media type KUidMediaTypeAudio or KUidMediaTypeVideo + * + * @return void + */ + void EmptyBufferL( CMMFBuffer* aBuffer, MDataSource* aSupplier, + TMediaId aMediaId ); + + + /** + * From MDataSink. Called after the data buffer is written. + * Update the number of bytes written and the current write position for + * the next write operation. + * + * @since Series 60 3.0 + * @param aBuffer data buffer emptied + * @return void + */ + void BufferEmptiedL( CMMFBuffer* aBuffer ); + + public: // From MMccRtpDataSink + + /** + * Empty source buffer to the sink of redundancy plugin. + * + * @since Series 60 3.0 + * @param aBuffer Buffer to empty + * @param aSupplier Data source to notify after buffer is emptied + * @param aMediaId Identifies the media type of particular stream + * @param aSendHeader Carries RTP packet header fields + * @return void + */ + void EmptyBufferL( CMMFBuffer* aBuffer, + MDataSource* aSupplier, + TMediaId aMediaId, + TRtpSendHeader& aSendHeader ); + + private: + + /** + * C++ default constructor. + */ + CMccRedPayloadWrite(); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL( MDataSink* aSink ); + + /** + * 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 ); + + private: // Data + + // Redundancy encoder used to construct redundancy RTP format packet + CMccRedEncoder* iRedEncoder; // Has + + // Data source for redundancy plugin + MDataSource* iDataSource; // Uses + + // Sink buffer holding constructed redundancy RTP payload + CMMFDataBuffer* iSinkBuffer; // Has + + // Pointer to data buffer containing source data + CMMFDataBuffer* iBufToEmptyPtr; // Uses + + // Encapsulates payload format encoding parameters + TMccRedPayloadWriteConfig iPLConfig; + + private: // Friend classes + // Friend class for testing + #ifdef TEST_EUNIT + friend class UT_CMccRedPayloadWrite; + #endif + }; + +#endif // MCCREDPAYLOADWRITE_H + +// End of File