You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdemultimedia/mpeglib/lib/util/timeStamp.cpp

274 lines
4.5 KiB

/*
class for managing byte positions and associated time positions
Copyright (C) 1999 Martin Vogt
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Library General Public License as published by
the Free Software Foundation.
For more information look at the file COPYRIGHT in this package
*/
#include "timeStamp.h"
#include <iostream>
using namespace std;
TimeStamp::TimeStamp() {
key=0;
keylen=0;
time.tv_sec=0;
time.tv_usec=0;
ptsTimeStamp=0.0;
scrTimeStamp=0.0;
videoFrameCounter=0;
dtsTimeStamp=0.0;
lPTSFlag=false;
}
TimeStamp::~TimeStamp() {
}
void TimeStamp::copyTo(TimeStamp* dest) {
dest->setKey(key,keylen);
dest->setTime(&time);
dest->setPTSTimeStamp(ptsTimeStamp);
dest->setVideoFrameCounter(videoFrameCounter);
dest->setSCRTimeStamp(scrTimeStamp);
dest->setDTSTimeStamp(dtsTimeStamp);
dest->setSyncClock(syncClock);
dest->setPTSFlag(lPTSFlag);
}
long TimeStamp::getKey() {
return key;
}
int TimeStamp::getKeyLen() {
return keylen;
}
void TimeStamp::setKey(long key,int len) {
this->key=key;
this->keylen=len;
}
void TimeStamp::setTime(timeval_t* newTime) {
time.tv_sec=newTime->tv_sec;
time.tv_usec=newTime->tv_usec;
}
void TimeStamp::gettimeofday() {
TimeWrapper::gettimeofday(&time);
}
timeval_t* TimeStamp::getTime() {
return &time;
}
void TimeStamp::waitForIt() {
timeval_t waitTime;
waitTime.tv_sec=time.tv_sec;
waitTime.tv_usec=time.tv_usec;
if (isPositive()) {
//cout << "wait:"<<waitTime.tv_sec<<" usec:"<<waitTime.tv_usec<<endl;
TimeWrapper::usleep(&waitTime);
}
}
void TimeStamp::addOffset(TimeStamp* stamp) {
addOffset(stamp->time.tv_sec,stamp->time.tv_usec);
}
void TimeStamp::addOffset(int sec,long usec) {
time.tv_sec=time.tv_sec+sec;
time.tv_usec=time.tv_usec+usec;
if (time.tv_usec >= 1000000) {
time.tv_usec-=1000000;
time.tv_sec++;
}
if (time.tv_usec < 0) {
time.tv_usec+=1000000;
time.tv_sec--;
}
}
void TimeStamp::minus(int sec,long usec) {
time.tv_usec-=usec;
time.tv_sec-=sec;
if (time.tv_usec <= 0) {
time.tv_usec=time.tv_usec+1000000;
time.tv_sec--;
}
if (time.tv_usec >= 1000000) {
time.tv_usec=time.tv_usec-1000000;
time.tv_sec++;
}
}
void TimeStamp::minus(TimeStamp* stamp,TimeStamp* dest) {
long sec=time.tv_sec;
long usec=time.tv_usec;
minus(stamp->time.tv_sec,stamp->time.tv_usec);
dest->set(time.tv_sec,time.tv_usec);
if (dest != this) {
time.tv_sec=sec;
time.tv_usec=usec;
}
}
int TimeStamp::lessThan(TimeStamp* stamp) {
return lessThan(stamp->time.tv_sec,stamp->time.tv_usec);
}
int TimeStamp::lessThan(int sec,long usec) {
int back=false;
if (time.tv_sec < sec) {
back=true;
} else {
if (time.tv_sec == sec) {
if (time.tv_usec < usec) {
back=true;
}
}
}
return back;
}
void TimeStamp::set(long sec,long usec) {
time.tv_sec=sec;
time.tv_usec=usec;
}
void TimeStamp::print(const char* name) {
cout << name
<<" lPTS:"<<lPTSFlag
<<" pts:"<<ptsTimeStamp
<<" dts:"<<dtsTimeStamp
<<" scr:"<<scrTimeStamp
<<" key:"<<key
<<" sec:"<<time.tv_sec
<<" usec:"<<time.tv_usec
<<" v-Minor:"<<videoFrameCounter<<endl;
}
int TimeStamp::isPositive() {
if ((time.tv_sec == 0) && (time.tv_usec == 0)) {
return false;
}
return ((time.tv_sec >= 0) && (time.tv_usec >= 0));
}
int TimeStamp::isNegative() {
if (time.tv_sec < 0) {
return true;
}
if (time.tv_usec < 0) {
return true;
}
return false;
}
int TimeStamp::getPTSFlag() {
return lPTSFlag;
}
void TimeStamp::setPTSFlag(int lPTSFlag) {
this->lPTSFlag=lPTSFlag;
}
double TimeStamp::getPTSTimeStamp() {
return ptsTimeStamp;
}
void TimeStamp::setPTSTimeStamp(double ptsTimeStamp) {
this->ptsTimeStamp=ptsTimeStamp;
}
double TimeStamp::getSCRTimeStamp() {
return scrTimeStamp;
}
void TimeStamp::setSCRTimeStamp(double scrTimeStamp) {
this->scrTimeStamp=scrTimeStamp;
}
double TimeStamp::getDTSTimeStamp() {
return dtsTimeStamp;
}
void TimeStamp::setDTSTimeStamp(double dtsTimeStamp) {
this->dtsTimeStamp=dtsTimeStamp;
}
int TimeStamp::getVideoFrameCounter() {
return videoFrameCounter;
}
void TimeStamp::setVideoFrameCounter(int nr) {
this->videoFrameCounter=nr;
}
double TimeStamp::getAsSeconds() {
return (double)time.tv_sec+(double)time.tv_usec/(double)1000000;
}
SyncClock* TimeStamp::getSyncClock() {
return syncClock;
}
void TimeStamp::setSyncClock(SyncClock* syncClock) {
this->syncClock=syncClock;
}