diff -r 798ee5f1972c -r 826cea16efd9 dvrengine/CommonRecordingEngine/src/CCRNullSource.cpp --- a/dvrengine/CommonRecordingEngine/src/CCRNullSource.cpp Thu Aug 19 10:54:18 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,433 +0,0 @@ -/* -* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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: Class that reads packets from a .rtp clip for testing purposes.* -*/ - - - - -// INCLUDE FILES -#include "CCRNullSource.h" -#include -#include "CCRPacketBuffer.h" -#include "CRtpTimer.h" -#include "videoserviceutilsLogger.h" - -// CONSTANTS -const TInt KGroupsCountPoint( 0 ); -const TInt KBufferThesholdCount( 20 ); - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CCRNullSource::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CCRNullSource* CCRNullSource::NewL( - const TDesC& aClipName, - MCRStreamObserver& aSessionObs, - CCRStreamingSession& aOwningSession ) - { - CCRNullSource* self = new( ELeave ) - CCRNullSource( aSessionObs, aOwningSession ); - CleanupStack::PushL( self ); - self->ConstructL( aClipName ); - CleanupStack::Pop(); - return self; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::CCRNullSource -// C++ default constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CCRNullSource::CCRNullSource( - MCRStreamObserver& aSessionObs, - CCRStreamingSession& aOwningSession ) - : CCRPacketSourceBase( aOwningSession, CCRStreamingSession::ECRNullSourceId ), - iSessionObs( aSessionObs ), - iGroupTime( KMaxTUint ) - { - // None - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CCRNullSource::ConstructL( const TDesC& aClipName ) - { - LOG1( "CCRNullSource::ConstructL() in, aClipName: %S", &aClipName ); - - iClipHandler = CRtpClipHandler::NewL(); - iClipHandler->RegisterReadObserver( this ); - - // Start playback - SCRRtpPlayParams params; - params.iFileName = aClipName; - iClipHandler->StartPlayBackL( params ); - - LOG( "CCRNullSource::ConstructL() out" ); - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::~CCRNullSource -// Destructor. -// ----------------------------------------------------------------------------- -// -CCRNullSource::~CCRNullSource() - { - LOG( "CCRNullSource::~CCRNullSource()" ); - - if ( iClipHandler ) - { - iClipHandler->StopPlayBack( KErrNone, 0 ); - } - - delete iClipHandler; iClipHandler = NULL; - delete iFlowTimer; - delete iSdp; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::GetSdp -// ----------------------------------------------------------------------------- -// -TInt CCRNullSource::GetSdp( TPtrC8& aSdp ) - { - if ( iSdp ) - { - aSdp.Set( iSdp->Des() ); - return KErrNone; - } - - return KErrNotReady; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::SetBuffer -// ----------------------------------------------------------------------------- -// -void CCRNullSource::SetBuffer( CCRPacketBuffer* aBuffer ) - { - iBuffer = aBuffer; - iBuffer->ContinousStream( EFalse ); - iBuffer->MoreComing( EFalse ); - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::PostActionL -// ----------------------------------------------------------------------------- -// -void CCRNullSource::PostActionL() - { - LOG( "CCRNullSource::PostActionL(), SDP will be handled !" ); - - // SDP - iSdp = iClipHandler->GetClipSdpL(); - - // Notify that SDP available - iSessionObs.StatusChanged( MCRPacketSource::ERtpStateSdpAvailable ); - delete iSdp; iSdp = NULL; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::Restore -// ----------------------------------------------------------------------------- -// -void CCRNullSource::Restore() - { - delete iFlowTimer; iFlowTimer = NULL; - const TInt err( NextClipGroup() ); - if ( err ) - { - LOG1( "CCRNullSource::Restore(), NextClipGroup() err: %d", err ); - iSessionObs.StatusChanged( MCRPacketSource::ERtpStateClosing ); - } - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::Play -// -// ----------------------------------------------------------------------------- -// -TInt CCRNullSource::Play( const TReal& aStartPos, const TReal& aEndPos ) - { - LOG2( "CCRNullSource::Play(), aStartPos: %f, aEndPos: %f", - aStartPos, aEndPos ); - - if ( aStartPos == KRealZero && aEndPos == KRealZero ) - { - Restore(); - } - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CCRNullSource::Stop -// ----------------------------------------------------------------------------- -// -TInt CCRNullSource::Stop() - { - iClipHandler->StopPlayBack( KErrNone, 0 ); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::GetPosition -// -// ----------------------------------------------------------------------------- -// -TInt CCRNullSource::GetPosition( TInt64& aPosition, TInt64& aDuration ) - { - if ( iBuffer ) - { - if ( iGroupTime != KMaxTUint ) - { - aPosition += TInt64( iGroupTime ) * KSiKilo; - } - - aDuration = TInt64( iClipHandler->GetCurrentLength() ) * KSiKilo; -#ifdef CR_ALL_LOGS - LOG2( "CCRNullSource::GetPosition(), aPosition: %u, aDuration: %u", - ( TUint )( aPosition / KSiKilo ), ( TUint )( aDuration / KSiKilo ) ); -#endif // CR_ALL_LOGS - return KErrNone; - } - - return KErrCompletion; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::GroupReadedL -// Adds packets to the buffer when finished asyncronous group reading. -// ----------------------------------------------------------------------------- -// -void CCRNullSource::GroupReadedL( - const TDesC8& aGroup, - const TUint aGroupTime, - const TBool aLastGroup ) - { - // Group time - if ( iGroupTime == KMaxTUint ) - { - iGroupTime = aGroupTime; - } - - // Data valid? - TInt point( KGroupsCountPoint + KPacketsCountBytes ); - const TInt total( aGroup.Length() ); - if ( point > total ) - { - LOG( "CCRNullSource::GroupReadedL(), No Packets Total Count !" ); - User::Leave( KErrCorrupt ); - } - - // Packets total count (PTC) - const TInt totalCount( CRtpUtil::GetValueL( - aGroup.Mid( KGroupsCountPoint, KPacketsCountBytes ) ) ); - if ( totalCount > 0 ) - { - iBuffer->ContinousStream( ETrue ); - } - - // Loop all packets - for ( TInt i( 0 ); i < totalCount; i++ ) - { - // Corrupted? - if ( ( point + KPacketSizeBytesLen ) > total ) - { - LOG( "CCRNullSource::GroupReadedL(), No Packets Size !" ); - User::Leave( KErrCorrupt ); - } - - // Packet total Size (PTS) - TInt packetSize( CRtpUtil::GetValueL( - aGroup.Mid( point, KPacketSizeBytesLen ) ) ); - // Corrupted? - if ( packetSize <= 0 || ( point + packetSize ) > total ) - { - LOG( "CCRNullSource::GroupReadedL(), No Packets Payload !" ); - User::Leave( KErrCorrupt ); - } - - // Packet type - point += KPacketSizeBytesLen; - const MRtpFileWriteObserver::TRtpType type( - ( MRtpFileWriteObserver::TRtpType )( aGroup[point] ) ); - point += KPacketTypeBytesLen; - packetSize -= ( KPacketSizeBytesLen + KPacketTypeBytesLen ); - - // Insert packet to the buffer - const TPtrC8 packet( aGroup.Mid( point, packetSize ) ); - -#ifdef CR_ALL_LOGS - const TUint8* pointer( &packet[2] ); - TInt seq( BigEndian::Get16( pointer ) ); - LOG3( "CCRNullSource::GroupReadedL(), type: %d, packet: %d, seq: %d", - type, packet.Length(), seq ); - //RFileLogger::WriteFormat( _L( "livetv" ), _L( "play.log" ), EFileLoggingModeAppend, - // _L( "GroupReadedL(), type: %d, packet: %d, seq: %d" ), type, packet.Length(), seq ); -#endif // CR_ALL_LOGS - - MCRPacketSource::TCRPacketStreamId stream( MCRPacketSource::EStreamIdCount ); - if ( TypeToStream( type, stream ) ) - { - // Last packet in group? - if ( i >= ( totalCount - 1 ) ) - { - iBuffer->ContinousStream( EFalse ); - if ( aLastGroup && stream != MCRPacketSource::EStreamEndTag ) - { - LOG( "CCRNullSource::GroupReadedL(), Misses last group from clip !" ); - stream = MCRPacketSource::EStreamEndTag; - } - } - - // Packet to buffer - iBuffer->AddPacket( stream, packet ); - } - - point+= packetSize; - } - - if ( !iFlowTimer ) - { - iFlowTimer = CRtpTimer::NewL( *this ); - iFlowTimer->After( KNormalRecGroupLength * KSiKilo ); - } - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::ReadStatus -// ----------------------------------------------------------------------------- -// -void CCRNullSource::ReadStatus( TInt aStatus ) - { - LOG1( "CCRNullSource::ReadStatus(), aStatus: %d", aStatus ); - - switch ( aStatus ) - { - case MRtpFileReadObserver::ERtpTimeShifTEnd: - break; - - default: - iSessionObs.StatusChanged( MCRPacketSource::ERtpStateClosing ); - break; - } - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::TimerEventL -// Internal timer call this when triggered. -// ----------------------------------------------------------------------------- -// -void CCRNullSource::TimerEventL() - { - User::LeaveIfError( NextClipGroup() ); - delete iFlowTimer; iFlowTimer = NULL; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::TimerError -// Internal timer call this when TimerEventL() leaves. -// ----------------------------------------------------------------------------- -// -void CCRNullSource::TimerError( const TInt aError ) - { - LOG1( "CCRNullSource::TimerError(), TimerEventL() leaved: %d", aError ); - ( void )aError; // Prevent compiler warning - - delete iFlowTimer; iFlowTimer = NULL; - iSessionObs.StatusChanged( MCRPacketSource::ERtpStateClosing ); - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::NextClipGroup -// ----------------------------------------------------------------------------- -// -TInt CCRNullSource::NextClipGroup() - { - if ( iBuffer && iClipHandler ) - { - if ( iBuffer->PacketsMinCount() < KBufferThesholdCount ) - { - TRAPD( err, iClipHandler->NextClipGroupL() ); - return err; - } - - return KErrNone; - } - - return KErrNotReady; - } - -// ----------------------------------------------------------------------------- -// CCRNullSource::TypeToStream -// ----------------------------------------------------------------------------- -// -TBool CCRNullSource::TypeToStream( - const MRtpFileWriteObserver::TRtpType& aType, - MCRPacketSource::TCRPacketStreamId& aStream ) - { - switch ( aType ) - { - case MRtpFileWriteObserver::ERtpAudio: - aStream = MCRPacketSource::EAudioStream; - break; - - case MRtpFileWriteObserver::ERtcpAudio: - aStream = MCRPacketSource::EAudioControlStream; - break; - - case MRtpFileWriteObserver::ERtpVideo: - aStream = MCRPacketSource::EVideoStream; - break; - - case MRtpFileWriteObserver::ERtcpVideo: - aStream = MCRPacketSource::EVideoControlStream; - break; - - case MRtpFileWriteObserver::ERtpSubTitle: - aStream = MCRPacketSource::ESubTitleStream; - break; - - case MRtpFileWriteObserver::ERtcpSubTitle: - aStream = MCRPacketSource::ESubTitleControlStream; - break; - - case MRtpFileWriteObserver::ERtpClipPause: - LOG( "CCRNullSource::TypeToStream(), ERtpClipPause" ); - aStream = MCRPacketSource::EDisContinousStream; - break; - - case MRtpFileWriteObserver::ERtpClipEnd: - LOG( "CCRNullSource::TypeToStream(), ERtpClipEnd" ); - aStream = MCRPacketSource::EStreamEndTag; - break; - - default: - LOG1( "CCRNullSource::TypeToStream(), Default case, aType: %d", - aType ); - return EFalse; - } - - return ETrue; - } - -// End of File