webrtc/video/rtp_streams_synchronizer.h
Tommi ad84d0254a Remove locking from RtpStreamsSynchronizer.
Remove dependency on ProcessThread.

Instead RtpStreamsSynchronizer uses the worker thread
and makes callbacks on the same thread. That in turn
simplifies locking for VideoReceiveStream2, which we'll
take advantage of later.

Bug: webrtc:11489
Change-Id: Id9a5a7977771b92e420a09cc472cfb43de5627cc
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/174221
Commit-Queue: Tommi <tommi@webrtc.org>
Reviewed-by: Magnus Flodman <mflodman@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31200}
2020-05-10 18:11:44 +00:00

67 lines
2.3 KiB
C++

/*
* Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
// RtpStreamsSynchronizer is responsible for synchronizing audio and video for
// a given audio receive stream and video receive stream.
#ifndef VIDEO_RTP_STREAMS_SYNCHRONIZER_H_
#define VIDEO_RTP_STREAMS_SYNCHRONIZER_H_
#include <memory>
#include "modules/include/module.h"
#include "rtc_base/critical_section.h"
#include "rtc_base/thread_checker.h"
#include "video/stream_synchronization.h"
namespace webrtc {
class Syncable;
// DEPRECATED.
class RtpStreamsSynchronizer : public Module {
public:
explicit RtpStreamsSynchronizer(Syncable* syncable_video);
~RtpStreamsSynchronizer() override;
void ConfigureSync(Syncable* syncable_audio);
// Implements Module.
int64_t TimeUntilNextProcess() override;
void Process() override;
// Gets the estimated playout NTP timestamp for the video frame with
// |rtp_timestamp| and the sync offset between the current played out audio
// frame and the video frame. Returns true on success, false otherwise.
// The |estimated_freq_khz| is the frequency used in the RTP to NTP timestamp
// conversion.
bool GetStreamSyncOffsetInMs(uint32_t rtp_timestamp,
int64_t render_time_ms,
int64_t* video_playout_ntp_ms,
int64_t* stream_offset_ms,
double* estimated_freq_khz) const;
private:
Syncable* syncable_video_;
rtc::CriticalSection crit_;
Syncable* syncable_audio_ RTC_GUARDED_BY(crit_);
std::unique_ptr<StreamSynchronization> sync_ RTC_GUARDED_BY(crit_);
StreamSynchronization::Measurements audio_measurement_ RTC_GUARDED_BY(crit_);
StreamSynchronization::Measurements video_measurement_ RTC_GUARDED_BY(crit_);
rtc::ThreadChecker process_thread_checker_;
int64_t last_sync_time_ RTC_GUARDED_BY(&process_thread_checker_);
int64_t last_stats_log_ms_ RTC_GUARDED_BY(&process_thread_checker_);
};
} // namespace webrtc
#endif // VIDEO_RTP_STREAMS_SYNCHRONIZER_H_