Line data Source code
1 : /*
2 : * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 : *
4 : * Use of this source code is governed by a BSD-style license
5 : * that can be found in the LICENSE file in the root of the source
6 : * tree. An additional intellectual property rights grant can be found
7 : * in the file PATENTS. All contributing project authors may
8 : * be found in the AUTHORS file in the root of the source tree.
9 : */
10 :
11 : // RtpStreamsSynchronizer is responsible for synchronization audio and video for
12 : // a given voice engine channel and video receive stream.
13 :
14 : #ifndef WEBRTC_VIDEO_RTP_STREAMS_SYNCHRONIZER_H_
15 : #define WEBRTC_VIDEO_RTP_STREAMS_SYNCHRONIZER_H_
16 :
17 : #include <memory>
18 :
19 : #include "webrtc/base/criticalsection.h"
20 : #include "webrtc/base/thread_checker.h"
21 : #include "webrtc/modules/include/module.h"
22 : #include "webrtc/video/rtp_stream_receiver.h"
23 : #include "webrtc/video/stream_synchronization.h"
24 :
25 : namespace webrtc {
26 :
27 : class Clock;
28 : class VideoFrame;
29 : class VoEVideoSync;
30 :
31 : namespace vcm {
32 : class VideoReceiver;
33 : } // namespace vcm
34 :
35 0 : class RtpStreamsSynchronizer : public Module {
36 : public:
37 : RtpStreamsSynchronizer(vcm::VideoReceiver* vcm,
38 : RtpStreamReceiver* rtp_stream_receiver);
39 :
40 : void ConfigureSync(int voe_channel_id,
41 : VoEVideoSync* voe_sync_interface);
42 :
43 : // Implements Module.
44 : int64_t TimeUntilNextProcess() override;
45 : void Process() override;
46 :
47 : // Gets the sync offset between the current played out audio frame and the
48 : // video |frame|. Returns true on success, false otherwise.
49 : // The estimated frequency is the frequency used in the RTP to NTP timestamp
50 : // conversion.
51 : bool GetStreamSyncOffsetInMs(const VideoFrame& frame,
52 : int64_t* stream_offset_ms,
53 : double* estimated_freq_khz) const;
54 :
55 : private:
56 : Clock* const clock_;
57 : vcm::VideoReceiver* const video_receiver_;
58 : RtpReceiver* const video_rtp_receiver_;
59 : RtpRtcp* const video_rtp_rtcp_;
60 :
61 : rtc::CriticalSection crit_;
62 : int voe_channel_id_ GUARDED_BY(crit_);
63 : VoEVideoSync* voe_sync_interface_ GUARDED_BY(crit_);
64 : RtpReceiver* audio_rtp_receiver_ GUARDED_BY(crit_);
65 : RtpRtcp* audio_rtp_rtcp_ GUARDED_BY(crit_);
66 : std::unique_ptr<StreamSynchronization> sync_ GUARDED_BY(crit_);
67 : StreamSynchronization::Measurements audio_measurement_ GUARDED_BY(crit_);
68 : StreamSynchronization::Measurements video_measurement_ GUARDED_BY(crit_);
69 :
70 : rtc::ThreadChecker process_thread_checker_;
71 : int64_t last_sync_time_ ACCESS_ON(&process_thread_checker_);
72 : };
73 :
74 : } // namespace webrtc
75 :
76 : #endif // WEBRTC_VIDEO_RTP_STREAMS_SYNCHRONIZER_H_
|