| Index: webrtc/video/video_send_stream.h
|
| diff --git a/webrtc/video/video_send_stream.h b/webrtc/video/video_send_stream.h
|
| index 932264265dddf75e3e762b6325141c0e4ae07957..c67dc70199b989e41a129deba1bbccdb758d564b 100644
|
| --- a/webrtc/video/video_send_stream.h
|
| +++ b/webrtc/video/video_send_stream.h
|
| @@ -17,8 +17,6 @@
|
|
|
| #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"
|
| @@ -26,6 +24,7 @@
|
| #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"
|
| @@ -38,29 +37,32 @@
|
| class IvfFileWriter;
|
| class ProcessThread;
|
| class RtpRtcp;
|
| +class ViEEncoder;
|
| class VieRemb;
|
| class RtcEventLog;
|
|
|
| +namespace vcm {
|
| +class VideoSender;
|
| +} // namespace vcm
|
| +
|
| namespace internal {
|
|
|
| -class VideoSendStreamImpl;
|
| -
|
| -// VideoSendStream implements webrtc::VideoSendStream.
|
| -// Internally, it delegates all public methods to VideoSendStreamImpl and / or
|
| -// VieEncoder. VideoSendStreamInternal is created and deleted on |worker_queue|.
|
| -class VideoSendStream : public webrtc::VideoSendStream {
|
| +class VideoSendStream : public webrtc::VideoSendStream,
|
| + public webrtc::CpuOveruseObserver,
|
| + public webrtc::BitrateAllocatorObserver,
|
| + public webrtc::VCMProtectionCallback,
|
| + public EncodedImageCallback {
|
| 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,
|
| - VideoSendStream::Config config,
|
| - VideoEncoderConfig encoder_config,
|
| + const VideoSendStream::Config& config,
|
| + const VideoEncoderConfig& encoder_config,
|
| const std::map<uint32_t, RtpState>& suspended_ssrcs);
|
|
|
| ~VideoSendStream() override;
|
| @@ -72,26 +74,101 @@
|
| void Start() override;
|
| void Stop() override;
|
| VideoCaptureInput* Input() override;
|
| - void ReconfigureVideoEncoder(VideoEncoderConfig) override;
|
| + void ReconfigureVideoEncoder(const VideoEncoderConfig& config) override;
|
| Stats GetStats() override;
|
|
|
| + // webrtc::CpuOveruseObserver implementation.
|
| + void OveruseDetected() override;
|
| + void NormalUsage() override;
|
| +
|
| typedef std::map<uint32_t, RtpState> RtpStateMap;
|
| - RtpStateMap StopPermanentlyAndGetRtpStates();
|
| + 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;
|
|
|
| private:
|
| - class ConstructionTask;
|
| - class DestructAndGetRtpStateTask;
|
| + struct EncoderSettings {
|
| + VideoCodec video_codec;
|
| + VideoEncoderConfig config;
|
| + };
|
|
|
| - rtc::ThreadChecker thread_checker_;
|
| - rtc::TaskQueue* const worker_queue_;
|
| - rtc::Event thread_sync_event_;
|
| + // 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.
|
| + EncodedImageCallback::Result OnEncodedImage(
|
| + const EncodedImage& encoded_image,
|
| + const CodecSpecificInfo* codec_specific_info,
|
| + const RTPFragmentationHeader* fragmentation) override;
|
| +
|
| + static bool EncoderThreadFunction(void* obj);
|
| + void EncoderProcess();
|
| +
|
| + void ConfigureProtection();
|
| + void ConfigureSsrcs();
|
|
|
| SendStatisticsProxy stats_proxy_;
|
| const VideoSendStream::Config config_;
|
| - std::unique_ptr<VideoSendStreamImpl> send_stream_;
|
| - std::unique_ptr<ViEEncoder> vie_encoder_;
|
| + 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_;
|
| };
|
| -
|
| } // namespace internal
|
| } // namespace webrtc
|
|
|
|
|