I tried converting from PCM16 to MuLaw and sending the data to PC by means of the following code in my class where iCodec is declared in the header as CMMFCodec* and SendToRemoteL is my sockets function.
TFourCC muLawCC( KMMFFourCCCodeMuLAW );
TFourCC pcmCC( KMMFFourCCCodePCM16 );
iCodec = CMMFCodec::NewL( pcmCC, muLawCC );

// Need to convert data to MuLaw
CMMFDescriptorBuffer* muLawData = CMMFDescriptorBuffer::NewL( requestSize );
CleanupStack::PushL( muLawData );

//buffer contains PCM16 data from phone mike
buffer->SetPosition( 0 );
TCodecProcessResult result = iCodec->ProcessL( *buffer, *muLawData );
SendToRemoteL( muLawData->Data() );
I noticed that result of ProcessL is rarely equal to TCodecProcessResult::EProcessComplete and is usually some error code. In my case it was usually EDstNotFilled or EProcessIncomplete. When I send the "incomplete" data to the PC it seems to come out ok on the other end. I am doing this post for the sake of sharing my experiences and to ask if anyone else encountered what I have encountered.

For awhile I was debugging my code and was wondering why voice data was not reaching the PC and removing the if statement
if( result == TCodecProcessResult::EProcessComplete )
{
// Send voice data
}
solves my problem. Any thoughts, ideas or comments from anyone here?