/* * Copyright (c) 2020 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef API_AUDIO_AUDIO_FRAME_PROCESSOR_H_ #define API_AUDIO_AUDIO_FRAME_PROCESSOR_H_ #include #include namespace webrtc { class AudioFrame; // If passed into PeerConnectionFactory, will be used for additional // processing of captured audio frames, performed before encoding. // Implementations must be thread-safe. class AudioFrameProcessor { public: using OnAudioFrameCallback = std::function)>; virtual ~AudioFrameProcessor() = default; // Processes the frame received from WebRTC, is called by WebRTC off the // realtime audio capturing path. AudioFrameProcessor must reply with // processed frames by calling `sink_callback` if it was provided in SetSink() // call. `sink_callback` can be called in the context of Process(). virtual void Process(std::unique_ptr frame) = 0; // Atomically replaces the current sink with the new one. Before the // first call to this function, or if the provided `sink_callback` is nullptr, // processed frames are simply discarded. virtual void SetSink(OnAudioFrameCallback sink_callback) = 0; }; } // namespace webrtc #endif // API_AUDIO_AUDIO_FRAME_PROCESSOR_H_