目標
大綱式列出變化(v3 vs v4)
概述:
1.
其實最大的改進,就是引入一個大結構,那個 videostate。
1.
還有類似消息機制的引入:SDL_PushEvent
1.
同步變量在本節大量使用。
1.
視頻queue的處理//在上一節的基礎上仿照音頻queue,類似位置增加了video queue
1.
**新建視頻播放線程video_thread ,看似簡單,實際不簡單**
1.
新建解碼線程 Decode_thread, 移植了主函數視頻播放的功能。
1.
現在用 一個函數解決 解碼器的打開
1.
Packet feedback?的流程?//讀取包
### 留意事件的機制的使用
直接上代碼,這里說明定時器的使用
~~~
static Uint32 sdl_refresh_timer_cb(Uint32 interval, void *opaque) {
SDL_Event event;
event.type = FF_REFRESH_EVENT;
event.user.data1 = opaque;
SDL_PushEvent(&event); //放入類似的消息隊列
return 0; /* 0 means stop timer */
}
/* schedule a video refresh in 'delay' ms */
static void schedule_refresh(VideoState *is, int delay) {
SDL_AddTimer(delay, sdl_refresh_timer_cb, is);//添加timer
}
~~~
### 細節(音頻api ,videoState)
一些細節的變化如下,
1)音頻api發生變化,使用avcodec_decode_audio3 來替代以前的版本。

2)在api大量使用videostate “大數據結構”來替代以前的結構,其實就是為了綜合管理,以下場景以 audio_callback為例
