#include "ordevicereclist_device.h"
#define ORDEVICERECORDLIST__CLASS ORDEVICERECORDLIST__CLASSNAME
#define ORDEVICERECORDLIST__NAME ORDEVICERECORDLIST__CLASSSTR
#define ORDEVICERECORDLIST__LABEL "OR - Recording List"
#define ORDEVICERECORDLIST__DESC "OR - Recording List Description"
ORDEVICERECORDLIST__CLASS,
ORDEVICERECORDLIST__LABEL,
ORDEVICERECORDLIST__DESC,
bool ORDeviceRecordList::FBCreate()
{
mStandby = false;
mRecFlag = false;
mIsPlaying = false;
mCurrentTakeIndex = -1;
mSystem.OnUIIdle.Add(
this,(
FBCallback)&ORDeviceRecordList::OnUIIdleEvent );
return true;
}
void ORDeviceRecordList::FBDestroy()
{
mSystem.OnUIIdle.Remove(
this,(
FBCallback)&ORDeviceRecordList::OnUIIdleEvent );
ClearList();
}
FBTime FBPlayListEntry::GetStartTime()
{
FBTime lStart, lHin;
lHin.SetTime(0,0,mPreroll,0);
lStart.SetMilliSeconds(mInTime.GetMilliSeconds() - lHin.GetMilliSeconds());
return lStart;
}
FBTime FBPlayListEntry::GetStopTime()
{
FBTime lStop, lHout;
lHout.SetTime(0,0,mPostroll,0);
lStop.SetMilliSeconds( mOutTime.GetMilliSeconds() + lHout.GetMilliSeconds());
return lStop;
}
bool ORDeviceRecordList::DeviceOperation( kDeviceOperations pOperation )
{
switch (pOperation)
{
case kOpInit: return true;
case kOpStart: return true;
case kOpStop: return false;
case kOpReset: return true;
case kOpDone: return false;
}
return true;
}
void ORDeviceRecordList::DeviceIONotify( kDeviceIOs pAction,FBDeviceNotifyInfo &pDeviceNotifyInfo)
{
switch (pAction)
{
case kIOPlayModeWrite:
case kIOStopModeWrite:
{
}
break;
case kIOStopModeRead:
case kIOPlayModeRead:
{
AckOneSampleReceived();
}
break;
}
return;
}
void ORDeviceRecordList::LoadFile(const char *pFileName)
{
ClearList();
FBPlayListEntry *tmp =
NULL;
if( (fp = fopen( pFileName,
"r" )) ==
NULL )
{
return;
}
int hhin, mmin, ssin,ffin;
int hhout, mmout, ssout,ffout;
int preroll,postroll;
while(11==fscanf(fp, "%s %d:%d:%d:%d %d:%d:%d:%d %d %d",
name,&hhin, &mmin, &ssin,&ffin,&hhout, &mmout, &ssout,&ffout,&preroll,&postroll))
{
tmp = new FBPlayListEntry;
tmp->mInTime.SetTime(hhin,mmin, ssin,ffin, 0);
tmp->mOutTime.SetTime(hhout, mmout, ssout,ffout, 0);
tmp->mPreroll = preroll;
tmp->mPostroll = postroll;
mPlayList.Add(tmp);
}
fclose(fp);
}
bool ORDeviceRecordList::SetCurrentTakeTimeSpan(FBTime pStart, FBTime pStop)
{
mSystem.CurrentTake->LocalTimeSpan = FBTimeSpan( pStart,pStop ) ;
return true;
}
bool ORDeviceRecordList::GetPlayStatus()
{
{
return true;
}
return false;
}
bool ORDeviceRecordList::PrepareToRecord()
{
time24h.SetTime(24,0,0,0);
start = GetListEntry(GetCurrentTakeIndex())->GetStartTime();
stop = GetListEntry(GetCurrentTakeIndex())->GetStopTime();
if(start.Get() <= stop.Get())
{
duration.Set(stop.Get() -start.Get());
}
else
{
duration.Set(time24h.Get() - (start.Get() -stop.Get()));
}
bool success;
success = mPlayerControl.Record(true, false);
mPlayerControl.LoopStart = FBTime(0);
mPlayerControl.LoopStop = duration;
Cue(FBTime(0));
return success;
}
bool ORDeviceRecordList::PrepareToPlay()
{
time24h.SetTime(24,0,0,0);
start = GetListEntry(GetCurrentTakeIndex())->GetStartTime();
stop = GetListEntry(GetCurrentTakeIndex())->GetStopTime();
if(start.Get() <= stop.Get())
{
duration.Set(stop.Get() -start.Get());
}
else
{
duration.Set(time24h.Get() - (start.Get() -stop.Get()));
}
mPlayerControl.LoopStart = FBTime(0);
mPlayerControl.LoopStop = duration;
Cue(FBTime(0));
return true;
}
void ORDeviceRecordList::Play()
{
mPlayerControl.Play();
}
void ORDeviceRecordList::Stop()
{
SetStandbyState(false);
mPlayerControl.Stop();
}
void ORDeviceRecordList::Cue(FBTime pStart)
{
mPlayerControl.Goto(pStart );
}
FBTime ORDeviceRecordList::GetCurrentStartTime()
{
FBTime zero = 0;
if(GetCurrentTakeIndex()<0 || GetCurrentTakeIndex() >= GetListCount())
{
return zero;
}
return GetListEntry(GetCurrentTakeIndex())->GetStartTime();
}
FBTime ORDeviceRecordList::GetCurrentStopTime()
{
FBTime zero = 0;
if(GetCurrentTakeIndex()<0 || GetCurrentTakeIndex() >= GetListCount()){
return zero;
}
return GetListEntry(GetCurrentTakeIndex())->GetStopTime();
}
void ORDeviceRecordList::ClearList()
{
for(
int i=0;
i< mPlayList.GetCount();
i++)
{
{
}
}
mPlayList.Clear();
}
int ORDeviceRecordList::GetListCount()
{
return mPlayList.GetCount();
}
FBPlayListEntry *ORDeviceRecordList::GetListEntry(
int i)
{
}
FBTime ORDeviceRecordList::GetReferenceTime()
{
FBTime systemTime = mSystem.SystemTime;
return mRefTime.GetTime(mRefTime.ItemIndex, systemTime);
}
bool ORDeviceRecordList::CreateNewTake(char *pName)
{
FBTake* newTake;
FBString newTakeName, fbTakeName;
newTakeName = pName;
newTake = new FBTake(newTakeName);
int takeIndex=-1;
mSystem.Scene->Takes.Add(newTake);
for(
int i=0;
i<mSystem.Scene->Takes.GetCount();
i++)
{
fbTakeName = mSystem.Scene->Takes[
i]->Name;
if(fbTakeName == newTakeName)
{
break;
}
}
if(takeIndex != -1)
{
mSystem.CurrentTake = mSystem.Scene->Takes[takeIndex];
return true;
}
return false;
}
bool ORDeviceRecordList::ChangeTake(char *pName)
{
FBString newTakeName,fbTakeName;
int takeIndex = -1;
newTakeName = pName;
for(
int i=0;
i<mSystem.Scene->Takes.GetCount();
i++)
{
fbTakeName = mSystem.Scene->Takes[
i]->Name;
if(fbTakeName == newTakeName)
{
break;
}
}
if(takeIndex != -1)
{
mSystem.CurrentTake = mSystem.Scene->Takes[takeIndex];
return true;
}
return false;
}
{
if(!mStandby)
{
return;
}
FBTime refTime, startTime, stopTime;
FBTimeSpan timeSpan;
refTime.Set(GetReferenceTime().Get());
if(mCurrentTakeIndex>=0 && mCurrentTakeIndex < mPlayList.GetCount())
{
startTime.Set(mPlayList[mCurrentTakeIndex]->GetStartTime().Get());
stopTime.Set(mPlayList[mCurrentTakeIndex]->GetStopTime().Get());
}
else
{
return;
}
timeSpan.Set(startTime, stopTime);
if(timeSpan & refTime)
{
if (!GetPlayStatus())
{
Play();
}
}
}
bool ORDeviceRecordList::FbxStore(FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat)
{
int hhin, mmin, ssin,ffin;
int hhout, mmout, ssout,ffout;
int preroll,postroll;
int field,sec;
{
pFbxObject->FieldWriteI("Version",101);
if(GetRecFlag())
{
pFbxObject->FieldWriteI("RecFlag",RECLIST_RECFLAG_REC);
}
else
{
pFbxObject->FieldWriteI("RecFlag",RECLIST_RECFLAG_PLAY);
}
pFbxObject->FieldWriteBegin("PlayList");
pFbxObject->FieldWriteI(mPlayList.GetCount());
for (
int i=0;
i<mPlayList.GetCount();
i++)
{
mPlayList[
i]->mInTime.GetTime(hhin,mmin, ssin,ffin, field,sec);
mPlayList[
i]->mOutTime.GetTime(hhout, mmout, ssout,ffout, field,sec);
preroll = mPlayList[
i]->mPreroll;
postroll = mPlayList[
i]->mPostroll;
pFbxObject->FieldWriteC( mPlayList[
i]->mName );
pFbxObject->FieldWriteI( hhin );
pFbxObject->FieldWriteI( mmin );
pFbxObject->FieldWriteI( ssin );
pFbxObject->FieldWriteI( ffin );
pFbxObject->FieldWriteI( hhout );
pFbxObject->FieldWriteI( mmout );
pFbxObject->FieldWriteI( ssout );
pFbxObject->FieldWriteI( ffout );
pFbxObject->FieldWriteI( preroll );
pFbxObject->FieldWriteI( postroll );
pFbxObject->FieldWriteI( mPlayList[
i]->mTakeNumber );
}
pFbxObject->FieldWriteEnd();
}
return true;
}
bool ORDeviceRecordList::FbxRetrieve(FBFbxObject* pFbxObject,
kFbxObjectStore pStoreWhat)
{
int Version,recFlag;
FBPlayListEntry *tmp =
NULL;
int hhin, mmin, ssin,ffin;
int hhout, mmout, ssout,ffout;
int preroll,postroll, takeNum = 1;
if (pStoreWhat & kAttributes)
{
Version = pFbxObject->FieldReadI("Version");
if(Version == 100)
{
recFlag = pFbxObject->FieldReadI("RecFlag");
if(recFlag == RECLIST_RECFLAG_REC)
{
SetRecFlag(true);
}
else if(recFlag == RECLIST_RECFLAG_PLAY)
{
SetRecFlag(false);
}
else
{
SetRecFlag(true);
}
if (pFbxObject->FieldReadBegin("PlayList"))
{
ClearList();
int entryCount = pFbxObject->FieldReadI();
for (
int i=0;
i<entryCount;
i++ )
{
name = pFbxObject->FieldReadC();
hhin = pFbxObject->FieldReadI();
mmin = pFbxObject->FieldReadI();
ssin = pFbxObject->FieldReadI();
ffin = pFbxObject->FieldReadI();
hhout = pFbxObject->FieldReadI();
mmout = pFbxObject->FieldReadI();
ssout = pFbxObject->FieldReadI();
ffout = pFbxObject->FieldReadI();
preroll = pFbxObject->FieldReadI();
postroll = pFbxObject->FieldReadI();
takeNum = 1969;
tmp = new FBPlayListEntry;
tmp->mTakeNumber= takeNum;
tmp->mInTime.SetTime(hhin,mmin, ssin,ffin, 0);
tmp->mOutTime.SetTime(hhout, mmout, ssout,ffout, 0);
tmp->mPreroll = preroll;
tmp->mPostroll = postroll;
mPlayList.Add(tmp);
}
pFbxObject->FieldReadEnd();
}
}
if(Version == 101)
{
recFlag = pFbxObject->FieldReadI("RecFlag");
if(recFlag == RECLIST_RECFLAG_REC)
{
SetRecFlag(true);
}
else if(recFlag == RECLIST_RECFLAG_PLAY)
{
SetRecFlag(false);
}
else
{
SetRecFlag(true);
}
if (pFbxObject->FieldReadBegin("PlayList"))
{
ClearList();
int entryCount = pFbxObject->FieldReadI();
for (
int i=0;
i<entryCount;
i++ )
{
name = pFbxObject->FieldReadC();
hhin = pFbxObject->FieldReadI();
mmin = pFbxObject->FieldReadI();
ssin = pFbxObject->FieldReadI();
ffin = pFbxObject->FieldReadI();
hhout = pFbxObject->FieldReadI();
mmout = pFbxObject->FieldReadI();
ssout = pFbxObject->FieldReadI();
ffout = pFbxObject->FieldReadI();
preroll = pFbxObject->FieldReadI();
postroll = pFbxObject->FieldReadI();
takeNum = pFbxObject->FieldReadI();
tmp = new FBPlayListEntry;
tmp->mTakeNumber= takeNum;
tmp->mInTime.SetTime(hhin,mmin, ssin,ffin, 0);
tmp->mOutTime.SetTime(hhout, mmout, ssout,ffout, 0);
tmp->mPreroll = preroll;
tmp->mPostroll = postroll;
mPlayList.Add(tmp);
}
pFbxObject->FieldReadEnd();
}
}
}
return true;
}