From 6423509efc7adffb1e9f47f2e4d4258ebcaf8243 Mon Sep 17 00:00:00 2001 From: "andrew@webrtc.org" Date: Fri, 19 Aug 2011 21:22:08 +0000 Subject: [PATCH] Fix Valgrind warnings in audio_processing. Review URL: http://webrtc-codereview.appspot.com/119001 git-svn-id: http://webrtc.googlecode.com/svn/trunk@408 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../aec/main/source/echo_cancellation.c | 5 ++++- .../audio_processing/agc/main/source/analog_agc.c | 13 +++++++++++-- .../audio_processing/agc/main/source/digital_agc.c | 12 ++++++++++-- .../main/test/process_test/process_test.cc | 2 ++ .../main/test/unit_test/unit_test.cc | 8 +++++--- 5 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/modules/audio_processing/aec/main/source/echo_cancellation.c b/src/modules/audio_processing/aec/main/source/echo_cancellation.c index 1313e358f9..f6a2538d98 100644 --- a/src/modules/audio_processing/aec/main/source/echo_cancellation.c +++ b/src/modules/audio_processing/aec/main/source/echo_cancellation.c @@ -420,7 +420,10 @@ WebRtc_Word32 WebRtcAec_Process(void *aecInst, const WebRtc_Word16 *nearend, nBlocks10ms = nFrames / aecpc->aec->mult; if (aecpc->ECstartup) { - memcpy(out, nearend, sizeof(short) * nrOfSamples); + if (nearend != out) { + // Only needed if they don't already point to the same place. + memcpy(out, nearend, sizeof(short) * nrOfSamples); + } nmbrOfFilledBuffers = WebRtcApm_get_buffer_size(aecpc->farendBuf) / FRAME_LEN; // The AEC is in the start up mode diff --git a/src/modules/audio_processing/agc/main/source/analog_agc.c b/src/modules/audio_processing/agc/main/source/analog_agc.c index f7bd566d88..0c2ccee4f3 100644 --- a/src/modules/audio_processing/agc/main/source/analog_agc.c +++ b/src/modules/audio_processing/agc/main/source/analog_agc.c @@ -1317,10 +1317,19 @@ int WebRtcAgc_Process(void *agcInst, const WebRtc_Word16 *in_near, *outMicLevel = inMicLevel; inMicLevelTmp = inMicLevel; - memcpy(out, in_near, samples * sizeof(WebRtc_Word16)); + // TODO(andrew): clearly we don't need input and output pointers... + // Change the interface to take a shared input/output. + if (in_near != out) + { + // Only needed if they don't already point to the same place. + memcpy(out, in_near, samples * sizeof(WebRtc_Word16)); + } if (stt->fs == 32000) { - memcpy(out_H, in_near_H, samples * sizeof(WebRtc_Word16)); + if (in_near_H != out_H) + { + memcpy(out_H, in_near_H, samples * sizeof(WebRtc_Word16)); + } } #ifdef AGC_DEBUG//test log diff --git a/src/modules/audio_processing/agc/main/source/digital_agc.c b/src/modules/audio_processing/agc/main/source/digital_agc.c index 2966586e48..4fd21e21a4 100644 --- a/src/modules/audio_processing/agc/main/source/digital_agc.c +++ b/src/modules/audio_processing/agc/main/source/digital_agc.c @@ -327,10 +327,18 @@ WebRtc_Word32 WebRtcAgc_ProcessDigital(DigitalAgc_t *stt, const WebRtc_Word16 *i return -1; } - memcpy(out, in_near, 10 * L * sizeof(WebRtc_Word16)); + // TODO(andrew): again, we don't need input and output pointers... + if (in_near != out) + { + // Only needed if they don't already point to the same place. + memcpy(out, in_near, 10 * L * sizeof(WebRtc_Word16)); + } if (FS == 32000) { - memcpy(out_H, in_near_H, 10 * L * sizeof(WebRtc_Word16)); + if (in_near_H != out_H) + { + memcpy(out_H, in_near_H, 10 * L * sizeof(WebRtc_Word16)); + } } // VAD for near end logratio = WebRtcAgc_ProcessVad(&stt->vadNearend, out, L * 10); diff --git a/src/modules/audio_processing/main/test/process_test/process_test.cc b/src/modules/audio_processing/main/test/process_test/process_test.cc index 51c48e8c98..f6b6d69899 100644 --- a/src/modules/audio_processing/main/test/process_test/process_test.cc +++ b/src/modules/audio_processing/main/test/process_test/process_test.cc @@ -891,5 +891,7 @@ int main(int argc, char* argv[]) { void_main(argc, argv); + // Optional, but removes memory leak noise from Valgrind. + google::protobuf::ShutdownProtobufLibrary(); return 0; } diff --git a/src/modules/audio_processing/main/test/unit_test/unit_test.cc b/src/modules/audio_processing/main/test/unit_test/unit_test.cc index 1ee8336c4c..0563fdfe49 100644 --- a/src/modules/audio_processing/main/test/unit_test/unit_test.cc +++ b/src/modules/audio_processing/main/test/unit_test/unit_test.cc @@ -638,8 +638,6 @@ TEST_F(ApmTest, Process) { if (write_output_data) { WriteMessageLiteToFile(kOutputFileName, output_data); } - - google::protobuf::ShutdownProtobufLibrary(); } TEST_F(ApmTest, EchoCancellation) { @@ -1002,5 +1000,9 @@ int main(int argc, char** argv) { } } - return RUN_ALL_TESTS(); + int err = RUN_ALL_TESTS(); + + // Optional, but removes memory leak noise from Valgrind. + google::protobuf::ShutdownProtobufLibrary(); + return err; }