Exemplo n.º 1
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;
}
Exemplo n.º 2
0
Packet* CClip::ReturnNextAudioPacket(REFERENCE_TIME playlistOffset)
{
  CAutoLock vectorALock(&m_sectionVectorAudio);
  Packet* ret=NULL;

  if (!firstPacketReturned)
  {
//    CAutoLock lock (&m_sectionRead);
    firstPacketReturned=true;
    if (abs(earliestPacketAccepted - playlistFirstPacketTime - m_rtClipStartingOffset) > ONE_SECOND)
    {
      m_rtClipStartingOffset = earliestPacketAccepted - playlistFirstPacketTime;
    }
    return ReturnNextAudioPacket(playlistOffset);
  }

  if (noAudio)
  {
    ret=GenerateFakeAudio(audioPlaybackPosition);
    if (earliestPacketAccepted == INT64_MAX)
      earliestPacketAccepted = audioPlaybackPosition;
  }
  else
  {
    if (m_vecClipAudioPackets.size()>0)
    {
      ivecAudioBuffers it = m_vecClipAudioPackets.begin();
      ret=*it;
      audioPlaybackPosition=ret->rtStart;
      it=m_vecClipAudioPackets.erase(it);
    }
  }
  if (ret && ret->rtStart!=Packet::INVALID_TIME)
  {
    if (firstAudio)
    {
      firstAudioPosition = ret->rtStart;
      ret->nNewSegment = NS_STREAM_RESET;
      ret->bDiscontinuity = clipInterrupted | bSeekTarget | clipReset;
      firstAudio = false;
      if (!clipReset) ret->nNewSegment |= NS_NEW_CLIP;
      if (clipInterrupted) ret->nNewSegment |= NS_INTERRUPTED;
    }
  
    ret->rtPlaylistTime = ret->rtStart - m_playlistOffset;
    ret->rtClipStartTime = ret->rtStart -  earliestPacketAccepted;
    ret->rtStart += clipPlaylistOffset - earliestPacketAccepted;
    ret->rtStop += clipPlaylistOffset - earliestPacketAccepted;
  }

//  LogDebug("Clip: aud: return Packet rtStart: %I64d offset: %I64d seekRequired %d",ret->rtStart, ret->rtOffset,ret->bSeekRequired);
  return ret;
}