omxilvideocomps/omxilclock/src/comxilclockprocessingfunction.h
author hgs
Fri, 08 Oct 2010 22:09:17 +0100
changeset 0 5d29cba61097
permissions -rw-r--r--
2010wk38_02

/*
* 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 COMXILCLOCKPROCESSINGFUNCTION_H
#define COMXILCLOCKPROCESSINGFUNCTION_H

#include <openmax/il/common/omxilprocessingfunction.h>
#include "clocksupervisor.h"
#include "clockthreadnotifier.h"

class COmxILClockComponent;

class COmxILClockProcessingFunction : public COmxILProcessingFunction
	{
public:
	static COmxILClockProcessingFunction* NewL(MOmxILCallbackNotificationIf& aCallbacks, COmxILClockComponent& aComponent);
	~COmxILClockProcessingFunction();

	OMX_ERRORTYPE ProduceRequest(OMX_INDEXTYPE aIdx, CClockSupervisor::TEntryPoint aEntryPoint, TAny* pComponentConfigStructure);

	// from COmxILProcessingFunction
	OMX_ERRORTYPE StateTransitionIndication(TStateIndex aNewState);
	OMX_ERRORTYPE BufferFlushingIndication(TUint32 aPortIndex, OMX_DIRTYPE aDirection);
	OMX_ERRORTYPE ParamIndication(OMX_INDEXTYPE aParamIndex, const TAny* apComponentParameterStructure);
	OMX_ERRORTYPE ConfigIndication(OMX_INDEXTYPE aConfigIndex, const TAny* apComponentConfigStructure);
	OMX_ERRORTYPE BufferIndication(OMX_BUFFERHEADERTYPE* apBufferHeader, OMX_DIRTYPE aDirection);
	OMX_BOOL BufferRemovalIndication(OMX_BUFFERHEADERTYPE* apBufferHeader, OMX_DIRTYPE aDirection);

	// used by CClockSupervisor
	OMX_BUFFERHEADERTYPE* AcquireBuffer(TInt aPortIndex);
	void SendBuffer(OMX_BUFFERHEADERTYPE* aBuffer);
	TBool PortEnabled(TInt aPortIndex) const;
	TBool IsExecuting() const;
	void InvalidateComponent();
	
	
private:
	COmxILClockProcessingFunction(MOmxILCallbackNotificationIf& aCallbacks, COmxILClockComponent& aComponent);
	void ConstructL();
	void DoBufferFlushingIndication(TUint32 aPortIndex);

private:
	CClockSupervisor* iClock;
	CClockThreadNotifier* iThreadNotifier;
	COmxILClockComponent& iComponent;
	RPointerArray<CCirBuf<OMX_BUFFERHEADERTYPE*> > iBufferQueues;
	RMutex iBufferMutex;
	TBool iExecuting;
  	};

#endif //COMXILCLOCKPROCESSINGFUNCTION_H