videoeditorengine/vedtranscoder/src/Ctrvideodecoderclient.cpp
changeset 9 d87d32eab1a9
parent 0 951a5db380a0
--- a/videoeditorengine/vedtranscoder/src/Ctrvideodecoderclient.cpp	Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1468 +0,0 @@
-/*
-* Copyright (c) 2010 Ixonos Plc.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "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:
-* Ixonos Plc
-*
-* Description:  
-* Video decoder client.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <devvideoconstants.h>
-#include "ctrvideodecoderclient.h"
-#include "ctrtranscoder.h"
-#include "ctrdevvideoclientobserver.h"
-#include "ctrsettings.h"
-#include "ctrhwsettings.h"
-
-
-// MACROS
-#define TRASSERT(x) __ASSERT_DEBUG(x, User::Panic(_L("CTRANSCODERVIDEODECODERCLIENT"), -10010))
-
-
-// CONSTANTS
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CTRVideoDecoderClient* CTRVideoDecoderClient::NewL(MTRDevVideoClientObserver& aObserver)
-    {
-    PRINT((_L("CTRVideoDecoderClient::NewL(), In")))
-    CTRVideoDecoderClient* self = new (ELeave) CTRVideoDecoderClient(aObserver);
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop();
-
-    PRINT((_L("CTRVideoDecoderClient::NewL(), Out")))
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::CTRVideoDecoderClient
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CTRVideoDecoderClient::CTRVideoDecoderClient(MTRDevVideoClientObserver& aObserver) :
-    iObserver(aObserver)
-    {
-    iDevVideoPlay = NULL;
-    iCompresedFormat = NULL;
-    iUid = TUid::Null();
-    iFallbackUid = TUid::Null();
-    iHwDeviceId = THwDeviceId(0);
-    iInputBuffer = NULL;
-    iCodedBuffer = NULL;
-    iDecodedPicture = NULL;
-    
-    iVideoResourceHandlerCI = NULL;   
-    
-    iFatalError = KErrNone;
-    iDataUnitType = EDuCodedPicture;
-    iStop = EFalse;
-    iLastTimestamp = -1;
-    iAcceleratedCodecSelected = EFalse;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::ConstructL()
-    {
-    iDevVideoPlay = CMMFDevVideoPlay::NewL(*this);
-    }
-
-
-// ---------------------------------------------------------
-// CTRVideoDecoderClient::~CTRVideoDecoderClient()
-// Destructor
-// ---------------------------------------------------------
-//
-CTRVideoDecoderClient::~CTRVideoDecoderClient()
-    {
-    PRINT((_L("CTRVideoDecoderClient::~CTRVideoDecoderClient(), In")))
-
-    if (iDevVideoPlay)
-        {
-        delete iDevVideoPlay;
-        iDevVideoPlay = NULL;
-        }
-
-    iInputBuffer = NULL;
-    
-    if (iCompresedFormat)
-        {
-        delete iCompresedFormat;
-        }
-
-    PRINT((_L("CTRVideoDecoderClient::~CTRVideoDecoderClient(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::SupportsCodec
-// Checks whether this coded is supported
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CTRVideoDecoderClient::SupportsCodec(const TDesC8& aFormat, const TDesC8& aShortFormat, TInt aUid, TInt aFallbackUid)
-    {
-    TBool supports = EFalse;
-    TBool preferredFound = EFalse;
-    TBool fallbackFound = EFalse;
-
-    if (iDevVideoPlay)
-        {
-        RArray<TUid> decoders;
-        
-        TRAPD( status, iDevVideoPlay->FindDecodersL(aShortFormat, 0/*aPreProcType*/, decoders, EFalse/*aExactMatch*/) );
-
-        if( status != KErrNone  )
-            {
-            PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), status[%d]"), status))
-            supports = EFalse;
-            }
-        else if( decoders.Count() <= 0 )
-            {
-            PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), No decoders found")))
-            supports = EFalse;
-            }
-        else
-            {
-            
-            PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), %d decoders found"), decoders.Count() ))
-            
-            // Check if any of the found decoders matches with the given Uids
-            for( TInt i = 0; i < decoders.Count(); ++i )
-                {
-                
-                PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), found codec 0x%x"), decoders[i].iUid))
-                
-                if( decoders[i].iUid == aUid )
-                    {
-                    PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), preferred found")))
-                    iUid = decoders[i];
-                    preferredFound = ETrue;
-                    }
-                if( decoders[i].iUid == aFallbackUid )
-                    {
-                    PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), fallback found")))
-                    iFallbackUid = decoders[i];
-                    fallbackFound = ETrue;
-                    }
-                
-                if( preferredFound && fallbackFound )
-                    {
-                    // No need to search anymore
-                    break;
-                    }
-                }
-            }
-
-        decoders.Reset();
-        decoders.Close();
-        }
-        
-    if( !preferredFound )
-        {
-        // Preferred decoder was not found => Probably the given decoder Uid is wrong
-        PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), No supported decoders found")))
-        supports = EFalse;
-        }
-    else
-        {
-        PRINT((_L("CTRVideoDecoderClient::SupportsCodec(), Supported decoder found: 0x%x"), iUid.iUid))
-        iMimeType = aFormat;
-        iShortMimeType = aShortFormat;
-        supports = ETrue;
-        }
-
-    return supports;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::SetCodecParametersL
-// Sets codec parameters
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::SetCodecParametersL(TInt aCodecType, TInt aCodecLevel, const TTRVideoFormat& aInputFormat, 
-                                                const TTRVideoFormat& aOutputFormat)
-    {
-    PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), In")))
-    TInt status = KErrNone;
-    iCodecType = aCodecType;
-    iCodecLevel = aCodecLevel;
-    iInputFormat = aInputFormat;
-    iOutputFormat = aOutputFormat;
-
-    // Input format
-    if (!iCompresedFormat)
-        {
-        iCompresedFormat = CCompressedVideoFormat::NewL( iMimeType );
-        }
-        
-    TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) );
-    
-    if (status != KErrNone)
-        {
-        // Try again with the fallback decoder if one exists
-        if( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) )
-            {
-            TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iFallbackUid) );
-            
-            if (status != KErrNone)
-                {
-                PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), Failed to get codec info")))
-                User::Leave(KErrNotSupported);
-                }
-                
-            PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), Reverting to fallback decoder")))
-            
-            // Fallback ok, take it    
-            iUid = iFallbackUid;
-            }
-        else
-            {
-            PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), No suitable decoders found")))
-            User::Leave(KErrNotSupported);
-            }
-        }
-      
-    PRINT((_L("CTRVideoDecoderClient::SetCodecParametersL(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::CheckCodecInfoL
-// Checks coded info
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CTRVideoDecoderClient::CheckCodecInfoL(TUid aUid)
-    {
-    CVideoDecoderInfo* decoderInfo = NULL; // Decoder info for retrieving capabilities
-    TInt status = KErrNone;
-    TBool accelerated = EFalse;
-
-
-    // Check decoder
-    PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), getting info from [0x%x]"), aUid.iUid ))
-    decoderInfo = iDevVideoPlay->VideoDecoderInfoLC( aUid );
-
-    if (!decoderInfo)
-        {
-        PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), getting info from [0x%x] failed[%d]"), aUid.iUid, status ))
-        User::Leave(KErrNotSupported);
-        } //  AA skip info check before symbian fix
-    else /* if ( !decoderInfo->SupportsFormat(*iCompresedFormat) ) // Check input format
-        {
-        PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), Input format is not supported")))
-        status = KErrNotSupported;
-        }
-    else */
-        {
-        // Check max rate for requested image format
-        TSize maxSize = decoderInfo->MaxPictureSize();
-
-        if ( (iInputFormat.iSize.iWidth > maxSize.iWidth) || (iInputFormat.iSize.iHeight > maxSize.iHeight) )
-            {
-            PRINT((_L("CTRVideoDecoderClient::CheckCodecInfoL(), Picture size is not supported")))
-            status = KErrNotSupported;
-            }
-        }
-        
-    accelerated = decoderInfo->Accelerated();
-
-    // Delete codec info
-    CleanupStack::PopAndDestroy(decoderInfo);
-
-    if (status != KErrNone)
-        {
-        User::Leave(status);
-        }
-
-    return accelerated;
-    }
-
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::InitializeL
-// Initializes encoder
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::InitializeL()
-    {
-    PRINT((_L("CTRVideoDecoderClient::InitializeL(), In")))
-    TUint maxBufferSize = 0;
-    TInt status = KErrNone;
-
-
-    switch(iInputFormat.iDataType)
-        {
-        case CTRTranscoder::ETRDuCodedPicture:
-            {
-            iDataUnitType = EDuCodedPicture;
-            break;
-            }
-
-        case CTRTranscoder::ETRDuVideoSegment:
-            {
-            iDataUnitType = EDuVideoSegment;
-            break;
-            }
-
-        default:
-            {
-            // Should never happend. Decoder does not support uncompressed input format. 
-            TRASSERT(0);
-            }
-        }
-
-    iBufferOptions.iMinNumInputBuffers = KTRDecoderMinNumberOfBuffers;
-
-    // Select decoder first
-    this->SelectDecoderL();
-
-    // Set now output format for this device    
-    TRAP(status, iDevVideoPlay->SetOutputFormatL(iHwDeviceId, iUncompressedFormat));
-    
-    // 3. Buffer options
-    iBufferOptions.iPreDecodeBufferSize = 0;            // "0" - use default decoder value
-    iBufferOptions.iMaxPostDecodeBufferSize = 0;        // No limitations
-    iBufferOptions.iPreDecoderBufferPeriod = 0;
-    iBufferOptions.iPostDecoderBufferPeriod = 0;
-    
-    // Check max coded picture size for specified codec level
-    switch(iCodecLevel)
-        {
-        case KTRH263CodecLevel10:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel10;
-            break;
-            }
-
-        case KTRH263CodecLevel20:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel20;
-            break;
-            }
-
-        case KTRH263CodecLevel30:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel30;
-            break;
-            }
-
-        case KTRH263CodecLevel40:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel40;
-            break;
-            }
-
-        case KTRH263CodecLevel50:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel50;
-            break;
-            }
-
-        case KTRH263CodecLevel60:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel60;
-            break;
-            }
-
-        case KTRH263CodecLevel70:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel70;
-            break;
-            }
-            
-        case KTRH264CodecLevel10:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level10;
-            break;
-            }
-            
-        case KTRH264CodecLevel10b:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level10b;
-            break;
-            }
-            
-        case KTRH264CodecLevel11:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level11;
-            break;
-            }
-            
-        case KTRH264CodecLevel12:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level12;
-            break;
-            }
-            
-        case KTRH264CodecLevel13:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level13;
-            break;
-            }
-            
-        case KTRH264CodecLevel20:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level20;
-            break;
-            }
-            
-        case KTRH264CodecLevel30:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level30;
-            break;
-            }
-            
-        case KTRH264CodecLevel31:
-            {
-            maxBufferSize = KTRMaxBufferSizeH264Level31;
-            break;
-            }
-
-        case KTRMPEG4CodecLevel0:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel0;
-            break;
-            }
-            
-        case KTRMPEG4CodecLevel1:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel1;
-            break;
-            }
-            
-        case KTRMPEG4CodecLevel2:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel2;
-            break;
-            }
-            
-        case KTRMPEG4CodecLevel3:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel3;
-            break;
-            }
-
-        case KTRMPEG4CodecLevel0b:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel0b;
-            break;
-            }
-
-        case KTRMPEG4CodecLevel4a:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel4a;
-            break;
-            }
-
-        default:
-            {
-            maxBufferSize = KTRMaxBufferSizeLevel0;
-            break;
-            }
-        }
-
-    iBufferOptions.iMaxInputBufferSize = maxBufferSize;
-    PRINT((_L("CTRVideoDecoderClient::InitializeL(), InputBufferSize[%d], NumberOfBuffers[%d]"), 
-               iBufferOptions.iMaxInputBufferSize, iBufferOptions.iMinNumInputBuffers ))
-
-    iDevVideoPlay->SetBufferOptionsL(iBufferOptions);
-    
-    if (iScalingInUse)
-        {
-        PRINT((_L("CTRVideoDecoderClient::InitializeL(), Enabling scaling")))
-        if (iScalingWithDeblocking)
-            {
-            // Enable scaling with deblocking
-            iDevVideoPlay->SetPostProcessTypesL(iHwDeviceId, EPpScale | EPpDeblocking);
-            }
-        else
-            {
-            // Deblocking not supported, enable just scaling
-            iDevVideoPlay->SetPostProcessTypesL(iHwDeviceId, EPpScale);
-            }
-        
-        iDevVideoPlay->SetScaleOptionsL(iHwDeviceId, iScaledOutputSize, EFalse);
-        }
-
-    // Initialize devVideoPlay
-    iDevVideoPlay->Initialize();
-
-    PRINT((_L("CTRVideoDecoderClient::InitializeL(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::SelectDecoderL
-// Selects decoder
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::SelectDecoderL()
-    {
-    PRINT(( _L("CTRVideoDecoderClient::SelectDecoderL(), In") ))
-    TInt status = KErrNone;
-    TBool exit = EFalse;
-    
-    TVideoDataUnitEncapsulation dataUnitEncapsulation = EDuElementaryStream;
-    
-    // Use generic payload encapsulation for H.264
-    if (iCodecType == EH264)
-        {
-        dataUnitEncapsulation = EDuGenericPayload;
-        }
-
-    if (iUid != TUid::Null())
-        {
-        TRAP( status, iHwDeviceId = iDevVideoPlay->SelectDecoderL(iUid) );
-        }
-    else
-        {
-        // Probably the error already exists, if iUid == NULL; 
-        status = KErrAlreadyExists;
-        }
-
-    while (!exit )
-        {
-        if (status == KErrNone)
-            {
-            // To get Output format list devvideoplay requires to define output format first. 
-            iDevVideoPlay->SetInputFormatL(iHwDeviceId, *iCompresedFormat, iDataUnitType, dataUnitEncapsulation, ETrue);
-
-            // It's time to check input format support (since the plugin is loaded to the memory)
-            iUncompressedFormat.iDataFormat = EYuvRawData;
-            
-            TUncompressedVideoFormat uncFormat;
-            TBool found = EFalse;
-            TInt pattern1, pattern2;
-            TInt dataLayout;
-                    
-            switch (iOutputFormat.iDataType)
-                {
-                case CTRTranscoder::ETRYuvRawData420:
-                    {
-                    pattern1 = EYuv420Chroma1;
-                    pattern2 = EYuv420Chroma2;
-                    dataLayout = EYuvDataPlanar;
-                    }
-                    break;
-
-                case CTRTranscoder::ETRYuvRawData422:
-                    {
-                    pattern1 = EYuv422Chroma1;
-                    pattern2 = EYuv422Chroma2;
-                    dataLayout = EYuvDataInterleavedBE;
-                    }
-                    break;
-                
-                default:
-                    {
-                    // set 420 as a default
-                    pattern1 = EYuv420Chroma1;
-                    pattern2 = EYuv420Chroma2;
-                    dataLayout = EYuvDataPlanar;
-                    }
-                }
-                
-            RArray<TUncompressedVideoFormat> supportedOutputFormats; 
-            TRAP(status, iDevVideoPlay->GetOutputFormatListL( iHwDeviceId, supportedOutputFormats ));
-            
-            TInt formatCount = 0;
-            if (status == KErrNone)
-                {
-                formatCount = supportedOutputFormats.Count();
-                PRINT((_L("CTRVideoDecoderClient::InitializeL(), formatCount[%d]"), formatCount ))
-                }
-                
-            if (formatCount <= 0)
-                {
-                supportedOutputFormats.Close();
-                status = KErrAlreadyExists;
-                PRINT((_L("CTRVideoDecoderClient::InitializeL(), There are no supported output formats") ))
-                //User::Leave(KErrNotSupported);
-                }
-            else
-                {
-                // Check the most important paramers
-                for ( TInt i = 0; i < formatCount; i ++ )
-                    {
-                    uncFormat = supportedOutputFormats[i];
-                    PRINT((_L("CTRVideoDecoderClient::InitializeL(), pattern[%d]"), uncFormat.iYuvFormat.iPattern ))
-                    
-                    if ( (uncFormat.iDataFormat == iUncompressedFormat.iDataFormat) &&
-                         (uncFormat.iYuvFormat.iDataLayout == dataLayout) &&
-                         ( (uncFormat.iYuvFormat.iPattern == pattern1) || 
-                           (uncFormat.iYuvFormat.iPattern == pattern2) ) )
-                        {
-                        // Assign the rest of parameters
-                        iUncompressedFormat = uncFormat;
-                        found = ETrue;
-                        exit = ETrue;
-                        supportedOutputFormats.Close();
-                        break;
-                        }
-                    }
-
-                if (!found)
-                    {
-                    supportedOutputFormats.Close();
-                    status = KErrAlreadyExists;
-                    PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Supported format was not found") ))
-                    //User::Leave(KErrNotSupported);
-                    }
-                }
-            
-            }
-        else
-            {
-            if (iScalingInUse)
-                {
-                // We can't revert to fallback decoder here since scaling has been taken into use
-                // and we can't check here if the fallback decoder supports scaling nor
-                // disable scaling if it's not supported
-                PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to select decoder")))
-                User::Leave(KErrNotSupported);
-                }
-                
-            // Try again with the fallback decoder if one exists
-            if( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) )
-                {
-                PRINT((_L("CTRVideoDecoderClient::SelectEncoderL(), Reverting to fallback decoder")))
-                iUid = iFallbackUid;
-                }
-            else
-                {
-                PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to select decoder")))
-                User::Leave(KErrNotSupported);
-                }
-                
-            TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) );
-            
-            if (status != KErrNone)
-                {
-                PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to get codec info")))
-                User::Leave(KErrNotSupported);
-                }
-              
-            TRAP(status, iHwDeviceId = iDevVideoPlay->SelectDecoderL(iUid));
-            
-            if (status != KErrNone)
-                {
-                PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Failed to select decoder")))
-                User::Leave(KErrNotSupported);
-                }
-            }
-        }
-
-    PRINT((_L("CTRVideoDecoderClient::SelectDecoderL(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoInitComplete
-// Notifies for initialization complete with init status
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoInitComplete(TInt aError)
-    {
-    if ((aError == KErrHardwareNotAvailable) || (aError == KErrNotSupported))
-        {
-        PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Error in initialization")))
-        
-        // Map both error codes to the same
-        aError = KErrNotSupported;
-        
-        // Try again with the fallback decoder if one exists
-        while( (iFallbackUid != TUid::Null()) && (iFallbackUid.iUid != iUid.iUid) )
-            {
-            PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Reverting to fallback decoder")))
-            
-            iUid = iFallbackUid;
-            
-            // Devvideo must be recreated from scratch
-            if (iDevVideoPlay)
-                {
-                delete iDevVideoPlay;
-                iDevVideoPlay = NULL;
-                }
-            
-            TRAPD( status, iDevVideoPlay = CMMFDevVideoPlay::NewL(*this) );
-            if (status != KErrNone)
-                {
-                // Something went wrong, let CTRTranscoderImp handle the error
-                PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Failed to create DevVideoPlay")))
-                break;
-                }
-                
-            TRAP( status, iAcceleratedCodecSelected = CheckCodecInfoL(iUid) );
-            if (status != KErrNone)
-                {
-                // Fallback decoder can not be used, let CTRTranscoderImp handle the error
-                PRINT((_L("CTRVideoDecoderClient::MdvpoInitComplete(), Failed to get codec info")))
-                break;
-                }
-            
-            // We are now ready to reinitialize the decoder, let CTRTranscoderImp do it    
-            aError = KErrHardwareNotAvailable;
-            break;
-            }
-        }
-    
-    iObserver.MtrdvcoDecInitializeComplete(aError);
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::StartL
-// Starts decoding
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::StartL()
-    {
-    PRINT((_L("CTRVideoDecoderClient::StartL(), In")))
-
-    // Start decoding
-    if (iFatalError == KErrNone)
-        {
-        iDevVideoPlay->Start();
-        }
-
-    if (!iInputBuffer)
-        {
-        // Get buffer from the decoder to fill
-        iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize);
-        }
-    
-    // Reset iStop    
-    iStop = EFalse;
-    iPause = EFalse;
-    
-    // Reset ts monitor
-    iLastTimestamp = -1;
-
-    PRINT((_L("CTRVideoDecoderClient::StartL(), Out")))
-    }
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::Pause
-// Pauses decoding
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::Pause()
-    {
-    PRINT((_L("CTRVideoDecoderClient::Pause(), In")))
-
-    // Pause decoding
-    iDevVideoPlay->Pause();
-    
-    // Return coded buffer to client since it can not be send to decoder now
-    if (iCodedBuffer)
-        {
-        CCMRMediaBuffer* codedBuffer = iCodedBuffer;
-        
-        // Reset buffer ptr
-        iCodedBuffer = NULL;
-        
-        iObserver.MtrdvcoReturnCodedBuffer(codedBuffer);
-        }
-    
-    // Get all pictures from devvideoplay and return them to decoder
-    TVideoPicture* picture = NULL;    
-    TRAPD(status, picture = iDevVideoPlay->NextPictureL());
-    
-    while ((picture != NULL) && (status == KErrNone))
-        {
-        PRINT((_L("CTRVideoDecoderClient::Pause(), Sending picture [0x%x] back to decoder"), picture))
-        
-        iDevVideoPlay->ReturnPicture(picture);
-        picture = NULL;
-        
-        TRAP(status, picture = iDevVideoPlay->NextPictureL());
-        }
-    
-    // Input buffer is not valid anymore   
-    iInputBuffer = NULL;    
-        
-    iPause = ETrue;
-    
-    PRINT((_L("CTRVideoDecoderClient::Pause(), Out")))
-    }
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::ResumeL
-// Resumes decoding
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::ResumeL()
-    {
-    PRINT((_L("CTRVideoDecoderClient::ResumeL(), In")))
-
-    // Start decoding
-    if (iFatalError == KErrNone)
-        {
-        iDevVideoPlay->Resume();
-        }
-
-    if (!iInputBuffer)
-        {
-        // Get buffer from the decoder to fill
-        iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize);
-        }
-    
-    // Reset ts monitor
-    iLastTimestamp = -1;
-    
-    iPause = EFalse;
-
-    PRINT((_L("CTRVideoDecoderClient::ResumeL(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoNewBuffers()
-// New buffers are available
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoNewBuffers()
-    {
-    TInt status = KErrNone;
-
-
-    if (iStop)
-        {
-        PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), Stop was already called, nothing to do")))
-        return;
-        }
-
-    // One or more new empty input buffers are available
-    if (!iInputBuffer)
-        {
-        // Get buffer from the decoder to fill
-        TRAP(status, iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize));
-        
-        if (status != KErrNone)
-            {
-            PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), GetBufferL status[%d]"), status))
-            iObserver.MtrdvcoFatalError(status);
-            return;
-            }
-
-        if (!iInputBuffer)
-            {
-            PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), There are available buffer, but decoder returned NULL")))
-            
-            // Report an error or wait for the next MdvpoNewBuffers ?: Wait, GetBufferL is called when client send new coded buffer. 
-            //iObserver.MtrdvcoFatalError(KErrAlreadyExists);
-            return;
-            }
-        }
-
-    if (iCodedBuffer)
-        {
-        CCMRMediaBuffer* codedBuffer = iCodedBuffer;
-        
-        // Reset buffer ptr
-        iCodedBuffer = NULL;
-        
-        // Send coded buffer, since the client has already done request
-        TRAP(status, this->SendBufferL(codedBuffer));
-        if (status != KErrNone)
-            {
-            PRINT((_L("CTRVideoDecoderClient::MdvpoNewBuffers(), Send buffer error[%d]"), status))
-            iObserver.MtrdvcoFatalError(status);
-            return;
-            }
-        }
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::WriteCodedBufferL
-// Writes coded data to decoder
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::WriteCodedBufferL(CCMRMediaBuffer* aBuffer)
-    {
-    PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), In")))
-    CCMRMediaBuffer::TBufferType bufferType;
-    
-    if (!aBuffer)
-        {
-        PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Input buffer is invalid, Leave")))
-        User::Leave(KErrArgument);
-        }
-
-    if (iFatalError != KErrNone)
-        {
-        PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), FatalError was reported by decoder")))
-        
-        // Return coded buffer
-        iObserver.MtrdvcoReturnCodedBuffer(aBuffer);
-        return;
-        }
-    
-    TTimeIntervalMicroSeconds ts = aBuffer->TimeStamp();
-        
-    if ( ts <= iLastTimestamp)
-        {
-        // Prevent propagation of the error now
-        PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Client sends invalid data (ts field), Leave")))
-        User::Leave(KErrArgument);
-        }
-    else
-        {
-        iLastTimestamp = ts;
-        }
-    
-    if (aBuffer->BufferSize() <= 0)
-        {
-        PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Input data buffer is invalid (empty), Leave")))
-        User::Leave(KErrArgument);
-        }
-        
-    bufferType = aBuffer->Type();
-        
-    if ( ( bufferType != CCMRMediaBuffer::EVideoH263 ) && 
-         ( bufferType != CCMRMediaBuffer::EVideoMPEG4 ) )   // : Add H264
-        {
-        PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), [%d] This data type is not supported, Leave"), aBuffer->Type() ))
-        User::Leave(KErrNotSupported);
-        }
-
-    if (!iInputBuffer)
-        {
-        // Request new empty buffer
-        iInputBuffer = iDevVideoPlay->GetBufferL(iBufferOptions.iMaxInputBufferSize);
-        }
-
-    if (iInputBuffer)
-        {
-        this->SendBufferL(aBuffer);
-        }
-    else
-        {
-        iCodedBuffer = aBuffer;
-        }
-
-    PRINT((_L("CTRVideoDecoderClient::WriteCodedBufferL(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::SendBufferL
-// Sends buffer to decoder
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::SendBufferL(CCMRMediaBuffer* aBuffer)
-    {
-    PRINT((_L("CTRVideoDecoderClient::SendBufferL(), In")))
-    
-    if (iStop)
-        {
-        PRINT((_L("CTRVideoDecoderClient::SendBufferL(), Stop was already called, nothing to do, out")))
-        iObserver.MtrdvcoReturnCodedBuffer(aBuffer);
-        return;
-        }
-
-    PRINT((_L("CTRVideoDecoderClient::SendBufferL(), iInputBuffer[%d], aBuffer[%d]"), iInputBuffer->iData.MaxLength(), 
-               aBuffer->BufferSize() ))
-
-    if ( iInputBuffer->iData.MaxLength() < aBuffer->BufferSize() )
-        {
-        PRINT((_L("CTRVideoDecoderClient::SendBufferL(), buffer length exceeds max length")))
-        User::Leave(KErrOverflow);
-        }
-
-    iInputBuffer->iData.Copy( aBuffer->Data().Ptr(), aBuffer->BufferSize() );
-    iInputBuffer->iData.SetLength( aBuffer->BufferSize() );
-
-    // Data unit presentation timestamp. Valid if EPresentationTimestamp is set in the options. 
-    // If the input bitstream does not contain timestamp information, this field should be valid, 
-    // otherwise pictures cannot be displayed at the correct time. If the input bitstream contains 
-    // timestamp information (such as the TR syntax element of H.263 bitstreams) and valid 
-    // iPresentationTimestamp is provided, the value of iPresentationTimestamp is used in playback.    
-    iInputBuffer->iOptions = TVideoInputBuffer::EPresentationTimestamp;
-    iInputBuffer->iPresentationTimestamp = aBuffer->TimeStamp();
-    /*Other data: TBC*/
-    
-    TVideoInputBuffer* inputBuffer = iInputBuffer;
-    
-    // Reset InputBuffer ptr
-    iInputBuffer = NULL;
-
-    // Write data to decoder
-    iDevVideoPlay->WriteCodedDataL(inputBuffer);
-
-    //  return buffer only after it's writtent to decoder (client could write next buffer synchronously from observer call)
-    // Return buffer to the client immediately after copying
-    iObserver.MtrdvcoReturnCodedBuffer(aBuffer);
-
-    PRINT((_L("CTRVideoDecoderClient::SendBufferL(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoNewPictures
-// New decoded pictures available from decoder
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoNewPictures()
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), In")))
-    
-    TInt status = KErrNone;
-
-    // 1 or more decoded pictures are available
-    if (!iDecodedPicture)
-        {
-        // Get new picture
-        TRAP(status, iDecodedPicture = iDevVideoPlay->NextPictureL());
-
-        if (status != KErrNone)
-            {
-            PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), NextPicture status[%d]"), status))
-            iObserver.MtrdvcoFatalError(status);
-            return;
-            }
-
-        if (!iDecodedPicture)
-            {
-            // Error: DevVideo notified of new buffers, but returns NULL
-            PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), DevVideo notified of new buffers, but returns NULL")))
-            iObserver.MtrdvcoFatalError(KErrAlreadyExists);
-            return;
-            }
-
-        // Send new picture to the client
-        iObserver.MtrdvcoNewPicture(iDecodedPicture);
-        }
-    else
-        {
-        // Previous picture still was not returned by the client, nothing to do. 
-        //  SetActive();  // ???
-        }
-        
-    PRINT((_L("CTRVideoDecoderClient::MdvpoNewPictures(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::ReturnPicture
-// Returns picture 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::ReturnPicture(TVideoPicture* aPicture)
-    {
-    PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), In")))
-    TInt status = KErrNone;
-
-
-    iDevVideoPlay->ReturnPicture(aPicture);
-
-    // Reset decoded picture
-    iDecodedPicture = NULL;
-    
-    if (iPause)
-        {
-        // Nothing else to do when paused
-        PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), Out")))
-        return;
-        }
-
-    TRAP(status, iDecodedPicture = iDevVideoPlay->NextPictureL());
-
-    if (status != KErrNone)
-        {
-        PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), NextPicture status[%d]"), status))
-        iObserver.MtrdvcoFatalError(status);
-        return;
-        }
-
-    if (iDecodedPicture)
-        {
-        // Send new picture to the client
-        iObserver.MtrdvcoNewPicture(iDecodedPicture);
-        }
-
-    PRINT((_L("CTRVideoDecoderClient::ReturnPicture(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::StopL
-// Stops decoding synchronously
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::StopL()
-    {
-    PRINT((_L("CTRVideoDecoderClient::StopL(), In")))
-    
-    iStop = ETrue;
-    iPause = EFalse;
-
-    if (iFatalError == KErrNone)
-        {
-        iDevVideoPlay->Stop();
-        }
-        
-    PRINT((_L("CTRVideoDecoderClient::StopL(), Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::AsyncStopL
-// Stops decoding asynchronously
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::AsyncStopL()
-    {
-    PRINT((_L("CTRVideoDecoderClient::StopL(), Async In")))
-
-    if (iFatalError == KErrNone)
-        {
-        iDevVideoPlay->InputEnd();
-        }
-        
-    iStop = ETrue;
-
-    PRINT((_L("CTRVideoDecoderClient::StopL(), Async Out")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoStreamEnd
-// Indicates when stream end is reached
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoStreamEnd()
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoStreamEnd()")))
-    iObserver.MtrdvcoDecStreamEnd();
-    }
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoReturnPicture
-// Returns a used input video picture back to the caller. The picture memory can be re-used or freed (only relevant to postprocessor)
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoReturnPicture(TVideoPicture* /*aPicture*/)
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoReturnPicture()")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoSupplementalInformation
-// Sends SupplementalInformation
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoSupplementalInformation(const TDesC8& /*aData*/, 
-                                                         const TTimeIntervalMicroSeconds& /*aTimestamp*/, 
-                                                         const TPictureId& /*aPictureId*/)
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoSupplementalInformation()")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoPictureLoss
-// Back channel information from the decoder, indicating a picture loss without specifying the lost picture
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoPictureLoss()
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoPictureLoss(), report an error")))
-    iObserver.MtrdvcoFatalError(KErrAbort);
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoPictureLoss
-// Back channel information from the decoder, indicating the pictures that have been lost
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoPictureLoss(const TArray< TPictureId >& /*aPictures*/)
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoPictureLoss(), pictureId: report an error")))
-    iObserver.MtrdvcoFatalError(KErrAbort);
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoSliceLoss
-// Reports that slice is lost
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoSliceLoss(TUint /*aFirstMacroblock*/, TUint /*aNumMacroblocks*/, 
-                                           const TPictureId& /*aPicture*/)
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoSliceLoss()")))
-    // This error is not considered a s fatal for decoder or application, nothing to do
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoReferencePictureSelection
-// Back channel information from the decoder, indicating a reference picture selection request.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoReferencePictureSelection(const TDesC8& /*aSelectionData*/)
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoReferencePictureSelection()")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoTimedSnapshotComplete
-// Called when a timed snapshot request has been completed. 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoTimedSnapshotComplete(TInt /*aError*/, TPictureData* /*aPictureData*/, 
-                                                       const TTimeIntervalMicroSeconds& /*aPresentationTimestamp*/, 
-                                                       const TPictureId& /*aPictureId*/)
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoTimedSnapshotComplete()")))
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MdvpoFatalError
-// Reports the fatal error to the client
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CTRVideoDecoderClient::MdvpoFatalError(TInt aError)
-    {
-    PRINT((_L("CTRVideoDecoderClient::MdvpoFatalError(), error[%d]"), aError))
-    iFatalError = aError;
-    iObserver.MtrdvcoFatalError(iFatalError);
-    }
-
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::EstimateDecodeFrameTimeL
-// Returns a time estimate on long it takes to decode one frame 
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//    
-TReal CTRVideoDecoderClient::EstimateDecodeFrameTimeL(const TTRVideoFormat& aInput, TInt aCodecType)
-    {
-    if (iUid == TUid::Null())
-        {
-        PRINT((_L("CTRVideoDecoderClient::EstimateDecodeFrameTimeL(), no decoder selected yet")))
-        User::Leave(KErrNotReady);
-        }
-    
-    TReal time = 0.0;    
-    
-    // Select the predefined constant using the current settings
-    if (aCodecType == EH263)
-        {
-        time = iAcceleratedCodecSelected ? KTRDecodeTimeFactorH263HW : KTRDecodeTimeFactorH263SW;
-        }
-    else if (aCodecType == EH264)
-        {
-        time = iAcceleratedCodecSelected ? KTRDecodeTimeFactorH264HW : KTRDecodeTimeFactorH264SW;
-        }
-    else
-        {
-        time = iAcceleratedCodecSelected ? KTRDecodeTimeFactorMPEG4HW : KTRDecodeTimeFactorMPEG4SW;
-        }
-    
-    // Multiply the time by the resolution of the input frame    
-    time *= static_cast<TReal>(aInput.iSize.iWidth + aInput.iSize.iHeight) * KTRTimeFactorScale;
-    
-    PRINT((_L("CTRVideoDecoderClient::EstimateDecodeFrameTimeL(), decode frame time: %.2f"), time))
-        
-    return time;
-    }
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::SetDecoderScaling
-// Checks if decoder supports scaling and enables scaling if supported
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//    
-TBool CTRVideoDecoderClient::SetDecoderScaling(TSize& aInputSize, TSize& aOutputSize)
-    {
-    PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), In")))
-    
-    CPostProcessorInfo* ppInfo = NULL;
-    TBool scalingSupported = EFalse;
-    
-    // Check that the given sizes are valid
-    if( (aInputSize.iWidth == 0) || (aInputSize.iHeight == 0) ||
-        (aOutputSize.iWidth == 0) || (aOutputSize.iHeight == 0) )
-        {
-        PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), invalid input/output size")))
-        return EFalse;
-        }
-        
-    iScalingInUse = EFalse;
-    iScalingWithDeblocking = EFalse;
-    
-    if( aInputSize == aOutputSize )
-        {
-        PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), scaling disabled")))
-        return EFalse;
-        }
-       
-    // Get post processor info
-    TRAPD( status, ppInfo = iDevVideoPlay->PostProcessorInfoLC( iUid ); CleanupStack::Pop( ppInfo ) );
-
-    if( (status != KErrNone) || !ppInfo )
-        {
-        PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), getting info from [0x%x] failed"), iUid.iUid ))
-        return EFalse;
-        }
-        
-    if( ppInfo->SupportsArbitraryScaling() )
-        {
-        PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), arbitrary scaling supported")))
-        scalingSupported = ETrue;
-        }
-    else if( (aInputSize.iWidth * aOutputSize.iHeight) != (aInputSize.iHeight * aOutputSize.iWidth) )
-        {
-        // Aspect ratio needs to be changed but decoder does not support arbitrary scaling => not supported
-        scalingSupported = EFalse;
-        }
-    else
-        {        
-        RArray<TScaleFactor> scaleFactors = ppInfo->SupportedScaleFactors();
-        
-        for( TInt i = 0; i < scaleFactors.Count(); ++i )
-            {
-            if( (aInputSize.iWidth * scaleFactors[i].iScaleNum) == (aOutputSize.iWidth * scaleFactors[i].iScaleDenom) )
-                {
-                PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), supported scale factors found")))
-                scalingSupported = ETrue;
-                break;
-                }
-            }
-        }
-    
-    if( scalingSupported )
-        {        
-        if( ppInfo->SupportsCombination( EPpScale | EPpDeblocking ) )
-            {
-            // Deblocking should be used with scaling if supported
-            PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), deblocking supported")))
-            iScalingWithDeblocking = ETrue;
-            }
-
-        iScalingInUse = ETrue;
-        iScaledOutputSize = aOutputSize;
-        }
-
-    // Delete codec info
-    delete ppInfo;
-    
-    PRINT((_L("CTRVideoDecoderClient::SetDecoderScaling(), Out")))
-    
-    return scalingSupported;
-    }
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::EnableResourceObserver
-// Enable / Disable resourece observer
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//     
-void CTRVideoDecoderClient::EnableResourceObserver(TBool aEnable)
-    {
-    PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), In")))
-    
-    iVideoResourceHandlerCI = (MMmfVideoResourceHandler*)iDevVideoPlay->CustomInterface( iHwDeviceId, KUidMmfVideoResourceManagement );
-    PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), iVideoResourceHandlerCI[0x%x]"), iVideoResourceHandlerCI))
-
-    if (iVideoResourceHandlerCI)
-        {
-        if (aEnable)
-            {
-            iVideoResourceHandlerCI->MmvrhSetObserver(this);
-            PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), Enabled")))
-            }
-        else
-            {
-            iVideoResourceHandlerCI->MmvrhSetObserver(NULL);
-            }
-        }
-
-    PRINT((_L("CTRVideoDecoderClient::EnableResourceObserver(), Out")))
-    }
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MmvroResourcesLost
-// Indicates that a media device has lost its resources
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//     
-void CTRVideoDecoderClient::MmvroResourcesLost(TUid /*aMediaDevice*/)
-    {
-    iObserver.MtrdvcoResourcesLost(ETrue);
-    }
-        
-
-// -----------------------------------------------------------------------------
-// CTRVideoDecoderClient::MmvroResourcesRestored
-// Indicates that a media device has regained its resources
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-// 
-void CTRVideoDecoderClient::MmvroResourcesRestored(TUid /*aMediaDevice*/)
-    {
-    iObserver.MtrdvcoResourcesRestored();
-    }
-
-
-// End of file