// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef MEDIA_AUDIO_AUDIO_DEBUG_RECORDING_MANAGER_H_ #define MEDIA_AUDIO_AUDIO_DEBUG_RECORDING_MANAGER_H_ #include <map> #include <memory> #include <utility> #include "base/functional/callback.h" #include "base/gtest_prod_util.h" #include "base/memory/weak_ptr.h" #include "base/threading/thread_checker.h" #include "media/audio/audio_debug_recording_helper.h" #include "media/base/audio_parameters.h" #include "media/base/media_export.h" namespace base { class SingleThreadTaskRunner; } namespace media { // A manager for audio debug recording that handles registration of data // sources and hands them a recorder (AudioDebugRecordingHelper) to feed data // to. The recorder will unregister with the manager automatically when deleted. // When debug recording is enabled, it is enabled on all recorders and // constructs a unique file name for each recorder by using a running ID. // A somewhat simplified diagram of the the debug recording infrastructure, // interfaces omitted: // // AudioDebugFileWriter // ^ // | owns // owns | owns // OnMoreDataConverter ----> AudioDebugRecordingHelper <--------- // ^ ^ | // | owns several | raw pointer to several | // | AudioDebugRecordingManager | // AudioOutputResampler ^ | // ^ | AudioInputStreamDataInterceptor // | | ^ // | owns several | owns owns several | // ------------------ AudioManagerBase ---------------- // // AudioDebugRecordingManager is created when // AudioManager::InitializeDebugRecording() is called. That is done in // AudioManager::Create() in WebRTC enabled builds, but not in non WebRTC // enabled builds. If AudioDebugRecordingManager is not created, neither is // AudioDebugRecordingHelper or AudioDebugFileWriter. In this case the pointers // to AudioDebugRecordingManager and AudioDebugRecordingHelper are null. class MEDIA_EXPORT AudioDebugRecordingManager { … }; } // namespace media #endif // MEDIA_AUDIO_AUDIO_DEBUG_RECORDING_MANAGER_H_