diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatread.h --- /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 +#include +#include +#include +#include +#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 iPayloadTypes; + + TBool iUsingJitterBufferExtension; // indicates if using jitter buffer extension structure + + +}; + +#endif