multimediacommscontroller/mmccredpayloadformat/inc/mccredpayloadwrite.h
changeset 0 1bce908db942
--- /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