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 27 namespace webrtc { 28 29 class CpuOveruseObserver; 30 class VideoEngine; 31 class ViEBase; 32 class ViECapture; 33 class ViECodec; 34 class ViEExternalCapture; 35 class ViEExternalCodec; 36 class ViEImageProcess; 37 class ViENetwork; 38 class ViERTP_RTCP; 39 40 namespace internal { 41 42 class 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