mmsharing/mmshengine/src/musengclipsession.cpp
branchRCL_3
changeset 13 a184f3d659e6
parent 0 f0cf47e981f9
child 18 0da2e08216b6
equal deleted inserted replaced
11:ff8a573c0e2e 13:a184f3d659e6
   150             {
   150             {
   151             User::Leave( KErrAlreadyExists );
   151             User::Leave( KErrAlreadyExists );
   152             }
   152             }
   153 
   153 
   154         // Set new position
   154         // Set new position
   155         file->SetPositionL( PositionMicroSecondsL( ETrue ) );
   155         file->SetPositionL( PositionMicroSecondsL() );
   156         MUS_LOG( "                 SetPositionL returned without error " )
   156         MUS_LOG( "                 SetPositionL returned without error " )
   157         
   157         
   158         // Reset timer
   158         // Reset timer
   159         iFFWDStartTime = TTime( 0 );
   159         iFFWDStartTime = TTime( 0 );
   160         }
   160         }
   205             {
   205             {
   206             User::Leave( KErrAlreadyExists );
   206             User::Leave( KErrAlreadyExists );
   207             }
   207             }
   208 
   208 
   209         // Set new position
   209         // Set new position
   210         file->SetPositionL( PositionMicroSecondsL( ETrue ) );
   210         file->SetPositionL( PositionMicroSecondsL() );
   211         MUS_LOG( "                 SetPositionL returned without error " )
   211         MUS_LOG( "                 SetPositionL returned without error " )
   212         
   212         
   213         // Reset timer
   213         // Reset timer
   214         iFRWDStartTime = TTime( 0 );
   214         iFRWDStartTime = TTime( 0 );
   215         }
   215         }
   838 
   838 
   839 // -----------------------------------------------------------------------------
   839 // -----------------------------------------------------------------------------
   840 //
   840 //
   841 // -----------------------------------------------------------------------------
   841 // -----------------------------------------------------------------------------
   842 //
   842 //
   843 TTimeIntervalMicroSeconds CMusEngClipSession::PositionMicroSecondsL( 
   843 TTimeIntervalMicroSeconds CMusEngClipSession::PositionMicroSecondsL()
   844     TBool aActualPosition )
       
   845     {
   844     {
   846     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
   845     __ASSERT_ALWAYS( iSession, User::Leave( KErrNotReady ) );
   847 
   846 
   848     CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession );
   847     CMceFileSource* file = MusEngMceUtils::GetFileSourceL( *iSession );
   849 
   848 
   883             }
   882             }
   884         }
   883         }
   885     else
   884     else
   886         {
   885         {
   887         calculatedPosition = position;
   886         calculatedPosition = position;
   888         }
       
   889     
       
   890     if ( !aActualPosition )
       
   891         {
       
   892         calculatedPosition = 
       
   893             GetVideoSinkRelativeFilePos( calculatedPosition, duration );
       
   894         }
   887         }
   895         
   888         
   896     return calculatedPosition;
   889     return calculatedPosition;
   897     }
   890     }
   898     
   891     
  1005         
   998         
  1006     MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::DetermineBufferingPeriod()" )
   999     MUS_LOG( "mus: [ENGINE] <- CMusEngClipSession::DetermineBufferingPeriod()" )
  1007     }
  1000     }
  1008 
  1001 
  1009 // -----------------------------------------------------------------------------
  1002 // -----------------------------------------------------------------------------
  1010 // Modifies file position if position has reached end before clip has ended.
       
  1011 // File position is not going in sync with local video playback as playback
       
  1012 // buffers media before starting playing.
       
  1013 // -----------------------------------------------------------------------------
       
  1014 //
       
  1015 TTimeIntervalMicroSeconds CMusEngClipSession::GetVideoSinkRelativeFilePos( 
       
  1016     const TTimeIntervalMicroSeconds& aActualPosition, 
       
  1017     const TTimeIntervalMicroSeconds& aDuration )
       
  1018     { 
       
  1019     MUS_LOG1( "mus: [ENGINE] PositionMicroSecondsL, pos before mod:%d", 
       
  1020               aActualPosition.Int64() )
       
  1021     
       
  1022     TTimeIntervalMicroSeconds tempCalculatedPosition( aActualPosition );
       
  1023     
       
  1024     if ( iDelayFileEndingPos != 0 )
       
  1025         {
       
  1026         iDelayFileEndingPos = aDuration;
       
  1027         tempCalculatedPosition = iDelayFileEndingPos;
       
  1028         }
       
  1029     else
       
  1030         {
       
  1031         // FRWD can go to zero even if clip has not ended, do not modify 
       
  1032         // time in such situation.
       
  1033         if ( aActualPosition == 0 && 
       
  1034              !iClipEnded && 
       
  1035              iFRWDStartTime.Int64() == 0 && 
       
  1036              !iRewindedToBeginning )
       
  1037             {
       
  1038             const TInt KMusDelayEndingModifier = 2;
       
  1039             iDelayFileEndingPos = aDuration.Int64() - 
       
  1040                 iBufferingPeriod.Int64() / KMusDelayEndingModifier;
       
  1041             tempCalculatedPosition = iDelayFileEndingPos;
       
  1042             if ( iPreviousPos > tempCalculatedPosition )
       
  1043                 {
       
  1044                 tempCalculatedPosition = iPreviousPos;
       
  1045                 }
       
  1046             }
       
  1047         else
       
  1048             {
       
  1049             iDelayFileEndingPos = 0;
       
  1050             }
       
  1051         
       
  1052         if ( iRewindedToBeginning && aActualPosition > 0 )
       
  1053             {
       
  1054             iRewindedToBeginning = EFalse;
       
  1055             }
       
  1056             
       
  1057         if ( tempCalculatedPosition < 0 )
       
  1058             {
       
  1059             tempCalculatedPosition = 0;
       
  1060             }
       
  1061         }
       
  1062     
       
  1063     iPreviousPos = tempCalculatedPosition;
       
  1064             
       
  1065     return tempCalculatedPosition;
       
  1066     }
       
  1067 
       
  1068 // -----------------------------------------------------------------------------
       
  1069 //
  1003 //
  1070 // -----------------------------------------------------------------------------
  1004 // -----------------------------------------------------------------------------
  1071 //
  1005 //
  1072 TBool CMusEngClipSession::IsH264Supported() const
  1006 TBool CMusEngClipSession::IsH264Supported() const
  1073     {
  1007     {