diff -r 000000000000 -r bb31fbe78861 utilities/ariprocessengine/inc/aribaseengine.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/utilities/ariprocessengine/inc/aribaseengine.h Fri Jul 23 16:58:44 2010 +0100 @@ -0,0 +1,256 @@ +/* +* Copyright (c) 2009 Aricent and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* Aricent - initial contribution. +* +* Contributors: +* +* Description: +* Contains base class for process engine (CBaseEngine) and an abstract class +* (MProcessEngineObserver) which has callback methods to indicate events like +* completion of encoding, processing of a command etc. +* +*/ + + +#ifndef ARIBASEENGINE_H +#define ARIBASEENGINE_H + +#include +#include "aribasecodec.h" + +/** + * An abstract class which contains call back functions to be derived and + * implemented by any module wishing to use the process engine. + */ + +class MProcessEngineObserver + { + public: + + /** + * From MProcessEngineObserver + * The function is a callback to indicate the input buffer is consumed + * @param aInp + * Pointer to the input picture that has been processed + * @param aError + * Error code returned by process engine + * @return error value + */ + virtual TInt InputBufferConsumed( TAny* aInp, TInt aError ) = 0; + + /** + * From MProcessEngineObserver + * The function is a callback to indicate the output buffer is ready + * @param aOup + * Pointer to the output picture that has been processed + * @param aError + * Error code returned by process engine + * @return error value + */ + virtual TInt OutputBufferReady( TAny* aOup, TInt aError ) = 0; + + /** + * From MProcessEngineObserver + * The function indicates to hwdevice that process engine has finished + * with the processing of command requested by hwdevice + * @param aCmd + * Command that has been processed by process engine + * @param aCmdData + * Pointer to command data that has been processed by process engine + * @param aError + * Error code corresponding to the command + */ + virtual void CommandProcessed( TInt aCmd, TAny* aCmdData, + TInt aError ) = 0; + /** + * From CMMFVideoEncodeHwDevice + * The function indicates to hwdevice that process engine has met with + * an unrecoverable error during its processing + * @param aError + * The fatal error code + */ + virtual void FatalErrorFromProcessEngine( TInt aError ) = 0; + }; + + + /** + * Base class for base process engine. This calls creates class + * CAriH264encHwDeviceImpl which derives this class & provides + * implementation for pure virtual functions present in this class. + */ +class CBaseEngine + { + public: + + /** + * Enumeration to be used to set priority of an command + */ + enum TCmdPriority + { + ENormalPriority = 0, + EStandardPriority = 1, + EHighPriority = 2, + EVeryHighPriority = 3 + }; + + /** + * Two-phased constructor. + * @param aObserver + * Pointer to observer to the process engine - HwDevice + * @param aCodec + * Pointer to wrapper + * @param aInPlaceProcessing + * + * @param aProcessingAutomatic + * + * @return pointer to an instance of CBaseProcessEngine + */ + + IMPORT_C static CBaseEngine* NewL( MProcessEngineObserver* aObserver, + MBaseCodec* aCodec, + TBool aInPlaceProcessing, + TBool aProcessingAutomatic = ETrue ); + + /**> Destructor */ + virtual ~CBaseEngine () + { + } + + + public: + + /** + * Adds an input buffer to the Q + * @param aBuffer + * Pointer to an input buffer. + * @return symbian wide error code + */ + virtual TInt AddInput( TAny* aBuffer ) = 0; + + /** + * Adds an output buffer to the Q + * @param aBuffer + * Pointer to an output buffer. + * @return symbian wide error code + */ + virtual TInt AddOutput( TAny* aBuffer ) = 0; + + /** + * Starts the processing + * @return symbian wide error code, KErrNone on success + */ + virtual TInt Start() = 0; + + /** + * Stops the processing + * @return symbian wide error code, KErrNone on success + */ + virtual TInt Stop() = 0; + + /** + * Processes the commands + * @param aPriority + * Priority of the encode command object + */ + virtual void DoProcessL( TInt aPriority ) = 0; + + /** + * Adds a new command to the priority queue of commands + * @param aPriority + * Priority of the command object + * @param aCmd + * The command + * @param aCmdData + * Command specific data + */ + virtual void AddCommandL( TInt aPriority, TInt aCmd, TAny* aCmdData ) = 0; + + /** + * Resets the processing engine and flushes all the pending input and + * output buffers. + * Calls InputBufferConsumed and OutputBufferReady to give pending + * input & output buffers with aError = KErrCancel. + */ + virtual void Reset() = 0; + + /** + * Returns a output buffer back to the HwDevice + */ + virtual void ReturnOutputBuffers() = 0; + + /** + * Gets the number of input buffers + * @return returns the number of input buffers in process engine q + */ + virtual TInt NumInputBuffers() = 0; + + /** + * Gets the number of output buffers + * @return returns the number of output buffers in process engine q + */ + virtual TInt NumOutputBuffers() = 0; + + /** + * Returns whether processing of an input buffer is going on or else + * @return ETrue if processing in on going, else EFalse + */ + virtual TBool IsProcessing() = 0; + + /** + * Returns input buffer back to the HwDevice + */ + virtual void ReturnInputBuffers() = 0; + + /** + * Returns all the input pictures added previously. + */ + virtual void ReturnInput() = 0; + + public: + + /** + * Called by MBaseCodec when processing is complete + * @param aInpBuf + * The input buffer sent for processing + * @param aOutBuf + * The output buffer + * @param aState + * The result of processing + * @param aError + * Error value returned from DoProcessL + */ + virtual void ProcessingComplete( TAny *aInpBuf, TAny* aOutBuf, + MBaseCodec::TCodecState aState, TInt aError ) = 0; + + /** + * Called by MBaseCodec when processing of commmands is complete + * @param aCommand + * The command which has been processed + * @param aCmdData + * Command specific data + * @param aState + * The result of processing + * @param aError + * Result of processing command + */ + + virtual void ProcessingCommandComplete( TInt aCommand, TAny* aCmdData, + TInt aError ) = 0; + /** + * Returns the 1st buffer from the output buffer queue + * @return returns pointer to the fetched output buffer + */ + virtual TAny* FetchOutputBuffer() = 0; + }; + +#endif //ARIBASEENGINE_H + + +