Chromium Code Reviews| Index: webrtc/video/video_send_stream.h |
| diff --git a/webrtc/video/video_send_stream.h b/webrtc/video/video_send_stream.h |
| index d5ea36398535e935052e936ee0aef29c9c00c98d..7fd3bd7c2b104d3c3b2783ca130b83a8b0d063fe 100644 |
| --- a/webrtc/video/video_send_stream.h |
| +++ b/webrtc/video/video_send_stream.h |
| @@ -17,6 +17,8 @@ |
| #include "webrtc/call/bitrate_allocator.h" |
| #include "webrtc/base/criticalsection.h" |
| +#include "webrtc/base/event.h" |
| +#include "webrtc/base/task_queue.h" |
| #include "webrtc/call.h" |
| #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" |
| #include "webrtc/modules/video_coding/protection_bitrate_calculator.h" |
| @@ -24,7 +26,6 @@ |
| #include "webrtc/video/payload_router.h" |
| #include "webrtc/video/send_delay_stats.h" |
| #include "webrtc/video/send_statistics_proxy.h" |
| -#include "webrtc/video/video_capture_input.h" |
| #include "webrtc/video/vie_encoder.h" |
| #include "webrtc/video_receive_stream.h" |
| #include "webrtc/video_send_stream.h" |
| @@ -37,32 +38,29 @@ class CongestionController; |
| class IvfFileWriter; |
| class ProcessThread; |
| class RtpRtcp; |
| -class ViEEncoder; |
| class VieRemb; |
| class RtcEventLog; |
| -namespace vcm { |
| -class VideoSender; |
| -} // namespace vcm |
| - |
| namespace internal { |
| -class VideoSendStream : public webrtc::VideoSendStream, |
| - public webrtc::CpuOveruseObserver, |
| - public webrtc::BitrateAllocatorObserver, |
| - public webrtc::VCMProtectionCallback, |
| - public EncodedImageCallback { |
| +class VideoSendStreamImpl; |
|
pbos-webrtc
2016/07/13 12:35:39
Should this be named something related to RTP or o
perkj_webrtc
2016/07/14 10:11:28
I would like to wait until dust has settled. It is
|
| + |
| +// VideoSendStream implements webrtc::VideoSendStream. |
| +// Internally, it delegates all public methods to VideoSendStreamImpl. |
|
pbos-webrtc
2016/07/13 12:35:39
or ViEEncoder?
perkj_webrtc
2016/07/14 10:11:28
Done.
|
| +// VideoSendStreamInternal is created and deleted on |worker_queue|. |
| +class VideoSendStream : public webrtc::VideoSendStream { |
| public: |
| VideoSendStream(int num_cpu_cores, |
| ProcessThread* module_process_thread, |
| + rtc::TaskQueue* worker_queue, |
| CallStats* call_stats, |
| CongestionController* congestion_controller, |
| BitrateAllocator* bitrate_allocator, |
| SendDelayStats* send_delay_stats, |
| VieRemb* remb, |
| RtcEventLog* event_log, |
| - const VideoSendStream::Config& config, |
| - const VideoEncoderConfig& encoder_config, |
| + VideoSendStream::Config config, |
| + VideoEncoderConfig encoder_config, |
| const std::map<uint32_t, RtpState>& suspended_ssrcs); |
| ~VideoSendStream() override; |
| @@ -74,100 +72,26 @@ class VideoSendStream : public webrtc::VideoSendStream, |
| void Start() override; |
| void Stop() override; |
| VideoCaptureInput* Input() override; |
| - void ReconfigureVideoEncoder(const VideoEncoderConfig& config) override; |
| + void ReconfigureVideoEncoder(VideoEncoderConfig) override; |
| Stats GetStats() override; |
| - // webrtc::CpuOveruseObserver implementation. |
| - void OveruseDetected() override; |
| - void NormalUsage() override; |
| - |
| typedef std::map<uint32_t, RtpState> RtpStateMap; |
| - RtpStateMap GetRtpStates() const; |
| - |
| - int GetPaddingNeededBps() const; |
| - |
| - // Implements BitrateAllocatorObserver. |
| - uint32_t OnBitrateUpdated(uint32_t bitrate_bps, |
| - uint8_t fraction_loss, |
| - int64_t rtt) override; |
| - |
| - protected: |
| - // Implements webrtc::VCMProtectionCallback. |
| - int ProtectionRequest(const FecProtectionParams* delta_params, |
| - const FecProtectionParams* key_params, |
| - uint32_t* sent_video_rate_bps, |
| - uint32_t* sent_nack_rate_bps, |
| - uint32_t* sent_fec_rate_bps) override; |
| + RtpStateMap StopPermanentlyAndGetRtpStates(); |
| private: |
| - struct EncoderSettings { |
| - VideoCodec video_codec; |
| - VideoEncoderConfig config; |
| - }; |
| - |
| - // Implements EncodedImageCallback. The implementation routes encoded frames |
| - // to the |payload_router_| and |config.pre_encode_callback| if set. |
| - // Called on an arbitrary encoder callback thread. |
| - int32_t Encoded(const EncodedImage& encoded_image, |
| - const CodecSpecificInfo* codec_specific_info, |
| - const RTPFragmentationHeader* fragmentation) override; |
| + class ConstructionTask; |
| + class DestructAndGetRtpStateTask; |
| - static bool EncoderThreadFunction(void* obj); |
| - void EncoderProcess(); |
| - |
| - void ConfigureProtection(); |
| - void ConfigureSsrcs(); |
| + rtc::ThreadChecker thread_checker_; |
| + rtc::TaskQueue* const worker_queue_; |
| + rtc::Event thread_sync_event_; |
| SendStatisticsProxy stats_proxy_; |
| const VideoSendStream::Config config_; |
| - std::map<uint32_t, RtpState> suspended_ssrcs_; |
| - |
| - ProcessThread* const module_process_thread_; |
| - CallStats* const call_stats_; |
| - CongestionController* const congestion_controller_; |
| - BitrateAllocator* const bitrate_allocator_; |
| - VieRemb* const remb_; |
| - |
| - static const bool kEnableFrameRecording = false; |
| - static const int kMaxLayers = 3; |
| - std::unique_ptr<IvfFileWriter> file_writers_[kMaxLayers]; |
| - |
| - rtc::PlatformThread encoder_thread_; |
| - rtc::Event encoder_wakeup_event_; |
| - volatile int stop_encoder_thread_; |
| - rtc::CriticalSection encoder_settings_crit_; |
| - std::unique_ptr<EncoderSettings> pending_encoder_settings_ |
| - GUARDED_BY(encoder_settings_crit_); |
| - uint32_t encoder_max_bitrate_bps_ GUARDED_BY(encoder_settings_crit_); |
| - uint32_t encoder_target_rate_bps_ GUARDED_BY(encoder_settings_crit_); |
| - |
| - enum class State { |
| - kStopped, // VideoSendStream::Start has not yet been called. |
| - kStarted, // VideoSendStream::Start has been called. |
| - // VideoSendStream::Start has been called but the encoder have timed out. |
| - kEncoderTimedOut, |
| - }; |
| - rtc::Optional<State> pending_state_change_ GUARDED_BY(encoder_settings_crit_); |
| - |
| - // Only used on the encoder thread. |
| - rtc::ThreadChecker encoder_thread_checker_; |
| - State state_ ACCESS_ON(&encoder_thread_checker_); |
| - std::unique_ptr<EncoderSettings> current_encoder_settings_ |
| - ACCESS_ON(&encoder_thread_checker_); |
| - |
| - OveruseFrameDetector overuse_detector_; |
| - ViEEncoder vie_encoder_; |
| - EncoderStateFeedback encoder_feedback_; |
| - ProtectionBitrateCalculator protection_bitrate_calculator_; |
| - |
| - vcm::VideoSender* const video_sender_; |
| - |
| - const std::unique_ptr<RtcpBandwidthObserver> bandwidth_observer_; |
| - // RtpRtcp modules, declared here as they use other members on construction. |
| - const std::vector<RtpRtcp*> rtp_rtcp_modules_; |
| - PayloadRouter payload_router_; |
| - VideoCaptureInput input_; |
| + std::unique_ptr<VideoSendStreamImpl> send_stream_; |
| + std::unique_ptr<ViEEncoder> vie_encoder_; |
| }; |
| + |
| } // namespace internal |
| } // namespace webrtc |