Ejemplo n.º 1
0
void object::update()
{
	long i;
	float *tempA;

	/* waypoint */
	if (mTarget != NULL)
	{
		tempA = new float[3];
		vectorSub(tempA, mTarget, mOrigin);
		angleFromVector(tempA, tempA);
		vectorWrap(tempA, tempA, 0, PI * 2);
		vectorSub(tempA, tempA, mAngle);
		for (i = 0; i < 3; i++)
		{
			if (fabs(tempA[i]) > PI)
				tempA[i] *= -1;
			if (tempA[i] != 0)
				mAngVel[i] = (float) fabs(mAngVel[i]) * sgn(tempA[i]);
		}
		delete []tempA;
	}

	/* velocity */
	if (vectorDirty(mPosAcc) || vectorDirty(mAngAcc))
	{
		vectorAdd(mPosVel, mPosVel, mPosAcc);
		vectorAdd(mAngVel, mAngVel, mAngAcc);
		vectorLock(mPosVel, mPosVel, -mMovSpdMax, mMovSpdMax);
		vectorLock(mAngVel, mAngVel, -mRotSpdMax, mRotSpdMax);
	}

	/* position */
	if (vectorDirty(mPosVel) || vectorDirty(mAngVel))
	{
		if (mStyle == 0)
			vectorAdd(mOrigin, mOrigin, mPosVel);
		else
			goFwd(mPosVel[2]);
		vectorAdd(mAngle, mAngle, mAngVel);
		vectorLock(mOrigin, mOrigin, -BIG_NUMBER, BIG_NUMBER);
		vectorWrap(mAngle, mAngle, 0, PI * 2);
		vectorLock(mScale, mScale, 0, BIG_NUMBER);
		buildTrans();
	}

	/* particle */
	if (mTicks > 0)
		mTicks--;
}
Ejemplo n.º 2
0
bool CPlaylist::CreateNewClip(int clipNumber, REFERENCE_TIME clipStart, REFERENCE_TIME clipOffset, bool audioPresent, REFERENCE_TIME duration, REFERENCE_TIME playlistClipOffset, bool seekTarget, bool interrupted)
{
  CAutoLock vectorLock(&m_sectionVector);
  bool ret = true;

  if (m_vecClips.size())
  {
    (*m_itCurrentAudioSubmissionClip)->Superceed(SUPERCEEDED_AUDIO_FILL);
    (*m_itCurrentVideoSubmissionClip)->Superceed(SUPERCEEDED_VIDEO_FILL);
  }


  if (m_vecClips.size()) PushClips();
  m_vecClips.push_back(new CClip(clipNumber, nPlaylist, clipStart, clipOffset, playlistClipOffset, audioPresent, duration, seekTarget, interrupted));
  if (m_vecClips.size() == 1)
  {
    // initialise
    m_itCurrentAudioPlayBackClip=m_itCurrentVideoPlayBackClip=m_itCurrentAudioSubmissionClip=m_itCurrentVideoSubmissionClip=m_vecClips.begin();
  }
  else
  {
    PopClips();
    m_itCurrentAudioSubmissionClip++;
    m_itCurrentVideoSubmissionClip++;
  }
  return ret;
}
Ejemplo n.º 3
0
bool CPlaylist::AcceptAudioPacket(Packet*  packet)
{
  CAutoLock vectorLock(&m_sectionVector);
  bool ret = true;
  if (!m_vecClips.size()) return false;
  if ((*m_itCurrentAudioSubmissionClip)->nClip == packet->nClipNumber)
  {
    if (!firstAudioPESPacketSeen) packet->nNewSegment |= NS_NEW_PLAYLIST;
    ret = (*m_itCurrentAudioSubmissionClip)->AcceptAudioPacket(packet);
  }
  else 
  {
    LogDebug("CPlaylist Panic in Accept Audio Packet");
  }

  if (!firstAudioPESPacketSeen && ret && packet->rtStart!=Packet::INVALID_TIME)
  {
    REFERENCE_TIME oldPEStime = firstAudioPESTimeStamp;

    firstAudioPESPacketSeen=true;
    firstAudioPESTimeStamp= (*m_itCurrentAudioSubmissionClip)->clipPlaylistOffset - packet->rtStart;
  }

  return ret;
}
Ejemplo n.º 4
0
bool CPlaylist::AcceptVideoPacket(Packet* packet)
{
  CAutoLock vectorLock(&m_sectionVector);
  bool ret = true;
  REFERENCE_TIME prevVideoPosition = 0;
  if (nPlaylist != packet->nPlaylist)
  {
    (*m_itCurrentVideoSubmissionClip)->Superceed(SUPERCEEDED_VIDEO_FILL);
    return false;
  }
  if ((*m_itCurrentVideoSubmissionClip)->nClip==packet->nClipNumber)
  {
    if (!firstVideoPESPacketSeen) packet->nNewSegment |= NS_NEW_PLAYLIST;
    prevVideoPosition = (*m_itCurrentVideoSubmissionClip)->lastVideoPosition; 
    ret=(*m_itCurrentVideoSubmissionClip)->AcceptVideoPacket(packet);
  }

  if (!firstVideoPESPacketSeen && ret && packet->rtStart!=Packet::INVALID_TIME)
  {
    REFERENCE_TIME oldPEStime = firstVideoPESTimeStamp;

    firstVideoPESPacketSeen=true;
    firstVideoPESTimeStamp= (*m_itCurrentVideoSubmissionClip)->clipPlaylistOffset - packet->rtStart;
  }
 
  return ret;
}
Ejemplo n.º 5
0
Packet* CPlaylist::ReturnNextAudioPacket()
{
  CAutoLock vectorLock(&m_sectionVector);
  firstPacketRead=true;
  firstAudioPESPacketSeen=true;
  Packet * ret = (*m_itCurrentAudioPlayBackClip)->ReturnNextAudioPacket(playlistFirstPacketTime);
  if (ret)
  {
    ret->nPlaylist=nPlaylist;
  }
  else
  {
    if (m_itCurrentAudioPlayBackClip - m_vecClips.begin() == m_vecClips.size() - 1) 
    {
      SetEmptiedAudio();
    }
    else
    {
      (*m_itCurrentAudioPlayBackClip)->Superceed(SUPERCEEDED_AUDIO_RETURN);
      m_itCurrentAudioPlayBackClip++;
      ret=ReturnNextAudioPacket();
    }
  }
  return ret;
}
Ejemplo n.º 6
0
REFERENCE_TIME CPlaylist::ClearAllButCurrentClip(REFERENCE_TIME totalStreamOffset)
{
  CAutoLock vectorLock(&m_sectionVector);
  REFERENCE_TIME ret = 0LL;
  ivecClip it = m_vecClips.begin();
  while (it!=m_vecClips.end())
  {
    CClip * clip=*it;
    if (clip==m_vecClips.back())
    {
      ++it;
    }
    else
    {
      it=m_vecClips.erase(it);
      delete clip;
    }
  }
  if (m_vecClips.size()>0)
  {
    m_itCurrentAudioPlayBackClip=m_itCurrentVideoPlayBackClip=m_itCurrentAudioSubmissionClip=m_itCurrentVideoSubmissionClip=m_vecClips.begin();
    ret = (*m_itCurrentAudioPlayBackClip)->PlayedDuration();
    Reset(nPlaylist, playlistFirstPacketTime);
    (*m_itCurrentAudioPlayBackClip)->Reset(totalStreamOffset + ret);
    return ret;
  }
  return 0LL;
}
Ejemplo n.º 7
0
REFERENCE_TIME CPlaylist::Incomplete()
{
  CAutoLock vectorLock(&m_sectionVector);
  if (m_vecClips.size()>0)
  {
    return m_vecClips.back()->Incomplete();
  }

  return 0LL;
}
Ejemplo n.º 8
0
REFERENCE_TIME CPlaylist::PlayedDuration()
{
  CAutoLock vectorLock(&m_sectionVector);
  if (m_vecClips.size()>0)
  {
    return m_vecClips.back()->PlayedDuration();
  }

  return 0LL;
}
Ejemplo n.º 9
0
void CPlaylist::FlushVideo()
{
  CAutoLock vectorLock(&m_sectionVector);
  ivecClip it = m_vecClips.begin();
  while (it!=m_vecClips.end())
  {
    CClip * clip=*it;
    clip->FlushVideo();
    ++it;
  }
}
Ejemplo n.º 10
0
vector<CClip*> CPlaylist::Superceed()
{
  CAutoLock vectorLock(&m_sectionVector);
  vector<CClip*> ret;
  ivecClip it = m_vecClips.begin();
  while (it!=m_vecClips.end())
  {
    CClip * clip=*it;
    if (clip->noAudio) ret.push_back(clip);
    ++it;
  }
  return ret;
}
Ejemplo n.º 11
0
bool CPlaylist::HasVideo()
{
  CAutoLock vectorLock(&m_sectionVector);
  if (!m_vecClips.size()) return false;
  if ((*m_itCurrentVideoPlayBackClip)->HasVideo()) return true;
  if (++m_itCurrentVideoPlayBackClip == m_vecClips.end()) m_itCurrentVideoPlayBackClip--;
  else
  {
    bool ret = (*m_itCurrentVideoPlayBackClip)->HasVideo();
    m_itCurrentVideoPlayBackClip--;
    return ret;
  }
  return false;
}
Ejemplo n.º 12
0
CPlaylist::~CPlaylist(void)
{
  CAutoLock vectorLock(&m_sectionVector);
  if (m_vecClips.size()>0)
  {
    ivecClip it = m_vecClips.begin();
    while (it!=m_vecClips.end())
    {
      CClip * clip=*it;
      it=m_vecClips.erase(it);
      delete clip;
    }
  }
}
Ejemplo n.º 13
0
Packet* CPlaylist::ReturnNextAudioPacket(int clip)
{
  CAutoLock vectorLock(&m_sectionVector);
  Packet* ret=NULL;
  if ((*m_itCurrentAudioPlayBackClip)->nClip==clip)
  {
    ret = (*m_itCurrentAudioPlayBackClip)->ReturnNextAudioPacket(playlistFirstPacketTime);
    if (ret!=NULL)
    {
      ret->nPlaylist=nPlaylist;
    }
  }
  if (ret) firstPacketRead=true;
  return ret;
}
Ejemplo n.º 14
0
void CPlaylist::Reset(int playlistNumber, REFERENCE_TIME firstPacketTime)
{
  CAutoLock vectorLock(&m_sectionVector);
  nPlaylist=playlistNumber;
  playlistFirstPacketTime=firstPacketTime;
  playlistFilledAudio=false;
  playlistFilledVideo=false;
  playlistEmptiedVideo=false;
  playlistEmptiedAudio=false;

  firstAudioPESPacketSeen=false;
  firstVideoPESPacketSeen=false;
  firstAudioPESTimeStamp=0LL;
  firstVideoPESTimeStamp=0LL;

  firstPacketRead=false;
}
Ejemplo n.º 15
0
bool CPlaylist::RemoveRedundantClips()
{
  CAutoLock vectorLock(&m_sectionVector);
  ivecClip it = m_vecClips.end();
  if (it != m_vecClips.begin()) --it;
  while (it != m_vecClips.begin())
  {
    CClip * clip=*it;
    if (clip->IsSuperceeded(SUPERCEEDED_AUDIO_RETURN|SUPERCEEDED_VIDEO_RETURN|SUPERCEEDED_AUDIO_FILL|SUPERCEEDED_VIDEO_FILL)) 
    {
      it=m_vecClips.erase(it);
      delete clip;
    }
    else
    {
      --it;
    }
  }
  if (m_vecClips.size()==0) return true;
  return false;
}
Ejemplo n.º 16
0
Packet* CPlaylist::ReturnNextVideoPacket()
{
  CAutoLock vectorLock(&m_sectionVector);
  firstPacketRead=true;
  Packet * ret = (*m_itCurrentVideoPlayBackClip)->ReturnNextVideoPacket(playlistFirstPacketTime);
  if (ret)
  {
    ret->nPlaylist=nPlaylist;
  }
  else
  {
    if ((m_itCurrentVideoPlayBackClip+1) == m_vecClips.end()) 
    {
      SetEmptiedVideo();
    }
    else
    {
      (*(m_itCurrentVideoPlayBackClip))->Superceed(SUPERCEEDED_VIDEO_RETURN);
      m_itCurrentVideoPlayBackClip++;
      ret=ReturnNextVideoPacket();
    }
  }
  return ret;
}
Ejemplo n.º 17
0
void CPlaylist::SetVideoPMT(AM_MEDIA_TYPE * pmt, int nClip)
{
  CAutoLock vectorLock(&m_sectionVector);
  (*m_itCurrentVideoSubmissionClip)->SetVideoPMT(pmt);
}