--- /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 <mmf/server/mmfformat.h>
+#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<TUint8, KMaxNumOfEncodings> iEncPayloadTypes;
+ };
+
+typedef TPckgBuf<TMccRedPayloadWriteConfig> 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<TUint>& 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