dvrengine/CommonRecordingEngine/DvrRtpClipHandler/src/CRtpFileBase.cpp
branchRCL_3
changeset 47 826cea16efd9
parent 45 798ee5f1972c
child 48 13a33d82ad98
--- a/dvrengine/CommonRecordingEngine/DvrRtpClipHandler/src/CRtpFileBase.cpp	Thu Aug 19 10:54:18 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,354 +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:    Implementation of the Common Recording Engine RTP file base class.*
-*/
-
-
-
-
-// INCLUDE FILES
-#include <ipvideo/CRtpFileBase.h>
-#include "videoserviceutilsLogger.h"
-
-// CONSTANTS
-const TInt KFirstIntegerPoint( 0 );
-const TInt KSecondIntegerPoint( KFirstIntegerPoint + KIntegerBytes );
-const TInt KThirdIntegerPoint( KSecondIntegerPoint + KIntegerBytes );
-const TInt KFourthIntegerPoint( KThirdIntegerPoint + KIntegerBytes );
-const TInt KSeekArrayGranularity( 20 );
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::CRtpFileBase
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CRtpFileBase::CRtpFileBase()
-  : CActive( CActive::EPriorityStandard ),
-    iMode( EModeNone ),
-    iThisGroup( KErrNotFound ),
-    iGroupsTotalCount( KErrNotFound ),
-    iFirstSeekAddr( KErrNotFound ),
-    iLastSeekAddr( KErrNotFound ),
-    iGroupTotalLen( KErrNotFound ),
-    iNextGroupPoint( KErrNotFound ),
-    iPrevGroupPoint( KErrNotFound ),
-    iGroupTime( 0 ),
-    iSeekHeaderPoint( KErrNotFound ),
-    iDataPtr( 0, 0 )
-    {
-    CActiveScheduler::Add( this );
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::ConstructL()
-    {
-    LOG( "CRtpFileBase::ConstructL()" );
-
-    iSeekArray = new( ELeave ) CArrayFixFlat<SSeek>( KSeekArrayGranularity );
-    }
-
-// -----------------------------------------------------------------------------
-// Destructor
-//
-// -----------------------------------------------------------------------------
-//
-CRtpFileBase::~CRtpFileBase()
-    {
-    LOG( "CRtpFileBase::~CRtpFileBase()" );
-    // Do not call Cancel here, it will cause crashes (DoCancel of inherited
-    // class is never called, instead it jumps to foobar address)
-    iFile.Close();
-    iFs.Close();
-    delete iCurrentPath;
-    delete iSeekArray;
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::DeleteTimeShiftFiles
-// Deletes files used during time shift mode.
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::DeleteTimeShiftFiles( RArray<STimeShiftSeek>& aShiftSeek )
-    {
-    LOG1( "CRtpFileBase::DeleteTimeShiftFiles(), count: %d", aShiftSeek.Count() );
-    
-    TInt index( KErrNotFound );
-    const TInt count( aShiftSeek.Count() );
-    for ( TInt i( 0 ); i < count; i++ )
-        {
-        if ( aShiftSeek[i].iNameIndex != index )
-            {
-            TPath clipPath( KDvrTimeShiftFile );
-            index = aShiftSeek[i].iNameIndex;
-            clipPath.AppendNum( index );
-            iFs.Delete( clipPath );
-            LOG1( "CRtpFileBase::DeleteTimeShiftFiles(), deleted: %S", &clipPath );
-            }
-        }
-
-    aShiftSeek.Reset();
-    }
-    
-// -----------------------------------------------------------------------------
-// CRtpFileBase::WriteSeekHeaderL
-// Writes seek header of all groups.
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::WriteSeekHeaderL()
-    {
-    User::LeaveIfError( iSeekHeaderPoint );
-
-    HBufC8* data = HBufC8::NewLC( KSeekHeaderBytes );
-    TPtr8 ptr( data->Des() );
-    
-    HBufC8* bytes = CRtpUtil::MakeBytesLC( iGroupsTotalCount );
-    ptr.Copy( bytes->Des() );
-    CleanupStack::PopAndDestroy( bytes );
-    
-    bytes = CRtpUtil::MakeBytesLC( iFirstSeekAddr );
-    ptr.Append( bytes->Des() );
-    CleanupStack::PopAndDestroy( bytes );
-
-    bytes = CRtpUtil::MakeBytesLC( iLastSeekAddr );
-    ptr.Append( bytes->Des() );
-    CleanupStack::PopAndDestroy( bytes );
-
-    User::LeaveIfError( iFile.Write( iSeekHeaderPoint, ptr, KSeekHeaderBytes ) );
-    CleanupStack::PopAndDestroy( data );
-    }
- 
-// -----------------------------------------------------------------------------
-// CRtpFileBase::ReadSeekHeaderL
-// Readss seek header of all groups.
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::ReadSeekHeaderL()
-    {
-    User::LeaveIfError( iSeekHeaderPoint );
-
-    HBufC8* bytes = HBufC8::NewLC( KSeekHeaderBytes );
-    TPtr8 ptr( bytes->Des() );
-    User::LeaveIfError( iFile.Read( iSeekHeaderPoint, ptr, KSeekHeaderBytes ) );
-    if ( ptr.Length() < KSeekHeaderBytes )
-        {
-        LOG( "CRtpFileBase::ReadSeekHeaderL(), Seek Header Corrupted" );
-        User::Leave( KErrCorrupt );
-        }
-
-    iGroupsTotalCount = CRtpUtil::GetValueL( ptr.Mid( KFirstIntegerPoint,
-                                                      KIntegerBytes ) );
-    User::LeaveIfError( iGroupsTotalCount );
-    iFirstSeekAddr = CRtpUtil::GetValueL( ptr.Mid( KSecondIntegerPoint,
-                                                   KIntegerBytes ) );
-    User::LeaveIfError( iFirstSeekAddr );
-    iLastSeekAddr = CRtpUtil::GetValueL( ptr.Mid( KThirdIntegerPoint,
-                                                  KIntegerBytes ) );
-    User::LeaveIfError( iLastSeekAddr );
-    CleanupStack::PopAndDestroy( bytes );
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::ReadGroupHeaderL
-// Reads group header.
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::ReadGroupHeaderL()
-    {
-    User::LeaveIfError( iThisGroup );
-
-    HBufC8* bytes = HBufC8::NewLC( KGroupHeaderBytes );
-    TPtr8 ptr( bytes->Des() );
-
-    User::LeaveIfError( iFile.Read( iThisGroup, ptr, KGroupHeaderBytes ) );
-    UpdateGroupHeaderVariablesL( ptr );
-
-    CleanupStack::PopAndDestroy( bytes );
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::UpdateGroupHeaderVariablesL
-// Updates group header variables from readed data.
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::UpdateGroupHeaderVariablesL( const TDesC8& aDataPtr )
-    {
-    if ( aDataPtr.Length() < KGroupHeaderBytes )
-        {
-        LOG( "CRtpFileBase::UpdateGroupHeaderVariablesL(), Group Header Corrupted" );
-        User::Leave( KErrCorrupt );
-        }
-
-    iGroupTotalLen  = CRtpUtil::GetValueL( aDataPtr.Mid( KFirstIntegerPoint ,
-                                                         KIntegerBytes ) );
-    User::LeaveIfError( iGroupTotalLen );
-    iNextGroupPoint = CRtpUtil::GetValueL( aDataPtr.Mid( KSecondIntegerPoint,
-                                                         KIntegerBytes ) );
-    User::LeaveIfError( iNextGroupPoint );
-    iPrevGroupPoint = CRtpUtil::GetValueL( aDataPtr.Mid( KThirdIntegerPoint,
-                                                         KIntegerBytes ) );
-    User::LeaveIfError( iPrevGroupPoint );
-    iGroupTime = CRtpUtil::GetValueL( aDataPtr.Mid( KFourthIntegerPoint,
-                                                    KIntegerBytes ) );
-    User::LeaveIfError( iGroupTime );
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::AppendSeekArrayL
-// Appends one item to seek array.
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::AppendSeekArrayL( const TUint aTime, const TInt aPoint )
-    {
-#ifdef CR_ALL_LOGS
-    LOG2( "CRtpFileBase::AppendSeekArrayL(), aTime: %u, aPoint: %d", 
-                                             aTime, aPoint );
-#endif // CR_ALL_LOGS
-
-    SSeek seek;
-    seek.iTime = aTime;
-    seek.iPoint = aPoint;
-    iSeekArray->AppendL( seek );
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::SaveSeekArrayL
-//
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::SaveSeekArrayL()
-    {
-    LOG1( "CRtpFileBase::SaveSeekArrayL(), count: %d", iSeekArray->Count() );
-    
-    const TInt len( KIntegerBytes + iSeekArray->Count() * 2 * KIntegerBytes );
-    HBufC8* data = HBufC8::NewLC( len );
-    TPtr8 ptr( data->Des() );
-    
-    // Total count
-    HBufC8* bytes = CRtpUtil::MakeBytesLC( iSeekArray->Count() );
-    ptr.Copy( bytes->Des() );
-    CleanupStack::PopAndDestroy( bytes );
-
-    for ( TInt i( 0 ); i < iSeekArray->Count(); i++ )
-        {
-        // Time
-        bytes = CRtpUtil::MakeBytesLC( iSeekArray->At( i ).iTime );
-        ptr.Append( bytes->Des() );
-        CleanupStack::PopAndDestroy( bytes );
-
-        // Point
-        bytes = CRtpUtil::MakeBytesLC( iSeekArray->At( i ).iPoint );
-        ptr.Append( bytes->Des() );
-        CleanupStack::PopAndDestroy( bytes );
-
-#ifdef CR_ALL_LOGS
-        LOG3( "CRtpFileBase::SaveSeekArrayL(), ind: %d, time: %u, point: %d",
-               i, iSeekArray->At( i ).iTime, iSeekArray->At( i ).iPoint );
-#endif // CR_ALL_LOGS
-        }
-
-    User::LeaveIfError( iFile.Write( iNextGroupPoint, ptr, len ) );
-    CleanupStack::PopAndDestroy( data );
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::ReadSeekArrayL
-//
-// -----------------------------------------------------------------------------
-//
-TBool CRtpFileBase::ReadSeekArrayL( const TInt aPoint )
-    {
-    User::LeaveIfError( aPoint );
-    HBufC8* bytes = HBufC8::NewLC( KIntegerBytes );
-    TPtr8 ptr( bytes->Des() );
-    
-    // Verify read point
-    TInt size( KErrNotFound );
-    iFile.Size( size );
-    User::LeaveIfError( ( aPoint > ( size - KIntegerBytes ) ) * KErrCorrupt );
-    
-    // Total count
-    User::LeaveIfError( iFile.Read( aPoint, ptr, KIntegerBytes ) );
-    const TInt count( CRtpUtil::GetValueL( ptr ) );
-    CleanupStack::PopAndDestroy( bytes );
-    LOG1( "CRtpFileBase::ReadSeekArrayL(), count: %d", count );
-    
-    // Any point stored?
-    if ( count > 0 )
-        {
-        // Read array from clip
-        User::LeaveIfError( ( count > ( KMaxTInt / 2 / KIntegerBytes ) ) * KErrCorrupt );
-        const TInt len( count * 2 * KIntegerBytes );
-        HBufC8* data = HBufC8::NewLC( len );
-        ptr.Set( data->Des() );
-        User::LeaveIfError( iFile.Read( aPoint + KIntegerBytes, ptr, len ) );
-    
-        // Set seek array
-        for ( TInt i( 0 ); i < count; i++ )
-            {
-            const TInt next( i * 2 * KIntegerBytes );
-            if ( ptr.Length() < ( next + ( 2 * KIntegerBytes ) ) )
-                {
-                LOG( "CRtpFileBase::ReadSeekArrayL(), Seek Array Corrupted" );
-                User::Leave( KErrCorrupt );
-                }
-
-            // Time
-            TUint time( CRtpUtil::GetValueL( ptr.Mid( next, KIntegerBytes ) ) );
-            // Point
-            TInt point( CRtpUtil::GetValueL( ptr.Mid( next + KIntegerBytes,
-                                                      KIntegerBytes ) ) );
-            User::LeaveIfError( point );
-            AppendSeekArrayL( time, point );
-#ifdef CR_ALL_LOGS
-            LOG3( "CRtpFileBase::ReadSeekArrayL(), ind: %d, time: %u, point: %d",
-                                                   i, time, point );
-#endif // CR_ALL_LOGS
-            }
-    
-        CleanupStack::PopAndDestroy( data );
-        }
-
-    return ( count > 0 );
-    }
-
-// -----------------------------------------------------------------------------
-// CRtpFileBase::LogVariables
-// -----------------------------------------------------------------------------
-//
-void CRtpFileBase::LogVariables( const TDesC& aMethod )
-    {
-#ifdef CR_ALL_LOGS
-    LOG1( "CRtpFileBase::LogVariables(), Method: %S", &aMethod );
-    LOG1( "CRtpFileBase::LogVariables(), iMode : %d", iMode );
-    LOG1( "CRtpFileBase::LogVariables(), GTC   : %d", iGroupsTotalCount );
-    LOG1( "CRtpFileBase::LogVariables(), FSA   : %d", iFirstSeekAddr );
-    LOG1( "CRtpFileBase::LogVariables(), LSA   : %d", iLastSeekAddr );
-    LOG1( "CRtpFileBase::LogVariables(), This  : %d", iThisGroup );
-    LOG1( "CRtpFileBase::LogVariables(), GTL   : %d", iGroupTotalLen );
-    LOG1( "CRtpFileBase::LogVariables(), NGP   : %d", iNextGroupPoint );
-    LOG1( "CRtpFileBase::LogVariables(), PGP   : %d", iPrevGroupPoint );
-    LOG1( "CRtpFileBase::LogVariables(), GTime : %u", iGroupTime );
-#else // CR_ALL_LOGS
-    ( void )aMethod;
-#endif // CR_ALL_LOGS
-    }
-
-// End of File
-