webrtc_m130/webrtc/video/rtp_streams_synchronizer.h
mflodman 4cd2790f17 Move RTP for synchroninzation and rename classes, files and variables.
This CL removes (almost) the last RTP references in VideoReceiveStream.
There are still references to RTPFragmentationHeader and SSRCs, which
will be dealt with later.

There are also new GUARDED_BY and thred checker added to the
synchronization class.

When there are othre transports than RTP, there will instead be an
interface + inheritance for RtpStreamReceiver and
RtpStreamSynchronizattion in VideoReceiveStream. This work will be done
when we actually know how we want to make thee transport interface.

BUG=webrtc:5838

Review-Url: https://codereview.webrtc.org/2216533002
Cr-Commit-Position: refs/heads/master@{#13655}
2016-08-05 13:28:50 +00:00

74 lines
2.4 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 synchronization audio and video for
// a given voice engine channel and video receive stream.
#ifndef WEBRTC_VIDEO_RTP_STREAMS_SYNCHRONIZER_H_
#define WEBRTC_VIDEO_RTP_STREAMS_SYNCHRONIZER_H_
#include <memory>
#include "webrtc/base/criticalsection.h"
#include "webrtc/base/thread_checker.h"
#include "webrtc/modules/include/module.h"
#include "webrtc/video/rtp_stream_receiver.h"
#include "webrtc/video/stream_synchronization.h"
namespace webrtc {
class Clock;
class VideoFrame;
class VoEVideoSync;
namespace vcm {
class VideoReceiver;
} // namespace vcm
class RtpStreamsSynchronizer : public Module {
public:
RtpStreamsSynchronizer(vcm::VideoReceiver* vcm,
RtpStreamReceiver* rtp_stream_receiver);
void ConfigureSync(int voe_channel_id,
VoEVideoSync* voe_sync_interface);
// Implements Module.
int64_t TimeUntilNextProcess() override;
void Process() override;
// Gets the sync offset between the current played out audio frame and the
// video |frame|. Returns true on success, false otherwise.
bool GetStreamSyncOffsetInMs(const VideoFrame& frame,
int64_t* stream_offset_ms) const;
private:
Clock* const clock_;
vcm::VideoReceiver* const video_receiver_;
RtpReceiver* const video_rtp_receiver_;
RtpRtcp* const video_rtp_rtcp_;
rtc::CriticalSection crit_;
int voe_channel_id_ GUARDED_BY(crit_);
VoEVideoSync* voe_sync_interface_ GUARDED_BY(crit_);
RtpReceiver* audio_rtp_receiver_ GUARDED_BY(crit_);
RtpRtcp* audio_rtp_rtcp_ GUARDED_BY(crit_);
std::unique_ptr<StreamSynchronization> sync_ GUARDED_BY(crit_);
StreamSynchronization::Measurements audio_measurement_ GUARDED_BY(crit_);
StreamSynchronization::Measurements video_measurement_ GUARDED_BY(crit_);
rtc::ThreadChecker process_thread_checker_;
int64_t last_sync_time_ ACCESS_ON(&process_thread_checker_);
};
} // namespace webrtc
#endif // WEBRTC_VIDEO_RTP_STREAMS_SYNCHRONIZER_H_