中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RGB轉YUV的小優化是什么

發布時間:2021-10-21 14:33:11 來源:億速云 閱讀:144 作者:柒染 欄目:大數據

本篇文章為大家展示了RGB轉YUV的小優化是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

搞音視頻,相信RGB與YUV之間的轉換,大家都不陌生。不過呢,由于這個轉換的公式是浮點運算,再加上大量像素的密集型運算,導致對資源的消耗比較大,進而效率需要進一步的提升。


就簡單看看有哪些方式可以做優化。

一、公式本身的優化  

首先我們來看看,RGB轉YUV的公式:

   
   
   
   
Y =  0.299*R + 0.587*G + 0.114*B;        
       U = -0.169*R - 0.331*G + 0.5  *B ;        
       V =  0.5  *R - 0.419*G - 0.081*B;        

觀察一下,都是浮點型的運算,我們都知道浮點型的乘法運算,在計算機內部要經過階碼和尾數的運算,相對耗時。如果我們能將浮點運算去掉,就可以實現這個目標了。于是,我們可以通過數學上的一些變換,將浮點運算變換為整數運算。變換過程如下:


   
   
   
   Y =  0.299*R + 0.587*G + 0.114*B 
    
      = 128 * (0.299*R + 0.587*G + 0.114*B) >> 7
    
      = ( 38 * R + 75 * B + 15 * B) >> 7;

PS:U和V同理轉換,放大后的數值采取四射五入的方式。  

經過如此轉換,浮點運算就變成了整數乘法和位移運算,而位移運算,效率很高,整數乘法的運算也會較浮點運算的效率高些,所以,此方法是可取的。



二、從單挑到群毆

由于音視頻數據的處理,是典型的密集型運算。即針對每一個像素,我們的算法和處理方式都是一樣的,這也為我們做進一步優化提供了可能。


就是快



比較原始的方式,我們遍歷每一個像素,針對每一個像素做轉換處理,這樣實現功能沒有問題,但效率相對來說會比較低下。由于算法是相同的,所以我們可以一次處理多個像素,這樣就會大大提升效率。

假設原來一次處理一個像素,現在我們一次處理16個像素,這樣我們的效率理論上就會提到16倍,當然這只是理論值,實際上10倍是有把握的,也相當可觀了。而要實現這樣的操作,我們可以借助多媒體指令集,如MMX,SSE等,如此這般,便可實現效率的提升。不過呢,要注意一個對齊的問題,如果我們一次處理16個像素,那么圖片的寬就必須是16的倍數,否則就需要做一些容錯的處理,比如填充。

下面是部分代碼,估計不可以直接使用哦,要根據機器自身CPU支持的指令集做相應的調整哦



int YUV420_RGB32_mmx(uint32_t* rgb, int width, int height, uint8_t* y, uint8_t* u, uint8_t* v){__asm{pushadfinitxor eax, eaxmov ebx, heightmov ecx, widthmov edx, ymov edi, vmov esi, umov ebp, rgbhloop:push ebxmov ebx, ecxwloop :push ebxxor ebx, ebxmov al, [edi]mov bl, [esi]movq mm0, [CoefficientsRGBU + 8*eax]paddw mm0, [CoefficientsRGBV + 8*ebx]mov al, [edx]mov bl, [edx + 1]movq mm1, [CoefficientsRGBY + 8 * eax]movq mm2, [CoefficientsRGBY + 8 * ebx]mov al, [edx + ecx]mov bl, [edx + ecx + 1]movq mm3, [CoefficientsRGBY + 8 * eax]movq mm4, [CoefficientsRGBY + 8 * ebx]paddw mm1, mm0paddw mm2, mm0paddw mm3, mm0paddw mm4, mm0psraw mm1, 6psraw mm2, 6psraw mm3, 6psraw mm4, 6packuswb mm1, mm2packuswb mm3, mm4movq[ebp], mm1movq[ebp + 4 * ecx], mm3add ebp, 8add edx, 2add edi, 1add esi, 1pop ebxsub ebx, 2jnz wlooplea ebp, [ebp + 4*ecx]add edx, ecxpop ebxsub ebx, 2jnz hloopemmspopad}}

總結一下,RGB轉YUV是音視頻中常見的一個處理過程,針對其也有一定的優化空間。優化主要分為兩個方向,一個是對轉換公式本身做一些變換,從而避免浮點運算;另外一個就是借助指令集,實現從單一處理到批量處理。

上述內容就是RGB轉YUV的小優化是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

枝江市| 吐鲁番市| 乳山市| 葵青区| 尤溪县| 彭州市| 三亚市| 德阳市| 凤台县| 丰台区| 枣阳市| 远安县| 和顺县| 鄯善县| 阜宁县| 山阴县| 上饶县| 马山县| 清徐县| 平湖市| 通城县| 亚东县| 宜君县| 呼图壁县| 利川市| 秭归县| 洱源县| 巧家县| 米泉市| 福贡县| 周至县| 西安市| 沙坪坝区| 新田县| 新建县| 四子王旗| 蒲城县| 黎平县| 华安县| 天柱县| 阿尔山市|