bool PlaylistManager::setPosition(mtime_t time) { bool ret = true; for(int real = 0; real < 2; real++) { /* Always probe if we can seek first */ std::vector<AbstractStream *>::iterator it; for(it=streams.begin(); it!=streams.end(); ++it) { AbstractStream *st = *it; if(!st->isDisabled() && !st->isDead()) ret &= st->setPosition(time, !real); } if(!ret) break; } return ret; }
AbstractStream::buffering_status PlaylistManager::bufferize(mtime_t i_nzdeadline, unsigned i_min_buffering, unsigned i_extra_buffering) { AbstractStream::buffering_status i_return = AbstractStream::buffering_end; std::vector<AbstractStream *>::iterator it; for(it=streams.begin(); it!=streams.end(); ++it) { AbstractStream *st = *it; if (st->isDisabled()) { if(st->isSelected() && !st->isDead()) reactivateStream(st); else continue; } AbstractStream::buffering_status i_ret = st->bufferize(i_nzdeadline, i_min_buffering, i_extra_buffering); if(i_return != AbstractStream::buffering_ongoing) /* Buffering streams need to keep going */ { if(i_ret > i_return) i_return = i_ret; } } vlc_mutex_lock(&demux.lock); if(demux.i_nzpcr == VLC_TS_INVALID && i_return != AbstractStream::buffering_lessthanmin /* prevents starting before buffering is reached */ ) { demux.i_nzpcr = getFirstDTS(); } vlc_mutex_unlock(&demux.lock); return i_return; }