(this CL is based on the work by Taylor and Steve in https://webrtc-review.googlesource.com/c/src/+/10201) This SetAudioPlayout method lets applications disable audio playout while still processing incoming audio data and generating statistics on the received audio. This may be useful if the application wants to set up media flows as soon as possible, but isn't ready to play audio yet. Currently, native applications don't have any API point to control this, unless they completely implement their own AudioDeviceModule. The SetAudioRecording works in a similar fashion but for the recorded audio. One difference is that calling SetAudioRecording(false) does not keep any audio processing alive. TBR=solenberg Bug: webrtc:7313 Change-Id: I0aa075f6bfef9818f1080f85a8ff7842fb0750aa Reviewed-on: https://webrtc-review.googlesource.com/16180 Reviewed-by: Henrik Andreassson <henrika@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Commit-Queue: Henrik Andreassson <henrika@webrtc.org> Cr-Commit-Position: refs/heads/master@{#20499}
116 lines
4.3 KiB
C++
116 lines
4.3 KiB
C++
/*
|
|
* Copyright (c) 2012 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 VOICE_ENGINE_VOE_BASE_IMPL_H_
|
|
#define VOICE_ENGINE_VOE_BASE_IMPL_H_
|
|
|
|
#include "voice_engine/include/voe_base.h"
|
|
|
|
#include "modules/include/module_common_types.h"
|
|
#include "rtc_base/criticalsection.h"
|
|
#include "voice_engine/shared_data.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class ProcessThread;
|
|
|
|
class VoEBaseImpl : public VoEBase,
|
|
public AudioTransport {
|
|
public:
|
|
int Init(
|
|
AudioDeviceModule* external_adm,
|
|
AudioProcessing* audio_processing,
|
|
const rtc::scoped_refptr<AudioDecoderFactory>& decoder_factory) override;
|
|
AudioDeviceModule* audio_device_module() override {
|
|
return shared_->audio_device();
|
|
}
|
|
voe::TransmitMixer* transmit_mixer() override {
|
|
return shared_->transmit_mixer();
|
|
}
|
|
int Terminate() override;
|
|
|
|
int CreateChannel() override;
|
|
int CreateChannel(const ChannelConfig& config) override;
|
|
int DeleteChannel(int channel) override;
|
|
|
|
int StartPlayout(int channel) override;
|
|
int StartSend(int channel) override;
|
|
int StopPlayout(int channel) override;
|
|
int StopSend(int channel) override;
|
|
|
|
int SetPlayout(bool enabled) override;
|
|
int SetRecording(bool enabled) override;
|
|
|
|
AudioTransport* audio_transport() override { return this; }
|
|
|
|
// AudioTransport
|
|
int32_t RecordedDataIsAvailable(const void* audio_data,
|
|
const size_t number_of_frames,
|
|
const size_t bytes_per_sample,
|
|
const size_t number_of_channels,
|
|
const uint32_t sample_rate,
|
|
const uint32_t audio_delay_milliseconds,
|
|
const int32_t clock_drift,
|
|
const uint32_t volume,
|
|
const bool key_pressed,
|
|
uint32_t& new_mic_volume) override;
|
|
RTC_DEPRECATED int32_t NeedMorePlayData(const size_t nSamples,
|
|
const size_t nBytesPerSample,
|
|
const size_t nChannels,
|
|
const uint32_t samplesPerSec,
|
|
void* audioSamples,
|
|
size_t& nSamplesOut,
|
|
int64_t* elapsed_time_ms,
|
|
int64_t* ntp_time_ms) override;
|
|
void PushCaptureData(int voe_channel,
|
|
const void* audio_data,
|
|
int bits_per_sample,
|
|
int sample_rate,
|
|
size_t number_of_channels,
|
|
size_t number_of_frames) override;
|
|
RTC_DEPRECATED void PullRenderData(int bits_per_sample,
|
|
int sample_rate,
|
|
size_t number_of_channels,
|
|
size_t number_of_frames,
|
|
void* audio_data,
|
|
int64_t* elapsed_time_ms,
|
|
int64_t* ntp_time_ms) override;
|
|
|
|
protected:
|
|
VoEBaseImpl(voe::SharedData* shared);
|
|
~VoEBaseImpl() override;
|
|
|
|
private:
|
|
int32_t StartPlayout();
|
|
int32_t StopPlayout();
|
|
int32_t StartSend();
|
|
int32_t StopSend();
|
|
int32_t TerminateInternal();
|
|
|
|
void GetPlayoutData(int sample_rate, size_t number_of_channels,
|
|
size_t number_of_frames, bool feed_data_to_apm,
|
|
void* audio_data, int64_t* elapsed_time_ms,
|
|
int64_t* ntp_time_ms);
|
|
|
|
// Initialize channel by setting Engine Information then initializing
|
|
// channel.
|
|
int InitializeChannel(voe::ChannelOwner* channel_owner);
|
|
rtc::scoped_refptr<AudioDecoderFactory> decoder_factory_;
|
|
|
|
AudioFrame audioFrame_;
|
|
voe::SharedData* shared_;
|
|
bool playout_enabled_ = true;
|
|
bool recording_enabled_ = true;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // VOICE_ENGINE_VOE_BASE_IMPL_H_
|