sl@0: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "MMFAudioSPcm16ToMuLawCodec.h" sl@0: sl@0: /*** sl@0: * sl@0: * Convert sl@0: * sl@0: */ sl@0: EXPORT_C void TMMFAudioSPcm16ToMuLawCodec::Convert(TUint8* aSrc, TUint8* aDst, TInt aSamples) sl@0: { sl@0: TInt pcm; sl@0: while (aSamples--) sl@0: { sl@0: pcm = (aSrc[0]+(aSrc[1]<<8)); sl@0: *aDst++ = PcmSampleToMuLaw(STATIC_CAST(TInt16 , pcm)); sl@0: aSrc+=2; sl@0: } sl@0: } sl@0: sl@0: //[ conversion look up table pcm16 to Mulaw ] sl@0: const TInt8 TMMFAudioSPcm16ToMuLawCodec::KExpLut[] = sl@0: { sl@0: 0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3, sl@0: 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, sl@0: 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, sl@0: 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, sl@0: 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, sl@0: 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, sl@0: 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, sl@0: 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, sl@0: 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 sl@0: }; sl@0: sl@0: /*** sl@0: * sl@0: * PcmSampleToMulaw sl@0: * @param Mulaw sl@0: * @return TUint8 sl@0: * sl@0: */ sl@0: TUint8 TMMFAudioSPcm16ToMuLawCodec::PcmSampleToMuLaw(TInt aPcm) sl@0: { sl@0: TInt sign, exponent, mantissa; sl@0: TUint8 ulawbyte; sl@0: sl@0: sign = (aPcm >> 8) & KMaskSign8bit; sl@0: if ( sign != 0 ) sl@0: aPcm = STATIC_CAST( TUint16,-aPcm); sl@0: if ( STATIC_CAST(TUint , aPcm) > STATIC_CAST(TUint , KMda16PcmToMulawClip )) sl@0: aPcm = KMda16PcmToMulawClip; sl@0: sl@0: aPcm = STATIC_CAST(TInt16 , aPcm + KMda16PcmToMulawBias); sl@0: exponent = KExpLut[( aPcm >> 7 ) & KAndMask8bit]; sl@0: mantissa = ( aPcm >> ( exponent + 3 ) ) & 0x0F; sl@0: ulawbyte = STATIC_CAST( TUint8, ~ ( sign | ( exponent << 4 ) | mantissa )); sl@0: sl@0: return ulawbyte; sl@0: }