This CL will look a bit strange. Essentially I've removed sanity checks for > 1 channel and then fixed the bugs that remained. Will add testing in a separate CL.

BUG=
TEST=

Review URL: https://webrtc-codereview.appspot.com/390001

git-svn-id: http://webrtc.googlecode.com/svn/trunk@1623 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
niklas.enbom@webrtc.org 2012-02-07 14:48:59 +00:00
parent 2726cd22c9
commit 87885e8409
3 changed files with 29 additions and 11 deletions

View File

@ -1150,9 +1150,9 @@ WebRtc_Word32 MediaFileImpl::StartRecordingStream(
StopRecording();
return -1;
}
if((STR_NCASE_CMP(codec_info_.plname, "L16", 4) != 0) &&
(STR_NCASE_CMP(codec_info_.plname, "PCMU", 5) != 0) &&
(STR_NCASE_CMP(codec_info_.plname, "PCMA", 5) != 0))
if((STR_NCASE_CMP(tmpAudioCodec.plname, "L16", 4) != 0) &&
(STR_NCASE_CMP(tmpAudioCodec.plname, "PCMU", 5) != 0) &&
(STR_NCASE_CMP(tmpAudioCodec.plname, "PCMA", 5) != 0))
{
WEBRTC_TRACE(
kTraceWarning,

View File

@ -204,8 +204,10 @@ WebRtc_Word32 FileRecorderImpl::RecordAudioToFile(
// Recording mono but incoming audio is (interleaved) stereo.
tempAudioFrame._audioChannel = 1;
tempAudioFrame._frequencyInHz = incomingAudioFrame._frequencyInHz;
tempAudioFrame._payloadDataLengthInSamples =
incomingAudioFrame._payloadDataLengthInSamples;
for (WebRtc_UWord16 i = 0;
i < (incomingAudioFrame._payloadDataLengthInSamples >> 1); i++)
i < (incomingAudioFrame._payloadDataLengthInSamples); i++)
{
// Sample value is the average of left and right buffer rounded to
// closest integer value. Note samples can be either 1 or 2 byte.
@ -213,8 +215,24 @@ WebRtc_Word32 FileRecorderImpl::RecordAudioToFile(
((incomingAudioFrame._payloadData[2 * i] +
incomingAudioFrame._payloadData[(2 * i) + 1] + 1) >> 1);
}
}
else if( incomingAudioFrame._audioChannel == 1 &&
_moduleFile->IsStereo())
{
// Recording stereo but incoming audio is mono.
tempAudioFrame._audioChannel = 2;
tempAudioFrame._frequencyInHz = incomingAudioFrame._frequencyInHz;
tempAudioFrame._payloadDataLengthInSamples =
incomingAudioFrame._payloadDataLengthInSamples / 2;
incomingAudioFrame._payloadDataLengthInSamples;
for (WebRtc_UWord16 i = 0;
i < (incomingAudioFrame._payloadDataLengthInSamples); i++)
{
// Duplicate sample to both channels
tempAudioFrame._payloadData[2*i] =
incomingAudioFrame._payloadData[i];
tempAudioFrame._payloadData[2*i+1] =
incomingAudioFrame._payloadData[i];
}
}
const AudioFrame* ptrAudioFrame = &incomingAudioFrame;
@ -254,7 +272,8 @@ WebRtc_Word32 FileRecorderImpl::RecordAudioToFile(
codec_info_.plfreq,
kResamplerSynchronousStereo);
_audioResampler.Push(ptrAudioFrame->_payloadData,
ptrAudioFrame->_payloadDataLengthInSamples,
ptrAudioFrame->_payloadDataLengthInSamples *
ptrAudioFrame->_audioChannel,
(WebRtc_Word16*)_audioBuffer,
MAX_AUDIO_BUFFER_IN_BYTES, outLen);
} else {
@ -266,7 +285,7 @@ WebRtc_Word32 FileRecorderImpl::RecordAudioToFile(
(WebRtc_Word16*)_audioBuffer,
MAX_AUDIO_BUFFER_IN_BYTES, outLen);
}
encodedLenInBytes = outLen*2;
encodedLenInBytes = outLen * sizeof(WebRtc_Word16);
}
// Codec may not be operating at a frame rate of 10 ms. Whenever enough

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
@ -722,7 +722,8 @@ int TransmitMixer::StartRecordingMicrophone(const WebRtc_Word8* fileName,
const WebRtc_UWord32 notificationTime(0); // Not supported in VoE
CodecInst dummyCodec = { 100, "L16", 16000, 320, 1, 320000 };
if (codecInst != NULL && codecInst->channels != 1)
if (codecInst != NULL &&
(codecInst->channels < 0 || codecInst->channels > 2))
{
_engineStatisticsPtr->SetLastError(
VE_BAD_ARGUMENT, kTraceError,
@ -1194,8 +1195,6 @@ TransmitMixer::GenerateAudioFrame(const WebRtc_Word16 audioSamples[],
WebRtc_Word32 TransmitMixer::RecordAudioToFile(
const WebRtc_UWord32 mixingFrequency)
{
assert(_audioFrame._audioChannel == 1);
CriticalSectionScoped cs(_critSect);
if (_fileRecorderPtr == NULL)
{