2016-09-28 67 views
0

我使用sws_scale將一組RGB32圖像轉換爲YUV420格式。每個圖像都非常類似於前一個,它們只在矩形區域Q上有所不同。更改區域上的FFmpeg sws_scale

我的問題是如何利用Q來加速轉換過程?應該爲sws_scale函數添加一個附加參數。

sws_scale(ctx, in_plane, in_stride, sliceY, height, out_plane, out_stride, Q){ 
    // parameter out_plane stores the YUV420 data of previous image 
    Instead of scanning the whole image, scan through rectangle Q{ 
     Do conversion 
    } 
} 

回答

0

當前API中不存在此類參數,但可以原樣使用sws_scale。您可以創建兩個上下文 - 一個用於整個圖片,另一個用於Q;爲了轉換隻問:你對於Q創建

  • 移所有數據指針所以他們都點在輸入/輸出圖片
  • 離開的進步,因爲他們是爲Q的第一像素

    • 使用上下文全貌

    幾個在這裏告誡尋找:首先,由於您使用YUV420輸出格式,你想增加Q所以它開始於偶數行/列,並佔據甚至寬/高(否則可以有一些在Q邊界扭曲的顏色)。其次,確保所有圖像平面的指針指向相同的像素 - 這要求每個平面的不同偏移取決於像素格式。第三,如果沒有縮放,這種效果最好 - 否則由於抖動造成的圖像可能看起來與完整圖像縮放不一樣。

  • +0

    從資源的角度來看,是不是創造一個新的背景昂貴?例如,如果區域在每個幀中隨機更改? –

    +0

    這取決於您的昂貴定義。它有一些小的內存分配和一些計算;創建一個新的上下文來執行單個小區域轉換比使用單個靜態上下文進行全幀轉換要便宜(可能)。 –

    +0

    我想我會在每次都會對libyuv vs swscale w/new context進行一些攻擊,並且看看它是怎麼樣的。 –