Reland "Running FrameBuffer on task queue."
This is a reland of 13943b7b7f6d00568912b9969db2c7871d18e21f
Original change's description:
> Running FrameBuffer on task queue.
>
> This prepares for running WebRTC in simulated time where event::Wait
> based timing doesn't work.
>
> Bug: webrtc:10365
> Change-Id: Ia0f9b1cc8e3c8c27a38e45b40487050a4699d8cf
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/129962
> Reviewed-by: Philip Eliasson <philipel@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Commit-Queue: Sebastian Jansson <srte@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#27422}
Bug: webrtc:10365
Change-Id: I412d3e0fe06c6dd57cdb42974f09e03f3a6ad038
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131124
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27572}
diff --git a/video/video_receive_stream.h b/video/video_receive_stream.h
index 585a2cc..dc4e4b7 100644
--- a/video/video_receive_stream.h
+++ b/video/video_receive_stream.h
@@ -23,6 +23,7 @@
#include "modules/video_coding/frame_buffer2.h"
#include "modules/video_coding/video_coding_impl.h"
#include "rtc_base/synchronization/sequence_checker.h"
+#include "rtc_base/task_queue.h"
#include "system_wrappers/include/clock.h"
#include "video/receive_statistics_proxy.h"
#include "video/rtp_streams_synchronizer.h"
@@ -133,6 +134,7 @@
private:
int64_t GetWaitMs() const;
+ void StartNextDecode() RTC_RUN_ON(decode_queue_);
static void DecodeThreadFunction(void* ptr);
bool Decode();
void HandleEncodedFrame(std::unique_ptr<video_coding::EncodedFrame> frame);
@@ -153,10 +155,15 @@
ProcessThread* const process_thread_;
Clock* const clock_;
+ const bool use_task_queue_;
+
rtc::PlatformThread decode_thread_;
CallStats* const call_stats_;
+ bool decoder_running_ RTC_GUARDED_BY(worker_sequence_checker_) = false;
+ bool decoder_stopped_ RTC_GUARDED_BY(decode_queue_) = true;
+
ReceiveStatisticsProxy stats_proxy_;
// Shared by media and rtx stream receivers, since the latter has no RtpRtcp
// module of its own.
@@ -211,6 +218,9 @@
// Maximum delay as decided by the RTP playout delay extension.
int frame_maximum_playout_delay_ms_ RTC_GUARDED_BY(playout_delay_lock_) = -1;
+
+ // Defined last so they are destroyed before all other members.
+ rtc::TaskQueue decode_queue_;
};
} // namespace internal
} // namespace webrtc