第二,添加初始化、添加和讀取數據隊列的函數。
三、audio_decode_frame():解碼音頻。
4.audio_callback():回調函數,用數據填充SDL緩沖區。
5.創建與視頻刷新相關的功能:
Schedule_refresh():它的主要功能是告訴系統在指定的毫秒數後推送FF_REFRESH_EVENT。當我們在事件隊列中看到它時,我們會依次調用視頻刷新函數。
六、增加視頻顯示功能:
因為我們的屏幕可以是任意大小(我們設置為640×480,有壹些方法可以設置,所以由用戶調整大小),所以我們需要動態計算我們的矩形有多大。所以,首先我們要搞清楚我們電影的顯示比例,也就是寬度除以高度。壹些編解碼器會有壹個奇怪的樣本長寬比,這是壹個像素,或樣本的寬度/高度。因為我們的編解碼器上下文中的高度和寬度值是以像素為單位測量的,所以實際的長寬比等於樣本長寬比的幾倍。有些編解碼器會顯示0-5的縱橫比,這意味著每個像素只有1x1。然後,我們擴展了電影以適合我們的屏幕。
七、顯示器輸出內存空間的分配:
在使用隊列中,我們有兩個指針——寫索引和讀索引。我們還跟蹤緩沖區中有多少實際照片。為了寫入隊列,我們將首先等待緩沖區清空,這樣我們就有足夠的空間來存儲我們的視頻圖片。然後我們檢查是否在我們的寫索引中分配了壹個覆蓋。如果沒有,我們必須分配壹些空間。如果窗口的大小改變了,我們也需要重新分配緩沖區。
解碼線程,解碼器,建立音頻行,將重要信息保存到數據結構中。
九、寫主函數調用解碼線程。