1c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg/*
2c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved.
3c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg *
4c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg *  Use of this source code is governed by a BSD-style license
5c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg *  that can be found in the LICENSE file in the root of the source
6c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg *  tree. An additional intellectual property rights grant can be found
7c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg *  in the file PATENTS.  All contributing project authors may
8c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg *  be found in the AUTHORS file in the root of the source tree.
9c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg */
10c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
11c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg#ifndef WEBRTC_AUDIO_AUDIO_SEND_STREAM_H_
12c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg#define WEBRTC_AUDIO_AUDIO_SEND_STREAM_H_
13c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
14c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg#include "webrtc/audio_send_stream.h"
15566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg#include "webrtc/audio_state.h"
1685a0496b8c4ac01da7c716ea7950093659864c8esolenberg#include "webrtc/base/thread_checker.h"
1713725089ef91f932b37b2447c3f05d9cd9f89984solenberg#include "webrtc/base/scoped_ptr.h"
18c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
19c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenbergnamespace webrtc {
20b86d4e4a8dec1eb1b801244a2a97cda66f561d8eStefan Holmerclass CongestionController;
213a94154035fa16e4efd91125311f076b547c38b9solenbergclass VoiceEngine;
223a94154035fa16e4efd91125311f076b547c38b9solenberg
2313725089ef91f932b37b2447c3f05d9cd9f89984solenbergnamespace voe {
2413725089ef91f932b37b2447c3f05d9cd9f89984solenbergclass ChannelProxy;
2513725089ef91f932b37b2447c3f05d9cd9f89984solenberg}  // namespace voe
26c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
2713725089ef91f932b37b2447c3f05d9cd9f89984solenbergnamespace internal {
2885a0496b8c4ac01da7c716ea7950093659864c8esolenbergclass AudioSendStream final : public webrtc::AudioSendStream {
29c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg public:
3085a0496b8c4ac01da7c716ea7950093659864c8esolenberg  AudioSendStream(const webrtc::AudioSendStream::Config& config,
31b86d4e4a8dec1eb1b801244a2a97cda66f561d8eStefan Holmer                  const rtc::scoped_refptr<webrtc::AudioState>& audio_state,
32b86d4e4a8dec1eb1b801244a2a97cda66f561d8eStefan Holmer                  CongestionController* congestion_controller);
33c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  ~AudioSendStream() override;
34c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
35c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  // webrtc::SendStream implementation.
36c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  void Start() override;
37c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  void Stop() override;
38c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  void SignalNetworkState(NetworkState state) override;
39c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  bool DeliverRtcp(const uint8_t* packet, size_t length) override;
40c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
41c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  // webrtc::AudioSendStream implementation.
42b572768efbc1e52b97a5ad98932c667956aba4b8Fredrik Solenberg  bool SendTelephoneEvent(int payload_type, uint8_t event,
43b572768efbc1e52b97a5ad98932c667956aba4b8Fredrik Solenberg                          uint32_t duration_ms) override;
44c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  webrtc::AudioSendStream::Stats GetStats() const override;
45c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
4685a0496b8c4ac01da7c716ea7950093659864c8esolenberg  const webrtc::AudioSendStream::Config& config() const;
47c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
48c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg private:
493a94154035fa16e4efd91125311f076b547c38b9solenberg  VoiceEngine* voice_engine() const;
503a94154035fa16e4efd91125311f076b547c38b9solenberg
5185a0496b8c4ac01da7c716ea7950093659864c8esolenberg  rtc::ThreadChecker thread_checker_;
52c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg  const webrtc::AudioSendStream::Config config_;
53566ef247b9779f6c9d0e7ec9eea6b037f4682c53solenberg  rtc::scoped_refptr<webrtc::AudioState> audio_state_;
5413725089ef91f932b37b2447c3f05d9cd9f89984solenberg  rtc::scoped_ptr<voe::ChannelProxy> channel_proxy_;
5585a0496b8c4ac01da7c716ea7950093659864c8esolenberg
5685a0496b8c4ac01da7c716ea7950093659864c8esolenberg  RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AudioSendStream);
57c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg};
58c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg}  // namespace internal
59c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg}  // namespace webrtc
60c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg
61c7a8b08a7cd8d8f37d7f5fb9930d0cdc74baba35solenberg#endif  // WEBRTC_AUDIO_AUDIO_SEND_STREAM_H_
62