AVS 解碼DSP8個核進行處理

2021-06-26 11:05:12 字數 1389 閱讀 5836

在專案中,為了硬體ti6467板子上能夠實時編譯碼1080p高畫質碼流,我們把板子上的8個核都用上了,之後可能會根據具體的位元速率還有一些特殊碼流做適當的合併,至少目前執行還算穩定

8個核分別的用途,在各個核之間依靠我們自己寫的fifo進行通訊,fifo當中有6幀的快取,這樣可以做到類似於並行操作

0:主要用於碼流的控制,拿到的碼流一般是從通道上獲取的rs碼流,rs是一種通道邊界碼的編譯碼方式,學過通訊原理的都知道什麼意思,具有檢錯和糾錯的作用,在我們的系統中rs層面一般是丟包問題,一般只要接收到包出錯的概率並不大。0核就是將rs碼解析成為es碼流,也就是需要的解碼01bit碼流,需要在迴圈中找到序列頭開始解碼,同時注意一些容錯方案,比如位元速率切換的時候重啟解碼器。在我們的系統中設定找到相鄰兩個影象頭開始解碼,這樣的好處是可以知道一幀的長度,對一些丟棄幀的容錯方案有好處,同樣,因為在實際執行中都是實時,找兩個影象幀頭再開始解碼的方法非常好

輸出資訊:包括解碼碼流,序列頭,幀頭資訊,比如影象寬度,編碼是否場型別等等

1,2,3這個地方我們用了三個核進行熵解碼,之所以用三個核是為了幀率。熵解碼的時間和碼流的位元速率有關係,位元速率越小,熵解碼的時間越少。拆分原理比較簡單就是將一幀進行上,中下三個拆分,但是做到快取幀之間的非同步,以及三個核對同一幀解碼之間的通訊很重要。三個核都在並行處理6個幀的快取,但是只有up處理完後才能進行middle的處理

4:主要是做針對殘差係數的idct變換,先對巨集塊的殘差係數進行反量化,之後做對應的8*8,16*16,32*32的反變換操作

為了速度,不可能等一幀的idct完成後再進行後面的操作,因此我們選擇做64行後,給這64行訂乙個標誌位,就可以做後面的插值處理

輸出資訊:反變換資料

5:亮度插值處理,這裡當然是有亮度幀內,幀間處理,利用反變換資訊進行處理,也是每一次完成64行資料,然後置相應的標誌位,每乙個巨集塊處理完成後再加上他們反變換輸出的資料,得到巨集塊對應的重構資料

輸出資訊:輸出插值資料後得到的重構資料

6:色度插值處理:這裡和亮度插值類似

輸出資訊:輸出色度的重構資料

7:進行環路濾波的處理

因為dsp中沒有window中的多執行緒控制那麼麻煩,因此我們在每個核之間的同步和一些通訊都是通過乙個fifo函式進行處理,在每個核操作之前會先檢查相應的標誌位,等得到合適的標誌位後進行處理,在完成相應的處理之後也會寫標誌位

在dsp上除錯比較麻煩,所以我們針對dsp的**也寫了對應的vs**,下面大概貼出main函式的部分,可以看到乙個簡單的多核處理

int main()

定點dsp與浮點dsp的比較

定點運算dsp在應用中已取得了極大的成功,而且仍然是dsp應用的主體。然而,隨著對dsp處理速度與精度 儲存器容量 程式設計的靈活性和方便性要求的不斷提高 自80年代中後期以來,各dsp生產廠家陸續推出了各自的32bit浮點運算dsp。和定點運算dsp相比,浮點運算dsp具有許多優越性 浮點運算ds...

dsp經典書籍

1 linear systems and signals b.p.lathi 這本書個人覺得很不錯,是一本線性系統和訊號的入門好書。可以適用於通訊 電路 控制等專業。雖說是入門的好書,但是本書的編排是內容由淺入深,講述可是深入淺出。我通 讀全書後,覺得深有體會,看這本書就像在看 一般,對於乙個話題的...

DSP小數變換

在dsp世界中,由於dsp晶元的限制,經常使用定點小數運算。所謂定點小數,實際上就是用整數來進行小數運算。下面先介紹定點小數的一些理論知識,然後以c語言為例,介紹一下定點小數運算的方法。在ti c5000 dsp系列中使用16位元為最小的儲存單位,所以我們就用16位元的整數來進行定點小數運算。先從整...