19e69abf85eeae8b6e23170c189cf5dd155771a51peah/*
29e69abf85eeae8b6e23170c189cf5dd155771a51peah *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
39e69abf85eeae8b6e23170c189cf5dd155771a51peah *
49e69abf85eeae8b6e23170c189cf5dd155771a51peah *  Use of this source code is governed by a BSD-style license
59e69abf85eeae8b6e23170c189cf5dd155771a51peah *  that can be found in the LICENSE file in the root of the source
69e69abf85eeae8b6e23170c189cf5dd155771a51peah *  tree. An additional intellectual property rights grant can be found
79e69abf85eeae8b6e23170c189cf5dd155771a51peah *  in the file PATENTS.  All contributing project authors may
89e69abf85eeae8b6e23170c189cf5dd155771a51peah *  be found in the AUTHORS file in the root of the source tree.
99e69abf85eeae8b6e23170c189cf5dd155771a51peah */
109e69abf85eeae8b6e23170c189cf5dd155771a51peah
119e69abf85eeae8b6e23170c189cf5dd155771a51peah#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AEC_AEC_LOGGING_
129e69abf85eeae8b6e23170c189cf5dd155771a51peah#define WEBRTC_MODULES_AUDIO_PROCESSING_AEC_AEC_LOGGING_
139e69abf85eeae8b6e23170c189cf5dd155771a51peah
149e69abf85eeae8b6e23170c189cf5dd155771a51peah#include <stdio.h>
159e69abf85eeae8b6e23170c189cf5dd155771a51peah
169e69abf85eeae8b6e23170c189cf5dd155771a51peah#include "webrtc/modules/audio_processing/logging/aec_logging_file_handling.h"
179e69abf85eeae8b6e23170c189cf5dd155771a51peah
189e69abf85eeae8b6e23170c189cf5dd155771a51peah// To enable AEC logging, invoke GYP with -Daec_debug_dump=1.
199e69abf85eeae8b6e23170c189cf5dd155771a51peah#ifdef WEBRTC_AEC_DEBUG_DUMP
209e69abf85eeae8b6e23170c189cf5dd155771a51peah// Dumps a wav data to file.
219e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_WAV_WRITE(file, data, num_samples) \
229e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                   \
239e69abf85eeae8b6e23170c189cf5dd155771a51peah    rtc_WavWriteSamples(file, data, num_samples);        \
249e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
259e69abf85eeae8b6e23170c189cf5dd155771a51peah
269e69abf85eeae8b6e23170c189cf5dd155771a51peah// (Re)opens a wav file for writing using the specified sample rate.
279e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_WAV_REOPEN(name, instance_index, process_rate,     \
289e69abf85eeae8b6e23170c189cf5dd155771a51peah                                 sample_rate, wav_file)                  \
299e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                                   \
309e69abf85eeae8b6e23170c189cf5dd155771a51peah    WebRtcAec_ReopenWav(name, instance_index, process_rate, sample_rate, \
319e69abf85eeae8b6e23170c189cf5dd155771a51peah                        wav_file);                                       \
329e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
339e69abf85eeae8b6e23170c189cf5dd155771a51peah
349e69abf85eeae8b6e23170c189cf5dd155771a51peah// Closes a wav file.
359e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_WAV_CLOSE(wav_file) \
369e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                    \
379e69abf85eeae8b6e23170c189cf5dd155771a51peah    rtc_WavClose(wav_file);               \
389e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
399e69abf85eeae8b6e23170c189cf5dd155771a51peah
409e69abf85eeae8b6e23170c189cf5dd155771a51peah// Dumps a raw data to file.
419e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_RAW_WRITE(file, data, data_size) \
429e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                 \
439e69abf85eeae8b6e23170c189cf5dd155771a51peah    (void) fwrite(data, data_size, 1, file);           \
449e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
459e69abf85eeae8b6e23170c189cf5dd155771a51peah
46de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah// Dumps a raw scalar int32 to file.
47de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah#define RTC_AEC_DEBUG_RAW_WRITE_SCALAR_INT32(file, data)             \
48de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  do {                                                               \
49de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah    int32_t value_to_store = data;                                   \
50de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah    (void) fwrite(&value_to_store, sizeof(value_to_store), 1, file); \
51de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  } while (0)
52de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah
53de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah// Dumps a raw scalar double to file.
54de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah#define RTC_AEC_DEBUG_RAW_WRITE_SCALAR_DOUBLE(file, data)            \
55de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  do {                                                               \
56de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah    double value_to_store = data;                                    \
57de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah    (void) fwrite(&value_to_store, sizeof(value_to_store), 1, file); \
58de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  } while (0)
59de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah
609e69abf85eeae8b6e23170c189cf5dd155771a51peah// Opens a raw data file for writing using the specified sample rate.
619e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_RAW_OPEN(name, instance_counter, file) \
629e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                       \
639e69abf85eeae8b6e23170c189cf5dd155771a51peah    WebRtcAec_RawFileOpen(name, instance_counter, file);     \
649e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
659e69abf85eeae8b6e23170c189cf5dd155771a51peah
669e69abf85eeae8b6e23170c189cf5dd155771a51peah// Closes a raw data file.
679e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_RAW_CLOSE(file) \
689e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                \
699e69abf85eeae8b6e23170c189cf5dd155771a51peah    fclose(file);                     \
709e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
719e69abf85eeae8b6e23170c189cf5dd155771a51peah
729e69abf85eeae8b6e23170c189cf5dd155771a51peah#else  // RTC_AEC_DEBUG_DUMP
739e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_WAV_WRITE(file, data, num_samples) \
749e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                   \
759e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
769e69abf85eeae8b6e23170c189cf5dd155771a51peah
779e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_WAV_REOPEN(wav_file, name, instance_index, process_rate, \
789e69abf85eeae8b6e23170c189cf5dd155771a51peah                                 sample_rate)                                  \
799e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                                         \
809e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
819e69abf85eeae8b6e23170c189cf5dd155771a51peah
829e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_WAV_CLOSE(wav_file) \
839e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                    \
849e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
859e69abf85eeae8b6e23170c189cf5dd155771a51peah
869e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_RAW_WRITE(file, data, data_size) \
879e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                 \
889e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
899e69abf85eeae8b6e23170c189cf5dd155771a51peah
90de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah#define RTC_AEC_DEBUG_RAW_WRITE_SCALAR_INT32(file, data) \
91de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  do {                                                   \
92de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  } while (0)
93de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah
94de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah#define RTC_AEC_DEBUG_RAW_WRITE_SCALAR_DOUBLE(file, data) \
95de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  do {                                                    \
96de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah  } while (0)
97de0fc58784f3f27503eef37ae7f50cae0bcbe30cpeah
989e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_RAW_OPEN(file, name, instance_counter) \
999e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                                       \
1009e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
1019e69abf85eeae8b6e23170c189cf5dd155771a51peah
1029e69abf85eeae8b6e23170c189cf5dd155771a51peah#define RTC_AEC_DEBUG_RAW_CLOSE(file) \
1039e69abf85eeae8b6e23170c189cf5dd155771a51peah  do {                                \
1049e69abf85eeae8b6e23170c189cf5dd155771a51peah  } while (0)
1059e69abf85eeae8b6e23170c189cf5dd155771a51peah
1069e69abf85eeae8b6e23170c189cf5dd155771a51peah#endif  // WEBRTC_AEC_DEBUG_DUMP
1079e69abf85eeae8b6e23170c189cf5dd155771a51peah
1089e69abf85eeae8b6e23170c189cf5dd155771a51peah#endif  // WEBRTC_MODULES_AUDIO_PROCESSING_AEC_AEC_LOGGING_
109