Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Unified Diff: webrtc/video/video_send_stream.h

Issue 2060403002: Add task queue to Call. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@move_getpadding
Patch Set: Rebased. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/video/video_send_stream.h
diff --git a/webrtc/video/video_send_stream.h b/webrtc/video/video_send_stream.h
index 1c66c1fe332ad9540343b2e01abc82668c4459a4..606961957d9a936d0f06fe3530835ebf2839fdaf 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"
@@ -47,14 +49,16 @@ class VideoSender;
namespace internal {
-class VideoSendStream : public webrtc::VideoSendStream,
- public webrtc::CpuOveruseObserver,
- public webrtc::BitrateAllocatorObserver,
- public webrtc::VCMProtectionCallback,
- public EncodedImageCallback {
+class VideoSendStreamInternal;
+
+// VideoSendStream implements webrtc::VideoSendStream.
+// Internally, it delegates all public methods to VideoSendStreamInternal.
+// VideoSendStreamInternal in created and destructed on |worker_queu|.
+class VideoSendStream : public webrtc::VideoSendStream {
public:
VideoSendStream(int num_cpu_cores,
ProcessThread* module_process_thread,
+ rtc::TaskQueue* worker_queu,
CallStats* call_stats,
CongestionController* congestion_controller,
BitrateAllocator* bitrate_allocator,
@@ -77,15 +81,61 @@ class VideoSendStream : public webrtc::VideoSendStream,
void ReconfigureVideoEncoder(const VideoEncoderConfig& config) override;
Stats GetStats() override;
+ typedef std::map<uint32_t, RtpState> RtpStateMap;
+ RtpStateMap StopPermanentlyAndGetRtpStates();
+
+ private:
+ class ConstructionTask;
+ class DestructAndGetRTPStateTask;
+
+ rtc::ThreadChecker thread_checker_;
+ rtc::TaskQueue* const worker_queu_;
+ std::unique_ptr<VideoSendStreamInternal> send_stream_;
+ rtc::Event thread_sync_event_;
+};
+
+class VideoSendStreamInternal : public webrtc::CpuOveruseObserver,
+ public webrtc::BitrateAllocatorObserver,
+ public webrtc::VCMProtectionCallback,
+ public EncodedImageCallback {
+ public:
+ VideoSendStreamInternal(int num_cpu_cores,
+ rtc::TaskQueue* worker_queu,
+ 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,
+ const std::map<uint32_t, RtpState>& suspended_ssrcs);
+
+ ~VideoSendStreamInternal() override;
+
+ // RegisterProcessThread register |module_process_thread| with those objects
+ // that use it. Registration have to happen on the thread where
+ // |module_process_thread| where created (libjingles worker thread).
+ // TODO(perkj): Replace the use of |module_process_thread| with a TaskQueue,
+ // maybe |worker_queu|.
+ void RegisterProcessThread(ProcessThread* module_process_thread);
+ void DeRegisterProcessThread();
+
+ void SignalNetworkState(NetworkState state);
+ bool DeliverRtcp(const uint8_t* packet, size_t length);
+
+ // webrtc::VideoSendStream implementation.
+ void Start();
+ void Stop();
+ VideoCaptureInput* Input();
+ void ReconfigureVideoEncoder(const VideoEncoderConfig& config);
+ VideoSendStream::Stats GetStats();
+ VideoSendStream::RtpStateMap GetRtpStates() const;
+
// webrtc::CpuOveruseObserver implementation.
void OveruseDetected() override;
void NormalUsage() override;
- typedef std::map<uint32_t, RtpState> RtpStateMap;
- RtpStateMap GetRtpStates() const;
-
- int GetPaddingNeededBps() const;
-
// Implements BitrateAllocatorObserver.
void OnBitrateUpdated(uint32_t bitrate_bps,
uint8_t fraction_loss,
@@ -100,10 +150,7 @@ class VideoSendStream : public webrtc::VideoSendStream,
uint32_t* sent_fec_rate_bps) override;
private:
- struct EncoderSettings {
- VideoCodec video_codec;
- VideoEncoderConfig config;
- };
+ class CheckEncoderActivityTask;
// Implements EncodedImageCallback. The implementation routes encoded frames
// to the |payload_router_| and |config.pre_encode_callback| if set.
@@ -117,12 +164,18 @@ class VideoSendStream : public webrtc::VideoSendStream,
void ConfigureProtection();
void ConfigureSsrcs();
+ void EncoderTimedOut();
+ void EncoderIsActive();
SendStatisticsProxy stats_proxy_;
const VideoSendStream::Config config_;
std::map<uint32_t, RtpState> suspended_ssrcs_;
- ProcessThread* const module_process_thread_;
+ ProcessThread* module_process_thread_;
+ rtc::ThreadChecker module_process_thread_checker_;
+ rtc::TaskQueue* const worker_queu_;
+ CheckEncoderActivityTask* check_encoder_activity_task_
+ GUARDED_BY(encoder_settings_crit_);
CallStats* const call_stats_;
CongestionController* const congestion_controller_;
BitrateAllocator* const bitrate_allocator_;
@@ -133,25 +186,16 @@ class VideoSendStream : public webrtc::VideoSendStream,
std::unique_ptr<IvfFileWriter> file_writers_[kMaxLayers];
rtc::PlatformThread encoder_thread_;
+ rtc::ThreadChecker encoder_thread_checker_;
rtc::Event encoder_wakeup_event_;
volatile int stop_encoder_thread_;
rtc::CriticalSection encoder_settings_crit_;
- std::unique_ptr<EncoderSettings> pending_encoder_settings_
+ std::unique_ptr<VideoCodec> pending_encoder_settings_
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_);
+ VideoCodec current_video_codec_;
+ int max_padding_bitrate_;
+ uint32_t encoder_target_rate_;
OveruseFrameDetector overuse_detector_;
ViEEncoder vie_encoder_;

Powered by Google App Engine
This is Rietveld 408576698