diff -r 000000000000 -r 1bce908db942 multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatwrite.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/multimediacommscontroller/mmccavcpayloadformat/inc/avcpayloadformatwrite.h Tue Feb 02 01:04:58 2010 +0200 @@ -0,0 +1,127 @@ +/* +* 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 payloadization part of the AVC payloadization/depayloadization plugin +* +*/ + + + + +#ifndef AVCPAYLOADFORMATWRITE_H +#define AVCPAYLOADFORMATWRITE_H + +// include files +#include +#include +#include +#include + +#include "rtpheader.h" +#include "mccinternalcodecs.h" +#include "formatstatemachine.h" +#include "rfc3984encode.h" +#include "avcrtpstruct.h" + +// Forward declarations + +class CRFC3984Encode; +class TRtpRecvHeader; + + + + +// CAvcPayloadFormatWrite class declaration. +// The class receives one avc frame and payloadizes it into +// one ore more RTP packets and gives the packets to the RTP +// layer + +class CAvcPayloadFormatWrite : public CPayloadFormatWrite, public MPayloadFormatWrite + { + public: + + static CAvcPayloadFormatWrite * NewL( MDataSink * aSink); + + virtual ~CAvcPayloadFormatWrite(); + + // from MPayloadFormatWrite + void EmptySourceBufferL( ); + void SourceBufferEmptiedL( ); + virtual void SetPayloadType( TUint8 aPayloadType); + void CancelUlRequest(); + + // from CMMFFormatEncode (currently for audio, so none of these + // is implemented) + + virtual TTimeIntervalMicroSeconds FrameTimeInterval( TMediaId aMediaType ) const; + virtual TTimeIntervalMicroSeconds Duration( TMediaId /*aMediaType*/ ) const; + + // from MDataSink (one of the above public class is derived from it) + virtual CMMFBuffer* CreateSinkBufferL( TMediaId aMediaId, + TBool &aReference ); + virtual TFourCC SinkDataTypeCode( TMediaId aMediaId ); + virtual TInt SetSinkDataTypeCode( TFourCC aSinkFourCC, + TMediaId aMediaId ); + virtual TInt SinkThreadLogon( MAsyncEventHandler& aEventHandler ); + virtual void SinkThreadLogoff( ); + virtual void EmptyBufferL( CMMFBuffer* aBuffer, + MDataSource* aSupplier, + TMediaId aMediaId ); + virtual void BufferEmptiedL( CMMFBuffer* aBuffer ); + virtual void SinkPrimeL(); + virtual void SinkPlayL( ); + virtual void SinkPauseL( ); + virtual void SinkStopL( ); + + /** + * Configures payload format with format spesific parameters. + * Leaves with KErrArgument if parameters are invalid. + * @param aConfigParams Configuration parameters + * @param aClock + */ + void ConfigurePayloadFormatL( const TDesC8& aConfigParams, + CMccRtpMediaClock& aClock ); + + private: + + CAvcPayloadFormatWrite ( ); + void ConstructL( MDataSink* aSink); + TBool ProcessFramesL(); + CMMFDataBuffer* CreateSinkBufferOfSizeL( TUint aSize ); + + private: + + CFormatEncodeStateMachine * iStateMachine; + CMMFDataBuffer * iSourceBuffer; + CRFC3984Encode * iEncoder; // payloadization class pointer + CMMFDataBuffer * iSinkBuffer; // sink buffer + TRtpSendHeader iRtpSendHeader; // RTP Header + TTimeIntervalMicroSeconds iFrameTimeInterval; + TMediaId iMediaId; + + // Parameters relating to RTP data encoding + TMccCodecInfo iCInfo; + + // Pointer to current sink (redundancy or rtp data sink) + MDataSink* iCurDataSink; + + TBool iIsRtpSink; + + TUint iSeqNumIncrementer; + + #if defined( TEST_EUNIT ) && defined ( __WINSCW__ ) + friend class UT_CAvcPayloadFormatWrite; + #endif + }; + +#endif \ No newline at end of file