mirror of
https://github.com/brunoherbelin/vimix.git
synced 2025-12-12 02:40:00 +01:00
Changed the way the MediaPlayer is not missing an EOS: former
implementation was jumping forward too early.
This commit is contained in:
@@ -684,16 +684,11 @@ void MediaPlayer::update()
|
||||
guint read_index = 0;
|
||||
bool need_loop = false;
|
||||
|
||||
// locked access to changing index
|
||||
// locked access to current index
|
||||
index_lock_.lock();
|
||||
// get the last frame filled from fill_frame()
|
||||
read_index = last_index_;
|
||||
// Do NOT miss an EOS or a pre-roll
|
||||
for (guint i = 0; i < N_VFRAME; ++i) {
|
||||
if ( frame_[i].status == EOS || frame_[i].status == PREROLL) {
|
||||
read_index = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// unlock access to index change
|
||||
index_lock_.unlock();
|
||||
|
||||
// lock frame while reading it
|
||||
@@ -888,6 +883,10 @@ double MediaPlayer::updateFrameRate() const
|
||||
|
||||
bool MediaPlayer::fill_frame(GstBuffer *buf, FrameStatus status)
|
||||
{
|
||||
// Do NOT overwrite an unread EOS
|
||||
if ( frame_[write_index_].status == EOS )
|
||||
return true;
|
||||
|
||||
// lock access to frame
|
||||
frame_[write_index_].access.lock();
|
||||
|
||||
@@ -942,15 +941,16 @@ bool MediaPlayer::fill_frame(GstBuffer *buf, FrameStatus status)
|
||||
// unlock access to frame
|
||||
frame_[write_index_].access.unlock();
|
||||
|
||||
// lock access to index change (very quick)
|
||||
// lock access to change current index (very quick)
|
||||
index_lock_.lock();
|
||||
// indicate update that this is the last frame filled (and unlocked)
|
||||
// indicate update() that this is the last frame filled (and unlocked)
|
||||
last_index_ = write_index_;
|
||||
// for writing, we will access the next in stack
|
||||
write_index_ = (write_index_ + 1) % N_VFRAME;
|
||||
// unlock access to index change
|
||||
index_lock_.unlock();
|
||||
|
||||
// for writing, we will access the next in stack
|
||||
write_index_ = (write_index_ + 1) % N_VFRAME;
|
||||
|
||||
// calculate actual FPS of update
|
||||
timecount_.tic();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user