Ejemplo n.º 1
0
Packet* CClip::ReturnNextVideoPacket(REFERENCE_TIME playlistOffset)
{
  CAutoLock vectorVLock(&m_sectionVectorVideo);
  if (!firstPacketReturned)
  {
//    CAutoLock lock (&m_sectionRead);
    firstPacketReturned=true;
    return ReturnNextVideoPacket(playlistOffset);
  }
  Packet* ret=NULL;
  if (sparseVideo && m_videoPmt)
  {
    ret = GenerateSparseVideo(playlistOffset);
  }
  else if (m_vecClipVideoPackets.size()>0 && m_videoPmt)
  {
    ivecVideoBuffers it = m_vecClipVideoPackets.begin();
    ret=*it;
    it=m_vecClipVideoPackets.erase(it);
  }
  if (ret)
  {
    if (ret->rtStart!=Packet::INVALID_TIME)
    {
      if (firstVideo)
      {
        ret->bDiscontinuity = clipInterrupted | bSeekTarget | clipReset;
        ret->nNewSegment = NS_STREAM_RESET;
        if (bSeekTarget) ret->nNewSegment |= NS_SEEK_TARGET; 
        if (!clipReset) ret->nNewSegment |= NS_NEW_CLIP;
        if (clipInterrupted) ret->nNewSegment |= NS_INTERRUPTED;
        firstVideo = false;
        bSeekTarget = false;
        ret->pmt = CreateMediaType(m_videoPmt);
      }

      if (ret->rtStart > videoPlaybackPosition) 
      {
        videoPlaybackPosition = ret->rtStart;
        //LogDebug("Videoplayback position (%d,%d) %I64d", nPlaylist, nClip, videoPlaybackPosition);
      }
  
      ret->rtPlaylistTime = ret->rtStart - m_playlistOffset;
      ret->rtClipStartTime = ret->rtStart -  earliestPacketAccepted;
      ret->rtStart += clipPlaylistOffset - earliestPacketAccepted;
      ret->rtStop += clipPlaylistOffset  - earliestPacketAccepted;
    }
  }
//  LogDebug("Clip: vid: return Packet rtStart: %I64d offset: %I64d seekRequired %d",ret->rtStart, ret->rtOffset,ret->bSeekRequired);
  return ret;
}
Ejemplo n.º 2
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;
}