diff -r f7d9134af83e -r 94dbab0a2133 mmlibs/mmfw/src/Client/Video/mediaclientextdisplayinterface.cpp --- a/mmlibs/mmfw/src/Client/Video/mediaclientextdisplayinterface.cpp Sat Feb 20 00:20:15 2010 +0200 +++ b/mmlibs/mmfw/src/Client/Video/mediaclientextdisplayinterface.cpp Fri Mar 12 15:50:33 2010 +0200 @@ -1,4 +1,4 @@ -// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). // All rights reserved. // This component and the accompanying materials are made available // under the terms of "Eclipse Public License v1.0" @@ -18,50 +18,30 @@ #include #include -TBool CExtDisplayConnectionProviderInterface::ExternalDisplaySupportedL() +void CleanupEComArray(TAny* aArray); + +CExtDisplayConnectionProviderInterface* CExtDisplayConnectionProviderInterface::NewL() { RImplInfoPtrArray implInfoArray; - REComSession::ListImplementationsL(TUid::Uid(KMediaDisplayExtProviderInterfaceUid), implInfoArray); + TCleanupItem cleanup(CleanupEComArray, &implInfoArray); + CleanupStack::PushL(cleanup); - TBool ret = EFalse; - if(implInfoArray.Count() > 0) - { - ret = ETrue; - } - - implInfoArray.Close(); - return ret; - } - -CExtDisplayConnectionProviderInterface* CExtDisplayConnectionProviderInterface::NewL(MExtDisplayConnectionProviderCallback& aCallback, TSurfaceId& aSurfaceId) - { - RImplInfoPtrArray implInfoArray; - CleanupClosePushL(implInfoArray); REComSession::ListImplementationsL(TUid::Uid(KMediaDisplayExtProviderInterfaceUid), implInfoArray); if(implInfoArray.Count() == 0) { - User::Leave(KErrNotSupported); + CleanupStack::PopAndDestroy(); // implInfoArray + return NULL; } CExtDisplayConnectionProviderInterface* self = REINTERPRET_CAST(CExtDisplayConnectionProviderInterface*, REComSession::CreateImplementationL( implInfoArray[0]->ImplementationUid(), _FOFF(CExtDisplayConnectionProviderInterface, iInstanceKey))); - CleanupStack::PushL(self); - - self->ConstructL(aCallback, aSurfaceId); - CleanupStack::Pop(self); CleanupStack::PopAndDestroy(); // implInfoArray return self; } -void CExtDisplayConnectionProviderInterface::ConstructL(MExtDisplayConnectionProviderCallback& aCallback, TSurfaceId& aSurfaceId) - { - iCallback = &aCallback; - iSurfaceId = aSurfaceId; - } - EXPORT_C CExtDisplayConnectionProviderInterface::~CExtDisplayConnectionProviderInterface() { REComSession::DestroyedImplementation(iInstanceKey); @@ -70,3 +50,10 @@ EXPORT_C CExtDisplayConnectionProviderInterface::CExtDisplayConnectionProviderInterface() { } + +// CleanupEComArray function is used for cleanup support of locally declared arrays +void CleanupEComArray(TAny* aArray) + { + (static_cast (aArray))->ResetAndDestroy(); + (static_cast (aArray))->Close(); + }