diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/mmf/server/mmfswcodecwrapper.h --- a/epoc32/include/mmf/server/mmfswcodecwrapper.h Wed Mar 31 12:27:01 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,270 +0,0 @@ -// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members -// which accompanies this distribution, and is available -// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// - -#ifndef __MMFSWCODECWRAPPER_H__ -#define __MMFSWCODECWRAPPER_H__ - -#include -#include - -class CMMFSwCodecDataPath; //forward reference - -/** -@publishedAll -@released - -Class for a software codec used by the CMMFSwCodecWrapper class to make the CMMFSwCodec a -CMMFHwDevice plugin. The CMMFSwCodec processes source data in a certain fourCC coding type and -converts it to a destination buffer of another fourCC coding type. - -A CMMFSwCodec object would usually not be instantiated directly -but instead would be instantiated via the CMMFSwCodecWrapper class's Codec() -method. - -The processing of the data is handled by the codecs ProcessL() member. -The intention is that the source buffer for conversion is converted to the appropriate coding type -in the destination buffer. The size of the buffers passed in are determined by SourceBufferSize() -and SinkBufferSize() methods. The buffer sizes should be chosen such that -the ProcessL() method can be guaranteed to have enough destination buffer to -completely process one source buffer. - -The ProcessL should return a TCodecProcessResult returning the number of source bytes processed -and the number of destination bytes processed along with a process result code defined thus: -- EProcessComplete: the codec processed all the source data into the sink buffer -- EProcessIncomplete: the codec filled sink buffer before all the source buffer was processed -- EDstNotFilled: the codec processed the source buffer but the sink buffer was not filled -- EEndOfData: the codec detected the end data - all source data in processed but sink may not be full -- EProcessError: the codec process error condition - -Unlike the 7.0s CMMFCodec::ProcessL method, the CMMFSwCodec::ProcessL method -should not return EProcessIncomplete as this case is not handled by the -CMMFSwCodecWrapper. -*/ -class CMMFSwCodec : public CBase - { -public: - /** - @publishedAll - @released - - Indicates the result of processing data from the source buffer to a destination buffer - and provides functions to compare the result code. - The CMMFSwCodec buffer sizes should be set to return EProcessComplete - The other return codes are to keep the ProcessL method compatible with - the 7.0s CMMFCodec API. - */ - class TCodecProcessResult - { - public: - /** - Flag to track the codec's processing status. - */ - enum TCodecProcessResultStatus - { - /** The codec has successfully completed its processing. */ - EProcessComplete, - /** Could not empty the source buffer because the destination buffer became full. */ - EProcessIncomplete, - /** Codec came across an end of data. */ - EEndOfData, - /** Could not fill the destination buffer because the source buffer has been emptied. */ - EDstNotFilled, - /** An error occured. */ - EProcessError - }; - - /** Overloaded operator to test equality. */ - TBool operator==(const TCodecProcessResultStatus aStatus) const {return (iCodecProcessStatus == aStatus);} - /** Overloaded operator to test inequality. */ - TBool operator!=(const TCodecProcessResultStatus aStatus) const {return (iCodecProcessStatus != aStatus);} - - /** - Default constructor. - */ - TCodecProcessResult() - :iCodecProcessStatus(EProcessError), iSrcBytesProcessed(0), iDstBytesAdded(0) {}; - - public: - /** - The codec's processing status - - @see enum TCodecProcessResultStatus - */ - TCodecProcessResultStatus iCodecProcessStatus; - - /** The number of source bytes processed */ - TUint iSrcBytesProcessed; - - /** The number of bytes added to the destination buffer */ - TUint iDstBytesAdded; - }; -public: - - /** - Processes the data in the specified source buffer and writes the processed data to - the specified destination buffer. - - This function is synchronous, when the function returns the data has been processed. - This is a virtual function that each derived class must implement. - - @param aSource - The source buffer containing data to encode or decode. - @param aDest - The destination buffer to hold the data after encoding or decoding. - - @return The result of the processing. - - @see TCodecProcessResult - */ - virtual TCodecProcessResult ProcessL(const CMMFBuffer& aSource, CMMFBuffer& aDest) = 0; - - /** - Gets the max size of the source buffer passed into the - CMMFSwCodec::ProcessL function. - - Note that this means that this is the Max size of each buffer passed to the codec. The actual - size of the data could be less than the max size. This is a virtual function that each derived - class must implement. - - @return The max size of the source buffer in bytes. - */ - virtual TUint SourceBufferSize() = 0; - - /** - Gets the max size of the sink (destination) buffer passed into the - CMMFSwCodec::ProcessL method. - - Note that this means that this is the Max size of each buffer passed to the codec. The actual - size of the data written to this buffer could be less than the max size. This is a virtual - function that each derived class must implement. - - @return The max size of the sink buffer in bytes. - */ - virtual TUint SinkBufferSize() = 0; - - /** - @internalAll - - Function that needs to be overriden if the codec is a 'Null' codec - ie. it does not perform any data type transformation. The 'Null' codec - should override this to return ETrue and provide a dummy - ProcessL. The CMMFSwCodecWrapper will then use the same buffer - for both the source and the sink. Null codecs should return the same - buffer size for both the Source and SinkBufferSize methods. - Since most CMMFSwCodec implementations will not be null codecs - this method can be ignored. - - Would not normally expect 3rd parties to have to implement this. - */ - virtual TBool IsNullCodec() {return EFalse;}; - }; - -/** -@publishedAll -@released - -Class to make a CMMFSwCodec into a CMMFHwDevice ECOM plugin. - -Most of the code to make a CMMFSwCodec into a CMMFHwDevice ECOM plugin is provided -in CMMFSwCodecWrapper. Someone writing a plugin derrived from CMMFSwCodecWrapper -only needs to provide the standard ECOM implementation code, constructors -and destructors and implement the Codec() function which should return the -appropriate CMMFSwCodec. - -Third parties using CMMFSwCodecWrapper that do not use the RMdaDevSound API -to talk to the sound drivers would need to port the datapaths for their own -sound drivers. Third parties would also need to change the custom interfaces -where necessary. -*/ -class CMMFSwCodecWrapper : public CMMFHwDevice - { -public: - IMPORT_C virtual ~CMMFSwCodecWrapper(); -protected: - IMPORT_C CMMFSwCodecWrapper(); - IMPORT_C virtual TInt Init(THwDeviceInitParams &aDevInfo); - IMPORT_C virtual TInt Start(TDeviceFunc aFuncCmd, TDeviceFlow aFlowCmd); - IMPORT_C virtual TInt Stop(); - IMPORT_C virtual TInt Pause(); - IMPORT_C virtual TAny* CustomInterface(TUid aInterfaceId); - IMPORT_C virtual TInt ThisHwBufferFilled(CMMFBuffer& aFillBufferPtr); - IMPORT_C virtual TInt ThisHwBufferEmptied(CMMFBuffer& aBuffer); - IMPORT_C virtual TInt SetConfig(TTaskConfig& aConfig); - IMPORT_C virtual TInt StopAndDeleteCodec(); - IMPORT_C virtual TInt DeleteCodec(); - /** - This method must return the CMMFSwCodec used by the derived - CMMFSwCodecWrapper class. The method should create the CMMFSwCodec - if it hasn't done so already. - - This is a virtual function that each derived class must implement. - - @return The CMMFSwCodec used by the derrived CMMFSwCodecWrapper - */ - virtual CMMFSwCodec& Codec() = 0; - IMPORT_C void SetVbrFlag(); -private: - TInt StartEncode(); - TInt StartDecode(); - TInt StartConvert(); - -protected: - /** - The software codec used - */ - CMMFSwCodec* iCodec; - - /** - The source buffer for the codec - */ - CMMFDataBuffer* iSourceBuffer; - - /** - The sink buffer for the codec - */ - CMMFDataBuffer* iSinkBuffer; - - /** - The datapath used to transfer the data - */ - CMMFSwCodecDataPath* iDataPath; - - /** - The play custom interface - */ - MPlayCustomInterface* iPlayCustomInterface; - - /** - The record custom interface - */ - MRecordCustomInterface* iRecordCustomInterface; - - /** - The buffer size of the sound device - */ - TUint iDeviceBufferSize; - - /** - The sample rate of the sound device - */ - TInt iSampleRate; - - /** - The number of channels of the sound device - */ - TInt iChannels; - }; - -#endif