--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatread.h Tue Feb 02 01:04:58 2010 +0200
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 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: The depayloadization part of the AVC payloadization/depayloadization plugin
+*
+*/
+
+
+
+
+#ifndef AVCPAYLOADFORMATREAD_H
+#define AVCPAYLOADFORMATREAD_H
+
+// INCLUDES
+#include <E32Base.h>
+#include <e32std.h>
+#include <mmf/server/mmfdatabuffer.h>
+#include <mmf/common/mmfutilities.h>
+#include <ecom/ImplementationProxy.h>
+#include "rtpheader.h"
+#include "rfc3984decode.h"
+#include "formatstatemachine.h"
+
+
+// classes forward decleration
+
+//class CRFC3984Decode;
+class TRtpRecvHeader;
+
+// CLASS DECLARATION
+
+#define KAvcMaxRxPacketSize 10000
+
+
+/**
+* The CAvcPayloadFormatRead class implements the MMF format plugin for decoding of RTP payload
+* format for AVC codec. Refer to IETF RFC3984 for RTP Payload format for AVC codec.
+* This class receives AVC payload data from an RTP packet, depayloadizes it and passes it to the jitter buffer
+*
+* @lib ?library
+* @since Series 60 3.0
+*/
+class CAvcPayloadFormatRead : public CPayloadFormatRead, public MPayloadFormatRead
+{
+
+ public: // Constructors and destructor
+ /**
+ * Two-phased constructor.
+ * @param aSource Source of the data for the payload format plugin
+ */
+ static CAvcPayloadFormatRead* NewL ( MDataSource* aSource );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CAvcPayloadFormatRead ( );
+
+ virtual void InitializeL( );
+
+ void FillBufferL( CMMFBuffer* aBuffer, MDataSink* aConsumer,
+ TMediaId aMediaId );
+
+
+ virtual void CancelDlRequest( );
+
+ void SendDataToSinkL( );
+
+
+
+ void FillSourceBufferL( );
+
+ virtual void SetPayloadType( TUint8 aPayloadType );
+
+ virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler );
+ virtual void SourceThreadLogoff( );
+ virtual void NegotiateSourceL( MDataSink& aDataSink );
+
+ virtual void BufferFilledL( CMMFBuffer* aBuffer,
+ const TRtpRecvHeader& aRtpHeader );
+
+ TFourCC SourceDataTypeCode( TMediaId aMediaId );
+ TInt SetSourceDataTypeCode( TFourCC aSourceFourCC,
+ TMediaId aMediaId );
+
+ void FillSinkBufferL( );
+
+ virtual CMMFBuffer* CreateSourceBufferL( TMediaId aMediaId, TBool &aReference );
+
+
+ void SourcePrimeL( );
+ void SourcePlayL();
+ void SourcePauseL();
+ void SourceStopL();
+
+ void UseRTPInfoExtension();
+
+
+ // from CPayloadFormatRead
+
+ virtual void ConfigurePayloadFormatL( const TDesC8& aConfigParams );
+
+
+ // from CMMFFormatDecode
+
+ /**
+ * Return the frame time interval for the given media
+ *
+ * @param aMediaType KUidMediaTypeAudio or KUidMediaTypeVideo
+ *
+ * @return Time interval in micro seconds
+ */
+ virtual TTimeIntervalMicroSeconds FrameTimeInterval( TMediaId aMediaType ) const;
+
+ /** *** NOT SUPPORTED ***
+ * Return the clip duration for the given media
+ *
+ * @param aMediaType KUidMediaTypeAudio or KUidMediaTypeVideo
+ *
+ * @return Clip duration in micro seconds
+ */
+ virtual TTimeIntervalMicroSeconds Duration( TMediaId aMediaType ) const;
+
+ virtual TUint Streams(TUid aMediaType) const;
+
+
+
+ /**
+ * From CMMFFormatDecode
+ */
+ TFourCC SinkDataTypeCode( TMediaId aMediaId );
+
+ // From MDataSink
+
+ protected:
+
+ TFourCC iFourCC;
+
+ private:
+
+ CAvcPayloadFormatRead ( );
+ void ConstructL(MDataSource* aSource);
+ CMMFBuffer* CreateSourceBufferNowL( TMediaId aMediaId, TBool &aReference );
+
+ CRFC3984Decode * iDecoder; // depayloadization class pointer
+ // contains H264
+ MDataSource* iRtpDataSource; // data source
+ MDataSource * iCurDataSource; // currently pointed data source, same as RTP Data Source
+
+ TBool iBufferToReadExists;
+ TBool iFillRequested;
+
+ // Data sink who requested "FillBuffer".
+ MDataSink* iSink;
+
+ // RTP Header
+ TRtpRecvHeader iRecvHeader;
+
+ TMediaId iMediaId;
+
+ // Format decoding state machine
+ CFormatDecodeStateMachine* iStateMachine;
+
+ // Count of depayloadized NAL units
+ TInt iNalCount;
+ TInt iNalSent;
+
+ // DG: Use to provide several packets at a time to the jitter buffer
+ TInt iCounter;
+
+
+ CMMFDataBuffer * iPayloadBuffer; // Sink Buffer -- data comes into this buffer, is depacketized
+ CMMFDataBuffer * iFrameBuffer; // Source Buffer -- data is put in this buffer after depacketization and given to data path
+
+ // Payload types to expect including PTs for redundancy encodings
+ RArray<TUint8> iPayloadTypes;
+
+ TBool iUsingJitterBufferExtension; // indicates if using jitter buffer extension structure
+
+
+};
+
+#endif