123fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg/* 223fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 323fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg * 423fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg * Use of this source code is governed by a BSD-style license 523fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg * that can be found in the LICENSE file in the root of the source 623fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg * tree. An additional intellectual property rights grant can be found 723fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg * in the file PATENTS. All contributing project authors may 823fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg * be found in the AUTHORS file in the root of the source tree. 923fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg */ 1023fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 115c389d3e09646c0e2ed76d5ccb37a3419a09eb6aPeter Boström#ifndef WEBRTC_AUDIO_AUDIO_RECEIVE_STREAM_H_ 125c389d3e09646c0e2ed76d5ccb37a3419a09eb6aPeter Boström#define WEBRTC_AUDIO_AUDIO_RECEIVE_STREAM_H_ 1323fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 1423fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg#include "webrtc/audio_receive_stream.h" 15566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg#include "webrtc/audio_state.h" 164f4ec0a9270a8cefadfa12e9fa3b979b58b15392Fredrik Solenberg#include "webrtc/base/thread_checker.h" 17ff761fba8274d93bd73e76c8b8a1f2d0776dd840Henrik Kjellander#include "webrtc/modules/rtp_rtcp/include/rtp_header_parser.h" 1823fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 1923fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenbergnamespace webrtc { 203842c5c7f73639527e653f41c65334245d2317a1Stefan Holmerclass CongestionController; 2123fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenbergclass RemoteBitrateEstimator; 2223fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 2313725089ef91f932b37b2447c3f05d9cd9f89984solenbergnamespace voe { 2413725089ef91f932b37b2447c3f05d9cd9f89984solenbergclass ChannelProxy; 2513725089ef91f932b37b2447c3f05d9cd9f89984solenberg} // namespace voe 2623fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 2713725089ef91f932b37b2447c3f05d9cd9f89984solenbergnamespace internal { 28f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommi 2985a0496b8c4ac01da7c716ea7950093659864c8esolenbergclass AudioReceiveStream final : public webrtc::AudioReceiveStream { 3023fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg public: 313842c5c7f73639527e653f41c65334245d2317a1Stefan Holmer AudioReceiveStream(CongestionController* congestion_controller, 324f4ec0a9270a8cefadfa12e9fa3b979b58b15392Fredrik Solenberg const webrtc::AudioReceiveStream::Config& config, 33566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg const rtc::scoped_refptr<webrtc::AudioState>& audio_state); 34a2f30deea342896ee40cc4d90567f091efbe0fc9pbos ~AudioReceiveStream() override; 3523fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 36cd6702282a49448adda470934f4bd9e6181cab22Jelena Marusic // webrtc::ReceiveStream implementation. 37cd6702282a49448adda470934f4bd9e6181cab22Jelena Marusic void Start() override; 38cd6702282a49448adda470934f4bd9e6181cab22Jelena Marusic void Stop() override; 39cd6702282a49448adda470934f4bd9e6181cab22Jelena Marusic void SignalNetworkState(NetworkState state) override; 40cd6702282a49448adda470934f4bd9e6181cab22Jelena Marusic bool DeliverRtcp(const uint8_t* packet, size_t length) override; 4168786d20400f1f3744ad83549325665c18ea9e5bstefan bool DeliverRtp(const uint8_t* packet, 4268786d20400f1f3744ad83549325665c18ea9e5bstefan size_t length, 4368786d20400f1f3744ad83549325665c18ea9e5bstefan const PacketTime& packet_time) override; 44cd6702282a49448adda470934f4bd9e6181cab22Jelena Marusic 45cd6702282a49448adda470934f4bd9e6181cab22Jelena Marusic // webrtc::AudioReceiveStream implementation. 4604f4931ef06273c2873e7816ed1f568d445117b8Fredrik Solenberg webrtc::AudioReceiveStream::Stats GetStats() const override; 4704f4931ef06273c2873e7816ed1f568d445117b8Fredrik Solenberg 482d110be77f14cab0bb51efe8b61d9c7a967d04cbdeadbeef void SetSink(rtc::scoped_ptr<AudioSinkInterface> sink) override; 49f888bb58da04c5095759b5ec7ce2e1fa2cd414fdTommi 50a2f30deea342896ee40cc4d90567f091efbe0fc9pbos const webrtc::AudioReceiveStream::Config& config() const; 5123fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 5223fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg private: 537add0584390dcfb236165a6472ede6c2a94eaeedsolenberg VoiceEngine* voice_engine() const; 547add0584390dcfb236165a6472ede6c2a94eaeedsolenberg 554f4ec0a9270a8cefadfa12e9fa3b979b58b15392Fredrik Solenberg rtc::ThreadChecker thread_checker_; 563842c5c7f73639527e653f41c65334245d2317a1Stefan Holmer RemoteBitrateEstimator* remote_bitrate_estimator_ = nullptr; 5723fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg const webrtc::AudioReceiveStream::Config config_; 58566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg rtc::scoped_refptr<webrtc::AudioState> audio_state_; 5923fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg rtc::scoped_ptr<RtpHeaderParser> rtp_header_parser_; 6013725089ef91f932b37b2447c3f05d9cd9f89984solenberg rtc::scoped_ptr<voe::ChannelProxy> channel_proxy_; 6185a0496b8c4ac01da7c716ea7950093659864c8esolenberg 6285a0496b8c4ac01da7c716ea7950093659864c8esolenberg RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AudioReceiveStream); 6323fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg}; 6423fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg} // namespace internal 6523fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg} // namespace webrtc 6623fba1ffa0079f70744a83bcf4e85501dc226013Fredrik Solenberg 675c389d3e09646c0e2ed76d5ccb37a3419a09eb6aPeter Boström#endif // WEBRTC_AUDIO_AUDIO_RECEIVE_STREAM_H_ 68