This reverts commit 8fa7151e4bbad40fec1f964fe0c003b8787bb78a. Reason for revert: Speculative revert to fix roll of webrtc into chrome. Right now tests related to RTCRtpReceiver failing and looks like it is main candidate, who can affect that behavior. Original change's description: > Replace the implementation of `GetContributingSources()` on the audio side. > > This change replaces the `ContributingSources`-implementation of `GetContributingSources()` and `GetSynchronizationSources()` on the audio side with the spec-compliant `SourceTracker`-implementation. > > The most noticeable impact is that the per-frame dictionaries are now updated when frames are delivered to the RTCRtpReceiver's MediaStreamTrack rather than when RTP packets are received on the network. > > This change is almost identical to the previous video side change at: https://webrtc-review.googlesource.com/c/src/+/143177 > > Bug: webrtc:10545 > Change-Id: Ife7f08ee8ca1346099b7466837a3756947085fc5 > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144422 > Reviewed-by: Oskar Sundbom <ossu@webrtc.org> > Commit-Queue: Chen Xing <chxg@google.com> > Cr-Commit-Position: refs/heads/master@{#28459} TBR=ossu@webrtc.org,chxg@google.com Change-Id: I5c631d4dcfb39601055ffce9b104f45eea871fd3 No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: webrtc:10545 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/144562 Reviewed-by: Artem Titov <titovartem@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28478}
122 lines
4.5 KiB
C++
122 lines
4.5 KiB
C++
/*
|
|
* Copyright (c) 2015 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 AUDIO_AUDIO_RECEIVE_STREAM_H_
|
|
#define AUDIO_AUDIO_RECEIVE_STREAM_H_
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "api/audio/audio_mixer.h"
|
|
#include "api/rtp_headers.h"
|
|
#include "audio/audio_state.h"
|
|
#include "call/audio_receive_stream.h"
|
|
#include "call/syncable.h"
|
|
#include "rtc_base/constructor_magic.h"
|
|
#include "rtc_base/thread_checker.h"
|
|
#include "system_wrappers/include/clock.h"
|
|
|
|
namespace webrtc {
|
|
class PacketRouter;
|
|
class ProcessThread;
|
|
class RtcEventLog;
|
|
class RtpPacketReceived;
|
|
class RtpStreamReceiverControllerInterface;
|
|
class RtpStreamReceiverInterface;
|
|
|
|
namespace voe {
|
|
class ChannelReceiveInterface;
|
|
} // namespace voe
|
|
|
|
namespace internal {
|
|
class AudioSendStream;
|
|
|
|
class AudioReceiveStream final : public webrtc::AudioReceiveStream,
|
|
public AudioMixer::Source,
|
|
public Syncable {
|
|
public:
|
|
AudioReceiveStream(Clock* clock,
|
|
RtpStreamReceiverControllerInterface* receiver_controller,
|
|
PacketRouter* packet_router,
|
|
ProcessThread* module_process_thread,
|
|
const webrtc::AudioReceiveStream::Config& config,
|
|
const rtc::scoped_refptr<webrtc::AudioState>& audio_state,
|
|
webrtc::RtcEventLog* event_log);
|
|
// For unit tests, which need to supply a mock channel receive.
|
|
AudioReceiveStream(
|
|
Clock* clock,
|
|
RtpStreamReceiverControllerInterface* receiver_controller,
|
|
PacketRouter* packet_router,
|
|
const webrtc::AudioReceiveStream::Config& config,
|
|
const rtc::scoped_refptr<webrtc::AudioState>& audio_state,
|
|
webrtc::RtcEventLog* event_log,
|
|
std::unique_ptr<voe::ChannelReceiveInterface> channel_receive);
|
|
~AudioReceiveStream() override;
|
|
|
|
// webrtc::AudioReceiveStream implementation.
|
|
void Reconfigure(const webrtc::AudioReceiveStream::Config& config) override;
|
|
void Start() override;
|
|
void Stop() override;
|
|
webrtc::AudioReceiveStream::Stats GetStats() const override;
|
|
void SetSink(AudioSinkInterface* sink) override;
|
|
void SetGain(float gain) override;
|
|
bool SetBaseMinimumPlayoutDelayMs(int delay_ms) override;
|
|
int GetBaseMinimumPlayoutDelayMs() const override;
|
|
std::vector<webrtc::RtpSource> GetSources() const override;
|
|
|
|
// TODO(nisse): We don't formally implement RtpPacketSinkInterface, and this
|
|
// method shouldn't be needed. But it's currently used by the
|
|
// AudioReceiveStreamTest.ReceiveRtpPacket unittest. Figure out if that test
|
|
// shuld be refactored or deleted, and then delete this method.
|
|
void OnRtpPacket(const RtpPacketReceived& packet);
|
|
|
|
// AudioMixer::Source
|
|
AudioFrameInfo GetAudioFrameWithInfo(int sample_rate_hz,
|
|
AudioFrame* audio_frame) override;
|
|
int Ssrc() const override;
|
|
int PreferredSampleRate() const override;
|
|
|
|
// Syncable
|
|
int id() const override;
|
|
absl::optional<Syncable::Info> GetInfo() const override;
|
|
uint32_t GetPlayoutTimestamp() const override;
|
|
void SetMinimumPlayoutDelay(int delay_ms) override;
|
|
|
|
void AssociateSendStream(AudioSendStream* send_stream);
|
|
void SignalNetworkState(NetworkState state);
|
|
void DeliverRtcp(const uint8_t* packet, size_t length);
|
|
const webrtc::AudioReceiveStream::Config& config() const;
|
|
const AudioSendStream* GetAssociatedSendStreamForTesting() const;
|
|
|
|
private:
|
|
static void ConfigureStream(AudioReceiveStream* stream,
|
|
const Config& new_config,
|
|
bool first_time);
|
|
|
|
AudioState* audio_state() const;
|
|
|
|
rtc::ThreadChecker worker_thread_checker_;
|
|
rtc::ThreadChecker module_process_thread_checker_;
|
|
webrtc::AudioReceiveStream::Config config_;
|
|
rtc::scoped_refptr<webrtc::AudioState> audio_state_;
|
|
const std::unique_ptr<voe::ChannelReceiveInterface> channel_receive_;
|
|
AudioSendStream* associated_send_stream_ = nullptr;
|
|
|
|
bool playing_ RTC_GUARDED_BY(worker_thread_checker_) = false;
|
|
|
|
std::unique_ptr<RtpStreamReceiverInterface> rtp_stream_receiver_;
|
|
|
|
RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AudioReceiveStream);
|
|
};
|
|
} // namespace internal
|
|
} // namespace webrtc
|
|
|
|
#endif // AUDIO_AUDIO_RECEIVE_STREAM_H_
|