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