ffplay單幀播放step_to_next_frame的程式碼實現分析
阿新 • • 發佈:2021-02-01
技術標籤:FFplay
ffplay單幀播放程式碼實現
提示:單幀播放的功能和暫停是很像的:
**單幀播放:**每按下一次s鍵,就播放下一幀影象一次
**暫停播放:**一直播放當前幀,感覺上是停止播放。
一、單幀播放的函式入口
static void step_to_next_frame(VideoState *is)
{
/* if the stream is paused unpause it, then step */
if (is->paused)
stream_toggle_pause(is);
is->step = 1;
}
這個入口函式做2件事情:
1.如果是暫停狀態,則進入非暫停狀態
二、程式碼作用處
搜尋:is->step = 1 發現4處相關程式碼
其中與單幀播放的程式碼如下,就是實現1個操作
1.如果是正常播放狀態,進行下一幀播放,立馬進入暫停狀態:
static void video_refresh(void *opaque, double *remaining_time)裡面的這段程式碼實現:
if (is->step && !is->paused)
stream_toggle_pause(is);
}
總結
最後總結:
單幀播放,是在暫停播放功能上通過一個is->step的flag標識巧妙實現的。