1/*
2 *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#ifndef WEBRTC_VIDEO_VIDEO_SEND_STREAM_H_
12#define WEBRTC_VIDEO_VIDEO_SEND_STREAM_H_
13
14#include <map>
15#include <vector>
16
17#include "webrtc/call.h"
18#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
19#include "webrtc/modules/rtp_rtcp/interface/rtp_rtcp_defines.h"
20#include "webrtc/video/encoded_frame_callback_adapter.h"
21#include "webrtc/video/send_statistics_proxy.h"
22#include "webrtc/video/transport_adapter.h"
23#include "webrtc/video_receive_stream.h"
24#include "webrtc/video_send_stream.h"
25#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
26
27namespace webrtc {
28
29class CpuOveruseObserver;
30class VideoEngine;
31class ViEBase;
32class ViECapture;
33class ViECodec;
34class ViEExternalCapture;
35class ViEExternalCodec;
36class ViEImageProcess;
37class ViENetwork;
38class ViERTP_RTCP;
39
40namespace internal {
41
42class VideoSendStream : public webrtc::VideoSendStream,
43                        public VideoSendStreamInput {
44 public:
45  VideoSendStream(newapi::Transport* transport,
46                  CpuOveruseObserver* overuse_observer,
47                  webrtc::VideoEngine* video_engine,
48                  const VideoSendStream::Config& config,
49                  const VideoEncoderConfig& encoder_config,
50                  const std::map<uint32_t, RtpState>& suspended_ssrcs,
51                  int base_channel,
52                  int start_bitrate);
53
54  virtual ~VideoSendStream();
55
56  virtual void Start() OVERRIDE;
57  virtual void Stop() OVERRIDE;
58
59  virtual bool ReconfigureVideoEncoder(
60      const VideoEncoderConfig& config) OVERRIDE;
61
62  virtual Stats GetStats() const OVERRIDE;
63
64  bool DeliverRtcp(const uint8_t* packet, size_t length);
65
66  // From VideoSendStreamInput.
67  virtual void SwapFrame(I420VideoFrame* frame) OVERRIDE;
68
69  // From webrtc::VideoSendStream.
70  virtual VideoSendStreamInput* Input() OVERRIDE;
71
72  typedef std::map<uint32_t, RtpState> RtpStateMap;
73  RtpStateMap GetRtpStates() const;
74
75  void SignalNetworkState(Call::NetworkState state);
76
77 private:
78  void ConfigureSsrcs();
79  TransportAdapter transport_adapter_;
80  EncodedFrameCallbackAdapter encoded_frame_proxy_;
81  const VideoSendStream::Config config_;
82  const int start_bitrate_bps_;
83  std::map<uint32_t, RtpState> suspended_ssrcs_;
84
85  ViEBase* video_engine_base_;
86  ViECapture* capture_;
87  ViECodec* codec_;
88  ViEExternalCapture* external_capture_;
89  ViEExternalCodec* external_codec_;
90  ViENetwork* network_;
91  ViERTP_RTCP* rtp_rtcp_;
92  ViEImageProcess* image_process_;
93
94  int channel_;
95  int capture_id_;
96
97  SendStatisticsProxy stats_proxy_;
98};
99}  // namespace internal
100}  // namespace webrtc
101
102#endif  // WEBRTC_VIDEO_VIDEO_SEND_STREAM_H_
103