camcordermmfplugin/mediarecorder/Inc/CCMRAudioCodecData.h
changeset 0 9b3e960ffc8a
child 35 35844111a233
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/camcordermmfplugin/mediarecorder/Inc/CCMRAudioCodecData.h	Thu Dec 17 08:51:24 2009 +0200
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2004 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:  Header file for audio codec data class which is specific to each codec type
+*
+*/
+
+
+#ifndef CCMRAUDIOCODECDATA_H
+#define CCMRAUDIOCODECDATA_H
+
+// INCLUDES
+#include "CCMRMediaSink.h"
+
+#include <e32base.h>
+#include <mmf/common/mmffourcc.h>
+
+
+/**
+* Audio codec type (SW/HW)
+*/
+enum TCMRCodecType
+    {
+        ECodecTypeSW,
+        ECodecTypeHW,
+        ECodecTypeNA
+    };
+
+
+// FORWARD DECLARATIONS
+class MDataSource;
+
+
+// CLASS DECLARATION
+
+/**
+*  Base class for audio codec data
+*
+*  @lib
+*  @since 2.6
+*/
+class CCMRAudioCodecData : public CBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        inline CCMRAudioCodecData(TFourCC aFourCC, TInt aBitRate, CCMRMediaBuffer::TBufferType aBufferType, TCMRCodecType aType)
+            : iFourCC(aFourCC), iBitRate(aBitRate), iSampleRate( 8000 ), iChannels( 1 ),
+              iBufferType(aBufferType), iConfigData(NULL), iCodecSWHWType(aType) {};
+
+        /**
+        * Destructor.
+        */
+        virtual ~CCMRAudioCodecData();
+
+    public: // New functions
+
+        /**
+        * Check if the codec is supported in this configuration
+        * @return TBool ETrue if supported
+        */
+        virtual TBool Supported() = 0;
+
+        /**
+        * Set channel mode for the codec, leaves by default.
+        */
+        virtual inline void SetChannelModeL(TUint /*aChannelMode*/) { User::Leave(KErrNotSupported); };
+
+        /**
+        * Return the number of channels supported
+        * @return TUint number of channels (1/2)
+        */
+        virtual inline TUint GetNumChannels() const { return iChannels; };
+
+        /**
+        * Set sample rate for the codec, leaves by default, but can be overridden, then leaves if not supported
+        */
+        virtual inline void SetSampleRateL(TUint /*aSampleRate*/) { User::Leave(KErrNotSupported); };
+        /**
+        * Return the supported sample rate for the codec
+        * @return TUint sample rate (Hz)
+        */
+        virtual inline TUint GetSampleRate() const { return iSampleRate; };
+        /**
+        * Get codec's type/location: SW for CMMFCodecs and HW for HW Devices
+        * @return ECodecTypeSW/ECodecTypeHW/ECodecTypeNA
+        */
+        inline TCMRCodecType GetCodecSWHWTypeL() { return iCodecSWHWType; };
+        /**
+        * Return frame duration in microseconds
+        * @return TReal duration in microseconds
+        */
+        virtual inline TReal GetFrameDurationUs() const { return 20000; };
+
+        /**
+        * Return preferred duration of PCM capture in microseconds, relevant only for CMMFCodecs
+        * @return TReal duration in milliseconds
+        */
+        virtual TReal GetPCMCaptureDurationMs() const = 0;
+
+        /**
+        * Set bitrate for the codec
+        * @param aBitRate in bps
+        * @return void
+        */
+        virtual void SetBitRateL(TInt aBitRate) = 0;
+        /**
+        * Get the current bitrate
+        * @return TInt bitrate in bps
+        */
+        virtual TInt GetBitRateL() const = 0;
+
+        /**
+        * Get the configuration parameters for the codec
+        * @param aDataSource    MMF audio input
+        * @return TDes8* configuration parameter structure
+        */
+        virtual TDes8* GetCodecConfigParamL(MDataSource* aDataSource) = 0;
+
+        /**
+        * Get the FourCC of the codec
+        * @return TFourCC
+        */
+        virtual TFourCC GetCodecFourCCL() const;
+
+        /**
+        * Reads the framelength from the header of the given buffer
+        * @param const TUint8* aBuf
+        * @return TInt frame length in bytes
+        */
+        virtual TInt FrameLength( const TUint8* aBuf, TInt aDataLen  ) const = 0;
+
+        /**
+        * Returns max coded frame length for the codec. Client can then e.g. allocate buffers based on it
+        * @return TInt Max frame length in bytes
+        */
+        virtual TInt MaxFrameLengthL() const = 0;
+
+        /**
+        * Returns the max used buffer length for this codec. Client can then e.g. allocate buffers based on it
+        * @return TInt Max frame length in bytes
+        */
+        virtual TInt MaxBufferLength() const = 0;
+
+        /**
+        * Returns the CCMRMediaSink/CCMRMediaBuffer compatible type of the codec buffer
+        * @return CCMRMediaBuffer::TBufferType buffer type
+        */
+        virtual CCMRMediaBuffer::TBufferType BufferType() const;
+
+        /**
+        * Configures sample DevSound HW device
+        * @since 2.1
+        * @return TInt error code
+        */
+        virtual TInt AudioHWConfigL(MDataSource* aDataSource, const TDesC8& aParams ) = 0;
+
+        /**
+        * Get the decoder configuration info
+        * @return HBufC8* info structure
+        */
+        virtual HBufC8* GetDecoderConfigInfoLC();
+
+        /**
+        * Get the Uid of the SW codec we support
+        * @return TUid Uid
+        */
+        virtual TUid SWCodecUid() = 0;
+
+        /**
+        * Get the preferred samplecount per PCM inputbuffer.
+        * @return TInt samplecount.
+        */
+        virtual TInt PreferredSampleCountPerInputBuffer() = 0;
+
+        /**
+        * Get the preferred framecount per PCM inputbuffer.
+        * @return TInt samplecount.
+        */
+        virtual TInt PreferredFrameCountPerInputBuffer() = 0;
+
+    protected: // member data
+        // FourCC of the codec
+        TFourCC iFourCC;
+
+        // The selected bitrate of the codec
+        TInt iBitRate;
+
+        // The selected samplerate of the codec
+        TInt iSampleRate;
+
+        // The selected channel mode of the codec
+        TInt iChannels;
+
+        // CCMRMediaSink/CCMRMediaBuffer compatible type of the codec buffer
+        CCMRMediaBuffer::TBufferType iBufferType;
+
+        // Configuration data structure
+        TDes8* iConfigData;
+
+    private:
+
+        // type/location of the codec: HW or SW
+        TCMRCodecType iCodecSWHWType;
+
+    };
+
+
+
+#endif      // CCMRAUDIOCODECDATA_H
+
+// End of File