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 "MMFAudioALawToS16PcmCodec.h" sl@0: sl@0: /*** sl@0: * sl@0: * Convert sl@0: * sl@0: */ sl@0: EXPORT_C void TMMFAudioALawToS16PcmCodec::Convert(TUint8* aSrc, TUint8* aDst, TInt aSamples) sl@0: { sl@0: ASSERT(aSrc); sl@0: ASSERT(aDst); sl@0: sl@0: TInt pcm; sl@0: while (aSamples--) sl@0: { sl@0: pcm = AlawSampleToPcm(*aSrc++); sl@0: *aDst++ = STATIC_CAST( TUint8, pcm&KAndMask8bit); sl@0: *aDst++ = STATIC_CAST( TUint8, pcm>>8); sl@0: } sl@0: sl@0: } sl@0: sl@0: /*** sl@0: * sl@0: * AlawSampleToPcm sl@0: * @param aLaw sl@0: * @return TInt sl@0: * sl@0: */ sl@0: TInt TMMFAudioALawToS16PcmCodec::AlawSampleToPcm(TUint8 aAlaw) sl@0: { sl@0: TInt sign, exponent, mantissa, sample; sl@0: sl@0: aAlaw ^= 0x55; //will leave this as is, more readable sl@0: sign = ( aAlaw & KMaskSign8bit ); sl@0: aAlaw &= 0x7f; /* get magnitude */ sl@0: if (aAlaw >= 16) sl@0: { sl@0: exponent = (aAlaw >> 4 ) & 0x07; sl@0: mantissa = aAlaw & 0x0F; sl@0: sample = KExpLut[exponent] + ( mantissa << ( exponent + 3 ) ); sl@0: } sl@0: else sl@0: sample = (aAlaw << 4) + 8; sl@0: sl@0: if ( sign == 0 ) sl@0: sample = -sample; sl@0: sl@0: return sample; sl@0: } sl@0: sl@0: const TInt TMMFAudioALawToS16PcmCodec::KExpLut[] = sl@0: { sl@0: 0, 264, 528, 1056, 2112, 4224, 8448, 16896 sl@0: };