webrtc/video_engine/main/source/vie_sync_module.h

85 lines
2.3 KiB
C++

/*
* Copyright (c) 2011 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.
*/
/*
* vie_sync_module.h
* Responsible for doing Audio/Video sync
*/
#ifndef WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_SYNC_MODULE_H_
#define WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_SYNC_MODULE_H_
#include "module.h"
#include "tick_util.h"
namespace webrtc
{
class CriticalSectionWrapper;
class RtpRtcp;
class VideoCodingModule;
class VoEVideoSync;
class ViESyncModule : public Module
{
public:
enum { kSyncInterval = 1000};
enum { kMaxVideoDiffMS = 80 }; // Video sync
enum { kMaxAudioDiffMS = 80 }; // Video sync
enum { kMaxDelay = 1500 }; // Video sync
ViESyncModule(int id, VideoCodingModule& vcm,
RtpRtcp& rtcpModule);
~ViESyncModule();
int SetVoiceChannel(int voiceChannelId, VoEVideoSync* voiceSyncInterface);
int VoiceChannel();
void SetNetworkDelay(int networkDelay);
// Implements Module
virtual WebRtc_Word32 Version(WebRtc_Word8* version,
WebRtc_UWord32& remainingBufferInBytes,
WebRtc_UWord32& position) const;
virtual WebRtc_Word32 ChangeUniqueId(const WebRtc_Word32 id);
virtual WebRtc_Word32 TimeUntilNextProcess();
virtual WebRtc_Word32 Process();
private:
// Critical sections
CriticalSectionWrapper& _dataCritsect;
int _id;
VideoCodingModule& _vcm;
RtpRtcp& _rtcpModule;
int _voiceChannelId;
VoEVideoSync* _voiceSyncInterface;
TickTime _lastSyncTime;
struct ViESyncDelay
{
ViESyncDelay()
{
extraVideoDelayMS = 0;
lastVideoDelayMS = 0;
extraAudioDelayMS = 0;
lastSyncDelay = 0;
networkDelay = 120;
}
int extraVideoDelayMS;
int lastVideoDelayMS;
int extraAudioDelayMS; //audioDelayMS;
int lastSyncDelay;
int networkDelay;
};
ViESyncDelay _channelDelay;
};
} // namespace webrtc
#endif // WEBRTC_VIDEO_ENGINE_MAIN_SOURCE_VIE_SYNC_MODULE_H_