Add a gyp variable for AEC debug dumps.

TEST=process_test.cc

Review URL: http://webrtc-codereview.appspot.com/276012

git-svn-id: http://webrtc.googlecode.com/svn/trunk@987 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
andrew@webrtc.org 2011-11-22 00:51:41 +00:00
parent a249f35203
commit 8594f7688b
4 changed files with 45 additions and 53 deletions

View File

@ -11,6 +11,10 @@
{
'target_name': 'aec',
'type': '<(library)',
'variables': {
# Outputs some low-level debug files.
'aec_debug_dump%': 0,
},
'dependencies': [
'<(webrtc_root)/common_audio/common_audio.gyp:signal_processing',
'apm_util'
@ -35,6 +39,11 @@
'resampler.h',
'resampler.c',
],
'conditions': [
['aec_debug_dump==1', {
'defines': [ 'WEBRTC_AEC_DEBUG_DUMP', ],
}],
],
},
],
}

View File

@ -592,9 +592,9 @@ static void ProcessBlock(aec_t *aec, const short *farend,
const float ramp = 1.0002f;
const float gInitNoise[2] = {0.999f, 0.001f};
#ifdef AEC_DEBUG
fwrite(farend, sizeof(short), PART_LEN, aec->farFile);
fwrite(nearend, sizeof(short), PART_LEN, aec->nearFile);
#ifdef WEBRTC_AEC_DEBUG_DUMP
fwrite(farend, sizeof(int16_t), PART_LEN, aec->farFile);
fwrite(nearend, sizeof(int16_t), PART_LEN, aec->nearFile);
#endif
memset(dH, 0, sizeof(dH));
@ -760,13 +760,6 @@ static void ProcessBlock(aec_t *aec, const short *farend,
WebRtcAec_FilterAdaptation(aec, fft, ef);
NonLinearProcessing(aec, output, outputH);
#ifdef AEC_DEBUG
for (i = 0; i < PART_LEN; i++) {
eInt16[i] = (short)WEBRTC_SPL_SAT(WEBRTC_SPL_WORD16_MAX, e[i],
WEBRTC_SPL_WORD16_MIN);
}
#endif
if (aec->metricsMode == 1) {
for (i = 0; i < PART_LEN; i++) {
eInt16[i] = (short)WEBRTC_SPL_SAT(WEBRTC_SPL_WORD16_MAX, e[i],
@ -781,9 +774,14 @@ static void ProcessBlock(aec_t *aec, const short *farend,
UpdateMetrics(aec);
}
#ifdef AEC_DEBUG
fwrite(eInt16, sizeof(short), PART_LEN, aec->outLpFile);
fwrite(output, sizeof(short), PART_LEN, aec->outFile);
#ifdef WEBRTC_AEC_DEBUG_DUMP
for (i = 0; i < PART_LEN; i++) {
eInt16[i] = (int16_t)WEBRTC_SPL_SAT(WEBRTC_SPL_WORD16_MAX, e[i],
WEBRTC_SPL_WORD16_MIN);
}
fwrite(eInt16, sizeof(int16_t), PART_LEN, aec->outLinearFile);
fwrite(output, sizeof(int16_t), PART_LEN, aec->outFile);
#endif
}

View File

@ -20,8 +20,6 @@
#include "signal_processing_library.h"
#include "typedefs.h"
//#define AEC_DEBUG // for recording files
#define FRAME_LEN 80
#define PART_LEN 64 // Length of partition
#define PART_LEN1 (PART_LEN + 1) // Unique fft coefficients
@ -147,11 +145,11 @@ typedef struct {
int delay_logging_enabled;
void* delay_estimator;
#ifdef AEC_DEBUG
#ifdef WEBRTC_AEC_DEBUG_DUMP
FILE *farFile;
FILE *nearFile;
FILE *outFile;
FILE *outLpFile;
FILE *outLinearFile;
#endif
} aec_t;

View File

@ -14,7 +14,7 @@
#include "echo_cancellation.h"
#include <math.h>
#ifdef AEC_DEBUG
#ifdef WEBRTC_AEC_DEBUG_DUMP
#include <stdio.h>
#endif
#include <stdlib.h>
@ -71,13 +71,11 @@ typedef struct {
int delayChange;
short lastDelayDiff;
#ifdef AEC_DEBUG
#ifdef WEBRTC_AEC_DEBUG_DUMP
FILE *bufFile;
FILE *delayFile;
FILE *skewFile;
FILE *preCompFile;
FILE *postCompFile;
#endif // AEC_DEBUG
#endif
// Structures
void *farendBuf;
@ -134,18 +132,15 @@ WebRtc_Word32 WebRtcAec_Create(void **aecInst)
aecpc->initFlag = 0;
aecpc->lastError = 0;
#ifdef AEC_DEBUG
aecpc->aec->farFile = fopen("aecFar.pcm","wb");
aecpc->aec->nearFile = fopen("aecNear.pcm","wb");
aecpc->aec->outFile = fopen("aecOut.pcm","wb");
aecpc->aec->outLpFile = fopen("aecOutLp.pcm","wb");
aecpc->bufFile = fopen("aecBuf.dat", "wb");
aecpc->skewFile = fopen("aecSkew.dat", "wb");
aecpc->delayFile = fopen("aecDelay.dat", "wb");
aecpc->preCompFile = fopen("preComp.pcm", "wb");
aecpc->postCompFile = fopen("postComp.pcm", "wb");
#endif // AEC_DEBUG
#ifdef WEBRTC_AEC_DEBUG_DUMP
aecpc->aec->farFile = fopen("aec_far.pcm","wb");
aecpc->aec->nearFile = fopen("aec_near.pcm","wb");
aecpc->aec->outFile = fopen("aec_out.pcm","wb");
aecpc->aec->outLinearFile = fopen("aec_out_linear.pcm","wb");
aecpc->bufFile = fopen("aec_buf.dat", "wb");
aecpc->skewFile = fopen("aec_skew.dat", "wb");
aecpc->delayFile = fopen("aec_delay.dat", "wb");
#endif
return 0;
}
@ -158,18 +153,15 @@ WebRtc_Word32 WebRtcAec_Free(void *aecInst)
return -1;
}
#ifdef AEC_DEBUG
#ifdef WEBRTC_AEC_DEBUG_DUMP
fclose(aecpc->aec->farFile);
fclose(aecpc->aec->nearFile);
fclose(aecpc->aec->outFile);
fclose(aecpc->aec->outLpFile);
fclose(aecpc->aec->outLinearFile);
fclose(aecpc->bufFile);
fclose(aecpc->skewFile);
fclose(aecpc->delayFile);
fclose(aecpc->preCompFile);
fclose(aecpc->postCompFile);
#endif // AEC_DEBUG
#endif
WebRtcAec_FreeAec(aecpc->aec);
WebRtcApm_FreeBuffer(aecpc->farendBuf);
@ -311,11 +303,6 @@ WebRtc_Word32 WebRtcAec_BufferFarend(void *aecInst, const WebRtc_Word16 *farend,
skew,
newFarend);
WebRtcApm_WriteBuffer(aecpc->farendBuf, newFarend, newNrOfSamples);
#ifdef AEC_DEBUG
fwrite(farend, 2, nrOfSamples, aecpc->preCompFile);
fwrite(newFarend, 2, newNrOfSamples, aecpc->postCompFile);
#endif
}
else {
WebRtcApm_WriteBuffer(aecpc->farendBuf, farend, nrOfSamples);
@ -335,9 +322,6 @@ WebRtc_Word32 WebRtcAec_Process(void *aecInst, const WebRtc_Word16 *nearend,
short nmbrOfFilledBuffers;
short nBlocks10ms;
short nFrames;
#ifdef AEC_DEBUG
short msInAECBuf;
#endif
// Limit resampling to doubling/halving of signal
const float minSkewEst = -0.5f;
const float maxSkewEst = 1.0f;
@ -413,7 +397,7 @@ WebRtc_Word32 WebRtcAec_Process(void *aecInst, const WebRtc_Word16 *nearend,
aecpc->skew = maxSkewEst;
}
#ifdef AEC_DEBUG
#ifdef WEBRTC_AEC_DEBUG_DUMP
fwrite(&aecpc->skew, sizeof(aecpc->skew), 1, aecpc->skewFile);
#endif
}
@ -523,10 +507,13 @@ WebRtc_Word32 WebRtcAec_Process(void *aecInst, const WebRtc_Word16 *nearend,
}
}
#ifdef AEC_DEBUG
msInAECBuf = WebRtcApm_get_buffer_size(aecpc->farendBuf) / (sampMsNb*aecpc->aec->mult);
#ifdef WEBRTC_AEC_DEBUG_DUMP
{
short msInAECBuf = WebRtcApm_get_buffer_size(aecpc->farendBuf) /
(sampMsNb*aecpc->aec->mult);
fwrite(&msInAECBuf, 2, 1, aecpc->bufFile);
fwrite(&(aecpc->knownDelay), sizeof(aecpc->knownDelay), 1, aecpc->delayFile);
}
#endif
return retVal;