Allow source tracker to be called synchronously on a single thread.

Bug: None
Change-Id: I699c0c787d28fe79959e93b3e1eda2634c931cef
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/348840
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Jakob Ivarsson‎ <jakobi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#42154}
diff --git a/modules/rtp_rtcp/source/source_tracker.cc b/modules/rtp_rtcp/source/source_tracker.cc
index 51e8f1c..cd881f1 100644
--- a/modules/rtp_rtcp/source/source_tracker.cc
+++ b/modules/rtp_rtcp/source/source_tracker.cc
@@ -29,12 +29,17 @@
   }
 
   Timestamp now = clock_->CurrentTime();
-  worker_thread_->PostTask(
-      SafeTask(worker_safety_.flag(),
-               [this, packet_infos = std::move(packet_infos), now]() {
-                 RTC_DCHECK_RUN_ON(worker_thread_);
-                 OnFrameDeliveredInternal(now, packet_infos);
-               }));
+  if (worker_thread_->IsCurrent()) {
+    RTC_DCHECK_RUN_ON(worker_thread_);
+    OnFrameDeliveredInternal(now, packet_infos);
+  } else {
+    worker_thread_->PostTask(
+        SafeTask(worker_safety_.flag(),
+                 [this, packet_infos = std::move(packet_infos), now]() {
+                   RTC_DCHECK_RUN_ON(worker_thread_);
+                   OnFrameDeliveredInternal(now, packet_infos);
+                 }));
+  }
 }
 
 void SourceTracker::OnFrameDeliveredInternal(