Home | History | Annotate | Download | only in video
      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