diff --git a/modules/video_coding/receiver.cc b/modules/video_coding/receiver.cc index 4c753a500e..855ece85be 100644 --- a/modules/video_coding/receiver.cc +++ b/modules/video_coding/receiver.cc @@ -46,22 +46,13 @@ VCMReceiver::VCMReceiver(VCMTiming* timing, timing_(timing), render_wait_event_(std::move(receiver_event)), max_video_delay_ms_(kMaxVideoDelayMs) { - Reset(); + jitter_buffer_.Start(); } VCMReceiver::~VCMReceiver() { render_wait_event_->Set(); } -void VCMReceiver::Reset() { - rtc::CritScope cs(&crit_sect_); - if (!jitter_buffer_.Running()) { - jitter_buffer_.Start(); - } else { - jitter_buffer_.Flush(); - } -} - int32_t VCMReceiver::InsertPacket(const VCMPacket& packet) { // Insert the packet into the jitter buffer. The packet can either be empty or // contain media at this point. @@ -84,11 +75,6 @@ int32_t VCMReceiver::InsertPacket(const VCMPacket& packet) { return VCM_OK; } -void VCMReceiver::TriggerDecoderShutdown() { - jitter_buffer_.Stop(); - render_wait_event_->Set(); -} - VCMEncodedFrame* VCMReceiver::FrameForDecoding(uint16_t max_wait_time_ms, bool prefer_late_decoding) { const int64_t start_time_ms = clock_->TimeInMilliseconds(); diff --git a/modules/video_coding/receiver.h b/modules/video_coding/receiver.h index e6dee25669..a3033e643a 100644 --- a/modules/video_coding/receiver.h +++ b/modules/video_coding/receiver.h @@ -42,7 +42,6 @@ class VCMReceiver { ~VCMReceiver(); - void Reset(); int32_t InsertPacket(const VCMPacket& packet); VCMEncodedFrame* FrameForDecoding(uint16_t max_wait_time_ms, bool prefer_late_decoding); @@ -54,10 +53,7 @@ class VCMReceiver { int max_incomplete_time_ms); std::vector NackList(bool* request_key_frame); - void TriggerDecoderShutdown(); - private: - rtc::CriticalSection crit_sect_; Clock* const clock_; VCMJitterBuffer jitter_buffer_; VCMTiming* timing_; diff --git a/modules/video_coding/receiver_unittest.cc b/modules/video_coding/receiver_unittest.cc index bf77ba48ef..2d9a92e6bd 100644 --- a/modules/video_coding/receiver_unittest.cc +++ b/modules/video_coding/receiver_unittest.cc @@ -37,7 +37,7 @@ class TestVCMReceiver : public ::testing::Test { new StreamGenerator(0, clock_->TimeInMilliseconds())); } - virtual void SetUp() { receiver_.Reset(); } + virtual void SetUp() {} int32_t InsertPacket(int index) { VCMPacket packet; @@ -378,7 +378,7 @@ class VCMReceiverTimingTest : public ::testing::Test { std::unique_ptr( new FrameInjectEvent(&clock_, true))) {} - virtual void SetUp() { receiver_.Reset(); } + virtual void SetUp() {} SimulatedClockWithFrames clock_; StreamGenerator stream_generator_; diff --git a/modules/video_coding/video_coding_impl.h b/modules/video_coding/video_coding_impl.h index fb71e11a89..89353640d6 100644 --- a/modules/video_coding/video_coding_impl.h +++ b/modules/video_coding/video_coding_impl.h @@ -71,8 +71,6 @@ class VideoReceiver : public Module { int32_t Decode(uint16_t maxWaitTimeMs); - int32_t Decode(const webrtc::VCMEncodedFrame* frame); - int32_t IncomingPacket(const uint8_t* incomingPayload, size_t payloadLength, const RTPHeader& rtp_header, @@ -86,14 +84,6 @@ class VideoReceiver : public Module { void Process() override; void ProcessThreadAttached(ProcessThread* process_thread) override; - void TriggerDecoderShutdown(); - - // Notification methods that are used to check our internal state and validate - // threading assumptions. These are called by VideoReceiveStream. - // See |IsDecoderThreadRunning()| for more details. - void DecoderThreadStarting(); - void DecoderThreadStopped(); - protected: int32_t Decode(const webrtc::VCMEncodedFrame& frame); int32_t RequestKeyFrame(); @@ -144,9 +134,6 @@ class VideoReceiver : public Module { ProcessThread* process_thread_ = nullptr; bool is_attached_to_process_thread_ RTC_GUARDED_BY(construction_thread_checker_) = false; -#if RTC_DCHECK_IS_ON - bool decoder_thread_is_running_ = false; -#endif }; } // namespace vcm diff --git a/modules/video_coding/video_receiver.cc b/modules/video_coding/video_receiver.cc index 444a5b9f67..e52abf211a 100644 --- a/modules/video_coding/video_receiver.cc +++ b/modules/video_coding/video_receiver.cc @@ -141,7 +141,6 @@ int64_t VideoReceiver::TimeUntilNextProcess() { int32_t VideoReceiver::RegisterReceiveCallback( VCMReceiveCallback* receiveCallback) { RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(!IsDecoderThreadRunning()); // This value is set before the decoder thread starts and unset after // the decoder thread has been stopped. _decodedFrameCallback.SetUserReceiveCallback(receiveCallback); @@ -152,7 +151,6 @@ int32_t VideoReceiver::RegisterReceiveCallback( void VideoReceiver::RegisterExternalDecoder(VideoDecoder* externalDecoder, uint8_t payloadType) { RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(!IsDecoderThreadRunning()); if (externalDecoder == nullptr) { RTC_CHECK(_codecDataBase.DeregisterExternalDecoder(payloadType)); return; @@ -164,7 +162,7 @@ void VideoReceiver::RegisterExternalDecoder(VideoDecoder* externalDecoder, int32_t VideoReceiver::RegisterFrameTypeCallback( VCMFrameTypeCallback* frameTypeCallback) { RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(!IsDecoderThreadRunning() && !is_attached_to_process_thread_); + RTC_DCHECK(!is_attached_to_process_thread_); // This callback is used on the module thread, but since we don't get // callbacks on the module thread while the decoder thread isn't running // (and this function must not be called when the decoder is running), @@ -176,7 +174,7 @@ int32_t VideoReceiver::RegisterFrameTypeCallback( int32_t VideoReceiver::RegisterPacketRequestCallback( VCMPacketRequestCallback* callback) { RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(!IsDecoderThreadRunning() && !is_attached_to_process_thread_); + RTC_DCHECK(!is_attached_to_process_thread_); // This callback is used on the module thread, but since we don't get // callbacks on the module thread while the decoder thread isn't running // (and this function must not be called when the decoder is running), @@ -185,35 +183,6 @@ int32_t VideoReceiver::RegisterPacketRequestCallback( return VCM_OK; } -void VideoReceiver::TriggerDecoderShutdown() { - RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(IsDecoderThreadRunning()); - _receiver.TriggerDecoderShutdown(); -} - -void VideoReceiver::DecoderThreadStarting() { - RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(!IsDecoderThreadRunning()); - if (process_thread_ && !is_attached_to_process_thread_) { - process_thread_->RegisterModule(this, RTC_FROM_HERE); - } -#if RTC_DCHECK_IS_ON - decoder_thread_is_running_ = true; -#endif -} - -void VideoReceiver::DecoderThreadStopped() { - RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(IsDecoderThreadRunning()); - if (process_thread_ && is_attached_to_process_thread_) { - process_thread_->DeRegisterModule(this); - } -#if RTC_DCHECK_IS_ON - decoder_thread_is_running_ = false; - decoder_thread_checker_.Detach(); -#endif -} - // Decode next frame, blocking. // Should be called as often as possible to get the most out of the decoder. int32_t VideoReceiver::Decode(uint16_t maxWaitTimeMs) { @@ -263,21 +232,9 @@ int32_t VideoReceiver::Decode(uint16_t maxWaitTimeMs) { return ret; } -// Used for the new jitter buffer. -// TODO(philipel): Clean up among the Decode functions as we replace -// VCMEncodedFrame with FrameObject. -int32_t VideoReceiver::Decode(const webrtc::VCMEncodedFrame* frame) { - RTC_DCHECK_RUN_ON(&decoder_thread_checker_); - return Decode(*frame); -} - int32_t VideoReceiver::RequestKeyFrame() { RTC_DCHECK_RUN_ON(&module_thread_checker_); - // Since we deregister from the module thread when the decoder thread isn't - // running, we should get no calls here if decoding isn't being done. - RTC_DCHECK(IsDecoderThreadRunning()); - TRACE_EVENT0("webrtc", "RequestKeyFrame"); if (_frameTypeCallback != nullptr) { const int32_t ret = _frameTypeCallback->RequestKeyFrame(); @@ -310,7 +267,6 @@ int32_t VideoReceiver::RegisterReceiveCodec(const VideoCodec* receiveCodec, int32_t numberOfCores, bool requireKeyFrame) { RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(!IsDecoderThreadRunning()); if (receiveCodec == nullptr) { return VCM_PARAMETER_ERROR; } @@ -361,7 +317,6 @@ void VideoReceiver::SetNackSettings(size_t max_nack_list_size, int max_packet_age_to_nack, int max_incomplete_time_ms) { RTC_DCHECK_RUN_ON(&construction_thread_checker_); - RTC_DCHECK(!IsDecoderThreadRunning()); if (max_nack_list_size != 0) { max_nack_list_size_ = max_nack_list_size; } @@ -369,13 +324,5 @@ void VideoReceiver::SetNackSettings(size_t max_nack_list_size, max_incomplete_time_ms); } -bool VideoReceiver::IsDecoderThreadRunning() { -#if RTC_DCHECK_IS_ON - return decoder_thread_is_running_; -#else - return true; -#endif -} - } // namespace vcm } // namespace webrtc