安霸(ambarella) s2l視頻處理流程

注:以下是基於ambarella s2lm sdk2.5,不保證後續的sdk是否會有改變。部分相關概念是本人直接從文檔翻譯而得,難免有不恰當之處,歡迎提出。

1.軟件整體架構:


2.整體流程

 初始化--->VIN---->source buffer--->stream config---->encoding

 初始化就是加載sensor和系統所需的相關驅動。

3. Source buffer(源緩衝區)

s2l 可以同時集成4個獨立的H.264或MJPEG流,有四個sourcbuffer可以用來編碼或預覽。理論上這個流可以由四個source buffer中任意一個編碼得到。
但是推薦不同的碼流由不同的source buffer編碼得到來獲得不同的視場(FOV)。

視頻幀由RGB類型的sensor或YUV的設備採集得之後被S2L的編碼器處理,換句話說source buffer就是存放將要編碼的YUV數據,編碼器連續不斷的從
source buffer中取數據進行編碼。這樣設計之後,碼流就會同時有不同的視場。

source buffer就是提供原始的視頻數據來編碼或視頻輸出。S2L上四個source buffer 依次爲 Main,second,third和fourth source buffer。


main :  不能超過vin size ,16的倍數
second: 最大720x720 ,寬是16的倍數,高是8的倍數
third:     最大1920x1920, 寬是16的倍數,高是8的倍數
fourth:  最大1280x1280, 寬是16的倍數,高是8的倍數

4.stream configuration(碼流配置)
 四個碼流同事編碼時,各個碼流配置會有所不同。比如,分辨率、碼率、幀率、GOP值等。每個碼流都可以獨立的開啓和停止。

1). 幀率:
編碼幀率計算公式:
  Encoding Frame Rate = VIN Frame Rate * Frame Factor  (0 < Frame Factor <= 1)

     編碼幀率既不能大於VIN的採集幀率,也不能小於1fps。
     如果碼流的幀率被幀率因子按比例縮小,兩個連續幀之間的間隔將不會是一個常量值。
     舉個例子,假設VIN是30fps,碼流A是20fps,用幀率因子爲20/30來按比例縮小VIN幀率。兩個輸出編碼幀之間的時間間隔將會是33MS或者66MS,然而一秒內將是20幀。如果想在每一幀之間都獲得相同的時間間隔,可以設置碼率的幀率和VIN的幀率一樣大。
     
2). 碼率:
編碼碼率計算公式:
  Encoding Bit Rate = Target Bit Rate * Frame Factor (0 < Frame Factor  ≤ 1)
     
  •  如果碼流的幀率動態改變,從30fps降到其他更小的幀率,實際編碼比特率將隨幀率因子按比例減小。
  •  如果應用程序想一直保持恆定比特率,即使幀率改變了,也應該隨同幀率因子以幀率因子相反的倍數去配置比特率。DSP將會使幀率的碼流輸出恆定比特率。
  •  平均碼率在DSP內計算,是基於GOP的長度,但不是一秒內,也就是說如果GOP的長度大於一秒,平均碼流在一秒內的計算將會在每一個GOP值之間波動,
     由於第一個I幀的值比較大,平均碼流在第一秒內計算得到的值將會比後面幾秒大。

3). Maximum GOP M
     最大GOP M的值給DSP以及怎樣給H264編碼的參考幀分配DRAM提供信息。
     在H264編碼中,他的範圍值是1~3。值越大DSP會給編碼分配更多的參考幀,也就是說DSP會給H264編碼保留更多的DRAM。如果應用程序沒有用到多參考幀,強烈建議始終設置值爲1來節省DSP DRAM內存佔用。當值大於1時,DSP也需要分配額外的內部資源。爲了防止DSP由於內部資源不足而掛掉,默認的配置是
碼流 A/B可以設置爲max_gop_M > 1, 而碼流C/D則不能。
     對於MJPEG編碼,可以設置爲0來節省更多的DRAM,特別是大分辨率比如6MP或者是系統DRAM很小的情況。

4). GOP N
     GOP N給DSP提供了信息,有多少個IDR/I幀,這是H264編碼中的一個可變參數。GOP N最長是1800,對於一個30fps的碼流大約是60秒(1800 = 30 * 60),
 當應用程序動態改變GOP N,將會使當前的GOP立即生效,且如果當前GOP內的幀數已經超出新的GOP值將會立即產生IDR幀。這個特性叫作“及時GOP值改變”而不是“運行時GOP值改變”。

補充:
GOP是畫面組,一個GOP是一組連續的畫面。GOP結構一般兩個數字,如M=3,N=12。M指定I幀和P幀之間的距離,N指定兩個I幀之間的距離。上面的M=3,N=12,GOP結構爲:IBBPBBPBBPBBI。在一個GOP內I frame解碼不依賴任何的其它幀,p frame解碼則依賴前面的I frame或P frame,B frame解碼依賴前最近的一個I frame或P frame 及其後最近的一個P frame。

IDR frame:I和IDR幀都使用幀內預測,在編碼解碼中爲了方便,首個I幀要和其他I幀區別開,把第一個I幀叫IDR,這樣方便控制編碼和解碼流程,所以IDR幀一定是I幀,但I幀不一定是IDR幀;IDR幀的作用是立刻刷新,使錯誤不致傳播,從IDR幀開始算新的序列開始編碼。I幀有被跨幀參考的可能,IDR不會。

5.video ouput(視頻輸出)

S2L有兩個VOUT單元,這兩個VOUT單元支持不同的視頻輸出。

VOUT A:
   LCD display
   Digital video

VOUT B:
  CVBS(480i/576i)
  HDMI
  Digital video

VOUT A: Fourth source buffer preview
VOUT B: third source buffer preview

VOUT A指定第四碼流,VOUT B指定第三碼流。這兩個都是模擬輸出,沒有經過編碼。

6.encoding mode

 S2L有幾種編碼模式,每種編碼模式下性能差異有所不同,視具體產品規格來定。每種產品規格只是一種或者多種編碼模式。目前,有些模式已經在最新的sdk中支持,有些還在開發中。 

主要有以下幾種編碼模式:
Normal ISO ,Multi Dewarp,ISO+,Advanced ISO, Advanced HDR
編碼模式之間的差異:
1).“Normal ISO”, “ISO+” 和“Advanced ISO”目前已經做好完整的功能。他們都可以同時支持2X HDR而不需要模式開關。新特性將會在新版本sdk中實現。
2). 相比於“Normal ISO”模式,“ISO+ / Advanced ISO”模式將會使用更多的系統資源來提高圖像質量,這樣就將會降低最大編碼性能。因此必須在碼流的圖像質量和最大編碼性能之間作一個權衡。
3).“ISO+ / Advanced ISO”模式支持LDC,而“Normal ISO”模式不支持LDC。
4).“Advanced ISO”模式支持亮度銳化和色度噪聲濾波器, 但是“ISO+” 和 “Normal  ISO”模式不支持。
5). 雖然“ISO+”和 “Advanced ISO”模式都是用同樣的編碼模式mode 4,但是這在S2L和S2LM兩個芯片上是有區別的。模式的選擇自動在IAV驅動中決定,如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章