mmshplugins/mmcctranscoder/src/transcoderimpl.cpp
changeset 0 f0cf47e981f9
equal deleted inserted replaced
-1:000000000000 0:f0cf47e981f9
       
     1 /*
       
     2 * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <mmcccodecinformation.h>
       
    21 
       
    22 #include "transcoderimpl.h"
       
    23 #include "mcctranscoderlogs.h"
       
    24 
       
    25 const TInt KMccTranscodingCompletedPercentage = 100;
       
    26 
       
    27 const TInt KMccTranscoderCleanupTimerMicrosecs = 10000; // 10ms
       
    28 
       
    29 const TInt KMccTranscoderProgressNotifFreq = 10;
       
    30 
       
    31 // ============================= LOCAL FUNCTIONS ===============================
       
    32 
       
    33 // ============================ MEMBER FUNCTIONS ===============================
       
    34 
       
    35 // -----------------------------------------------------------------------------
       
    36 // CMccTranscoderImplImpl::CMccTranscoderImpl
       
    37 //
       
    38 // CMccTranscoderImpl default constructor, can NOT contain any code,
       
    39 // that might leave
       
    40 // Phase #1 of 2-phase constructor
       
    41 // -----------------------------------------------------------------------------
       
    42 //
       
    43 CMccTranscoderImpl::CMccTranscoderImpl() :
       
    44     iDeltaTimerCallBack( AsyncTimerExpired, this )
       
    45     {
       
    46     iDeltaTimerEntry.Set( iDeltaTimerCallBack );   
       
    47     }
       
    48 
       
    49 // -----------------------------------------------------------------------------
       
    50 // CMccTranscoderImpl::NewL
       
    51 // -----------------------------------------------------------------------------
       
    52 //
       
    53 CMccTranscoderImpl* CMccTranscoderImpl::NewL()
       
    54     {
       
    55     CMccTranscoderImpl* self = new ( ELeave ) CMccTranscoderImpl;
       
    56 	CleanupStack::PushL ( self );
       
    57     self->ConstructL();
       
    58     CleanupStack::Pop( self );
       
    59     return self;   
       
    60     }
       
    61 
       
    62 // -----------------------------------------------------------------------------
       
    63 // CMccTranscoderImpl::ConstructL
       
    64 // -----------------------------------------------------------------------------
       
    65 //
       
    66 void CMccTranscoderImpl::ConstructL()
       
    67     {
       
    68     __TRANSCODER( "CMccTranscoderImpl::ConstructL" )
       
    69     
       
    70     iDeltaTimer = CDeltaTimer::NewL( CActive::EPriorityStandard );
       
    71     
       
    72     __TRANSCODER( "CMccTranscoderImpl::ConstructL, exit" )
       
    73     }
       
    74     
       
    75 // -----------------------------------------------------------------------------
       
    76 // CMccTranscoderImpl::~CMccTranscoderImpl
       
    77 // -----------------------------------------------------------------------------
       
    78 //
       
    79 CMccTranscoderImpl::~CMccTranscoderImpl()
       
    80     {
       
    81     __TRANSCODER( "CMccTranscoderImpl::~CMccTranscoderImpl" )
       
    82     
       
    83     // Stop cleanup timer
       
    84     if ( iDeltaTimer )
       
    85         {
       
    86         iDeltaTimer->Remove( iDeltaTimerEntry );
       
    87         }
       
    88     delete iDeltaTimer;
       
    89 
       
    90     // Delete sessions
       
    91     TInt sessionCount = iSessionArray.Count();
       
    92     
       
    93     for ( TInt i = ( sessionCount - 1 ); i >= 0 ; i-- )
       
    94         {
       
    95         CMccTranscoderSessionInfo* session = iSessionArray[i];
       
    96         CVedMovie* movie = &(session->Movie());
       
    97         if ( movie && !session->IsRemoved() )
       
    98             {
       
    99             movie->UnregisterMovieObserver( this );
       
   100             }
       
   101         }
       
   102        
       
   103     iSessionArray.ResetAndDestroy(); 
       
   104     iSessionArray.Close(); 
       
   105         
       
   106     __TRANSCODER( "CMccTranscoderImpl::~CMccTranscoderImpl, exit" )
       
   107     }
       
   108  
       
   109 // -----------------------------------------------------------------------------
       
   110 // CMccTranscoderImpl::RegisterEventObserver
       
   111 // -----------------------------------------------------------------------------
       
   112 //
       
   113 void CMccTranscoderImpl::RegisterEventObserver( MMccTranscoderObserver& aObserver )
       
   114     {
       
   115     __TRANSCODER( "CMccTranscoderImpl::RegisterEventObserver" )
       
   116 
       
   117     iEventObserver = &aObserver;
       
   118     }
       
   119    
       
   120 // -----------------------------------------------------------------------------
       
   121 // CMccTranscoderImpl::UnregisterEventObserver
       
   122 // -----------------------------------------------------------------------------
       
   123 //    
       
   124 void CMccTranscoderImpl::UnregisterEventObserver()
       
   125     {
       
   126     __TRANSCODER( "CMccTranscoderImpl::UnregisterEventObserver" )
       
   127 
       
   128     iEventObserver = NULL;    
       
   129     }
       
   130                                          
       
   131       
       
   132 // -----------------------------------------------------------------------------
       
   133 // CMccTranscoderImpl::TranscodeFile
       
   134 // -----------------------------------------------------------------------------
       
   135 //  
       
   136 void CMccTranscoderImpl::TranscodeFileL( 
       
   137     TUint32& aSessionId, const TDesC8& aVal )
       
   138     {
       
   139     __TRANSCODER( "CMccTranscoderImpl::TranscodeFileL" )
       
   140     
       
   141     Cleanup();
       
   142     
       
   143     const TMccTranscodeFileMsg& transcodeMsg = 
       
   144         reinterpret_cast<const TMccTranscodeFileMsgBuffer&>( aVal )();
       
   145   
       
   146     CMccTranscoderSessionInfo* session = CMccTranscoderSessionInfo::NewLC();
       
   147    
       
   148     // Create session id
       
   149     session->GenerateSessionId();
       
   150     
       
   151     // Save quality info
       
   152     session->SetQuality( transcodeMsg.iQuality );
       
   153     
       
   154     // Save destination file info
       
   155     session->SetDesFileL( transcodeMsg.iDesFile );
       
   156     
       
   157     // CVedMovie object is created
       
   158     session->CreateMovieL();
       
   159     
       
   160     // Check if video code info is not empty, save it
       
   161     session->CheckVideoCodecL( transcodeMsg.iVideoCodec ); 
       
   162     
       
   163     // Check if audio code info is not empty, save it
       
   164     session->CheckAudioCodecL( transcodeMsg.iAudioCodec );
       
   165    
       
   166     __TRANSCODER( "CMccTranscoderImpl::RegisterMovieObserverL..." )
       
   167     session->Movie().RegisterMovieObserverL( this );
       
   168    	User::LeaveIfError( iSessionArray.Append( session ) );
       
   169    	CleanupStack::Pop( session );
       
   170     
       
   171     __TRANSCODER( "CMccTranscoderImpl::InsertVideoClipL..." )
       
   172 
       
   173     session->Movie().InsertVideoClipL( transcodeMsg.iSourceFile, 0 );
       
   174     // Callback function ::NotifyVideoClipAdded will be called later
       
   175     
       
   176     aSessionId = session->SessionId();
       
   177     
       
   178     __TRANSCODER( "CMccTranscoderImpl::TranscodeFileL, exit" )
       
   179     }
       
   180 
       
   181 // -----------------------------------------------------------------------------
       
   182 // CMccTranscoderImpl::CancelTranscodeFile
       
   183 // -----------------------------------------------------------------------------
       
   184 // 
       
   185 void CMccTranscoderImpl::CancelTranscodeFileL( TUint32 aSessionId )
       
   186     {
       
   187     __TRANSCODER( "CMccTranscoderImpl::CancelTranscodeFileL" )
       
   188 
       
   189     Cleanup();
       
   190     
       
   191     TInt session = FindSession( aSessionId );
       
   192     
       
   193     __ASSERT_ALWAYS( session >= 0 , User::Leave( KErrNotFound) );
       
   194     __ASSERT_ALWAYS( &( iSessionArray[session]->Movie() ), 
       
   195         User::Leave( KErrNotFound) );
       
   196         
       
   197     TUint32 sessionId = iSessionArray[session]->SessionId();
       
   198     
       
   199     iSessionArray[session]->Movie().UnregisterMovieObserver( this );
       
   200     
       
   201     iSessionArray[session]->Movie().CancelProcessing();
       
   202     
       
   203     SendTranscodeEventToClient( KMccTranscodeCancelled, KErrNone, sessionId );
       
   204     }
       
   205 
       
   206 // -----------------------------------------------------------------------------
       
   207 // CMccTranscoderImpl::FindSessionL
       
   208 // -----------------------------------------------------------------------------
       
   209 // 
       
   210 TInt CMccTranscoderImpl::FindSession( CVedMovie& aMovie )
       
   211     {
       
   212     TInt sessionCount = iSessionArray.Count();
       
   213     TInt err = KErrNotFound;
       
   214     TInt sessionIndex = 0;
       
   215 
       
   216     for ( TInt i = 0; (i < sessionCount && err != KErrNone ); i++ )
       
   217         {
       
   218         if ( &iSessionArray[i]->Movie() == &aMovie )
       
   219             {
       
   220             sessionIndex = i;
       
   221             err = KErrNone;
       
   222             }
       
   223         }
       
   224     if ( err )
       
   225         {
       
   226         return err;   
       
   227         }
       
   228     else
       
   229         {
       
   230         return sessionIndex;
       
   231         }
       
   232     }
       
   233     
       
   234 // -----------------------------------------------------------------------------
       
   235 // CMccTranscoderImpl::FindSession
       
   236 // -----------------------------------------------------------------------------
       
   237 // 
       
   238 TInt CMccTranscoderImpl::FindSession( TUint32 aSessionID )
       
   239     {
       
   240     TInt sessionCount = iSessionArray.Count();
       
   241     TInt err = KErrNotFound;
       
   242     TInt sessionIndex = 0;
       
   243 
       
   244     for ( TInt i = 0; (i < sessionCount && err != KErrNone ); i++ )
       
   245         {
       
   246         if ( iSessionArray[i]->SessionId() == aSessionID )
       
   247             {
       
   248             sessionIndex = i;
       
   249             err = KErrNone;
       
   250             }
       
   251         }
       
   252     if ( err )
       
   253         {
       
   254         return err;   
       
   255         }
       
   256     else
       
   257         {
       
   258         return sessionIndex; 
       
   259         }
       
   260     }
       
   261 
       
   262 // -----------------------------------------------------------------------------
       
   263 // CMccTranscoderImpl::RemoveSession
       
   264 // -----------------------------------------------------------------------------
       
   265 // 
       
   266 void CMccTranscoderImpl::RemoveSession( const TInt aIndex )
       
   267     {
       
   268     TInt sessionCount = iSessionArray.Count();
       
   269 
       
   270     if ( aIndex < sessionCount )
       
   271         {
       
   272         iSessionArray[aIndex]->Movie().UnregisterMovieObserver( this );
       
   273         
       
   274         // Can be deleted on next cleanup
       
   275         iSessionArray[aIndex]->SetRemoved( ETrue );
       
   276         
       
   277         // Initiate async cleanup
       
   278         InitiateCleanup();
       
   279         } 
       
   280     }
       
   281 
       
   282 // -----------------------------------------------------------------------------
       
   283 // CMccTranscoderImpl::SendTranscodeEventToClient
       
   284 // -----------------------------------------------------------------------------
       
   285 //   
       
   286 void CMccTranscoderImpl::SendTranscodeEventToClient( 
       
   287     TMccEventType aEventType, TInt aError , TUint32 aSessionId, TUint32 aData )
       
   288     {
       
   289     __TRANSCODER( "CMccTranscoderImpl::SendTranscodeEventToClient" )
       
   290     
       
   291     if ( !iEventObserver )
       
   292         {
       
   293         __TRANSCODER( "CMccTranscoderImpl::SendTranscodeEventToClient, no observer" )
       
   294         return;
       
   295         }
       
   296         
       
   297     TMccEvent event;
       
   298     event.iErrorCode = aError;
       
   299     event.iEventCategory = KMccEventCategoryTranscode;
       
   300     event.iEventType = aEventType;
       
   301     event.iSessionId = aSessionId;
       
   302     event.iEventNumData = aData;
       
   303     
       
   304     iEventObserver->MccTranscoderEventReceived( event );
       
   305 
       
   306     __TRANSCODER( "CMccTranscoderImpl::SendTranscodeEventToClient, exit" )
       
   307     }
       
   308  
       
   309 // -----------------------------------------------------------------------------
       
   310 // CMccTranscoderImpl::NotifyVideoClipAdded
       
   311 // -----------------------------------------------------------------------------
       
   312 //    
       
   313 void CMccTranscoderImpl::NotifyVideoClipAdded(
       
   314     CVedMovie& aMovie, TInt /*aIndex*/)
       
   315     {
       
   316     __TRANSCODER( "CMccTranscoderImpl::NotifyVideoClipAdded" )
       
   317 
       
   318     TInt session = FindSession( aMovie );
       
   319     
       
   320     // Session found
       
   321     if ( session >= 0 )
       
   322         {
       
   323         TUint32 sessionId = iSessionArray[session]->SessionId();
       
   324         
       
   325         iSessionArray[session]->ClipAdded();
       
   326         
       
   327         if ( iSessionArray[session]->QualityChangeNeeded() )
       
   328             {
       
   329             iSessionArray[session]->Movie().SetQuality( 
       
   330                 iSessionArray[session]->Quality() );
       
   331             // Callback function ::NotifyMovieQualityChanged will be called
       
   332             }
       
   333         else
       
   334             {
       
   335             // No need to change quality, continue with transcoding initialization
       
   336             SetOutputParameters( aMovie );
       
   337             }
       
   338         }
       
   339     else
       
   340         {
       
   341         __TRANSCODER( "CMccTranscoderImpl::NotifyVideoClipAdded, \
       
   342 session not found" )
       
   343         }  
       
   344     }
       
   345   
       
   346 // -----------------------------------------------------------------------------
       
   347 // CMccTranscoderImpl::NotifyMovieQualityChanged
       
   348 // -----------------------------------------------------------------------------
       
   349 //    
       
   350 void CMccTranscoderImpl::NotifyMovieQualityChanged(CVedMovie& aMovie)
       
   351     {
       
   352     __TRANSCODER( "CMccTranscoderImpl::NotifyMovieQualityChanged" )
       
   353     
       
   354     SetOutputParameters( aMovie );
       
   355     
       
   356     __TRANSCODER( "CMccTranscoderImpl::NotifyMovieQualityChanged, exit" )
       
   357     }
       
   358 
       
   359 
       
   360 // -----------------------------------------------------------------------------
       
   361 // CMccTranscoderImpl::NotifyMovieProcessingStartedL
       
   362 // -----------------------------------------------------------------------------
       
   363 //  
       
   364 void CMccTranscoderImpl::NotifyMovieProcessingStartedL(CVedMovie& aMovie)
       
   365     {
       
   366     __TRANSCODER( "CMccTranscoderImpl::NotifyMovieProcessingStartedL" )
       
   367  
       
   368     TInt session = FindSession( aMovie );
       
   369 
       
   370     if ( session >= 0 )
       
   371         {
       
   372         TUint32 sessionId = iSessionArray[session]->SessionId();
       
   373 
       
   374         // Send event to client
       
   375         SendTranscodeEventToClient( KMccTranscodeInProgress, KErrNone, sessionId );
       
   376         }
       
   377     else
       
   378         {
       
   379         __TRANSCODER( "CMccTranscoderImpl::NotifyMovieProcessingStartedL, \
       
   380 session not found" )
       
   381         }
       
   382     }
       
   383 
       
   384 
       
   385 // -----------------------------------------------------------------------------
       
   386 // CMccTranscoderImpl::NotifyMovieOutputParametersChanged
       
   387 // -----------------------------------------------------------------------------
       
   388 //     
       
   389 void CMccTranscoderImpl::NotifyMovieOutputParametersChanged(CVedMovie& aMovie)
       
   390     {
       
   391     __TRANSCODER( "CMccTranscoderImpl::NotifyMovieOutputParametersChanged" )
       
   392 
       
   393     TInt session = FindSession( aMovie );
       
   394    
       
   395     if ( session >= 0 )
       
   396         {
       
   397         TRAPD( err, iSessionArray[session]->Movie().ProcessL( 
       
   398             iSessionArray[session]->DesFile(), *this ) );
       
   399         // Next will call 
       
   400         // MVedMovieProcessingObserver::NotifyMovieProcessingStartedL    
       
   401         if ( err )
       
   402             {
       
   403             __TRANSCODER_INT1( "CMccTranscoderImpl::NotifyMovieOutput\
       
   404     ParametersChanged, call ProcessL, Error=", err )
       
   405     
       
   406             TUint32 sessionId = iSessionArray[session]->SessionId();
       
   407 
       
   408             // Error happened when process transcoding, remove the clip
       
   409             RemoveSession( session );
       
   410             
       
   411             SendTranscodeEventToClient( KMccTranscodeCompleted, err, sessionId );
       
   412             }
       
   413         }
       
   414     else
       
   415         {
       
   416         __TRANSCODER( "CMccTranscoderImpl::NotifyMovieOutputParametersChanged, \
       
   417 session not found" )
       
   418         }
       
   419     }
       
   420 
       
   421 // -----------------------------------------------------------------------------
       
   422 // CMccTranscoderImpl::NotifyMovieProcessingCompleted
       
   423 // -----------------------------------------------------------------------------
       
   424 //   
       
   425 void CMccTranscoderImpl::NotifyMovieProcessingCompleted(
       
   426     CVedMovie& aMovie, TInt aError)
       
   427     {
       
   428     __TRANSCODER( "CMccTranscoderImpl::NotifyMovieProcessingCompleted" )
       
   429     
       
   430     __TRANSCODER_INT1( "CMccTranscoderImpl::NotifyMovieProcessingCompleted, \
       
   431 aError= ", aError)
       
   432 
       
   433     TInt session = FindSession( aMovie );
       
   434     
       
   435     if ( session >= 0 )
       
   436         {
       
   437         TUint32 sessionId = iSessionArray[session]->SessionId();
       
   438 
       
   439         // Clip not needed anymore
       
   440         RemoveSession( session );
       
   441          
       
   442         // Send event 
       
   443         SendTranscodeEventToClient( KMccTranscodeCompleted, 
       
   444                                     aError, 
       
   445                                     sessionId, 
       
   446                                     KMccTranscodingCompletedPercentage );
       
   447         }
       
   448     else
       
   449         {
       
   450         __TRANSCODER( "CMccTranscoderImpl::NotifyMovieProcessingCompleted, \
       
   451 session not found" )
       
   452         }
       
   453     }
       
   454     
       
   455 // -----------------------------------------------------------------------------
       
   456 // CMccTranscoderImpl::NotifyVideoClipAddingFailed
       
   457 // -----------------------------------------------------------------------------
       
   458 //     
       
   459 void CMccTranscoderImpl::NotifyVideoClipAddingFailed(
       
   460     CVedMovie& aMovie, TInt aError)
       
   461     {
       
   462     __TRANSCODER( "CMccTranscoderImpl::NotifyVideoClipAddingFailed" )
       
   463     
       
   464     TInt session = FindSession( aMovie );
       
   465     
       
   466     if ( session >= 0 )
       
   467         {
       
   468         TUint32 sessionId = iSessionArray[session]->SessionId();
       
   469                
       
   470         RemoveSession( session );
       
   471         
       
   472         // Send event to client   
       
   473         SendTranscodeEventToClient( KMccTranscodeCompleted, aError, sessionId );
       
   474         }
       
   475     else
       
   476         {
       
   477         __TRANSCODER_INT1( "CMccTranscoderImpl::NotifyVideoClipAddingFailed, \
       
   478 aError is ignored:", aError )
       
   479         }
       
   480     }
       
   481     
       
   482 // -----------------------------------------------------------------------------
       
   483 // CMccTranscoderImpl::NotifyVideoClipRemoved
       
   484 // -----------------------------------------------------------------------------
       
   485 //     
       
   486 void CMccTranscoderImpl::NotifyVideoClipRemoved(
       
   487     CVedMovie& aMovie, TInt /*aIndex*/ )
       
   488     {
       
   489     __TRANSCODER( "CMccTranscoderImpl::NotifyVideoClipRemoved" )
       
   490     
       
   491     TInt session = FindSession( aMovie );
       
   492     
       
   493     if ( session >= 0 )
       
   494         {
       
   495         __TRANSCODER( "CMccTranscoderImpl::NotifyVideoClipRemoved, \
       
   496 removing session..." )
       
   497         RemoveSession( session );            
       
   498         }
       
   499     }
       
   500    
       
   501 // -----------------------------------------------------------------------------
       
   502 // CMccTranscoderImpl::NotifyMovieProcessingProgressed
       
   503 // -----------------------------------------------------------------------------
       
   504 //        
       
   505 void CMccTranscoderImpl::NotifyMovieProcessingProgressed( 
       
   506     CVedMovie& aMovie, TInt aPercentage )
       
   507     {
       
   508     __TRANSCODER( "CMccTranscoderImpl::NotifyMovieProcessingProgressed" )
       
   509 
       
   510     TInt session = FindSession( aMovie );
       
   511     
       
   512     if ( session >= 0 )
       
   513         {
       
   514         __TRANSCODER_INT1( "CMccTranscoderImpl::NotifyMovieProcessingProgressed,\
       
   515 aPercenctage=", aPercentage )
       
   516 
       
   517         TUint32 sessionId = iSessionArray[session]->SessionId();
       
   518         
       
   519         TInt modifiedPercentage = iSessionArray[session]->Progressed( aPercentage );
       
   520         
       
   521         if ( !(modifiedPercentage % KMccTranscoderProgressNotifFreq) )
       
   522             {
       
   523             SendTranscodeEventToClient( KMccTranscodeInProgress, 
       
   524                 KErrNone, sessionId, modifiedPercentage );
       
   525             }
       
   526         }
       
   527     else
       
   528         {
       
   529         __TRANSCODER( "CMccTranscoderImpl::NotifyMovieProcessingProgressed, \
       
   530 session not found" )
       
   531         }
       
   532    
       
   533     }
       
   534 
       
   535 // -----------------------------------------------------------------------------
       
   536 // CMccTranscoderImpl::Cleanup
       
   537 // -----------------------------------------------------------------------------
       
   538 //
       
   539 void CMccTranscoderImpl::Cleanup()
       
   540     {
       
   541     __TRANSCODER("CMccTranscoderImpl::Cleanup");
       
   542     
       
   543     TInt sessionCount = iSessionArray.Count();
       
   544     
       
   545     for ( TInt i = ( sessionCount - 1 ); i >= 0 ; i-- )
       
   546         {
       
   547         __TRANSCODER("CMccTranscoderImpl::Cleanup, iterating");
       
   548         
       
   549         CMccTranscoderSessionInfo* session = iSessionArray[i];
       
   550         if ( session->IsRemoved() )
       
   551             {
       
   552             iSessionArray.Remove( i );
       
   553             delete session;
       
   554             }
       
   555         }
       
   556         
       
   557     __TRANSCODER("CMccTranscoderImpl::Cleanup, exit");
       
   558     }
       
   559 
       
   560 // -----------------------------------------------------------------------------
       
   561 // CMccTranscoderImpl::InitiateCleanup
       
   562 // -----------------------------------------------------------------------------
       
   563 //
       
   564 void CMccTranscoderImpl::InitiateCleanup()
       
   565 	{
       
   566 	__TRANSCODER("CMccTranscoderImpl::InitiateCleanup");
       
   567 	
       
   568 	iDeltaTimer->Remove( iDeltaTimerEntry );
       
   569 	TTimeIntervalMicroSeconds32 interval( KMccTranscoderCleanupTimerMicrosecs );
       
   570 	iDeltaTimer->Queue( interval, iDeltaTimerEntry );
       
   571 	
       
   572 	__TRANSCODER("CMccQosController::InitiateCleanup, exit");	
       
   573 	}	
       
   574  
       
   575 // -----------------------------------------------------------------------------
       
   576 // CMccTranscoderImpl::AsyncTimerExpired
       
   577 // -----------------------------------------------------------------------------
       
   578 //
       
   579 TInt CMccTranscoderImpl::AsyncTimerExpired( TAny* aPtr )
       
   580 	{
       
   581 	__TRANSCODER("CMccTranscoderImpl::AsyncTimerExpired");
       
   582 
       
   583     if ( aPtr )
       
   584         {
       
   585 	    CMccTranscoderImpl* self = reinterpret_cast<CMccTranscoderImpl*>( aPtr );
       
   586     	self->Cleanup();
       
   587         }
       
   588 	
       
   589 	__TRANSCODER("CMccTranscoderImpl::AsyncTimerExpired, exit");
       
   590   	return ETrue;
       
   591 	} 
       
   592 
       
   593 // -----------------------------------------------------------------------------
       
   594 // CMccTranscoderImpl::SetOutputParameters
       
   595 // -----------------------------------------------------------------------------
       
   596 //
       
   597 void CMccTranscoderImpl::SetOutputParameters( CVedMovie& aMovie )
       
   598     {
       
   599     __TRANSCODER( "CMccTranscoderImpl::SetOutputParameters" )
       
   600 
       
   601     TInt session = FindSession( aMovie );
       
   602        
       
   603     if ( session >= 0 )
       
   604         {
       
   605         // Change coding options
       
   606         TVedOutputParameters params;
       
   607          
       
   608         iSessionArray[session]->GetPutputParameters( params );
       
   609         
       
   610         __TRANSCODER_INT1( "CMccTranscoderImpl:: video type", params.iVideoType )
       
   611         __TRANSCODER_INT1( "CMccTranscoderImpl:: video width", params.iVideoResolution.iWidth )
       
   612         __TRANSCODER_INT1( "CMccTranscoderImpl:: video height", params.iVideoResolution.iHeight )
       
   613         __TRANSCODER_INT1( "CMccTranscoderImpl:: video bitrate", params.iVideoBitrate )
       
   614         __TRANSCODER_INT1( "CMccTranscoderImpl:: sync interval", params.iSyncIntervalInPicture )
       
   615         __TRANSCODER_INT1( "CMccTranscoderImpl:: segment size", params.iSegmentSizeInBytes )
       
   616         __TRANSCODER_INT1( "CMccTranscoderImpl:: audio type", params.iAudioType )
       
   617         __TRANSCODER_INT1( "CMccTranscoderImpl:: audio bitrate", params.iAudioBitrate )
       
   618         __TRANSCODER_INT1( "CMccTranscoderImpl:: audio channel mode", params.iAudioChannelMode )
       
   619         __TRANSCODER_INT1( "CMccTranscoderImpl:: audio sampling rate", params.iAudioSamplingRate )
       
   620 
       
   621         TRAPD( err, iSessionArray[session]->Movie().SetOutputParametersL( params ) );
       
   622         // Next call back will be ::NotifyMovieOutputParametersChanged
       
   623         
       
   624         if ( err )
       
   625             {
       
   626             __TRANSCODER_INT1( "CMccTranscoderImpl::SetOutputParameters,\
       
   627 call SetOutputParametersL Error=", err )
       
   628 
       
   629             TUint32 sessionId = iSessionArray[session]->SessionId();
       
   630             
       
   631             // Error happend when set output parameter, remove the clip
       
   632             RemoveSession( session );
       
   633 
       
   634             SendTranscodeEventToClient( KMccTranscodeCompleted, err, sessionId );
       
   635             }
       
   636         else
       
   637             {
       
   638             // Clean the video codec, it is not used any more
       
   639             iSessionArray[session]->SetVideoCodec( NULL ); 
       
   640             // Clean the audio codec, it is not used any more 
       
   641             iSessionArray[session]->SetAudioCodec( NULL ); 
       
   642             }
       
   643         }
       
   644     else
       
   645         {
       
   646         __TRANSCODER( "CMccTranscoderImpl::SetOutputParameters, \
       
   647 session not found" )
       
   648         }
       
   649     }
       
   650     
       
   651 // ========================== OTHER EXPORTED FUNCTIONS =========================
       
   652 
       
   653 //  End of File