123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #include "Main.h"
- #include "ClockLayer.h"
- #include "config.h"
- ClockLayer::ClockLayer(IWMReader *reader)
- : clock(0), startTime(0),
- clockTick(2500000), curTime(0),
- startTimeMilliseconds(0),
- realTime(false),
- lastOutputTime(0)
- {
- if (FAILED(reader->QueryInterface(&clock)))
- clock=0;
- }
- void ClockLayer::Opened()
- {
- realTime=!config_clock;
- WMHandler::Opened();
- if (!realTime)
- {
- HRESULT hr = clock->SetUserProvidedClock(TRUE);
- if (FAILED(hr))
- {
- realTime=false;
- }
- }
- else
- clock->SetUserProvidedClock(FALSE);
- curTime = startTime;
- }
- void ClockLayer::Started()
- {
- if (!realTime && config_clock)
- clock->DeliverTime((QWORD) - 1);
- if (startTimeMilliseconds != 0)
- out->Flush(startTimeMilliseconds);
- SetLastOutputTime(startTimeMilliseconds);
- WMHandler::Started();
- }
- void ClockLayer::Clock()
- {
- if (!realTime && config_clock)
- clock->DeliverTime((QWORD) - 1);
- }
- void ClockLayer::SetStartTimeMilliseconds(long time)
- {
- startTimeMilliseconds=time;
- startTime = time;
- startTime *= 10000;
- }
- void ClockLayer::TimeReached(QWORD &timeReached)
- {
- curTime = timeReached;
- }
- QWORD ClockLayer::GetStartTime()
- {
- return startTime;
- }
- void ClockLayer::GoRealTime()
- {
- realTime = true;
- }
- int ClockLayer::GetOutputTime()
- {
- if (realTime)
- return (int) (curTime / 10000LL);
- else
- return lastOutputTime + (out->GetOutputTime() - out->GetWrittenTime());
- }
- void ClockLayer::TimeToSync(QWORD timeStamp, __int64 &diff)
- {
- if (realTime)
- diff = 0;
- else
- {
- QWORD outputTime = this->GetOutputTime();
- outputTime *= 10000LL;
- diff = timeStamp - outputTime;
- }
- }
- void ClockLayer::SampleReceived(QWORD &timeStamp, QWORD &duration, unsigned long &outputNum, unsigned long &flags, INSSBuffer *&sample)
- {
- if (realTime)
- curTime = timeStamp;
- WMHandler::SampleReceived(timeStamp, duration, outputNum, flags, sample);
- }
|