diff -r 481b3bce574a -r b6488ac24ddc omxil/omxilcomponentcommon/src/common/omxilcallbackmanager.h --- a/omxil/omxilcomponentcommon/src/common/omxilcallbackmanager.h Mon Aug 23 21:48:44 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,495 +0,0 @@ -// Copyright (c) 2008-2009 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" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// - - -/** - @file - @internalComponent -*/ - -#ifndef OMXILCALLBACKMANAGER_H -#define OMXILCALLBACKMANAGER_H - -#include - -#include "omxilcallbackmanagerif.h" -#include "omxilcallbackmanagerifimpl.h" -#include "primsgqueue.h" - - -/** - Call Back Manager Panic category -*/ -_LIT(KOmxILCallbackManagerPanicCategory, "OmxILCallbackManager"); - - -/** - OpenMAX IL call backs and buffer marks manager. This is an asynchronous - implementation of MOmxILCallbackManagerIf. It keeps and manages the IL - Client callback information as well as the buffer mark propagation info. - - */ -NONSHARABLE_CLASS(COmxILCallbackManager) : - public CActive, - public MOmxILCallbackManagerIf, - private XOmxILCallbackManagerIfImpl - { - - // Declaration of nested private command classes - class CCallbackCommand; - class CCompHandleRegistrationCommand; - class CClientCallbacksRegistrationCommand; - class CTunnelCallbackRegistrationCommand; - class CBufferMarkPropagationRegistrationCommand; - class CBufferRemovalCommand; - class CEventCallbackCommand; - class CBufferDoneCallbackCommand; - class CPortSettingsChangeCommand; - - // Note that the following friends don't break COmxILCallbackManager's - // interface as all friends below are COmxILCallbackManager's private - // nested classes and therefore they are logically part of - // COmxILCallbackManager implementation - friend class CCompHandleRegistrationCommand; - friend class CClientCallbacksRegistrationCommand; - friend class CTunnelCallbackRegistrationCommand; - friend class CBufferMarkPropagationRegistrationCommand; - friend class CBufferRemovalCommand; - friend class CEventCallbackCommand; - friend class CBufferDoneCallbackCommand; - friend class CPortSettingsChangeCommand; - -public: - - IMPORT_C static COmxILCallbackManager* NewL( - OMX_HANDLETYPE apComponentHandle, - OMX_PTR apAppData, - OMX_CALLBACKTYPE* apCallbacks); - - IMPORT_C ~COmxILCallbackManager(); - - IMPORT_C void SetPortManager(COmxILPortManager& apPortManager); - - IMPORT_C void SetFsm(COmxILFsm& apFsm); - - - // - // Methods for Callback Registration (from MOmxILCallbackManagerIf) - // - - IMPORT_C OMX_ERRORTYPE RegisterComponentHandle( - OMX_HANDLETYPE aComponentHandle); - - IMPORT_C OMX_ERRORTYPE RegisterILClientCallbacks( - const OMX_CALLBACKTYPE* apCallbacks, - const OMX_PTR apAppData); - - IMPORT_C OMX_ERRORTYPE RegisterTunnelCallback( - OMX_U32 aLocalPortIndex, - OMX_DIRTYPE aLocalPortDirection, - OMX_HANDLETYPE aTunnelledComponentHandle, - OMX_U32 aTunnelledPortIndex - ); - - IMPORT_C OMX_ERRORTYPE DeregisterTunnelCallback( - OMX_U32 aLocalPortIndex); - - IMPORT_C OMX_ERRORTYPE RegisterBufferMarkPropagationPort( - OMX_U32 aPortIndex, - OMX_U32 aPropagationPortIndex); - - IMPORT_C TBool BufferRemovalIndication( - OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_DIRTYPE aDirection); - - - // - // Methods for Callback Notification (from MOmxILCallbackManagerIf) - // - - IMPORT_C OMX_ERRORTYPE TransitionCompleteNotification( - OMX_STATETYPE aOmxState); - - IMPORT_C OMX_ERRORTYPE CommandCompleteNotification( - OMX_COMMANDTYPE aOmxCommand, - OMX_U32 aOmxPortIndex); - - // - // Methods for Callback Notification (from MOmxILCallbackManagerIf) - // - - IMPORT_C OMX_ERRORTYPE ErrorEventNotification( - OMX_ERRORTYPE aOmxError); - - IMPORT_C OMX_ERRORTYPE EventNotification( - OMX_EVENTTYPE aEvent, - TUint32 aData1, - TUint32 aData2, - OMX_STRING aExtraInfo); - - IMPORT_C OMX_ERRORTYPE BufferDoneNotification( - OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_U32 aLocalPortIndex, - OMX_DIRTYPE aLocalPortDirection); - - IMPORT_C OMX_ERRORTYPE ClockBufferDoneNotification( - OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_U32 aLocalPortIndex, - OMX_DIRTYPE aLocalPortDirection); - - IMPORT_C OMX_ERRORTYPE PortSettingsChangeNotification( - OMX_U32 aLocalPortIndex, - TUint aPortSettingsIndex, - const TDesC8& aPortSettings); - - // - // From CActive - // -private: - void RunL(); - void DoCancel(); - -private: - - // Convenience typedef - typedef RPriMsgQueue RCbCmdPriQue; - - /** - COmxILCallbackManager's priority-based command queue. - - This queue is based on RPriMsgQueue but it is specialized to support the - search and deletion of Buffer Done Callback Commands using some specific - search criteria like buffer headers or port indexes. - */ - class RCallbackManagerQueue : public RCbCmdPriQue - { - - public: - - TBool RemoveBufferDoneCbCommandsByBufferHeader( - COmxILCallbackManager& aCbMgr, - const OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_DIRTYPE aDirection); - - TBool RemoveBufferDoneCbCommandsByPortIndex( - COmxILCallbackManager& aCbMgr, - OMX_U32 aLocalPortIndex); - - TBool ExecuteBufferDoneCbCommandsByPortIndex( - COmxILCallbackManager& aCbMgr, - OMX_U32 aLocalPortIndex); - - - }; - -private: - - static const TInt KMaxMsgQueueEntries = 30; - -private: - - COmxILCallbackManager(OMX_HANDLETYPE apComponentHandle, - OMX_PTR apAppData, - OMX_CALLBACKTYPE* apCallbacks); - void ConstructL(); - - - OMX_ERRORTYPE SendBufferDoneNotification( - OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_U32 aLocalPortIndex, - OMX_DIRTYPE aLocalPortDirection, - TInt aPriority); - - void ProcessQueue(RCallbackManagerQueue& aQueue); - - void CleanUpQueue(RCallbackManagerQueue& aQueue); - - OMX_ERRORTYPE EventNotificationImpl( - OMX_EVENTTYPE aEvent, - TUint32 aData1, - TUint32 aData2, - OMX_STRING aExtraInfo); - -private: - - // COmxILCallbackManager priority queue. - RCallbackManagerQueue iCommandQueue; - - // Queue of buffer done notifications that need to be queued during - // OMX_StatePaused state - RCallbackManagerQueue iPendingQueue; - - // Flag to enable unconditional flushing of buffer done notifications - TBool iFlushPendingQueue; - - OMX_STATETYPE iCurrentState; - OMX_STATETYPE iPreviousState; - - }; - - -// -// COmxILCallbackManager nested classes -// - -/** - Abstract Callback Manager's command class. - */ -class COmxILCallbackManager::CCallbackCommand : public CBase - { - -public: - - enum TCommandPriority - { - EPriorityLow, - EPriorityNormal, - EPriorityHigh, - EPriorityVeryHigh - }; - -public: - - inline CCallbackCommand(TInt aPriority); - - /** - Operator() method that must be implemented to perform the specific - command logic. - - @param [in] aCbMgr The Callback Manager object used as context to the - command operation - */ - virtual void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred) = 0; - - virtual TBool DoRemoveBufferDoneCbCommandByBufferHeader( - COmxILCallbackManager& aCbMgr, - const OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_DIRTYPE aDirection); - - virtual TBool DoRemoveBufferDoneCbCommandByPortIndex( - COmxILCallbackManager& aCbMgr, - OMX_U32 aLocalPortIndex); - - virtual TBool DoExecuteBufferDoneCbCommandByPortIndex( - COmxILCallbackManager& aCbMgr, - OMX_U32 aLocalPortIndex); - - inline TInt Priority(); - -public: - - TInt iPriority; - - }; - -/** - Callback Manager's command class for registering component handles. - */ -class COmxILCallbackManager::CCompHandleRegistrationCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CCompHandleRegistrationCommand(OMX_HANDLETYPE aComponentHandle); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - -private: - - OMX_COMPONENTTYPE* ipHandle; // Not owned - - }; - -/** - Callback Manager's command class for registering IL Client callbacks . - */ -class COmxILCallbackManager::CClientCallbacksRegistrationCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CClientCallbacksRegistrationCommand( - const OMX_CALLBACKTYPE*& apCallbacks, - const OMX_PTR& apAppData); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - -private: - - const OMX_CALLBACKTYPE* ipCallbacks; // not owned - const OMX_PTR ipAppData; // not owned - - }; - -/** - Callback Manager's command class for registering tunnel callbacks. - */ -class COmxILCallbackManager::CTunnelCallbackRegistrationCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CTunnelCallbackRegistrationCommand( - OMX_U32 aLocalPortIndex, - OMX_DIRTYPE aLocalPortDirection, - OMX_HANDLETYPE aTunnelledComponentHandle, - OMX_U32 aTunnelledPortIndex); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - - -public: - - TTunnelRegistrationInfo iTunnelInfo; - - }; - -/** - Callback Manager's command class for registering buffer marks info . - */ -class COmxILCallbackManager::CBufferMarkPropagationRegistrationCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CBufferMarkPropagationRegistrationCommand( - OMX_U32 aPortIndex, - OMX_U32 aPropagationPortIndex); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - -public: - - TBufferMarkPropagationInfo iMarkPropagationInfo; - - }; - -/** - Callback Manager's command class for buffer header removal. - */ -class COmxILCallbackManager::CBufferRemovalCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CBufferRemovalCommand( - OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_DIRTYPE aDirection); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - -public: - - OMX_BUFFERHEADERTYPE* ipBufferHeader; - OMX_DIRTYPE iDirection; - - }; - -/** - Callback Manager's command class for notification of OpenMAX IL events . - */ -class COmxILCallbackManager::CEventCallbackCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CEventCallbackCommand(OMX_EVENTTYPE aEvent, - TUint32 aData1, - TUint32 aData2, - OMX_STRING aExtraInfo); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - -private: - - OMX_EVENTTYPE iEvent; - TUint32 iData1; - TUint32 iData2; - OMX_STRING iExtraInfo; - - }; - -/** - Callback Manager's command class for notification of buffer done events . - */ -class COmxILCallbackManager::CBufferDoneCallbackCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CBufferDoneCallbackCommand(OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_U32 aLocalPortIndex, - OMX_DIRTYPE aLocalPortDirection, - TInt aPriority = CCallbackCommand::EPriorityNormal); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - - TBool DoRemoveBufferDoneCbCommandByBufferHeader( - COmxILCallbackManager& aCbMgr, - const OMX_BUFFERHEADERTYPE* apBufferHeader, - OMX_DIRTYPE aDirection); - - TBool DoRemoveBufferDoneCbCommandByPortIndex( - COmxILCallbackManager& aCbMgr, - OMX_U32 aLocalPortIndex); - - TBool DoExecuteBufferDoneCbCommandByPortIndex( - COmxILCallbackManager& aCbMgr, - OMX_U32 aLocalPortIndex); - -private: - - OMX_BUFFERHEADERTYPE* ipBufferHeader; // not owned - OMX_U32 iLocalPortIndex; - OMX_DIRTYPE iLocalPortDirection; - - }; - -/** - Callback Manager's command class for notification of port settings change - events . - */ -class COmxILCallbackManager::CPortSettingsChangeCommand : - public COmxILCallbackManager::CCallbackCommand - { - -public: - - inline CPortSettingsChangeCommand(OMX_U32 aLocalPortIndex, - TUint aPortSettingsIndex, - HBufC8*& apPortSettings); - - ~CPortSettingsChangeCommand(); - - void operator()(COmxILCallbackManager& aCbMgr, TBool& aHasBeenDeferred); - -private: - - OMX_U32 iLocalPortIndex; - TUint iPortSettingsIndex; - HBufC8* ipPortSettings; // This is owned by this class - - }; - -#include "omxilcallbackmanager.inl" - -#endif // OMXILCALLBACKMANAGER_H